diff options
author | Mathieu Duponchelle <mathieu@centricular.com> | 2017-12-28 12:15:21 +0100 |
---|---|---|
committer | Mathieu Duponchelle <mathieu@centricular.com> | 2018-01-23 20:19:38 +0100 |
commit | 99f646b0096469929fde6b4200d79841988a8732 (patch) | |
tree | 77539096ccc65af06a9a68ccc77c5c382456614e /gst-libs | |
parent | 2a40ab6ad660c37b22e82991696d0c40e70da79b (diff) | |
download | gstreamer-plugins-bad-99f646b0096469929fde6b4200d79841988a8732.tar.gz |
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
Diffstat (limited to 'gst-libs')
-rw-r--r-- | gst-libs/gst/video/gstvideoaggregator.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c index a0c23b746..6c043782b 100644 --- a/gst-libs/gst/video/gstvideoaggregator.c +++ b/gst-libs/gst/video/gstvideoaggregator.c @@ -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); |