Author: post
Date: 2010-12-18 18:42:33 +0100 (Sat, 18 Dec 2010)
New Revision: 3680

Modified:
   trunk/librawstudio/rs-exif.cc
   trunk/librawstudio/rs-exif.h
   trunk/plugins/output-jpegfile/output-jpegfile.c
   trunk/plugins/output-pngfile/output-pngfile.c
   trunk/plugins/output-tifffile/output-tifffile.c
Log:
Don't guess file types when copying EXIF, but pass as parameter, and only add 
XMP EXIF to PNG.

Modified: trunk/librawstudio/rs-exif.cc
===================================================================
--- trunk/librawstudio/rs-exif.cc       2010-12-12 19:15:44 UTC (rev 3679)
+++ trunk/librawstudio/rs-exif.cc       2010-12-18 17:42:33 UTC (rev 3680)
@@ -171,7 +171,7 @@
 }
 
 void
-rs_exif_add_to_file(RS_EXIF_DATA *d, Exiv2::IptcData &iptc_data, const gchar 
*filename)
+rs_exif_add_to_file(RS_EXIF_DATA *d, Exiv2::IptcData &iptc_data, const gchar 
*filename, RSExifFileType type)
 {
        if (!d)
                return;
@@ -189,7 +189,8 @@
 #endif
 
                /* Set new metadata on output image and save */
-               image->setExifData(*data);
+               if (type != RS_EXIF_FILE_TYPE_PNG)
+                 image->setExifData(*data);
                image->setIptcData(iptc_data);
                image->writeMetadata();
        }
@@ -275,6 +276,14 @@
 static void 
 rs_add_tags_iptc(Exiv2::IptcData &iptc_data, const gchar *input_filename, 
uint16_t format)
 {
+       /* Add overall tags */
+       iptc_data["Iptc.Envelope.CharacterSet"] = "UTF-8";
+       iptc_data["Iptc.Application2.Program"] = "Rawstudio";
+       iptc_data["Iptc.Application2.ProgramVersion"] = VERSION;
+       iptc_data["Iptc.Envelope.ModelVersion"] = 42;
+       iptc_data["Iptc.Envelope.FileFormat"] = format;
+
+       /* Add tags */
        RSLibrary *lib = rs_library_get_singleton();
        GList *tags = rs_library_photo_tags(lib, input_filename, FALSE);
        if (!tags || g_list_length(tags) == 0)
@@ -288,12 +297,6 @@
                g_free(tags->data);
        } while (tags = tags->next);
        
-       iptc_data["Iptc.Envelope.CharacterSet"] = "UTF-8";
-       iptc_data["Iptc.Application2.Program"] = "Rawstudio";
-       iptc_data["Iptc.Application2.ProgramVersion"] = VERSION;
-       iptc_data["Iptc.Envelope.ModelVersion"] = 42;
-       iptc_data["Iptc.Envelope.FileFormat"] = format;
-
        /* When we some day can access this information, enable this */
 #if 0
 enum {
@@ -325,10 +328,10 @@
 }
 
 gboolean
-rs_exif_copy(const gchar *input_filename, const gchar *output_filename, const 
gchar *color_space)
+rs_exif_copy(const gchar *input_filename, const gchar *output_filename, const 
gchar *color_space, RSExifFileType type)
 {
        /* Exiv2 prior to v0.20.0 cannot add tags to TIFF images without 
corrupting them */
-       if (g_str_has_suffix(output_filename, "tiff") || 
g_str_has_suffix(output_filename, "tif"))
+       if (RS_EXIF_FILE_TYPE_TIFF == type)
                if (Exiv2::versionNumber() < 0x1400)
                        return FALSE;
 
@@ -341,11 +344,11 @@
                        return FALSE;
                rs_add_cs_to_exif(exif, color_space);
                rs_add_tags_exif(exif, input_filename);
-               if (g_str_has_suffix(output_filename, "jpg"))
+               if (RS_EXIF_FILE_TYPE_JPEG == type)
                        rs_add_tags_iptc(iptc_data, input_filename, 11);
-               if (g_str_has_suffix(output_filename, "tiff") || 
g_str_has_suffix(output_filename, "tif"))
+               if (RS_EXIF_FILE_TYPE_TIFF == type)
                        rs_add_tags_iptc(iptc_data, input_filename, 3);
-               rs_exif_add_to_file(exif, iptc_data, output_filename);
+               rs_exif_add_to_file(exif, iptc_data, output_filename, type);
                rs_exif_free(exif);
                return TRUE;
        }

