summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2014-03-18 11:41:00 +0100
committerTomas Bzatek <tbzatek@users.sourceforge.net>2014-03-18 12:29:25 +0100
commit52db8c27be5d08956d3950e83f8bf615d6faebdf (patch)
treecbe875f12111aad688ec56f018a5b569ef7a3d13
parent103ddac57a9e50d83782e0195f9e0aa0a26bfd34 (diff)
downloadcataract-52db8c27be5d08956d3950e83f8bf615d6faebdf.tar.xz
Ignore zero raw values for Camera Temperature tag detection
Some cameras have the Exif.CanonSi.0x000c tag present but set to zero (raw value). Since this would result in some -128 deg. C, ignore such values.
-rw-r--r--src/jpeg-utils.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp
index 5a32a3a..e2d0871 100644
--- a/src/jpeg-utils.cpp
+++ b/src/jpeg-utils.cpp
@@ -346,24 +346,35 @@ get_exif_data_fixed (ExifData *exif, const gchar *key)
gboolean
exif_has_key (ExifData *exif, const gchar *key)
{
+ const gchar *rkey;
+
g_return_val_if_fail (exif != NULL, FALSE);
g_return_val_if_fail (key != NULL, FALSE);
- key = get_real_key_name (key);
+ rkey = get_real_key_name (key);
try {
- if (g_strcmp0 (key, JPEG_COMMENT) == 0) {
+ if (g_strcmp0 (rkey, JPEG_COMMENT) == 0) {
return (! exif->priv->image->comment().empty());
}
- if (g_str_has_prefix (key, "Exif.")) {
+ if (g_str_has_prefix (rkey, "Exif.")) {
Exiv2::ExifData &exifData = exif->priv->image->exifData();
- return !exifData.empty() && exifData[key].count() > 0;
+ if (exifData.empty() || exifData[rkey].count() <= 0)
+ return FALSE;
+
+ /* Special case for some keys */
+ if (g_str_equal (key, EXIF_CANON_CAMERA_TEMP)) {
+ int long val = exifData["Exif.CanonSi.0x000c"].toLong();
+ return val > 0;
+ }
+
+ return TRUE;
}
- if (g_str_has_prefix (key, "Iptc.")) {
+ if (g_str_has_prefix (rkey, "Iptc.")) {
Exiv2::IptcData &iptcData = exif->priv->image->iptcData();
- return iptc_has_key (iptcData, key);
+ return iptc_has_key (iptcData, rkey);
}
return FALSE;