summaryrefslogtreecommitdiffstats
path: root/libavcodec/vc1dec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-06-08 03:56:36 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-06-08 05:25:28 +0200
commitd552f616a26623e5b593e4d3474c61563f3939fd (patch)
treef5f3791b58abe6ea8895709b7d2be272afc493ab /libavcodec/vc1dec.c
parent7d89f7cbf3ccd98f9a5f58db97effa9afd2d571a (diff)
parentac4a8548110bc180cb67bea6eaf8b8e1081370cf (diff)
downloadffmpeg-streaming-d552f616a26623e5b593e4d3474c61563f3939fd.zip
ffmpeg-streaming-d552f616a26623e5b593e4d3474c61563f3939fd.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: (28 commits) Remove some non-compiling debug messages. ffplay: Fix non-compiling debug printf and replace it by av_dlog. H264: x86 predict init cosmetics. ac3enc: Fix linking of AC-3 encoder without the E-AC-3 encoder. Move E-AC-3 encoder functions to a separate eac3enc.c file. ac3enc: remove convenience macro, #define DEBUG ac3enc: remove unused #define vc1: re-initialize tables after width/height change. APIchanges: fill-in git commit hash for av_get_bytes_per_sample() addition samplefmt: add av_get_bytes_per_sample() iirfilter: fix biquad filter coefficients. swscale: remove duplicate conversion routine in swScale(). swscale: add yuv2planar/packed function typedefs. swscale: integrate yuv2nv12X_C into yuv2yuvX() function pointers. swscale: reindent x86 init code. swscale: extract SWS_FULL_CHR_H_INT conditional into init code. swscale: cosmetics. swscale: remove alp/chr/lumSrcOffset. swscale: un-special-case yuv2yuvX16_c(). shorten: Remove stray DEBUG #define and corresponding av_dlog statement. ... Conflicts: doc/APIchanges libavcodec/ac3enc.c libavutil/avutil.h libavutil/samplefmt.c libswscale/swscale.c libswscale/swscale_internal.h libswscale/x86/swscale_template.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/vc1dec.c')
-rw-r--r--libavcodec/vc1dec.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index d35e664..852c874 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -3398,7 +3398,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
VC1Context *v = avctx->priv_data;
MpegEncContext *s = &v->s;
GetBitContext gb;
- int i;
+ int i, cur_width, cur_height;
if (!avctx->extradata_size || !avctx->extradata) return -1;
if (!(avctx->flags & CODEC_FLAG_GRAY))
@@ -3419,8 +3419,8 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
if (vc1_init_common(v) < 0) return -1;
ff_vc1dsp_init(&v->vc1dsp);
- avctx->coded_width = avctx->width;
- avctx->coded_height = avctx->height;
+ cur_width = avctx->coded_width = avctx->width;
+ cur_height = avctx->coded_height = avctx->height;
if (avctx->codec_id == CODEC_ID_WMV3)
{
int count = 0;
@@ -3491,6 +3491,19 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
}
v->res_sprite = (avctx->codec_tag == MKTAG('W','V','P','2'));
}
+ // Sequence header information may not have been parsed
+ // yet when ff_msmpeg4_decode_init was called the fist time
+ // above. If sequence information changes, we need to call
+ // it again.
+ if (cur_width != avctx->width ||
+ cur_height != avctx->height) {
+ MPV_common_end(s);
+ if(ff_msmpeg4_decode_init(avctx) < 0)
+ return -1;
+ avctx->coded_width = avctx->width;
+ avctx->coded_height = avctx->height;
+ }
+
avctx->profile = v->profile;
if (v->profile == PROFILE_ADVANCED)
avctx->level = v->level;
OpenPOWER on IntegriCloud