Mercurial > geeqie.yaz
changeset 1364:17f80c6be6b6
Clarify colorspace determination (exif 2.2/2.21).
author | zas_ |
---|---|
date | Sun, 01 Mar 2009 19:48:38 +0000 |
parents | d87deb05d59f |
children | 249bf204004a |
files | src/image.c |
diffstat | 1 files changed, 45 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/src/image.c Sun Mar 01 17:58:19 2009 +0000 +++ b/src/image.c Sun Mar 01 19:48:38 2009 +0000 @@ -246,38 +246,6 @@ if (exif) { - gint cs; - gchar *interop_index; - - /* ColorSpace == 1 specifies sRGB per EXIF 2.2 */ - if (!exif_get_integer(exif, "Exif.Photo.ColorSpace", &cs)) cs = 0; - interop_index = exif_get_data_as_text(exif, "Exif.Iop.InteroperabilityIndex"); - - if (cs == 1) - { - if (imd->color_profile_use_image) - { - input_type = COLOR_PROFILE_SRGB; - input_file = NULL; - } - imd->color_profile_from_image = COLOR_PROFILE_SRGB; - - DEBUG_1("Found EXIF ColorSpace of sRGB"); - } - if (cs == 2 || (interop_index && !strcmp(interop_index, "R03"))) - { - if (imd->color_profile_use_image) - { - input_type = COLOR_PROFILE_ADOBERGB; - input_file = NULL; - } - imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; - - DEBUG_1("Found EXIF ColorSpace of AdobeRGB"); - } - - g_free(interop_index); - profile = exif_get_color_profile(exif, &profile_len); if (profile) { @@ -289,7 +257,51 @@ DEBUG_1("Found embedded color profile"); imd->color_profile_from_image = COLOR_PROFILE_MEM; } - + else + { + gchar *interop_index = exif_get_data_as_text(exif, "Exif.Iop.InteroperabilityIndex"); + + if (interop_index) + { + /* Exif 2.21 specification */ + if (!strcmp(interop_index, "R98")) + { + imd->color_profile_from_image = COLOR_PROFILE_SRGB; + DEBUG_1("Found EXIF 2.21 ColorSpace of sRGB"); + } + else if (!strcmp(interop_index, "R03")) + { + imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; + DEBUG_1("Found EXIF 2.21 ColorSpace of AdobeRGB"); + } + g_free(interop_index); + } + else + { + gint cs; + + /* ColorSpace == 1 specifies sRGB per EXIF 2.2 */ + if (!exif_get_integer(exif, "Exif.Photo.ColorSpace", &cs)) cs = 0; + if (cs == 1) + { + imd->color_profile_from_image = COLOR_PROFILE_SRGB; + DEBUG_1("Found EXIF 2.2 ColorSpace of sRGB"); + } + else if (cs == 2) + { + /* non-standard way of specifying AdobeRGB (used by some software) */ + imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; + DEBUG_1("Found EXIF 2.2 ColorSpace of AdobeRGB"); + } + } + + if (imd->color_profile_use_image && imd->color_profile_from_image != COLOR_PROFILE_NONE) + { + input_type = imd->color_profile_from_image; + input_file = NULL; + } + } + exif_free_fd(imd->image_fd, exif); }