[FFmpeg-devel] [PATCH] set AVFrame decode_error_flags in case of decoding error by h264dec
Amir Pauker
amir at livelyvideo.tv
Thu Jun 13 18:52:22 EEST 2019
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>
---
doc/APIchanges | 3 +++
libavcodec/h264dec.c | 5 +++++
libavutil/frame.h | 1 +
libavutil/version.h | 2 +-
4 files changed, 10 insertions(+), 1 deletion(-)
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, \
--
2.1.4
More information about the ffmpeg-devel
mailing list