From 5e6b0e5f48670b770ad6ad85dc4db46afffb961e Mon Sep 17 00:00:00 2001 From: bcoudurier Date: Wed, 1 Jul 2009 20:35:28 +0000 Subject: [PATCH] Revert r19317, "simplify slice_end, return size of output frame". It returns non decodable B-frames. git-svn-id: file:///var/local/repositories/ffmpeg/trunk@19324 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b --- libavcodec/mpeg12.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index f5410b1fc..477e99c44 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1935,7 +1935,7 @@ static int slice_decode_thread(AVCodecContext *c, void *arg){ /** * Handles slice ends. - * @return sizeof(AVFrame) if a frame is output, 0 otherwise + * @return 1 if it seems to be the last slice */ static int slice_end(AVCodecContext *avctx, AVFrame *pict) { @@ -1966,7 +1966,6 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) if (s->pict_type == FF_B_TYPE || s->low_delay) { *pict= *(AVFrame*)s->current_picture_ptr; ff_print_debug_info(s, pict); - return sizeof(*pict); } else { s->picture_number++; /* latency of 1 frame for I- and P-frames */ @@ -1974,11 +1973,13 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) if (s->last_picture_ptr != NULL) { *pict= *(AVFrame*)s->last_picture_ptr; ff_print_debug_info(s, pict); - return sizeof(*pict); } } + + return 1; + } else { + return 0; } - return 0; } static int mpeg1_decode_sequence(AVCodecContext *avctx, @@ -2316,7 +2317,10 @@ static int decode_chunks(AVCodecContext *avctx, if (CONFIG_MPEG_VDPAU_DECODER && avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) ff_vdpau_mpeg_picture_complete(s2, buf, buf_size, s->slice_count); - *data_size = slice_end(avctx, picture); + if (slice_end(avctx, picture)) { + if(s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice + *data_size = sizeof(AVPicture); + } } s2->pict_type= 0; return FFMAX(0, buf_ptr - buf - s2->parse_context.last_index); -- 2.11.4.GIT