Patch attached.
Very widespread, every NASA TIFF image has an ICC profile embedded, and its
almost never sRGB, so this is really needed for proper color display.
>From 1a3cbad82c897110e8ef221aae9733b841a443fc Mon Sep 17 00:00:00 2001
From: Lynne <[email protected]>
Date: Fri, 10 Jan 2020 21:55:19 +0000
Subject: [PATCH] tiffdec: support embedded ICC profiles
---
libavcodec/tiff.c | 13 +++++++++++++
libavcodec/tiff.h | 1 +
2 files changed, 14 insertions(+)
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index 636614aa28..257572b551 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -1218,6 +1218,7 @@ static void set_sar(TiffContext *s, unsigned tag, unsigned num, unsigned den)
static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
{
+ AVFrameSideData *sd;
unsigned tag, type, count, off, value = 0, value2 = 1; // value2 is a denominator so init. to 1
int i, start;
int pos;
@@ -1643,6 +1644,18 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
}
}
break;
+ case TIFF_ICC_PROFILE:
+ if (count >= INT_MAX || count <= 0)
+ return AVERROR_INVALIDDATA;
+ if (bytestream2_get_bytes_left(&s->gb) < count)
+ return AVERROR_INVALIDDATA;
+
+ sd = av_frame_new_side_data(frame, AV_FRAME_DATA_ICC_PROFILE, count);
+ if (!sd)
+ return AVERROR(ENOMEM);
+
+ bytestream2_get_bufferu(&s->gb, sd->data, count);
+ break;
case TIFF_ARTIST:
ADD_METADATA(count, "artist", NULL);
break;
diff --git a/libavcodec/tiff.h b/libavcodec/tiff.h
index 2184c2c829..c07a5d4fa9 100644
--- a/libavcodec/tiff.h
+++ b/libavcodec/tiff.h
@@ -92,6 +92,7 @@ enum TiffTags {
TIFF_MODEL_TIEPOINT = 0x8482,
TIFF_MODEL_PIXEL_SCALE = 0x830E,
TIFF_MODEL_TRANSFORMATION= 0x8480,
+ TIFF_ICC_PROFILE = 0x8773,
TIFF_GEO_KEY_DIRECTORY = 0x87AF,
TIFF_GEO_DOUBLE_PARAMS = 0x87B0,
TIFF_GEO_ASCII_PARAMS = 0x87B1,
--
2.25.0.rc2
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".