12.02.21 - 21:43 - Andreas Rheinhardt:
sfan5:
Hi,


attached v2 patch after discussion on IRC with JEEB (as he already
mentioned).

Only change is that the log level turns to debug when missing parameter
sets are within spec (cf. 14496-15).


-        av_log(avctx, AV_LOG_ERROR, "Could not extract PPS/SPS from 
extradata");
-        ret = AVERROR_INVALIDDATA;
+        const int warn = is_avc && avctx->codec_tag != MKTAG('a','v','c','1') 
&&
+            avctx->codec_tag != MKTAG('a','v','c','2');
+        av_log(avctx, warn ? AV_LOG_WARNING : AV_LOG_DEBUG,
+            "Could not extract PPS/SPS from extradata\n");
+        ret = 0;
      }
warn = is_avc && (avctx->codec_tag == MKTAG('a','v','c','1') ||
                   avctx->codec_tag == MKTAG('a','v','c','2')
is what you (should) want.

- Andreas

Thanks for pointing that out, you're correct.

here's v3:

>From 40c8ba797b39d1e61dc1697c65e0261411bc20b8 Mon Sep 17 00:00:00 2001
From: sfan5 <sf...@live.de>
Date: Mon, 25 Jan 2021 18:12:54 +0100
Subject: [PATCH v3] avcodec/mediacodecdec: Do not abort when H264/HEVC
 extradata extraction fails

Although rare, extradata can be present but empty and extraction will fail.
However Android also supports passing codec-specific data inline and
will likely play such a stream anyway. So there's no reason to abort
initialization before we know for sure.
---
 libavcodec/mediacodecdec.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c
index ac1725e466..f5d13b171e 100644
--- a/libavcodec/mediacodecdec.c
+++ b/libavcodec/mediacodecdec.c
@@ -167,8 +167,11 @@ static int h264_set_extradata(AVCodecContext *avctx, FFAMediaFormat *format)
         ff_AMediaFormat_setBuffer(format, "csd-1", (void*)data, data_size);
         av_freep(&data);
     } else {
-        av_log(avctx, AV_LOG_ERROR, "Could not extract PPS/SPS from extradata");
-        ret = AVERROR_INVALIDDATA;
+        const int warn = is_avc && (avctx->codec_tag == MKTAG('a','v','c','1') ||
+                                    avctx->codec_tag == MKTAG('a','v','c','2'));
+        av_log(avctx, warn ? AV_LOG_WARNING : AV_LOG_DEBUG,
+            "Could not extract PPS/SPS from extradata\n");
+        ret = 0;
     }
 
 done:
@@ -254,8 +257,10 @@ static int hevc_set_extradata(AVCodecContext *avctx, FFAMediaFormat *format)
 
         av_freep(&data);
     } else {
-        av_log(avctx, AV_LOG_ERROR, "Could not extract VPS/PPS/SPS from extradata");
-        ret = AVERROR_INVALIDDATA;
+        const int warn = is_nalff && avctx->codec_tag == MKTAG('h','v','c','1');
+        av_log(avctx, warn ? AV_LOG_WARNING : AV_LOG_DEBUG,
+            "Could not extract VPS/PPS/SPS from extradata\n");
+        ret = 0;
     }
 
 done:
-- 
2.30.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to