Commit 90ab9a58 authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

lavc/tiff: Support CMYK images.

Fixes ticket #3459.
parent 261e4cf0
...@@ -825,7 +825,7 @@ static int init_image(TiffContext *s, ThreadFrame *frame) ...@@ -825,7 +825,7 @@ static int init_image(TiffContext *s, ThreadFrame *frame)
s->avctx->pix_fmt = s->le ? AV_PIX_FMT_YA16LE : AV_PIX_FMT_YA16BE; s->avctx->pix_fmt = s->le ? AV_PIX_FMT_YA16LE : AV_PIX_FMT_YA16BE;
break; break;
case 324: case 324:
s->avctx->pix_fmt = AV_PIX_FMT_RGBA; s->avctx->pix_fmt = s->photometric == TIFF_PHOTOMETRIC_SEPARATED ? AV_PIX_FMT_RGB0 : AV_PIX_FMT_RGBA;
break; break;
case 483: case 483:
s->avctx->pix_fmt = s->le ? AV_PIX_FMT_RGB48LE : AV_PIX_FMT_RGB48BE; s->avctx->pix_fmt = s->le ? AV_PIX_FMT_RGB48LE : AV_PIX_FMT_RGB48BE;
...@@ -1100,12 +1100,12 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame) ...@@ -1100,12 +1100,12 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
case TIFF_PHOTOMETRIC_BLACK_IS_ZERO: case TIFF_PHOTOMETRIC_BLACK_IS_ZERO:
case TIFF_PHOTOMETRIC_RGB: case TIFF_PHOTOMETRIC_RGB:
case TIFF_PHOTOMETRIC_PALETTE: case TIFF_PHOTOMETRIC_PALETTE:
case TIFF_PHOTOMETRIC_SEPARATED:
case TIFF_PHOTOMETRIC_YCBCR: case TIFF_PHOTOMETRIC_YCBCR:
case TIFF_PHOTOMETRIC_CFA: case TIFF_PHOTOMETRIC_CFA:
s->photometric = value; s->photometric = value;
break; break;
case TIFF_PHOTOMETRIC_ALPHA_MASK: case TIFF_PHOTOMETRIC_ALPHA_MASK:
case TIFF_PHOTOMETRIC_SEPARATED:
case TIFF_PHOTOMETRIC_CIE_LAB: case TIFF_PHOTOMETRIC_CIE_LAB:
case TIFF_PHOTOMETRIC_ICC_LAB: case TIFF_PHOTOMETRIC_ICC_LAB:
case TIFF_PHOTOMETRIC_ITU_LAB: case TIFF_PHOTOMETRIC_ITU_LAB:
...@@ -1530,6 +1530,24 @@ again: ...@@ -1530,6 +1530,24 @@ again:
dst += stride; dst += stride;
} }
} }
if (s->photometric == TIFF_PHOTOMETRIC_SEPARATED &&
s->avctx->pix_fmt == AV_PIX_FMT_RGB0) {
dst = p->data[plane];
for (i = 0; i < s->height; i++) {
for (j = 0; j < s->width; j++) {
int k = 255 - dst[4 * j + 3];
int r = (255 - dst[4 * j ]) * k;
int g = (255 - dst[4 * j + 1]) * k;
int b = (255 - dst[4 * j + 2]) * k;
dst[4 * j ] = r * 257 >> 16;
dst[4 * j + 1] = g * 257 >> 16;
dst[4 * j + 2] = b * 257 >> 16;
dst[4 * j + 3] = 255;
}
dst += p->linesize[plane];
}
}
} }
if (s->planar && s->bppcount > 2) { if (s->planar && s->bppcount > 2) {
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 58 #define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 43 #define LIBAVCODEC_VERSION_MINOR 43
#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment