diff options
Diffstat (limited to 'src/jpeg-utils.cpp')
| -rw-r--r-- | src/jpeg-utils.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 389b8e4..196752a 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -69,6 +69,25 @@ exif_data_free (ExifData *data) } } +static const gchar * +get_real_key_name (const gchar *key) +{ + struct StrKeyPair { + const gchar *from; + const gchar *to; + }; + static const struct StrKeyPair conv[] = { + { EXIF_CANON_CAMERA_TEMP, "Exif.CanonSi.0x000c" }, + }; + + guint i; + + for (i = 0; i < G_N_ELEMENTS (conv); i++) + if (g_str_equal (conv[i].from, key)) + return conv[i].to; + + return key; +} /* * Retrieves value of the specified key or NULL if the key does not exist. @@ -77,6 +96,11 @@ exif_data_free (ExifData *data) gchar * get_exif_data (ExifData *exif, const gchar *key) { + g_return_val_if_fail (exif != NULL, NULL); + g_return_val_if_fail (key != NULL, NULL); + + key = get_real_key_name (key); + try { if (g_strcmp0 (key, JPEG_COMMENT) == 0) { return g_strdup (exif->image->comment().c_str()); @@ -106,6 +130,9 @@ get_exif_data (ExifData *exif, const gchar *key) gchar * get_exif_data_fixed (ExifData *exif, const gchar *key) { + g_return_val_if_fail (exif != NULL, NULL); + g_return_val_if_fail (key != NULL, NULL); + try { if (g_str_has_prefix (key, EXIF_APERTURE)) { @@ -189,6 +216,17 @@ get_exif_data_fixed (ExifData *exif, const gchar *key) return g_strdup_printf ("%ld", val); } } + + if (g_str_has_prefix (key, EXIF_CANON_CAMERA_TEMP)) { + Exiv2::ExifData &exifData = exif->image->exifData(); + if (! exifData.empty()) { + if (exifData["Exif.CanonSi.0x000c"].count() > 0) { + int long val = exifData["Exif.CanonSi.0x000c"].toLong(); + if (val > 0) + return g_strdup_printf ("%ld °C", val - 128); + } + } + } } catch (...) { return NULL; @@ -206,6 +244,8 @@ exif_has_key (ExifData *exif, const gchar *key) g_return_val_if_fail (exif != NULL, FALSE); g_return_val_if_fail (key != NULL, FALSE); + key = get_real_key_name (key); + try { if (g_strcmp0 (key, JPEG_COMMENT) == 0) { return (! exif->image->comment().empty()); |
