gstaudiodecoder: do not aggregate output if buffers are planar

Aggregation will break the layout, as it concatenates buffers,
and fixing it here would be much more inefficient than configuring
the actual decoder implementation to output larger buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=705977
This commit is contained in:
George Kiagiadakis 2018-02-14 13:11:37 +02:00
parent bea4d13a99
commit 2d38d2f1d3

View file

@ -93,7 +93,10 @@
* *
* In non-live pipelines, baseclass can also (configurably) arrange for * In non-live pipelines, baseclass can also (configurably) arrange for
* output buffer aggregation which may help to redue large(r) numbers of * output buffer aggregation which may help to redue large(r) numbers of
* small(er) buffers being pushed and processed downstream. * small(er) buffers being pushed and processed downstream. Note that this
* feature is only available if the buffer layout is interleaved. For planar
* buffers, the decoder implementation is fully responsible for the output
* buffer size.
* *
* On the other hand, it should be noted that baseclass only provides limited * On the other hand, it should be noted that baseclass only provides limited
* seeking support (upon explicit subclass request), as full-fledged support * seeking support (upon explicit subclass request), as full-fledged support
@ -992,7 +995,8 @@ gst_audio_decoder_output (GstAudioDecoder * dec, GstBuffer * buf)
again: again:
inbuf = NULL; inbuf = NULL;
if (priv->agg && dec->priv->latency > 0) { if (priv->agg && dec->priv->latency > 0 &&
priv->ctx.info.layout == GST_AUDIO_LAYOUT_INTERLEAVED) {
gint av; gint av;
gboolean assemble = FALSE; gboolean assemble = FALSE;
const GstClockTimeDiff tol = 10 * GST_MSECOND; const GstClockTimeDiff tol = 10 * GST_MSECOND;