diff --git a/libavcodec/8bps.c b/libavcodec/8bps.c index 46344e0e43..49fd445494 100644 --- a/libavcodec/8bps.c +++ b/libavcodec/8bps.c @@ -41,7 +41,7 @@ static const enum AVPixelFormat pixfmt_rgb24[] = { - AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE }; + AV_PIX_FMT_BGR24, AV_PIX_FMT_0RGB32, AV_PIX_FMT_NONE }; typedef struct EightBpsContext { AVCodecContext *avctx; @@ -65,6 +65,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, unsigned int dlen, p, row; const unsigned char *lp, *dp, *ep; unsigned char count; + unsigned int px_inc; unsigned int planes = c->planes; unsigned char *planemap = c->planemap; int ret; @@ -77,6 +78,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, /* Set data pointer after line lengths */ dp = encoded + planes * (height << 1); + px_inc = planes + (avctx->pix_fmt == AV_PIX_FMT_0RGB32); + for (p = 0; p < planes; p++) { /* Lines length pointer for this plane */ lp = encoded + p * (height << 1); @@ -95,21 +98,21 @@ static int decode_frame(AVCodecContext *avctx, void *data, if ((count = *dp++) <= 127) { count++; dlen -= count + 1; - if (pixptr_end - pixptr < count * planes) + if (pixptr_end - pixptr < count * px_inc) break; if (ep - dp < count) return AVERROR_INVALIDDATA; while (count--) { *pixptr = *dp++; - pixptr += planes; + pixptr += px_inc; } } else { count = 257 - count; - if (pixptr_end - pixptr < count * planes) + if (pixptr_end - pixptr < count * px_inc) break; while (count--) { *pixptr = *dp; - pixptr += planes; + pixptr += px_inc; } dp++; dlen -= 2; diff --git a/libavcodec/version.h b/libavcodec/version.h index 636c9d64fe..e7778e9bc0 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MINOR 58 -#define LIBAVCODEC_VERSION_MICRO 101 +#define LIBAVCODEC_VERSION_MICRO 102 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \