summaryrefslogtreecommitdiff
path: root/libavcodec/mpeg12.c
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2009-07-01 20:35:28 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2009-07-01 20:35:28 +0000
commit6be8b20466b7bf44029ff5b621fc24f67ed75183 (patch)
tree3fee5981085623224d8d38beea668ca41e93df23 /libavcodec/mpeg12.c
parentfb6ecd728567cf4ca415fa5a9b1c209e470b6ac2 (diff)
Revert r19317, "simplify slice_end, return size of output frame".
It returns non decodable B-frames. Originally committed as revision 19324 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpeg12.c')
-rw-r--r--libavcodec/mpeg12.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index f5410b1fce..477e99c444 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);