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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel