X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fflicvideo.c;h=7535a409162d67fb6d53cab31642e1174fcde465;hb=6b1a0f205868a341cbc0d754d976cadff3ae9aae;hp=3e0573af93f209b332f5df0950c3db2c4c1fbe4e;hpb=6a8d05cb4d1559e7246597150b836a78e419fdd1;p=ffmpeg diff --git a/libavcodec/flicvideo.c b/libavcodec/flicvideo.c index 3e0573af93f..7535a409162 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;