diff mbox

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

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

Commit Message

Amir Pauker June 13, 2019, 3:52 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>
---
 doc/APIchanges       | 3 +++
 libavcodec/h264dec.c | 5 +++++
 libavutil/frame.h    | 1 +
 libavutil/version.h  | 2 +-
 4 files changed, 10 insertions(+), 1 deletion(-)

Comments

Moritz Barsnick June 14, 2019, 7:43 a.m. UTC | #1
On Thu, Jun 13, 2019 at 08:52:22 -0700, Amir Pauker wrote:
>  doc/APIchanges       | 3 +++
>  libavcodec/h264dec.c | 5 +++++
>  libavutil/frame.h    | 1 +
>  libavutil/version.h  | 2 +-

You should split the introduction of the API (libavutil and doc) and
the use of the API (libavcodec) into two separate patches.

> +    if( (ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr){

Please fix the bracket/whitespace style:
https://ffmpeg.org/developer.html#Code-formatting-conventions

->
    if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) {

Moritz
Amir Pauker June 14, 2019, 2:42 p.m. UTC | #2
thanks  Moritz

i submitted two new patches

On Fri, Jun 14, 2019 at 2:43 AM Moritz Barsnick <barsnick@gmx.net> wrote:

> On Thu, Jun 13, 2019 at 08:52:22 -0700, Amir Pauker wrote:
> >  doc/APIchanges       | 3 +++
> >  libavcodec/h264dec.c | 5 +++++
> >  libavutil/frame.h    | 1 +
> >  libavutil/version.h  | 2 +-
>
> You should split the introduction of the API (libavutil and doc) and
> the use of the API (libavcodec) into two separate patches.
>
> > +    if( (ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr){
>
> Please fix the bracket/whitespace style:
> https://ffmpeg.org/developer.html#Code-formatting-conventions
>
> ->
>     if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) {
>
> Moritz
> _______________________________________________
> 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/doc/APIchanges b/doc/APIchanges
index cf426e2..ac89c6b 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@  libavutil:     2017-10-21
 
 API changes, most recent first:
 
+2019-06-13 - XXXXXXXXXX - lavu 56.29.100 - frame.h
+  Add FF_DECODE_ERROR_CONCEALMENT_ACTIVE
+
 2019-05-15 - b79b29ddb1 - lavu 56.28.100 - tx.h
   Add av_tx_init(), av_tx_uninit() and related definitions.
 
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 837c3b7..4995231 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_CONCEALMENT_ACTIVE;
+    }
+
     ret = 0;
 end:
 
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 8aa3e88..54e682e 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -563,6 +563,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_CONCEALMENT_ACTIVE  4
 
     /**
      * number of audio channels, only used for audio.
diff --git a/libavutil/version.h b/libavutil/version.h
index 91ab716..dccbb38 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@ 
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  56
-#define LIBAVUTIL_VERSION_MINOR  28
+#define LIBAVUTIL_VERSION_MINOR  29
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \