diff options
author | Michael Niedermayer <[email protected]> | 2012-02-18 02:20:19 +0100 |
---|---|---|
committer | Michael Niedermayer <[email protected]> | 2012-02-18 02:20:19 +0100 |
commit | bbb61a1cd5cb2046e480f367a7ae58a32f2ef907 (patch) | |
tree | 0e7cc2b59558e2dc31d6b8752d90f6b5b5c886e5 /libavformat/cdxl.c | |
parent | f6492476a63938cc66c51bf61c88407b7749f780 (diff) | |
parent | af468015d972c0dec5c8c37b2685ffa5cbe4ae87 (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master: (22 commits)
als: prevent infinite loop in zero_remaining().
cook: prevent div-by-zero if channels is zero.
pamenc: switch to encode2().
svq1enc: switch to encode2().
dvenc: switch to encode2().
dpxenc: switch to encode2().
pngenc: switch to encode2().
v210enc: switch to encode2().
xwdenc: switch to encode2().
ttadec: use branchless unsigned-to-signed unfolding
avcodec: add a Sun Rasterfile encoder
sunrast: Move common defines to a new header file.
cdxl: fix video decoding for some files
cdxl: fix audio for some samples
apetag: add proper support for binary tags
ttadec: remove dead code
swscale: make access to filter data conditional on filter type.
swscale: update context offsets after removal of AlpMmxFilter.
prores: initialise encoder and decoder parts only when needed
swscale: make monowhite/black RGB-independent.
...
Conflicts:
Changelog
libavcodec/alsdec.c
libavcodec/dpxenc.c
libavcodec/golomb.h
libavcodec/pamenc.c
libavcodec/pngenc.c
libavformat/img2.c
libswscale/output.c
Merged-by: Michael Niedermayer <[email protected]>
Diffstat (limited to 'libavformat/cdxl.c')
-rw-r--r-- | libavformat/cdxl.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/libavformat/cdxl.c b/libavformat/cdxl.c index f2956dd2f2..49077b4a36 100644 --- a/libavformat/cdxl.c +++ b/libavformat/cdxl.c @@ -62,9 +62,8 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) { CDXLDemuxContext *cdxl = s->priv_data; AVIOContext *pb = s->pb; - uint32_t current_size; - uint16_t audio_size, palette_size; - int32_t video_size; + uint32_t current_size, video_size, image_size; + uint16_t audio_size, palette_size, width, height; int64_t pos; int ret; @@ -81,14 +80,17 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) } current_size = AV_RB32(&cdxl->header[2]); + width = AV_RB16(&cdxl->header[14]); + height = AV_RB16(&cdxl->header[16]); palette_size = AV_RB16(&cdxl->header[20]); audio_size = AV_RB16(&cdxl->header[22]); + image_size = FFALIGN(width, 16) * height * cdxl->header[19] / 8; + video_size = palette_size + image_size; if (palette_size > 512) return AVERROR_INVALIDDATA; - if (current_size < audio_size + palette_size + CDXL_HEADER_SIZE) + if (current_size < (uint64_t)audio_size + video_size + CDXL_HEADER_SIZE) return AVERROR_INVALIDDATA; - video_size = current_size - audio_size - CDXL_HEADER_SIZE; if (cdxl->read_chunk && audio_size) { if (cdxl->audio_stream_index == -1) { @@ -121,8 +123,8 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_tag = 0; st->codec->codec_id = CODEC_ID_CDXL; - st->codec->width = AV_RB16(&cdxl->header[14]); - st->codec->height = AV_RB16(&cdxl->header[16]); + st->codec->width = width; + st->codec->height = height; cdxl->video_stream_index = st->index; avpriv_set_pts_info(st, 63, cdxl->fps.den, cdxl->fps.num); } @@ -141,6 +143,8 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) cdxl->read_chunk = audio_size; } + if (!cdxl->read_chunk) + avio_skip(pb, current_size - audio_size - video_size - CDXL_HEADER_SIZE); return ret; } |