audioresample: Don't emit DISCONT buffers if no discontinuity happened
authorKipp Cannon <kcannon@cita.utoronto.ca>
Mon, 28 Nov 2011 16:59:32 +0000 (17:59 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 28 Nov 2011 17:03:22 +0000 (18:03 +0100)
commit4c52f4e625f910d6fba34d49fe06cfd1220c9c93
treeda0d47839489e2e0b356c78cc72d43b1854a2aa3
parente67aa28de9df1deae94697dcc32ef8c3e7c35fa4
audioresample: Don't emit DISCONT buffers if no discontinuity happened

audioresample is derived from GstBaseTransform, and one of
GstBaseTransform's traits is that if the derived element does not
produce an output buffer from some input buffer then the first output
buffer after that gets flaged as a discontinuity, whether or not the
buffer actually is discontinuous from the output buffer that preceded
it. When downsampling, the audioresample element requires more than
one input sample for each output sample, and if the ratio of input to
output sample rates is high enough and the input buffers short enough
it can come to pass that the resampler does not receive enough samples
on its input to produce any output.  Currently the resampler returns
GST_BASE_TRANSFORM_FLOW_DROPPED from the transform() method in this case,
causing the next buffer to be flagged as a discontinuity. If subsequent
elements in the pipeline reset themselves on disconts, this can cause
clicks and other undesireable behaviour.

Fixes bug #665004.
gst/audioresample/gstaudioresample.c