]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/tiff: set color_trc, remove sRGB conversion
authorPaul B Mahol <onemda@gmail.com>
Sat, 31 Aug 2019 18:57:29 +0000 (20:57 +0200)
committerPaul B Mahol <onemda@gmail.com>
Mon, 2 Sep 2019 07:26:53 +0000 (09:26 +0200)
libavcodec/tiff.c

index e88cbb69766a2aca170e9ee898b377a211342d4c..61ba99a1920ba8cf00f74f2f061154f46086e882 100644 (file)
@@ -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) {