if (ffmpegdec->frame->flags & AV_FRAME_FLAG_CORRUPT)
GST_BUFFER_FLAG_SET (*outbuf, GST_BUFFER_FLAG_CORRUPTED);
} else if (res == AVERROR (EAGAIN)) {
+ GST_DEBUG_OBJECT (ffmpegdec, "Need more data");
*outbuf = NULL;
*need_more_data = TRUE;
} else if (res == AVERROR_EOF) {
*ret = GST_FLOW_EOS;
GST_DEBUG_OBJECT (ffmpegdec, "Context was entirely flushed");
} else if (res < 0) {
- *ret = GST_FLOW_OK;
- GST_WARNING_OBJECT (ffmpegdec, "Legitimate decoding error");
+ GST_AUDIO_DECODER_ERROR (ffmpegdec, 1, STREAM, DECODE, (NULL),
+ ("Audio decoding error"), *ret);
}
beach:
send_packet_failed:
{
- GST_WARNING_OBJECT (ffmpegdec, "decoding error");
- /* Even if ffmpeg was not able to decode current audio frame,
- * we should call gst_audio_decoder_finish_frame() so that baseclass
- * can clear its internal status and can respect timestamp of later
- * incoming buffers */
- ret = gst_ffmpegauddec_drain (ffmpegdec, TRUE);
+ GST_AUDIO_DECODER_ERROR (ffmpegdec, 1, STREAM, DECODE, (NULL),
+ ("Audio decoding error"), ret);
+
+ if (ret == GST_FLOW_OK) {
+ /* Even if ffmpeg was not able to decode current audio frame,
+ * we should call gst_audio_decoder_finish_frame() so that baseclass
+ * can clear its internal status and can respect timestamp of later
+ * incoming buffers */
+ ret = gst_ffmpegauddec_drain (ffmpegdec, TRUE);
+ }
goto unmap;
}
}
res = avcodec_receive_frame (ffmpegdec->context, ffmpegdec->picture);
/* No frames available at this time */
- if (res == AVERROR (EAGAIN))
+ if (res == AVERROR (EAGAIN)) {
+ GST_DEBUG_OBJECT (ffmpegdec, "Need more data");
goto beach;
- else if (res == AVERROR_EOF) {
+ } else if (res == AVERROR_EOF) {
*ret = GST_FLOW_EOS;
GST_DEBUG_OBJECT (ffmpegdec, "Context was entirely flushed");
goto beach;
} else if (res < 0) {
- *ret = GST_FLOW_OK;
- GST_WARNING_OBJECT (ffmpegdec, "Legitimate decoding error");
+ GST_VIDEO_DECODER_ERROR (ffmpegdec, 1, STREAM, DECODE, (NULL),
+ ("Video decoding error"), *ret);
goto beach;
}