From 98ee28f049415750b2bb5d9f3eb386a83696cddc Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 18 Mar 2014 10:46:32 +0100 Subject: Add support for specifying custom focal length and aperture Similar to using supplied timestamps this is useful for fully manual lenses that don't provide any information to the camera. --- src/jpeg-utils.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/jpeg-utils.cpp') diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 6c652a5..5a32a3a 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -225,7 +225,16 @@ get_exif_data_fixed (ExifData *exif, const gchar *key) return NULL; if (g_str_equal (key, EXIF_APERTURE)) { - float val = exifData["Exif.Photo.FNumber"].toFloat(); + double val = -1; + if (exif->fake_aperture != -1) + val = exif->fake_aperture; + else { + if (exifData["Exif.Photo.FNumber"].count() > 0) + val = exifData["Exif.Photo.FNumber"].toFloat(); + else + if (exifData["Exif.Photo.ApertureValue"].count() > 0) + val = exifData["Exif.Photo.ApertureValue"].toFloat(); + } if (val >= 0) return g_strdup_printf ("f/%.1f", val); } @@ -297,7 +306,8 @@ get_exif_data_fixed (ExifData *exif, const gchar *key) } if (g_str_equal (key, EXIF_FOCAL_LENGTH)) { - float val = exifData["Exif.Photo.FocalLength"].toFloat(); + double val; + val = exif->fake_focal_length != -1 ? exif->fake_focal_length : exifData["Exif.Photo.FocalLength"].toFloat(); if (val >= 0) return g_strdup_printf ("%.0f mm", val); } @@ -754,6 +764,22 @@ modify_exif (const gchar *filename, ExifData *exif, gboolean strip_thumbnail, gb modified = TRUE; } } + + if (exif->fake_aperture != -1) { + if (! exifData.empty()) { + exifData["Exif.Photo.FNumber"] = Exiv2::floatToRationalCast (exif->fake_aperture); + if (exifData["Exif.Photo.ApertureValue"].count() > 0) + exifData["Exif.Photo.ApertureValue"] = Exiv2::floatToRationalCast (exif->fake_aperture); + modified = TRUE; + } + } + + if (exif->fake_focal_length != -1) { + if (! exifData.empty()) { + exifData["Exif.Photo.FocalLength"] = Exiv2::floatToRationalCast (exif->fake_focal_length); + modified = TRUE; + } + } } -- cgit v1.2.3