diff options
author | Lynne <[email protected]> | 2020-01-10 21:55:19 +0000 |
---|---|---|
committer | Lynne <[email protected]> | 2020-01-13 23:26:25 +0000 |
commit | 9e01f171f3b7d408f93ec0409d8f9be1d8b291d8 (patch) | |
tree | f5a5d77cd9670ac9423002fc6f636467046a7275 | |
parent | 722547996c27b871c9288c45de9887b98a076750 (diff) |
tiffdec: support embedded ICC profiles
-rw-r--r-- | libavcodec/tiff.c | 18 | ||||
-rw-r--r-- | libavcodec/tiff.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index 636614aa28..e8357114de 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -1218,6 +1218,8 @@ static void set_sar(TiffContext *s, unsigned tag, unsigned num, unsigned den) static int tiff_decode_tag(TiffContext *s, AVFrame *frame) { + AVFrameSideData *sd; + GetByteContext gb_temp; unsigned tag, type, count, off, value = 0, value2 = 1; // value2 is a denominator so init. to 1 int i, start; int pos; @@ -1643,6 +1645,22 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame) } } break; + case TIFF_ICC_PROFILE: + if (type != TIFF_UNDEFINED) + return AVERROR_INVALIDDATA; + + gb_temp = s->gb; + bytestream2_seek(&gb_temp, SEEK_SET, off); + + if (bytestream2_get_bytes_left(&gb_temp) < 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(&gb_temp, 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, |