From f595a30b44e656fa390abb9aba67d0c6768f3369 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Fri, 18 Apr 2008 22:31:58 +0000 Subject: [PATCH] partially fixed reading embedded color profiles with exiv2 --- src/exif.c | 2 +- src/exiv2.cc | 14 +++++++++++++- src/image.c | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/exif.c b/src/exif.c index 223777ef..06c02144 100644 --- a/src/exif.c +++ b/src/exif.c @@ -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) diff --git a/src/exiv2.cc b/src/exiv2.cc index 35729a43..e8b8633e 100644 --- a/src/exiv2.cc +++ b/src/exiv2.cc @@ -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) diff --git a/src/image.c b/src/image.c index bf85ef60..7de54ab1 100644 --- a/src/image.c +++ b/src/image.c @@ -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 { -- 2.20.1