# HG changeset patch # User zas_ # Date 1235936918 0 # Node ID 17f80c6be6b69f9ed579054264deff3378935f07 # Parent d87deb05d59f94669c1e3d6f46e9616d2020e28a Clarify colorspace determination (exif 2.2/2.21). diff -r d87deb05d59f -r 17f80c6be6b6 src/image.c --- 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); }