X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fcdxl.c;h=0b8b199ce9fed9312946c55eed807132e0438735;hb=50f4b64c543de39b74e56ea32ecfbdcf194c217a;hp=3d80b477eb99fb674d304c82ff1bc61b1ddee9cc;hpb=4e3185d208666f151e442ba0e9509f1e97ad865e;p=ffmpeg diff --git a/libavformat/cdxl.c b/libavformat/cdxl.c index 3d80b477eb9..0b8b199ce9f 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)