av{aud,vid}dec: Report decoding errors to the base class
authorSebastian Dröge <sebastian@centricular.com>
Tue, 8 Mar 2022 14:05:17 +0000 (16:05 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 1 Dec 2022 13:40:53 +0000 (13:40 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1889>

subprojects/gst-libav/ext/libav/gstavauddec.c
subprojects/gst-libav/ext/libav/gstavviddec.c

index d12f9b2..28a1851 100644 (file)
@@ -545,14 +545,15 @@ gst_ffmpegauddec_audio_frame (GstFFMpegAudDec * ffmpegdec,
     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:
@@ -834,12 +835,16 @@ not_negotiated:
 
 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;
   }
 }
index 031e06b..39724df 100644 (file)
@@ -1778,15 +1778,16 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
   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;
   }