diff mbox series

[FFmpeg-devel,11/18] h264dec: do not abort if decoding extradata fails

Message ID 20200313102850.23913-11-anton@khirnov.net
State Accepted
Headers show
Series [FFmpeg-devel,01/18] mpeg4videodec: do not copy a range of fields at once
Related show

Checks

Context Check Description
andriy/ffmpeg-patchwork pending
andriy/ffmpeg-patchwork warning Failed to apply patch

Commit Message

Anton Khirnov March 13, 2020, 10:28 a.m. UTC
Such errors are not necessarily fatal and decoding might still be
possible, e.g. it happens for MVC streams where we do not handle the
subset SPS thus failing to parse its corresponding PPS.
---
 libavcodec/h264dec.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

James Almer March 15, 2020, 6:22 p.m. UTC | #1
On 3/13/2020 7:28 AM, Anton Khirnov wrote:
> Such errors are not necessarily fatal and decoding might still be
> possible, e.g. it happens for MVC streams where we do not handle the
> subset SPS thus failing to parse its corresponding PPS.
> ---
>  libavcodec/h264dec.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
> index 9331070f33..79663d8083 100644
> --- a/libavcodec/h264dec.c
> +++ b/libavcodec/h264dec.c
> @@ -417,10 +417,14 @@ static av_cold int h264_decode_init(AVCodecContext *avctx)
>              ret = ff_h264_decode_extradata(avctx->extradata, avctx->extradata_size,
>                                             &h->ps, &h->is_avc, &h->nal_length_size,
>                                             avctx->err_recognition, avctx);
> -            if (ret < 0) {
> -                h264_decode_end(avctx);
> -                return ret;
> -            }
> +           if (ret < 0) {
> +               av_log(avctx, AV_LOG_WARNING, "Error decoding the extradata\n");
> +               if (avctx->err_recognition & AV_EF_EXPLODE) {
> +                   h264_decode_end(avctx);
> +                   return ret;
> +               }
> +               ret = 0;
> +           }
>          }
>      }

LGTM.
diff mbox series

Patch

diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 9331070f33..79663d8083 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -417,10 +417,14 @@  static av_cold int h264_decode_init(AVCodecContext *avctx)
             ret = ff_h264_decode_extradata(avctx->extradata, avctx->extradata_size,
                                            &h->ps, &h->is_avc, &h->nal_length_size,
                                            avctx->err_recognition, avctx);
-            if (ret < 0) {
-                h264_decode_end(avctx);
-                return ret;
-            }
+           if (ret < 0) {
+               av_log(avctx, AV_LOG_WARNING, "Error decoding the extradata\n");
+               if (avctx->err_recognition & AV_EF_EXPLODE) {
+                   h264_decode_end(avctx);
+                   return ret;
+               }
+               ret = 0;
+           }
         }
     }