Modified: trunk/librawstudio/rs-exif.h
===================================================================
--- trunk/librawstudio/rs-exif.h        2010-12-12 19:15:44 UTC (rev 3679)
+++ trunk/librawstudio/rs-exif.h        2010-12-18 17:42:33 UTC (rev 3680)
@@ -27,13 +27,20 @@
 #include <glib.h>
 #include <rawstudio.h>
 
+typedef enum {
+       RS_EXIF_FILE_TYPE_UNKNOWN,
+       RS_EXIF_FILE_TYPE_JPEG,
+       RS_EXIF_FILE_TYPE_PNG,
+       RS_EXIF_FILE_TYPE_TIFF
+} RSExifFileType;
+
 typedef void RS_EXIF_DATA;
 typedef void RS_IPTC_DATA;
 
 extern RS_EXIF_DATA *rs_exif_load_from_file(const gchar *);
 extern RS_EXIF_DATA *rs_exif_load_from_rawfile(RAWFILE *rawfile);
 extern void rs_exif_free(RS_EXIF_DATA *d);
-extern gboolean rs_exif_copy(const gchar *input_filename, const gchar 
*output_filename, const gchar *color_space);
+extern gboolean rs_exif_copy(const gchar *input_filename, const gchar 
*output_filename, const gchar *color_space, RSExifFileType type);
 
 #ifdef  __cplusplus
 }

Modified: trunk/plugins/output-jpegfile/output-jpegfile.c
===================================================================
--- trunk/plugins/output-jpegfile/output-jpegfile.c     2010-12-12 19:15:44 UTC 
(rev 3679)
+++ trunk/plugins/output-jpegfile/output-jpegfile.c     2010-12-18 17:42:33 UTC 
(rev 3680)
@@ -278,7 +278,7 @@
 
        gchar *input_filename = NULL;
        rs_filter_get_recursive(filter, "filename", &input_filename, NULL);
-       rs_exif_copy(input_filename, jpegfile->filename, 
G_OBJECT_TYPE_NAME(jpegfile->color_space));
+       rs_exif_copy(input_filename, jpegfile->filename, 
G_OBJECT_TYPE_NAME(jpegfile->color_space), RS_EXIF_FILE_TYPE_JPEG);
        g_free(input_filename);
 
        return(TRUE);

Modified: trunk/plugins/output-pngfile/output-pngfile.c
===================================================================
--- trunk/plugins/output-pngfile/output-pngfile.c       2010-12-12 19:15:44 UTC 
(rev 3679)
+++ trunk/plugins/output-pngfile/output-pngfile.c       2010-12-18 17:42:33 UTC 
(rev 3680)
@@ -260,7 +260,7 @@
 
        gchar *input_filename = NULL;
        rs_filter_get_recursive(filter, "filename", &input_filename, NULL);
-       rs_exif_copy(input_filename, pngfile->filename, 
G_OBJECT_TYPE_NAME(pngfile->color_space));
+       rs_exif_copy(input_filename, pngfile->filename, 
G_OBJECT_TYPE_NAME(pngfile->color_space), RS_EXIF_FILE_TYPE_PNG);
        g_free(input_filename);
 
        return TRUE;

Modified: trunk/plugins/output-tifffile/output-tifffile.c
===================================================================
--- trunk/plugins/output-tifffile/output-tifffile.c     2010-12-12 19:15:44 UTC 
(rev 3679)
+++ trunk/plugins/output-tifffile/output-tifffile.c     2010-12-18 17:42:33 UTC 
(rev 3680)
@@ -277,7 +277,7 @@
        gchar *input_filename = NULL;
        rs_filter_get_recursive(filter, "filename", &input_filename, NULL);
 
-       rs_exif_copy(input_filename, tifffile->filename,  
G_OBJECT_TYPE_NAME(tifffile->color_space));
+       rs_exif_copy(input_filename, tifffile->filename,  
G_OBJECT_TYPE_NAME(tifffile->color_space), RS_EXIF_FILE_TYPE_TIFF);
        g_free(input_filename);
 
        return(TRUE);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to