partially fixed reading embedded color profiles with exiv2
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 18 Apr 2008 22:31:58 +0000 (22:31 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Fri, 18 Apr 2008 22:31:58 +0000 (22:31 +0000)
src/exif.c
src/exiv2.cc
src/image.c

index 223777e..06c0214 100644 (file)
@@ -552,7 +552,7 @@ char *exif_item_get_data(ExifItem *item, guint *data_len)
 {
        if (data_len)
                *data_len = item->data_len;
-       return item->data;
+       return g_memdup(item->data, item->data_len);
 }
 
 guint exif_item_get_format_id(ExifItem *item)
index 35729a4..e8b8633 100644 (file)
@@ -316,7 +316,19 @@ guint exif_item_get_elements(ExifItem *item)
 
 char *exif_item_get_data(ExifItem *item, guint *data_len)
 {
-       return NULL;
+       try {
+               if (!item) return 0;
+               Exiv2::Metadatum *md = (Exiv2::Metadatum *)item;
+               if(data_len) *data_len = md->size();
+               char *data = (char *)g_malloc(md->size());
+               long res = md->copy((Exiv2::byte *)data, Exiv2::littleEndian /* should not matter */);
+               g_assert(res == md->size());
+               return data;
+       }
+       catch (Exiv2::AnyError& e) {
+               std::cout << "Caught Exiv2 exception '" << e << "'\n";
+               return NULL;
+       }
 }
 
 char *exif_item_get_description(ExifItem *item)
index bf85ef6..7de54ab 100644 (file)
@@ -403,6 +403,7 @@ static gint image_post_process_color(ImageWindow *imd, gint start_row, ExifData
                cm = color_man_new_embedded(run_in_bg ? imd : NULL, NULL,
                                            data, data_len,
                                            screen_type, screen_file);
+               g_free(data);
                }
        else 
                {