diff options
author | Paul B Mahol <onemda@gmail.com> | 2013-06-06 19:42:01 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2013-06-06 19:47:46 +0000 |
commit | 8cc8adaa88a13176039c6d95d98afaf115cbc768 (patch) | |
tree | c76b5cd275f5e488fc7c72e397cd800641d538b5 /libavcodec/tiff.c | |
parent | 00f4998997f3d8f37f18cf9438dc9ff2a58fdf69 (diff) | |
download | ffmpeg-8cc8adaa88a13176039c6d95d98afaf115cbc768.tar.gz |
tiff: correctly decode saparate planes with horizontal differencing predictor
Closes #2648.
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/tiff.c')
-rw-r--r-- | libavcodec/tiff.c | 10 |
1 files changed, 8 insertions, 2 deletions
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)); |