[FFmpeg-devel] [PATCH] libavcodec/h263dec.c: Duplicate the last decoded frame when xvid marks the packet as skipped.
Thierry Foucu
tfoucu at gmail.com
Wed Oct 25 04:42:54 EEST 2017
Changed the return value when no VOD were encoded in Mpeg4 bistream.
And if we do have already a decoded frames and we are not in xvid_packed
mode, output the existing decoded frame instead of nothing.
---
libavcodec/h263dec.c | 9 ++++++++-
libavcodec/mpeg4videodec.c | 2 +-
libavcodec/mpegutils.h | 1 +
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index c7cf4bc0c2..394a366f9c 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -506,8 +506,15 @@ retry:
s->height= avctx->coded_height;
}
}
- if (ret == FRAME_SKIPPED)
+ if (ret == FRAME_SKIPPED || ret == FRAME_NOT_CODED) {
+ if (s->next_picture_ptr && ret == FRAME_NOT_CODED && !s->divx_packed) {
+ if ((ret = av_frame_ref(pict, s->next_picture_ptr->f)) < 0) {
+ return ret;
+ }
+ *got_frame = 1;
+ }
return get_consumed_bytes(s, buf_size);
+ }
/* skip if the header was thrashed */
if (ret < 0) {
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index 82c4f8fc8c..3a9ed12971 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -2394,7 +2394,7 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
if (get_bits1(gb) != 1) {
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
av_log(s->avctx, AV_LOG_ERROR, "vop not coded\n");
- return FRAME_SKIPPED;
+ return FRAME_NOT_CODED;
}
if (ctx->new_pred)
decode_new_pred(ctx, gb);
diff --git a/libavcodec/mpegutils.h b/libavcodec/mpegutils.h
index 1bf73fea02..97786135c6 100644
--- a/libavcodec/mpegutils.h
+++ b/libavcodec/mpegutils.h
@@ -32,6 +32,7 @@
* Return value for header parsers if frame is not coded.
* */
#define FRAME_SKIPPED 100
+#define FRAME_NOT_CODED 101
/* picture type */
#define PICT_TOP_FIELD 1
--
2.15.0.rc0.271.g36b669edcc-goog
More information about the ffmpeg-devel
mailing list