[FFmpeg-cvslog] lavc/tiff: Support CMYK images.
Carl Eugen Hoyos
git at videolan.org
Sat Jan 12 18:30:26 EET 2019
ffmpeg | branch: master | Carl Eugen Hoyos <ceffmpeg at gmail.com> | Sat Jan 12 17:27:48 2019 +0100| [90ab9a58ff697e0a7bfd89715cba5a8fb4074b35] | committer: Carl Eugen Hoyos
lavc/tiff: Support CMYK images.
Fixes ticket #3459.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=90ab9a58ff697e0a7bfd89715cba5a8fb4074b35
---
libavcodec/tiff.c | 22 ++++++++++++++++++++--
libavcodec/version.h | 2 +-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index 570b3cbd01..5a4271c012 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -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;
break;
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;
case 483:
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)
case TIFF_PHOTOMETRIC_BLACK_IS_ZERO:
case TIFF_PHOTOMETRIC_RGB:
case TIFF_PHOTOMETRIC_PALETTE:
+ case TIFF_PHOTOMETRIC_SEPARATED:
case TIFF_PHOTOMETRIC_YCBCR:
case TIFF_PHOTOMETRIC_CFA:
s->photometric = value;
break;
case TIFF_PHOTOMETRIC_ALPHA_MASK:
- case TIFF_PHOTOMETRIC_SEPARATED:
case TIFF_PHOTOMETRIC_CIE_LAB:
case TIFF_PHOTOMETRIC_ICC_LAB:
case TIFF_PHOTOMETRIC_ITU_LAB:
@@ -1530,6 +1530,24 @@ again:
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) {
diff --git a/libavcodec/version.h b/libavcodec/version.h
index ed56a1ece5..aa16bb24a0 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 58
#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, \
LIBAVCODEC_VERSION_MINOR, \
More information about the ffmpeg-cvslog
mailing list