From 736a27fe1e228e28d900ec6a651a01e7ec1531d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 24 Oct 2015 20:02:13 +0300 Subject: [PATCH] audiofilter: Clip input buffers to the segment before handling them https://bugzilla.gnome.org/show_bug.cgi?id=757068 --- gst-libs/gst/audio/gstaudiofilter.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gst-libs/gst/audio/gstaudiofilter.c b/gst-libs/gst/audio/gstaudiofilter.c index ab8eac20e2..7abd011814 100644 --- a/gst-libs/gst/audio/gstaudiofilter.c +++ b/gst-libs/gst/audio/gstaudiofilter.c @@ -55,6 +55,8 @@ static gboolean gst_audio_filter_set_caps (GstBaseTransform * btrans, GstCaps * incaps, GstCaps * outcaps); static gboolean gst_audio_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, gsize * size); +static GstFlowReturn gst_audio_filter_submit_input_buffer (GstBaseTransform * + btrans, gboolean is_discont, GstBuffer * input); #define do_init G_STMT_START { \ GST_DEBUG_CATEGORY_INIT (audiofilter_dbg, "audiofilter", 0, "audiofilter"); \ @@ -94,6 +96,7 @@ gst_audio_filter_class_init (GstAudioFilterClass * klass) basetrans_class->get_unit_size = GST_DEBUG_FUNCPTR (gst_audio_filter_get_unit_size); basetrans_class->transform_meta = gst_audio_filter_transform_meta; + basetrans_class->submit_input_buffer = gst_audio_filter_submit_input_buffer; } static void @@ -164,6 +167,27 @@ invalid_format: } } +static GstFlowReturn +gst_audio_filter_submit_input_buffer (GstBaseTransform * btrans, + gboolean is_discont, GstBuffer * input) +{ + GstAudioFilter *filter = GST_AUDIO_FILTER (btrans); + + if (btrans->segment.format == GST_FORMAT_TIME) { + input = + gst_audio_buffer_clip (input, &btrans->segment, filter->info.rate, + filter->info.bpf); + + if (!input) + return GST_FLOW_OK; + } + + return + GST_BASE_TRANSFORM_CLASS + (gst_audio_filter_parent_class)->submit_input_buffer (btrans, is_discont, + input); +} + static gboolean gst_audio_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, gsize * size)