[FFmpeg-devel] [PATCH] set AVFrame decode_error_flags in case of decoding error by h264dec

James Almer jamrial at gmail.com
Mon Jun 10 06:07:29 EEST 2019


On 6/10/2019 12:03 AM, 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/h264dec.c | 7 +++++++
>  libavutil/frame.h    | 2 +-
>  2 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
> index 00d922f..9f038e9 100644
> --- a/libavcodec/h264dec.c
> +++ b/libavcodec/h264dec.c
> @@ -758,6 +758,13 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)
>      }
>  
>      ret = ff_h264_execute_decode_slices(h);
> +
> +    // 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_ERROR;
> +    }
> +
> +
>      if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
>          goto end;
>  
> diff --git a/libavutil/frame.h b/libavutil/frame.h
> index e2a2929..ef1ff6b 100644
> --- a/libavutil/frame.h
> +++ b/libavutil/frame.h
> @@ -521,7 +521,7 @@ typedef struct AVFrame {
>       */
>      int decode_error_flags;
>  #define FF_DECODE_ERROR_INVALID_BITSTREAM   1
> -#define FF_DECODE_ERROR_MISSING_REFERENCE   2
> +#define FF_DECODE_ERROR_DECODE_ERROR        2

This is an API breaking change. Why are you removing
FF_DECODE_ERROR_MISSING_REFERENCE if what you want is adding a new flag?

>  
>      /**
>       * number of audio channels, only used for audio.
> 



More information about the ffmpeg-devel mailing list