From 8cc8adaa88a13176039c6d95d98afaf115cbc768 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Thu, 6 Jun 2013 19:42:01 +0000 Subject: tiff: correctly decode saparate planes with horizontal differencing predictor Closes #2648. Signed-off-by: Paul B Mahol --- libavcodec/tiff.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index 48807faeb4..922aed063a 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -1178,16 +1178,22 @@ static int decode_frame(AVCodecContext *avctx, if (s->predictor == 2) { dst = p->data[plane]; soff = s->bpp >> 3; + if (s->planar) + soff = FFMAX(soff / s->bppcount, 1); ssize = s->width * soff; if (s->avctx->pix_fmt == AV_PIX_FMT_RGB48LE || - s->avctx->pix_fmt == AV_PIX_FMT_RGBA64LE) { + s->avctx->pix_fmt == AV_PIX_FMT_RGBA64LE || + s->avctx->pix_fmt == AV_PIX_FMT_GBRP16LE || + s->avctx->pix_fmt == AV_PIX_FMT_GBRAP16LE) { for (i = 0; i < s->height; i++) { for (j = soff; j < ssize; j += 2) AV_WL16(dst + j, AV_RL16(dst + j) + AV_RL16(dst + j - soff)); dst += stride; } } else if (s->avctx->pix_fmt == AV_PIX_FMT_RGB48BE || - s->avctx->pix_fmt == AV_PIX_FMT_RGBA64BE) { + s->avctx->pix_fmt == AV_PIX_FMT_RGBA64BE || + s->avctx->pix_fmt == AV_PIX_FMT_GBRP16BE || + s->avctx->pix_fmt == AV_PIX_FMT_GBRAP16BE) { for (i = 0; i < s->height; i++) { for (j = soff; j < ssize; j += 2) AV_WB16(dst + j, AV_RB16(dst + j) + AV_RB16(dst + j - soff)); -- cgit v1.2.3