From d7529b03bac49370aa4369b39a0dbf16724334d2 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sat, 31 Aug 2019 20:57:29 +0200 Subject: [PATCH] avcodec/tiff: set color_trc, remove sRGB conversion --- libavcodec/tiff.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index e88cbb6976..61ba99a192 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -773,16 +773,8 @@ static int tiff_unpack_strip(TiffContext *s, AVFrame *p, uint8_t *dst, int strid return 0; } -static float av_always_inline linear_to_srgb(float value) { - if (value <= 0.0031308f) - return value * 12.92f; - else - return powf(value * 1.055f, 1.0f / 2.4f) - 0.055f; -} - /** * Map stored raw sensor values into linear reference values (see: DNG Specification - Chapter 5) - * Then convert to sRGB color space. */ static uint16_t av_always_inline dng_process_color16(uint16_t value, const uint16_t *lut, @@ -800,8 +792,7 @@ static uint16_t av_always_inline dng_process_color16(uint16_t value, // Color scaling value_norm = (float)value * scale_factor; - // Color space conversion (sRGB) - value = av_clip_uint16_c((uint16_t)(linear_to_srgb(value_norm) * 0xFFFF)); + value = av_clip_uint16_c(value_norm * 65535); return value; } @@ -1920,6 +1911,13 @@ again: } } + if (s->photometric == TIFF_PHOTOMETRIC_LINEAR_RAW || + s->photometric == TIFF_PHOTOMETRIC_CFA) { + p->color_trc = AVCOL_TRC_LINEAR; + } else if (s->photometric == TIFF_PHOTOMETRIC_BLACK_IS_ZERO) { + p->color_trc = AVCOL_TRC_GAMMA22; + } + /* Handle DNG images with JPEG-compressed tiles */ if (is_dng && s->is_tiled) {