diff options
author | Mike Melanson <mike@multimedia.cx> | 2004-03-14 21:14:07 +0000 |
---|---|---|
committer | Mike Melanson <mike@multimedia.cx> | 2004-03-14 21:14:07 +0000 |
commit | 0d90aec0fd7428a77b5c4c536ab65635669bc42d (patch) | |
tree | 9eb56c6c1176bf6a6f3ae65199a3f43aa8c2aa2d /src/libffmpeg/libavcodec/svq3.c | |
parent | b4d3aa3dcce07b90098e33c37b563e797378d0f1 (diff) | |
download | xine-lib-0d90aec0fd7428a77b5c4c536ab65635669bc42d.tar.gz xine-lib-0d90aec0fd7428a77b5c4c536ab65635669bc42d.tar.bz2 |
sync to ffmpeg build 4707
CVS patchset: 6253
CVS date: 2004/03/14 21:14:07
Diffstat (limited to 'src/libffmpeg/libavcodec/svq3.c')
-rw-r--r-- | src/libffmpeg/libavcodec/svq3.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libffmpeg/libavcodec/svq3.c b/src/libffmpeg/libavcodec/svq3.c index c8720c07a..413cc8963 100644 --- a/src/libffmpeg/libavcodec/svq3.c +++ b/src/libffmpeg/libavcodec/svq3.c @@ -766,6 +766,8 @@ static int svq3_decode_frame (AVCodecContext *avctx, MpegEncContext *const s = avctx->priv_data; H264Context *const h = avctx->priv_data; int m, mb_type; + unsigned char *extradata; + unsigned int size; *data_size = 0; @@ -790,13 +792,21 @@ static int svq3_decode_frame (AVCodecContext *avctx, alloc_tables (h); - if (avctx->extradata && avctx->extradata_size >= 0x64 - && !memcmp (avctx->extradata, "SVQ3", 4)) { + /* prowl for the "SEQH" marker in the extradata */ + extradata = (unsigned char *)avctx->extradata; + for (m = 0; m < avctx->extradata_size; m++) { + if (!memcmp (extradata, "SEQH", 4)) + break; + extradata++; + } + + /* if a match was found, parse the extra data */ + if (!memcmp (extradata, "SEQH", 4)) { GetBitContext gb; - init_get_bits (&gb, (uint8_t *) avctx->extradata + 0x62, - 8*(avctx->extradata_size - 0x62)); + size = BE_32(&extradata[4]); + init_get_bits (&gb, extradata + 8, size); /* 'frame size code' and optional 'width, height' */ if (get_bits (&gb, 3) == 7) { |