A flush request is done when set_format is called to empty internal bit
buffer maintained by fdk-aac. When this happens, during the explicit
call to handle_buffer, decodeFrame does not return a AAC_DEC_OK. This
gets reported as a decoding error while no decoding error in fact took
place. Since this can be confusing, just return a GST_FLOW_OK and log
that an explicit flush was requested.
ret = GST_FLOW_OK;
outbuf = NULL;
goto finish;
+ } else if ((err != AAC_DEC_OK) && (flags & AACDEC_FLUSH)) {
+ /*
+ * A flush/drain was requested when set_format got called. When a flush
+ * gets requested, aacDecoder_DecodeFrame may not return AAC_DEC_OK. Do
+ * not report a decoding error with GST_AUDIO_DECODER_ERROR for this case.
+ */
+ GST_LOG_OBJECT (self, "Decoder flush was requested");
+ ret = GST_FLOW_OK;
+ goto out;
} else if (err != AAC_DEC_OK) {
GST_AUDIO_DECODER_ERROR (self, 1, STREAM, DECODE, (NULL),
("decoding error: %d", err), ret);