mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-29 19:50:40 +00:00
videoaggregatorpad: implement skip_buffer
Skip buffers from sources with a framerate higher than the output framerate. https://bugzilla.gnome.org/show_bug.cgi?id=781928
This commit is contained in:
parent
2a40ab6ad6
commit
99f646b009
1 changed files with 24 additions and 0 deletions
|
@ -219,6 +219,28 @@ gst_video_aggregator_pad_set_info (GstVideoAggregatorPad * pad,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_video_aggregator_pad_skip_buffer (GstAggregatorPad * aggpad,
|
||||
GstAggregator * agg, GstBuffer * buffer)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
|
||||
if (agg->segment.position != GST_CLOCK_TIME_NONE
|
||||
&& GST_BUFFER_DURATION (buffer) != GST_CLOCK_TIME_NONE) {
|
||||
GstClockTime start_time =
|
||||
gst_segment_to_running_time (&aggpad->segment, GST_FORMAT_TIME,
|
||||
GST_BUFFER_PTS (buffer));
|
||||
GstClockTime end_time = start_time + GST_BUFFER_DURATION (buffer);
|
||||
GstClockTime output_start_running_time =
|
||||
gst_segment_to_running_time (&agg->segment, GST_FORMAT_TIME,
|
||||
agg->segment.position);
|
||||
|
||||
ret = end_time < output_start_running_time;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_video_aggregator_pad_finalize (GObject * o)
|
||||
{
|
||||
|
@ -324,6 +346,8 @@ gst_video_aggregator_pad_class_init (GstVideoAggregatorPadClass * klass)
|
|||
g_type_class_add_private (klass, sizeof (GstVideoAggregatorPadPrivate));
|
||||
|
||||
aggpadclass->flush = GST_DEBUG_FUNCPTR (_flush_pad);
|
||||
aggpadclass->skip_buffer =
|
||||
GST_DEBUG_FUNCPTR (gst_video_aggregator_pad_skip_buffer);
|
||||
klass->set_info = GST_DEBUG_FUNCPTR (gst_video_aggregator_pad_set_info);
|
||||
klass->prepare_frame =
|
||||
GST_DEBUG_FUNCPTR (gst_video_aggregator_pad_prepare_frame);
|
||||
|
|
Loading…
Reference in a new issue