summaryrefslogtreecommitdiff
path: root/libavformat/cdxl.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2016-02-18 23:47:39 +0100
committerPaul B Mahol <onemda@gmail.com>2016-02-19 10:45:54 +0100
commit4956dc88d1fee9f4fa8ae0e26cec0593fef68179 (patch)
tree04b37addaae42a4b77486cc6a33c32a0f52ed79f /libavformat/cdxl.c
parent98a0053d0f90e3309dc1038b1bae3a48bbd9067c (diff)
downloadffmpeg-4956dc88d1fee9f4fa8ae0e26cec0593fef68179.tar.gz
avcodec/cdxl: add support for raw videos with chunky format
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavformat/cdxl.c')
-rw-r--r--libavformat/cdxl.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libavformat/cdxl.c b/libavformat/cdxl.c
index 3d80b477eb..0b8b199ce9 100644
--- a/libavformat/cdxl.c
+++ b/libavformat/cdxl.c
@@ -111,7 +111,7 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt)
uint32_t current_size, video_size, image_size;
uint16_t audio_size, palette_size, width, height;
int64_t pos;
- int frames, ret;
+ int format, frames, ret;
if (avio_feof(pb))
return AVERROR_EOF;
@@ -125,6 +125,7 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt)
return AVERROR_INVALIDDATA;
}
+ format = cdxl->header[1] & 0xE0;
current_size = AV_RB32(&cdxl->header[2]);
width = AV_RB16(&cdxl->header[14]);
height = AV_RB16(&cdxl->header[16]);
@@ -132,7 +133,10 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt)
audio_size = AV_RB16(&cdxl->header[22]);
if (FFALIGN(width, 16) * (uint64_t)height * cdxl->header[19] > INT_MAX)
return AVERROR_INVALIDDATA;
- image_size = FFALIGN(width, 16) * height * cdxl->header[19] / 8;
+ if (format == 0x20)
+ image_size = width * height * cdxl->header[19] / 8;
+ else
+ image_size = FFALIGN(width, 16) * height * cdxl->header[19] / 8;
video_size = palette_size + image_size;
if (palette_size > 512)