Message ID | DB6PR0901MB1495FFB78AE6A7417DC48DA2EC8B9@DB6PR0901MB1495.eurprd09.prod.outlook.com |
---|---|
State | Superseded |
Headers | show |
Series | [FFmpeg-devel,v2] avcodec/mediacodecdec: Do not abort when H264/HEVC extradata extraction fails | expand |
Context | Check | Description |
---|---|---|
andriy/x86_make | success | Make finished |
andriy/x86_make_fate | success | Make fate finished |
andriy/PPC64_make | success | Make finished |
andriy/PPC64_make_fate | success | Make fate finished |
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
diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index ac1725e466..5af1fd9198 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: