Commit de1a0d43 authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

lavc/flicvideo: Implement padding in COPY chunks.

Reviewed-by: Reimar
parent c06bdc60
...@@ -423,7 +423,7 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx, ...@@ -423,7 +423,7 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
case FLI_COPY: case FLI_COPY:
/* copy the chunk (uncompressed frame) */ /* copy the chunk (uncompressed frame) */
if (chunk_size - 6 != s->avctx->width * s->avctx->height) { if (chunk_size - 6 != FFALIGN(s->avctx->width, 4) * s->avctx->height) {
av_log(avctx, AV_LOG_ERROR, "In chunk FLI_COPY : source data (%d bytes) " \ av_log(avctx, AV_LOG_ERROR, "In chunk FLI_COPY : source data (%d bytes) " \
"has incorrect size, skipping chunk\n", chunk_size - 6); "has incorrect size, skipping chunk\n", chunk_size - 6);
bytestream2_skip(&g2, chunk_size - 6); bytestream2_skip(&g2, chunk_size - 6);
...@@ -432,6 +432,8 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx, ...@@ -432,6 +432,8 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
y_ptr += s->frame->linesize[0]) { y_ptr += s->frame->linesize[0]) {
bytestream2_get_buffer(&g2, &pixels[y_ptr], bytestream2_get_buffer(&g2, &pixels[y_ptr],
s->avctx->width); s->avctx->width);
if (s->avctx->width & 3)
bytestream2_skip(&g2, 4 - (s->avctx->width & 3));
} }
} }
break; break;
...@@ -711,7 +713,7 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx, ...@@ -711,7 +713,7 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx,
case FLI_COPY: case FLI_COPY:
case FLI_DTA_COPY: case FLI_DTA_COPY:
/* copy the chunk (uncompressed frame) */ /* copy the chunk (uncompressed frame) */
if (chunk_size - 6 > (unsigned int)(s->avctx->width * s->avctx->height)*2) { if (chunk_size - 6 > (unsigned int)(FFALIGN(s->avctx->width, 2) * s->avctx->height)*2) {
av_log(avctx, AV_LOG_ERROR, "In chunk FLI_COPY : source data (%d bytes) " \ av_log(avctx, AV_LOG_ERROR, "In chunk FLI_COPY : source data (%d bytes) " \
"bigger than image, skipping chunk\n", chunk_size - 6); "bigger than image, skipping chunk\n", chunk_size - 6);
bytestream2_skip(&g2, chunk_size - 6); bytestream2_skip(&g2, chunk_size - 6);
...@@ -727,6 +729,8 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx, ...@@ -727,6 +729,8 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx,
pixel_ptr += 2; pixel_ptr += 2;
pixel_countdown--; pixel_countdown--;
} }
if (s->avctx->width & 1)
bytestream2_skip(&g2, 2);
} }
} }
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment