summaryrefslogtreecommitdiff
path: root/src/jpeg-utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jpeg-utils.cpp')
-rw-r--r--src/jpeg-utils.cpp40
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 &deg;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());