[eog] EogMetadataReaderPNG: Only build profile from cHRM if gAMA is present



commit 78c0153ef904a3664b31387ddbf076a705b67d09
Author: pdknsk <pdknsk gmail com>
Date:   Fri May 3 15:40:45 2019 +0200

    EogMetadataReaderPNG: Only build profile from cHRM if gAMA is present
    
    It's more likely that such an image had a (stripped) sRGB profile or chunk.
    And thus rather than trying to build a profile from only half the necessary
    information, eog should not.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=725359

 src/eog-metadata-reader-png.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
---
diff --git a/src/eog-metadata-reader-png.c b/src/eog-metadata-reader-png.c
index 25f58d2e..deadab5f 100644
--- a/src/eog-metadata-reader-png.c
+++ b/src/eog-metadata-reader-png.c
@@ -574,11 +574,11 @@ eog_metadata_reader_png_get_icc_profile (EogMetadataReaderPng *emr)
                profile = cmsCreate_sRGBProfile ();
        }
 
-       if (!profile && priv->cHRM_chunk) {
+       if (!profile && priv->cHRM_chunk && priv->gAMA_chunk) {
                cmsCIExyY whitepoint;
                cmsCIExyYTRIPLE primaries;
                cmsToneCurve *gamma[3];
-               double gammaValue = 2.2; // 2.2 should be a sane default gamma
+               double gammaValue;
 
                /* This uglyness extracts the chromacity and whitepoint values
                 * from a PNG's cHRM chunk. These can be accurate up to the
@@ -597,14 +597,9 @@ eog_metadata_reader_png_get_icc_profile (EogMetadataReaderPng *emr)
                primaries.Blue.x = EXTRACT_DOUBLE_UINT_BLOCK_OFFSET (priv->cHRM_chunk, 6, 100000);
                primaries.Blue.y = EXTRACT_DOUBLE_UINT_BLOCK_OFFSET (priv->cHRM_chunk, 7, 100000);
 
-               primaries.Red.Y = primaries.Green.Y = primaries.Blue.Y = 1.0;
-
-               /* If the gAMA_chunk is present use its value which is saved
-                * the same way as the whitepoint. Use 2.2 as default value if
-                * the chunk is not present. */
-               if (priv->gAMA_chunk)
-                       gammaValue = (double) 1.0/EXTRACT_DOUBLE_UINT_BLOCK_OFFSET (priv->gAMA_chunk, 0, 
100000);
+               whitepoint.Y = primaries.Red.Y = primaries.Green.Y = primaries.Blue.Y = 1.0;
 
+               gammaValue = (double) 1.0/EXTRACT_DOUBLE_UINT_BLOCK_OFFSET (priv->gAMA_chunk, 0, 100000);
                gamma[0] = gamma[1] = gamma[2] = cmsBuildGamma (NULL, gammaValue);
 
                profile = cmsCreateRGBProfile (&whitepoint, &primaries, gamma);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]