From de1a0d43595b98c1093c9fc39de0e96fba8e9a06 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Sat, 26 Mar 2016 14:56:55 +0100 Subject: [PATCH] lavc/flicvideo: Implement padding in COPY chunks. Reviewed-by: Reimar --- libavcodec/flicvideo.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavcodec/flicvideo.c b/libavcodec/flicvideo.c index 3e0573af93..7535a40916 100644 --- a/libavcodec/flicvideo.c +++ b/libavcodec/flicvideo.c @@ -423,7 +423,7 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx, case FLI_COPY: /* 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) " \ "has incorrect size, skipping chunk\n", chunk_size - 6); bytestream2_skip(&g2, chunk_size - 6); @@ -432,6 +432,8 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx, y_ptr += s->frame->linesize[0]) { bytestream2_get_buffer(&g2, &pixels[y_ptr], s->avctx->width); + if (s->avctx->width & 3) + bytestream2_skip(&g2, 4 - (s->avctx->width & 3)); } } break; @@ -711,7 +713,7 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx, case FLI_COPY: case FLI_DTA_COPY: /* 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) " \ "bigger than image, skipping chunk\n", chunk_size - 6); bytestream2_skip(&g2, chunk_size - 6); @@ -727,6 +729,8 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx, pixel_ptr += 2; pixel_countdown--; } + if (s->avctx->width & 1) + bytestream2_skip(&g2, 2); } } break;