diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-10-24 20:05:10 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-11-02 10:20:37 +0200 |
commit | 000c424835b086339e8189ba06dc0629ec97ef36 (patch) | |
tree | a7c9a2a7c2112243d8cafbac3740f3d087d95a8e /gst | |
parent | 736a27fe1e228e28d900ec6a651a01e7ec1531d0 (diff) |
audioconvert: Clip input buffers to the segment before handling them
https://bugzilla.gnome.org/show_bug.cgi?id=757068
Diffstat (limited to 'gst')
-rw-r--r-- | gst/audioconvert/gstaudioconvert.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gst/audioconvert/gstaudioconvert.c b/gst/audioconvert/gstaudioconvert.c index 59c427e58..896e293cb 100644 --- a/gst/audioconvert/gstaudioconvert.c +++ b/gst/audioconvert/gstaudioconvert.c @@ -88,6 +88,8 @@ static GstFlowReturn gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf, GstBuffer * outbuf); static gboolean gst_audio_convert_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); +static GstFlowReturn gst_audio_convert_submit_input_buffer (GstBaseTransform * + base, gboolean is_discont, GstBuffer * input); static void gst_audio_convert_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_audio_convert_get_property (GObject * object, guint prop_id, @@ -222,6 +224,8 @@ gst_audio_convert_class_init (GstAudioConvertClass * klass) GST_DEBUG_FUNCPTR (gst_audio_convert_transform); basetransform_class->transform_meta = GST_DEBUG_FUNCPTR (gst_audio_convert_transform_meta); + basetransform_class->submit_input_buffer = + GST_DEBUG_FUNCPTR (gst_audio_convert_submit_input_buffer); basetransform_class->passthrough_on_same_caps = TRUE; } @@ -886,6 +890,25 @@ gst_audio_convert_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf, return FALSE; } +static GstFlowReturn +gst_audio_convert_submit_input_buffer (GstBaseTransform * base, + gboolean is_discont, GstBuffer * input) +{ + GstAudioConvert *this = GST_AUDIO_CONVERT (base); + + if (base->segment.format == GST_FORMAT_TIME) { + input = + gst_audio_buffer_clip (input, &base->segment, this->ctx.in.rate, + this->ctx.in.bpf); + + if (!input) + return GST_FLOW_OK; + } + + return GST_BASE_TRANSFORM_CLASS (parent_class)->submit_input_buffer (base, + is_discont, input); +} + static void gst_audio_convert_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) |