From e9dae537b82451e5353d7482c040ce66bf96014b Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Mon, 8 Jul 2019 17:06:28 -0400 Subject: EomMetadataReaderPNG: 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, eom should not. https://bugzilla.gnome.org/show_bug.cgi?id=725359 upstream commit: https://gitlab.gnome.org/GNOME/eog/commit/78c0153e --- src/eom-metadata-reader-png.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/eom-metadata-reader-png.c b/src/eom-metadata-reader-png.c index 8ad2405..ebf2ddf 100644 --- a/src/eom-metadata-reader-png.c +++ b/src/eom-metadata-reader-png.c @@ -574,11 +574,11 @@ eom_metadata_reader_png_get_icc_profile (EomMetadataReaderPng *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 @@ eom_metadata_reader_png_get_icc_profile (EomMetadataReaderPng *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); -- cgit v1.2.1