[FFmpeg-devel] [PATCH] set AVFrame decode_error_flags in case of decoding error by h264dec
James Almer
jamrial at gmail.com
Mon May 24 20:20:19 EEST 2021
On 7/7/2019 5:15 PM, Michael Niedermayer wrote:
> On Fri, Jun 21, 2019 at 07:15:17AM -0700, Amir Pauker wrote:
>> set AVFrame decode_error_flags in case h->slice_ctx->er.error_occurred is set
>> after the call to ff_h264_execute_decode_slices. This allows the user to detect
>> concealed decoding errors in the call to avcodec_receive_frame
>>
>> Signed-off-by: Amir Pauker <amir at livelyvideo.tv>
>> ---
>> libavcodec/error_resilience.c | 2 ++
>> libavcodec/h264dec.c | 5 +++++
>> 2 files changed, 7 insertions(+)
>>
>> diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
>> index 35d0c60..ca22871 100644
>> --- a/libavcodec/error_resilience.c
>> +++ b/libavcodec/error_resilience.c
>> @@ -1121,6 +1121,8 @@ void ff_er_frame_end(ERContext *s)
>> av_log(s->avctx, AV_LOG_INFO, "concealing %d DC, %d AC, %d MV errors in %c frame\n",
>> dc_error, ac_error, mv_error, av_get_picture_type_char(s->cur_pic.f->pict_type));
>>
>> + s->cur_pic.f->decode_error_flags |= FF_DECODE_ERROR_CONCEALMENT_ACTIVE;
>> +
>> is_intra_likely = is_intra_more_likely(s);
>>
>> /* set unknown mb-type to most likely */
>> diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
>> index 837c3b7..8d1bd16 100644
>> --- a/libavcodec/h264dec.c
>> +++ b/libavcodec/h264dec.c
>> @@ -761,6 +761,11 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)
>> if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
>> goto end;
>>
>> + // set decode_error_flags to allow users to detect concealed decoding errors
>> + if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) {
>> + h->cur_pic_ptr->f->decode_error_flags |= FF_DECODE_ERROR_DECODE_SLICES;
>> + }
>> +
>> ret = 0;
>> end:
>
> will split and apply
>
> thx
This change seems to have produced FATE failures when run under tsan.
http://fate.ffmpeg.org/report.cgi?time=20210524021410&slot=x86_64-archlinux-gcc-tsan
That being said, TSAN runs show a lot of issues that have remained
unresolved for a long while. No idea if they are false positives, or if
they are benign and rarely (if at all) have any effect on real world
usage (Like this one, apparently), but what i can say is that they are
masking new and potentially bad threading bugs that nobody will notice
in a timely manner.
More information about the ffmpeg-devel
mailing list