From b869eea7ea8f5d8331fcd6355f848bb6a6e06b14 Mon Sep 17 00:00:00 2001 From: John Stebbins Date: Fri, 8 Aug 2014 08:21:02 -0700 Subject: h263dec: Fix order of initialization ff_MPV_common_init requires the frame dimensions which get parsed in *_decode_picture_header. --- libavcodec/h263dec.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'libavcodec/h263dec.c') diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index a6d16b7258..c4db99e6c3 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -416,21 +416,9 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, if (ret < 0) return ret; - if (!s->context_initialized) { + if (!s->context_initialized) // we need the idct permutaton for reading a custom matrix ff_mpv_idct_init(s); - if ((ret = ff_MPV_common_init(s)) < 0) - return ret; - } - - /* We need to set current_picture_ptr before reading the header, - * otherwise we cannot store anyting in there */ - if (s->current_picture_ptr == NULL || s->current_picture_ptr->f->data[0]) { - int i = ff_find_unused_picture(s, 0); - if (i < 0) - return i; - s->current_picture_ptr = &s->picture[i]; - } /* let's go :-) */ if (CONFIG_WMV2_DECODER && s->msmpeg4_version == 5) { @@ -465,6 +453,17 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, return ret; } + if (!s->context_initialized) + if ((ret = ff_MPV_common_init(s)) < 0) + return ret; + + if (s->current_picture_ptr == NULL || s->current_picture_ptr->f->data[0]) { + int i = ff_find_unused_picture(s, 0); + if (i < 0) + return i; + s->current_picture_ptr = &s->picture[i]; + } + avctx->has_b_frames = !s->low_delay; #define SET_QPEL_FUNC(postfix1, postfix2) \ -- cgit v1.2.3