gstreamer/gst/videorate/gstvideorate.h
Matthew Waters 98249a57db gst: don't use volatile to mean atomic
volatile is not sufficient to provide atomic guarantees and real atomics
should be used instead.  GCC 11 has started warning about using volatile
with atomic operations.

https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719

Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1073>
2021-03-19 04:20:19 +00:00

81 lines
2.5 KiB
C

/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __GST_VIDEO_RATE_H__
#define __GST_VIDEO_RATE_H__
#include <gst/gst.h>
#include <gst/base/gstbasetransform.h>
G_BEGIN_DECLS
#define GST_TYPE_VIDEO_RATE (gst_video_rate_get_type())
G_DECLARE_FINAL_TYPE (GstVideoRate, gst_video_rate, GST, VIDEO_RATE,
GstBaseTransform)
/**
* GstVideoRate:
*
* Opaque data structure.
*/
struct _GstVideoRate
{
GstBaseTransform parent;
/* video state */
gint from_rate_numerator, from_rate_denominator;
gint to_rate_numerator, to_rate_denominator;
guint64 next_ts; /* Timestamp of next buffer to output */
GstBuffer *prevbuf;
guint64 prev_ts; /* Previous buffer timestamp */
guint64 out_frame_count; /* number of frames output since the beginning
* of the segment or the last frame rate caps
* change, whichever was later */
guint64 base_ts; /* used in next_ts calculation after a
* frame rate caps change */
gboolean discont;
guint64 last_ts; /* Timestamp of last input buffer */
guint64 average_period;
GstClockTimeDiff wanted_diff; /* target average diff */
GstClockTimeDiff average; /* moving average period */
gboolean force_variable_rate;
gboolean updating_caps;
guint64 max_duplication_time;
/* segment handling */
GstSegment segment;
/* properties */
guint64 in, out, dup, drop;
gboolean silent;
gdouble new_pref;
gboolean skip_to_first;
gboolean drop_only;
guint64 average_period_set;
int max_rate;
gdouble rate;
gdouble pending_rate;
};
GST_ELEMENT_REGISTER_DECLARE (videorate);
G_END_DECLS
#endif /* __GST_VIDEO_RATE_H__ */