diff mbox

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

Message ID 1561126517-23188-1-git-send-email-amir@livelyvideo.tv
State New
Headers show

Commit Message

Amir Pauker June 21, 2019, 2:15 p.m. UTC
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@livelyvideo.tv>
---
 libavcodec/error_resilience.c | 2 ++
 libavcodec/h264dec.c          | 5 +++++
 2 files changed, 7 insertions(+)

Comments

Amir Pauker July 6, 2019, 7:19 p.m. UTC | #1
Michael hey,

Could you please apply this patch as well.

Thanks

On Fri, Jun 21, 2019 at 9:15 AM Amir Pauker <amir@livelyvideo.tv> 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@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:
>
> --
> 2.1.4
>
>
Michael Niedermayer July 7, 2019, 8:15 p.m. UTC | #2
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@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

[...]
Amir Pauker July 8, 2019, 5:20 p.m. UTC | #3
Thanks

On Sun, Jul 7, 2019 at 3:38 PM Michael Niedermayer <michael@niedermayer.cc>
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@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
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Whats the most studid thing your enemy could do ? Blow himself up
> Whats the most studid thing you could do ? Give up your rights and
> freedom because your enemy blew himself up.
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox

Patch

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: