annotate src/exiv2.cc @ 2888:f89d0a76c45b

fix build against exiv2-0.27.x fixes #654
author Rasmus Thomsen <rasmus.thomsen@protonmail.com>
date Wed, 02 Jan 2019 01:04:45 +0100
parents 4b8e42e226da
children f02e6b7c1336
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
475
baa9658ddd9f updated copyright in source files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 452
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
2 * Copyright (C) 2008 - 2016 The Geeqie Team
475
baa9658ddd9f updated copyright in source files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 452
diff changeset
3 *
baa9658ddd9f updated copyright in source files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 452
diff changeset
4 * Author: Vladimir Nadvornik
baa9658ddd9f updated copyright in source files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 452
diff changeset
5 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
6 * This program is free software; you can redistribute it and/or modify
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
7 * it under the terms of the GNU General Public License as published by
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
9 * (at your option) any later version.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
10 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
11 * This program is distributed in the hope that it will be useful,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
14 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
15 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
16 * You should have received a copy of the GNU General Public License along
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
17 * with this program; if not, write to the Free Software Foundation, Inc.,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2271
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
475
baa9658ddd9f updated copyright in source files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 452
diff changeset
19 */
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
20
686
9fda5376ef54 configure.in was rewritten:
Petr Ostadal <postadal@suse.cz>
parents: 677
diff changeset
21 #include "config.h"
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
22
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
23 #ifdef HAVE_EXIV2
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
24
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
25 // Don't include the <exiv2/version.hpp> file directly
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
26 // Early Exiv2 versions didn't have version.hpp and the macros.
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
27 #include <exiv2/exiv2.hpp>
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
28 #include <iostream>
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
29 #include <string>
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
30
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
31 // EXIV2_TEST_VERSION is defined in Exiv2 0.15 and newer.
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
32 #ifdef EXIV2_VERSION
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
33 #ifndef EXIV2_TEST_VERSION
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
34 #define EXIV2_TEST_VERSION(major,minor,patch) \
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
35 ( EXIV2_VERSION >= EXIV2_MAKE_VERSION(major,minor,patch) )
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
36 #endif
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
37 #else
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
38 #define EXIV2_TEST_VERSION(major,minor,patch) (false)
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
39 #endif
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
40
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
41 #if EXIV2_TEST_VERSION(0,27,0)
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
42 #define HAVE_EXIV2_ERROR_CODE
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
43 #endif
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
44
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
45 #include <sys/types.h>
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
46 #include <sys/stat.h>
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
47 #include <unistd.h>
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
48 #include <fcntl.h>
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
49 #include <sys/mman.h>
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
50
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
51 #if EXIV2_TEST_VERSION(0,27,0)
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
52 #define EXV_PACKAGE "exiv2"
1070
444497ef884c simple synchronization XMP <-> Exif, IPTC
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1069
diff changeset
53 #endif
444497ef884c simple synchronization XMP <-> Exif, IPTC
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1069
diff changeset
54
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
55 extern "C" {
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
56 #include <glib.h>
507
7408e89b601d Move debug macros from main.h to new debug.h.
Laurent Monin <geeqie@norz.org>
parents: 506
diff changeset
57
281
b1c2c2cf19d4 gqview.h -> main.h
Laurent Monin <geeqie@norz.org>
parents: 212
diff changeset
58 #include "main.h"
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
59 #include "exif.h"
507
7408e89b601d Move debug macros from main.h to new debug.h.
Laurent Monin <geeqie@norz.org>
parents: 506
diff changeset
60
586
122fc2223b42 split filelist.c to filefilter.c and filedata.c
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 507
diff changeset
61 #include "filefilter.h"
496
62bc323265f7 fixed a bug in opening files with non-utf8 locales in exiv2.cc
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 495
diff changeset
62 #include "ui_fileops.h"
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
63
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
64 #include "misc.h"
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
65 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
66
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
67 typedef struct _AltKey AltKey;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
68
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
69 struct _AltKey
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
70 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
71 const gchar *xmp_key;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
72 const gchar *exif_key;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
73 const gchar *iptc_key;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
74 };
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
75
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
76 /* this is a list of keys that should be converted, even with the older Exiv2 which does not support it directly */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
77 static const AltKey alt_keys[] = {
1460
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
78 {"Xmp.tiff.Orientation", "Exif.Image.Orientation", NULL},
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
79 {"Xmp.dc.title", NULL, "Iptc.Application2.ObjectName" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
80 {"Xmp.photoshop.Urgency", NULL, "Iptc.Application2.Urgency" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
81 {"Xmp.photoshop.Category", NULL, "Iptc.Application2.Category" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
82 {"Xmp.photoshop.SupplementalCategory", NULL, "Iptc.Application2.SuppCategory" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
83 {"Xmp.dc.subject", NULL, "Iptc.Application2.Keywords" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
84 {"Xmp.iptc.Location", NULL, "Iptc.Application2.LocationName" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
85 {"Xmp.photoshop.Instruction", NULL, "Iptc.Application2.SpecialInstructions" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
86 {"Xmp.photoshop.DateCreated", NULL, "Iptc.Application2.DateCreated" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
87 {"Xmp.dc.creator", NULL, "Iptc.Application2.Byline" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
88 {"Xmp.photoshop.AuthorsPosition", NULL, "Iptc.Application2.BylineTitle" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
89 {"Xmp.photoshop.City", NULL, "Iptc.Application2.City" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
90 {"Xmp.photoshop.State", NULL, "Iptc.Application2.ProvinceState" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
91 {"Xmp.iptc.CountryCode", NULL, "Iptc.Application2.CountryCode" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
92 {"Xmp.photoshop.Country", NULL, "Iptc.Application2.CountryName" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
93 {"Xmp.photoshop.TransmissionReference", NULL, "Iptc.Application2.TransmissionReference"},
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
94 {"Xmp.photoshop.Headline", NULL, "Iptc.Application2.Headline" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
95 {"Xmp.photoshop.Credit", NULL, "Iptc.Application2.Credit" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
96 {"Xmp.photoshop.Source", NULL, "Iptc.Application2.Source" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
97 {"Xmp.dc.rights", NULL, "Iptc.Application2.Copyright" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
98 {"Xmp.dc.description", NULL, "Iptc.Application2.Caption" },
72fc7965db76 added more IPTC tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1442
diff changeset
99 {"Xmp.photoshop.CaptionWriter", NULL, "Iptc.Application2.Writer" },
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
100 {NULL, NULL, NULL}
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
101 };
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
102
2227
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
103 static void _debug_exception(const char* file,
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
104 int line,
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
105 const char* func,
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
106 Exiv2::AnyError& e)
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
107 {
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
108 gchar *str = g_locale_from_utf8(e.what(), -1, NULL, NULL, NULL);
2227
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
109 DEBUG_1("%s:%d:%s:Exiv2: %s", file, line, func, str);
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
110 g_free(str);
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
111 }
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
112
2227
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
113 #define debug_exception(e) _debug_exception(__FILE__, __LINE__, __func__, e)
44a42a639ef5 Annotate debug_exception() with source file, line, and function.
Emil Mikulic <emikulic@gmail.com>
parents: 2021
diff changeset
114
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
115 struct _ExifData
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
116 {
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
117 Exiv2::ExifData::const_iterator exifIter; /* for exif_get_next_item */
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
118 Exiv2::IptcData::const_iterator iptcIter; /* for exif_get_next_item */
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
119 #if EXIV2_TEST_VERSION(0,16,0)
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
120 Exiv2::XmpData::const_iterator xmpIter; /* for exif_get_next_item */
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
121 #endif
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
122
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
123 virtual ~_ExifData()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
124 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
125 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
126
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
127 virtual void writeMetadata(gchar *path = NULL)
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
128 {
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
129 g_critical("Unsupported method of writing metadata");
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
130 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
131
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
132 virtual ExifData *original()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
133 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
134 return NULL;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
135 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
136
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
137 virtual Exiv2::Image *image() = 0;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
138
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
139 virtual Exiv2::ExifData &exifData() = 0;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
140
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
141 virtual Exiv2::IptcData &iptcData() = 0;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
142
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
143 #if EXIV2_TEST_VERSION(0,16,0)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
144 virtual Exiv2::XmpData &xmpData() = 0;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
145 #endif
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
146
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
147 virtual void add_jpeg_color_profile(unsigned char *cp_data, guint cp_length) = 0;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
148
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
149 virtual guchar *get_jpeg_color_profile(guint *data_len) = 0;
2490
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
150
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
151 virtual std::string image_comment() const = 0;
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
152
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
153 virtual void set_image_comment(const std::string& comment) = 0;
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
154 };
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
155
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
156 // This allows read-only access to the original metadata
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
157 struct _ExifDataOriginal : public _ExifData
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
158 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
159 protected:
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
160 Exiv2::Image::AutoPtr image_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
161
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
162 /* the icc profile in jpeg is not technically exif - store it here */
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
163 unsigned char *cp_data_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
164 guint cp_length_;
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
165 gboolean valid_;
2271
60ed39a3a285 exiv2: Fix use-after-free of the image filename/path.
Solomon Peachy <pizza@shaftnet.org>
parents: 2270
diff changeset
166 gchar *pathl_;
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
167
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
168 Exiv2::ExifData emptyExifData_;
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
169 Exiv2::IptcData emptyIptcData_;
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
170 #if EXIV2_TEST_VERSION(0,16,0)
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
171 Exiv2::XmpData emptyXmpData_;
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
172 #endif
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
173
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
174 public:
1071
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
175 _ExifDataOriginal(Exiv2::Image::AutoPtr image)
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
176 {
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
177 cp_data_ = NULL;
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
178 cp_length_ = 0;
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
179 image_ = image;
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
180 valid_ = TRUE;
1071
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
181 }
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
182
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
183 _ExifDataOriginal(gchar *path)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
184 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
185 cp_data_ = NULL;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
186 cp_length_ = 0;
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
187 valid_ = TRUE;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
188
2271
60ed39a3a285 exiv2: Fix use-after-free of the image filename/path.
Solomon Peachy <pizza@shaftnet.org>
parents: 2270
diff changeset
189 pathl_ = path_from_utf8(path);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
190 try
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
191 {
2271
60ed39a3a285 exiv2: Fix use-after-free of the image filename/path.
Solomon Peachy <pizza@shaftnet.org>
parents: 2270
diff changeset
192 image_ = Exiv2::ImageFactory::open(pathl_);
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
193 // g_assert (image.get() != 0);
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
194 image_->readMetadata();
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
195
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
196 #if EXIV2_TEST_VERSION(0,16,0)
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
197 if (image_->mimeType() == "application/rdf+xml")
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
198 {
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
199 //Exiv2 sidecar converts xmp to exif and iptc, we don't want it.
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
200 image_->clearExifData();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
201 image_->clearIptcData();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
202 }
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
203 #endif
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
204
452
b8c52459e28d fixed color profile code for older versions of exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 449
diff changeset
205 #if EXIV2_TEST_VERSION(0,14,0)
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
206 if (image_->mimeType() == "image/jpeg")
1196
b2b70d4542e6 handle the case when io.open() fails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1072
diff changeset
207 {
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
208 /* try to get jpeg color profile */
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
209 Exiv2::BasicIo &io = image_->io();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
210 gint open = io.isopen();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
211 if (!open) io.open();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
212 if (io.isopen())
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
213 {
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
214 unsigned char *mapped = (unsigned char*)io.mmap();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
215 if (mapped) exif_jpeg_parse_color(this, mapped, io.size());
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
216 io.munmap();
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
217 }
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
218 if (!open) io.close();
1196
b2b70d4542e6 handle the case when io.open() fails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1072
diff changeset
219 }
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
220 #endif
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
221 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
222 catch (Exiv2::AnyError& e)
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
223 {
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
224 valid_ = FALSE;
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
225 }
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
226 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
227
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
228 virtual ~_ExifDataOriginal()
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
229 {
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
230 if (cp_data_) g_free(cp_data_);
2271
60ed39a3a285 exiv2: Fix use-after-free of the image filename/path.
Solomon Peachy <pizza@shaftnet.org>
parents: 2270
diff changeset
231 if (pathl_) g_free(pathl_);
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
232 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
233
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
234 virtual Exiv2::Image *image()
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
235 {
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
236 if (!valid_) return NULL;
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
237 return image_.get();
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
238 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
239
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
240 virtual Exiv2::ExifData &exifData ()
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
241 {
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
242 if (!valid_) return emptyExifData_;
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
243 return image_->exifData();
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
244 }
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
245
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
246 virtual Exiv2::IptcData &iptcData ()
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
247 {
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
248 if (!valid_) return emptyIptcData_;
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
249 return image_->iptcData();
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
250 }
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
251
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
252 #if EXIV2_TEST_VERSION(0,16,0)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
253 virtual Exiv2::XmpData &xmpData ()
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
254 {
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
255 if (!valid_) return emptyXmpData_;
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
256 return image_->xmpData();
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
257 }
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
258 #endif
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
259
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
260 virtual void add_jpeg_color_profile(unsigned char *cp_data, guint cp_length)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
261 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
262 if (cp_data_) g_free(cp_data_);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
263 cp_data_ = cp_data;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
264 cp_length_ = cp_length;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
265 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
266
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
267 virtual guchar *get_jpeg_color_profile(guint *data_len)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
268 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
269 if (cp_data_)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
270 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
271 if (data_len) *data_len = cp_length_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
272 return (unsigned char *) g_memdup(cp_data_, cp_length_);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
273 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
274 return NULL;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
275 }
2490
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
276
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
277 virtual std::string image_comment() const
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
278 {
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
279 return image_.get() ? image_->comment() : "";
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
280 }
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
281
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
282 virtual void set_image_comment(const std::string& comment)
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
283 {
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
284 if (image_.get())
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
285 image_->setComment(comment);
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
286 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
287 };
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
288
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
289 extern "C" {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
290 static void _ExifDataProcessed_update_xmp(gpointer key, gpointer value, gpointer data);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
291 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
292
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
293 // This allows read-write access to the metadata
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
294 struct _ExifDataProcessed : public _ExifData
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
295 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
296 protected:
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
297 _ExifDataOriginal *imageData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
298 _ExifDataOriginal *sidecarData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
299
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
300 Exiv2::ExifData exifData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
301 Exiv2::IptcData iptcData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
302 #if EXIV2_TEST_VERSION(0,16,0)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
303 Exiv2::XmpData xmpData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
304 #endif
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
305
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
306 public:
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
307 _ExifDataProcessed(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
308 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
309 imageData_ = new _ExifDataOriginal(path);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
310 sidecarData_ = NULL;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
311 #if EXIV2_TEST_VERSION(0,16,0)
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
312 if (sidecar_path)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
313 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
314 sidecarData_ = new _ExifDataOriginal(sidecar_path);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
315 xmpData_ = sidecarData_->xmpData();
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
316 }
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
317 else
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
318 {
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
319 xmpData_ = imageData_->xmpData();
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
320 }
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
321
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
322 #endif
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
323 exifData_ = imageData_->exifData();
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
324 iptcData_ = imageData_->iptcData();
1070
444497ef884c simple synchronization XMP <-> Exif, IPTC
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1069
diff changeset
325 #if EXIV2_TEST_VERSION(0,17,0)
1716
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
326 try
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
327 {
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
328 syncExifWithXmp(exifData_, xmpData_);
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
329 }
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
330 catch (...)
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
331 {
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
332 DEBUG_1("Exiv2: Catching bug\n");
8c07a0ef191f Fixing libexiv2 bug
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1572
diff changeset
333 }
1070
444497ef884c simple synchronization XMP <-> Exif, IPTC
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1069
diff changeset
334 #endif
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
335 if (modified_xmp)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
336 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
337 g_hash_table_foreach(modified_xmp, _ExifDataProcessed_update_xmp, this);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
338 }
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
339 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
340
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
341 virtual ~_ExifDataProcessed()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
342 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
343 if (imageData_) delete imageData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
344 if (sidecarData_) delete sidecarData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
345 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
346
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
347 virtual ExifData *original()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
348 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
349 return imageData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
350 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
351
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
352 virtual void writeMetadata(gchar *path = NULL)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
353 {
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
354 if (!path)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
355 {
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
356 #if EXIV2_TEST_VERSION(0,17,0)
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
357 if (options->metadata.save_legacy_IPTC)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
358 copyXmpToIptc(xmpData_, iptcData_);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
359 else
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
360 iptcData_.clear();
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
361
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
362 copyXmpToExif(xmpData_, exifData_);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
363 #endif
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
364 Exiv2::Image *image = imageData_->image();
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
365
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
366 #ifdef HAVE_EXIV2_ERROR_CODE
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
367 if (!image) throw Exiv2::Error(Exiv2::ErrorCode::kerInputDataReadFailed);
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
368 #else
2748
4b8e42e226da Fix #605: Crash when writing metadata to .svg files
Colin Clark <colin.clark@cclark.uk>
parents: 2490
diff changeset
369 if (!image) throw Exiv2::Error(21);
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
370 #endif
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
371 image->setExifData(exifData_);
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
372 image->setIptcData(iptcData_);
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
373 #if EXIV2_TEST_VERSION(0,16,0)
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
374 image->setXmpData(xmpData_);
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
375 #endif
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
376 image->writeMetadata();
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
377 }
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
378 else
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
379 {
1071
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
380 #if EXIV2_TEST_VERSION(0,17,0)
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
381 gchar *pathl = path_from_utf8(path);;
1071
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
382
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
383 Exiv2::Image::AutoPtr sidecar = Exiv2::ImageFactory::create(Exiv2::ImageType::xmp, pathl);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
384
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
385 g_free(pathl);
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
386
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
387 sidecar->setXmpData(xmpData_);
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
388 sidecar->writeMetadata();
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
389 #else
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
390 #ifdef HAVE_EXIV2_ERROR_CODE
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
391 throw Exiv2::Error(Exiv2::ErrorCode::kerNotAnImage, "xmp");
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
392 #else
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
393 throw Exiv2::Error(3, "xmp");
1071
c800c735860c create xmp sidecar when needed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1070
diff changeset
394 #endif
2888
f89d0a76c45b fix build against exiv2-0.27.x
Rasmus Thomsen <rasmus.thomsen@protonmail.com>
parents: 2748
diff changeset
395 #endif
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
396 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
397 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
398
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
399 virtual Exiv2::Image *image()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
400 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
401 return imageData_->image();
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
402 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
403
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
404 virtual Exiv2::ExifData &exifData ()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
405 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
406 return exifData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
407 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
408
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
409 virtual Exiv2::IptcData &iptcData ()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
410 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
411 return iptcData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
412 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
413
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
414 #if EXIV2_TEST_VERSION(0,16,0)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
415 virtual Exiv2::XmpData &xmpData ()
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
416 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
417 return xmpData_;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
418 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
419 #endif
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
420
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
421 virtual void add_jpeg_color_profile(unsigned char *cp_data, guint cp_length)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
422 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
423 imageData_->add_jpeg_color_profile(cp_data, cp_length);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
424 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
425
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
426 virtual guchar *get_jpeg_color_profile(guint *data_len)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
427 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
428 return imageData_->get_jpeg_color_profile(data_len);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
429 }
2490
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
430
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
431 virtual std::string image_comment() const
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
432 {
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
433 return imageData_->image_comment();
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
434 }
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
435
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
436 virtual void set_image_comment(const std::string& comment)
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
437 {
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
438 imageData_->set_image_comment(comment);
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
439 }
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
440 };
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
441
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
442
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
443
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
444
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
445 extern "C" {
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
446
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
447
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
448 void exif_init(void)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
449 {
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
450 #ifdef EXV_ENABLE_NLS
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
451 bind_textdomain_codeset (EXV_PACKAGE, "UTF-8");
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
452 #endif
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
453 }
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
454
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
455
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
456
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
457 static void _ExifDataProcessed_update_xmp(gpointer key, gpointer value, gpointer data)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
458 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
459 exif_update_metadata((ExifData *)data, (gchar *)key, (GList *)value);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
460 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
461
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
462 ExifData *exif_read(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
463 {
506
03d66738b225 Handle the newline in DEBUG_N() macro instead of adding one
Laurent Monin <geeqie@norz.org>
parents: 496
diff changeset
464 DEBUG_1("exif read %s, sidecar: %s", path, sidecar_path ? sidecar_path : "-");
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
465 try {
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
466 return new _ExifDataProcessed(path, sidecar_path, modified_xmp);
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
467 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
468 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
469 debug_exception(e);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
470 return NULL;
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
471 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
472
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
473 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
474
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
475 gboolean exif_write(ExifData *exif)
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
476 {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
477 try {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
478 exif->writeMetadata();
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
479 return TRUE;
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
480 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
481 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
482 debug_exception(e);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
483 return FALSE;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
484 }
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
485 }
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
486
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
487 gboolean exif_write_sidecar(ExifData *exif, gchar *path)
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
488 {
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
489 try {
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
490 exif->writeMetadata(path);
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
491 return TRUE;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
492 }
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
493 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
494 debug_exception(e);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1207
diff changeset
495 return FALSE;
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
496 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
497
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
498 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
499
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
500
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
501 void exif_free(ExifData *exif)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
502 {
1072
32bc867436d2 fixed failed assertion in exif_free
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1071
diff changeset
503 if (!exif) return;
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
504 g_assert(dynamic_cast<_ExifDataProcessed *>(exif)); // this should not be called on ExifDataOriginal
182
36dcfeeeb181 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 180
diff changeset
505 delete exif;
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
506 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
507
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
508 ExifData *exif_get_original(ExifData *exif)
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
509 {
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
510 return exif->original();
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
511 }
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
512
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
513
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
514 ExifItem *exif_get_item(ExifData *exif, const gchar *key)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
515 {
183
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
516 try {
452
b8c52459e28d fixed color profile code for older versions of exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 449
diff changeset
517 Exiv2::Metadatum *item = NULL;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
518 try {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
519 Exiv2::ExifKey ekey(key);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
520 Exiv2::ExifData::iterator pos = exif->exifData().findKey(ekey);
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
521 if (pos == exif->exifData().end()) return NULL;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
522 item = &*pos;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
523 }
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
524 catch (Exiv2::AnyError& e) {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
525 try {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
526 Exiv2::IptcKey ekey(key);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
527 Exiv2::IptcData::iterator pos = exif->iptcData().findKey(ekey);
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
528 if (pos == exif->iptcData().end()) return NULL;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
529 item = &*pos;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
530 }
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
531 catch (Exiv2::AnyError& e) {
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
532 #if EXIV2_TEST_VERSION(0,16,0)
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
533 Exiv2::XmpKey ekey(key);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
534 Exiv2::XmpData::iterator pos = exif->xmpData().findKey(ekey);
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
535 if (pos == exif->xmpData().end()) return NULL;
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
536 item = &*pos;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
537 #endif
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
538 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
539 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
540 return (ExifItem *)item;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
541 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
542 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
543 debug_exception(e);
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
544 return NULL;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
545 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
546 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
547
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
548 ExifItem *exif_add_item(ExifData *exif, const gchar *key)
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
549 {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
550 try {
452
b8c52459e28d fixed color profile code for older versions of exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 449
diff changeset
551 Exiv2::Metadatum *item = NULL;
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
552 try {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
553 Exiv2::ExifKey ekey(key);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
554 exif->exifData().add(ekey, NULL);
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
555 Exiv2::ExifData::iterator pos = exif->exifData().end(); // a hack, there should be a better way to get the currently added item
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
556 pos--;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
557 item = &*pos;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
558 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
559 catch (Exiv2::AnyError& e) {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
560 try {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
561 Exiv2::IptcKey ekey(key);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
562 exif->iptcData().add(ekey, NULL);
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
563 Exiv2::IptcData::iterator pos = exif->iptcData().end();
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
564 pos--;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
565 item = &*pos;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
566 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
567 catch (Exiv2::AnyError& e) {
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
568 #if EXIV2_TEST_VERSION(0,16,0)
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
569 Exiv2::XmpKey ekey(key);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
570 exif->xmpData().add(ekey, NULL);
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
571 Exiv2::XmpData::iterator pos = exif->xmpData().end();
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
572 pos--;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
573 item = &*pos;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
574 #endif
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
575 }
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
576 }
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
577 return (ExifItem *)item;
183
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
578 }
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
579 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
580 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
581 return NULL;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
582 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
583 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
584
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
585
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
586 ExifItem *exif_get_first_item(ExifData *exif)
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
587 {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
588 try {
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
589 exif->exifIter = exif->exifData().begin();
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
590 exif->iptcIter = exif->iptcData().begin();
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
591 #if EXIV2_TEST_VERSION(0,16,0)
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
592 exif->xmpIter = exif->xmpData().begin();
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
593 #endif
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
594 if (exif->exifIter != exif->exifData().end())
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
595 {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
596 const Exiv2::Metadatum *item = &*exif->exifIter;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
597 exif->exifIter++;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
598 return (ExifItem *)item;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
599 }
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
600 if (exif->iptcIter != exif->iptcData().end())
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
601 {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
602 const Exiv2::Metadatum *item = &*exif->iptcIter;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
603 exif->iptcIter++;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
604 return (ExifItem *)item;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
605 }
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
606 #if EXIV2_TEST_VERSION(0,16,0)
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
607 if (exif->xmpIter != exif->xmpData().end())
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
608 {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
609 const Exiv2::Metadatum *item = &*exif->xmpIter;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
610 exif->xmpIter++;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
611 return (ExifItem *)item;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
612 }
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
613 #endif
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
614 return NULL;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
615
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
616 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
617 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
618 debug_exception(e);
183
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
619 return NULL;
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
620 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
621 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
622
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
623 ExifItem *exif_get_next_item(ExifData *exif)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
624 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
625 try {
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
626 if (exif->exifIter != exif->exifData().end())
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
627 {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
628 const Exiv2::Metadatum *item = &*exif->exifIter;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
629 exif->exifIter++;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
630 return (ExifItem *)item;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
631 }
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
632 if (exif->iptcIter != exif->iptcData().end())
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
633 {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
634 const Exiv2::Metadatum *item = &*exif->iptcIter;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
635 exif->iptcIter++;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
636 return (ExifItem *)item;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
637 }
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
638 #if EXIV2_TEST_VERSION(0,16,0)
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
639 if (exif->xmpIter != exif->xmpData().end())
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
640 {
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
641 const Exiv2::Metadatum *item = &*exif->xmpIter;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
642 exif->xmpIter++;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
643 return (ExifItem *)item;
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
644 }
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
645 #endif
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
646 return NULL;
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
647 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
648 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
649 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
650 return NULL;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
651 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
652 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
653
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
654 char *exif_item_get_tag_name(ExifItem *item)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
655 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
656 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
657 if (!item) return NULL;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
658 return g_strdup(((Exiv2::Metadatum *)item)->key().c_str());
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
659 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
660 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
661 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
662 return NULL;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
663 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
664 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
665
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
666 guint exif_item_get_tag_id(ExifItem *item)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
667 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
668 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
669 if (!item) return 0;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
670 return ((Exiv2::Metadatum *)item)->tag();
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
671 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
672 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
673 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
674 return 0;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
675 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
676 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
677
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
678 guint exif_item_get_elements(ExifItem *item)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
679 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
680 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
681 if (!item) return 0;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
682 return ((Exiv2::Metadatum *)item)->count();
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
683 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
684 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
685 debug_exception(e);
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
686 return 0;
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
687 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
688 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
689
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
690 char *exif_item_get_data(ExifItem *item, guint *data_len)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
691 {
414
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
692 try {
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
693 if (!item) return 0;
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
694 Exiv2::Metadatum *md = (Exiv2::Metadatum *)item;
855
b57fd0bfedd9 Tidy up.
Laurent Monin <geeqie@norz.org>
parents: 686
diff changeset
695 if (data_len) *data_len = md->size();
414
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
696 char *data = (char *)g_malloc(md->size());
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
697 long res = md->copy((Exiv2::byte *)data, Exiv2::littleEndian /* should not matter */);
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
698 g_assert(res == md->size());
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
699 return data;
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
700 }
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
701 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
702 debug_exception(e);
414
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
703 return NULL;
86be55ff73c1 partially fixed reading embedded color profiles with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 304
diff changeset
704 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
705 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
706
182
36dcfeeeb181 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 180
diff changeset
707 char *exif_item_get_description(ExifItem *item)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
708 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
709 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
710 if (!item) return NULL;
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
711 return utf8_validate_or_convert(((Exiv2::Metadatum *)item)->tagLabel().c_str());
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
712 }
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
713 catch (std::exception& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
714 // debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
715 return NULL;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
716 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
717 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
718
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
719 /*
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
720 invalidTypeId, unsignedByte, asciiString, unsignedShort,
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
721 unsignedLong, unsignedRational, signedByte, undefined,
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
722 signedShort, signedLong, signedRational, string,
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
723 date, time, comment, directory,
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
724 xmpText, xmpAlt, xmpBag, xmpSeq,
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
725 langAlt, lastTypeId
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
726 */
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
727
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
728 static guint format_id_trans_tbl [] = {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
729 EXIF_FORMAT_UNKNOWN,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
730 EXIF_FORMAT_BYTE_UNSIGNED,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
731 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
732 EXIF_FORMAT_SHORT_UNSIGNED,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
733 EXIF_FORMAT_LONG_UNSIGNED,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
734 EXIF_FORMAT_RATIONAL_UNSIGNED,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
735 EXIF_FORMAT_BYTE,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
736 EXIF_FORMAT_UNDEFINED,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
737 EXIF_FORMAT_SHORT,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
738 EXIF_FORMAT_LONG,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
739 EXIF_FORMAT_RATIONAL,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
740 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
741 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
742 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
743 EXIF_FORMAT_UNDEFINED,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
744 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
745 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
746 EXIF_FORMAT_STRING,
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
747 EXIF_FORMAT_STRING
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
748 };
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
749
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
750
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
751
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
752 guint exif_item_get_format_id(ExifItem *item)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
753 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
754 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
755 if (!item) return EXIF_FORMAT_UNKNOWN;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
756 guint id = ((Exiv2::Metadatum *)item)->typeId();
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
757 if (id >= (sizeof(format_id_trans_tbl) / sizeof(format_id_trans_tbl[0])) ) return EXIF_FORMAT_UNKNOWN;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
758 return format_id_trans_tbl[id];
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
759 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
760 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
761 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
762 return EXIF_FORMAT_UNKNOWN;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
763 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
764 }
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
765
1422
bbdc6fe7f1b8 gint -> gboolean and tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
766 const char *exif_item_get_format_name(ExifItem *item, gboolean brief)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
767 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
768 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
769 if (!item) return NULL;
185
2e05a1c088b3 read also iptc and xmp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 184
diff changeset
770 return ((Exiv2::Metadatum *)item)->typeName();
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
771 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
772 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
773 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
774 return NULL;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
775 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
776 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
777
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
778
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
779 gchar *exif_item_get_data_as_text(ExifItem *item)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
780 {
183
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
781 try {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
782 if (!item) return NULL;
676
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
783 Exiv2::Metadatum *metadatum = (Exiv2::Metadatum *)item;
677
c0f5236ea7df fixed exiv2 version test
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 676
diff changeset
784 #if EXIV2_TEST_VERSION(0,17,0)
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
785 return utf8_validate_or_convert(metadatum->print().c_str());
676
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
786 #else
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
787 std::stringstream str;
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
788 Exiv2::Exifdatum *exifdatum;
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
789 Exiv2::Iptcdatum *iptcdatum;
686
9fda5376ef54 configure.in was rewritten:
Petr Ostadal <postadal@suse.cz>
parents: 677
diff changeset
790 #if EXIV2_TEST_VERSION(0,16,0)
676
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
791 Exiv2::Xmpdatum *xmpdatum;
686
9fda5376ef54 configure.in was rewritten:
Petr Ostadal <postadal@suse.cz>
parents: 677
diff changeset
792 #endif
855
b57fd0bfedd9 Tidy up.
Laurent Monin <geeqie@norz.org>
parents: 686
diff changeset
793 if ((exifdatum = dynamic_cast<Exiv2::Exifdatum *>(metadatum)))
676
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
794 str << *exifdatum;
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
795 else if ((iptcdatum = dynamic_cast<Exiv2::Iptcdatum *>(metadatum)))
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
796 str << *iptcdatum;
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
797 #if EXIV2_TEST_VERSION(0,16,0)
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
798 else if ((xmpdatum = dynamic_cast<Exiv2::Xmpdatum *>(metadatum)))
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
799 str << *xmpdatum;
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
800 #endif
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
801
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
802 return utf8_validate_or_convert(str.str().c_str());
676
ef134dfaa095 get processed values from exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
803 #endif
183
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
804 }
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
805 catch (Exiv2::AnyError& e) {
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
806 return NULL;
6506c966b8b4 more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 182
diff changeset
807 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
808 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
809
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
810 gchar *exif_item_get_string(ExifItem *item, int idx)
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
811 {
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
812 try {
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
813 if (!item) return NULL;
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
814 Exiv2::Metadatum *em = (Exiv2::Metadatum *)item;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
815 #if EXIV2_TEST_VERSION(0,16,0)
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
816 std::string str = em->toString(idx);
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
817 #else
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
818 std::string str = em->toString(); // FIXME
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
819 #endif
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
820 if (idx == 0 && str == "") str = em->toString();
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
821 if (str.length() > 5 && str.substr(0, 5) == "lang=")
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
822 {
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
823 std::string::size_type pos = str.find_first_of(' ');
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
824 if (pos != std::string::npos) str = str.substr(pos+1);
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
825 }
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
826
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
827 return utf8_validate_or_convert(str.c_str());
188
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
828 }
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
829 catch (Exiv2::AnyError& e) {
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
830 return NULL;
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
831 }
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
832 }
3577ab0e5e8b write comment and keywords to xmp, sidecars are used if exist
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 187
diff changeset
833
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
834
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
835 gint exif_item_get_integer(ExifItem *item, gint *value)
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
836 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
837 try {
1718
5183a050a218 fixed possible crash in exif_item_get_integer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1716
diff changeset
838 if (!item || exif_item_get_elements(item) == 0) return 0;
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
839 *value = ((Exiv2::Metadatum *)item)->toLong();
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
840 return 1;
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
841 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
842 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
843 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
844 return 0;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
845 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
846 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
847
1058
4b6d0e465eff Fix up few signed vs unsigned warnings: exif_item_get_rational() last parameter is now of guint type.
Laurent Monin <geeqie@norz.org>
parents: 1055
diff changeset
848 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
849 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
850 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
851 if (!item) return NULL;
1052
05910ddeb395 Add support for GPSInfo - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1048
diff changeset
852 if (n >= exif_item_get_elements(item)) return NULL;
05910ddeb395 Add support for GPSInfo - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1048
diff changeset
853 Exiv2::Rational v = ((Exiv2::Metadatum *)item)->toRational(n);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
854 static ExifRational ret;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
855 ret.num = v.first;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
856 ret.den = v.second;
485
f0b4810b353c fixed reading of signed rational type with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 475
diff changeset
857 if (sign) *sign = (((Exiv2::Metadatum *)item)->typeId() == Exiv2::signedRational);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
858 return &ret;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
859 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
860 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
861 debug_exception(e);
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
862 return NULL;
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
863 }
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
864 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
865
1053
d213ef1fc608 fixed charset of exiv2 strings in non-utf8 locales
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1052
diff changeset
866 gchar *exif_get_tag_description_by_key(const gchar *key)
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
867 {
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
868 try {
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
869 Exiv2::ExifKey ekey(key);
1442
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
870 return utf8_validate_or_convert(ekey.tagLabel().c_str());
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
871 }
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
872 catch (Exiv2::AnyError& e) {
1442
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
873 try {
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
874 Exiv2::IptcKey ikey(key);
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
875 return utf8_validate_or_convert(ikey.tagLabel().c_str());
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
876 }
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
877 catch (Exiv2::AnyError& e) {
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
878 try {
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
879 #if EXIV2_TEST_VERSION(0,16,0)
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
880 Exiv2::XmpKey xkey(key);
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
881 return utf8_validate_or_convert(xkey.tagLabel().c_str());
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
882 #endif
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
883 }
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
884 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
885 debug_exception(e);
1442
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
886 return NULL;
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
887 }
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
888 }
184
bc02b8b3411f more exiv2 fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 183
diff changeset
889 }
1442
d1510b575e96 fixed XMP and IPTC entry names in exif pane
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1426
diff changeset
890 return NULL;
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
891 }
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
892
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
893 static const AltKey *find_alt_key(const gchar *xmp_key)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
894 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
895 gint i = 0;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
896
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
897 while (alt_keys[i].xmp_key)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
898 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
899 if (strcmp(xmp_key, alt_keys[i].xmp_key) == 0) return &alt_keys[i];
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
900 i++;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
901 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
902 return NULL;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
903 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
904
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
905 static gint exif_update_metadata_simple(ExifData *exif, const gchar *key, const GList *values)
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
906 {
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
907 try {
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
908 const GList *work = values;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
909
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
910 try {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
911 Exiv2::ExifKey ekey(key);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
912
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
913 Exiv2::ExifData::iterator pos = exif->exifData().findKey(ekey);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
914 while (pos != exif->exifData().end())
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
915 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
916 exif->exifData().erase(pos);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
917 pos = exif->exifData().findKey(ekey);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
918 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
919
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
920 while (work)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
921 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
922 exif->exifData()[key] = (gchar *)work->data;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
923 work = work->next;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
924 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
925 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
926 catch (Exiv2::AnyError& e) {
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
927 #if EXIV2_TEST_VERSION(0,16,0)
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
928 try
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
929 #endif
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
930 {
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
931 Exiv2::IptcKey ekey(key);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
932 Exiv2::IptcData::iterator pos = exif->iptcData().findKey(ekey);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
933 while (pos != exif->iptcData().end())
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
934 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
935 exif->iptcData().erase(pos);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
936 pos = exif->iptcData().findKey(ekey);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
937 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
938
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
939 while (work)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
940 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
941 exif->iptcData()[key] = (gchar *)work->data;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
942 work = work->next;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
943 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
944 }
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
945 #if EXIV2_TEST_VERSION(0,16,0)
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
946 catch (Exiv2::AnyError& e) {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
947 Exiv2::XmpKey ekey(key);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
948 Exiv2::XmpData::iterator pos = exif->xmpData().findKey(ekey);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
949 while (pos != exif->xmpData().end())
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
950 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
951 exif->xmpData().erase(pos);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
952 pos = exif->xmpData().findKey(ekey);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
953 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
954
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
955 while (work)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
956 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
957 exif->xmpData()[key] = (gchar *)work->data;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
958 work = work->next;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
959 }
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
960 }
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
961 #endif
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
962 }
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
963 return 1;
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1196
diff changeset
964 }
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
965 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
966 debug_exception(e);
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
967 return 0;
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
968 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
969 }
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
970
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
971 gint exif_update_metadata(ExifData *exif, const gchar *key, const GList *values)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
972 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
973 gint ret = exif_update_metadata_simple(exif, key, values);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
974
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
975 if (
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
976 #if !EXIV2_TEST_VERSION(0,17,0)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
977 TRUE || /* no conversion support */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
978 #endif
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
979 !values || /* deleting item */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
980 !ret /* writing to the explicitely given xmp tag failed */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
981 )
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
982 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
983 /* deleted xmp metadatum can't be converted, we have to delete also the corresponding legacy tag */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
984 /* if we can't write xmp, update at least the legacy tag */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
985 const AltKey *alt_key = find_alt_key(key);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
986 if (alt_key && alt_key->iptc_key)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
987 ret = exif_update_metadata_simple(exif, alt_key->iptc_key, values);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
988
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
989 if (alt_key && alt_key->exif_key)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
990 ret = exif_update_metadata_simple(exif, alt_key->exif_key, values);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
991 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
992 return ret;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
993 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
994
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
995
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
996 static GList *exif_add_value_to_glist(GList *list, Exiv2::Metadatum &item, MetadataFormat format, const Exiv2::ExifData *metadata)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
997 {
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
998 #if EXIV2_TEST_VERSION(0,16,0)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
999 Exiv2::TypeId id = item.typeId();
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1000 if (format == METADATA_FORMATTED ||
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1001 id == Exiv2::asciiString ||
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1002 id == Exiv2::undefined ||
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1003 id == Exiv2::string ||
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1004 id == Exiv2::date ||
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1005 id == Exiv2::time ||
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1006 id == Exiv2::xmpText ||
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1007 id == Exiv2::langAlt ||
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1008 id == Exiv2::comment
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1009 )
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1010 {
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1011 #endif
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1012 /* read as a single entry */
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1013 std::string str;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1014
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1015 if (format == METADATA_FORMATTED)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1016 {
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1017 #if EXIV2_TEST_VERSION(0,17,0)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1018 str = item.print(
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1019 #if EXIV2_TEST_VERSION(0,18,0)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1020 metadata
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1021 #endif
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1022 );
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1023 #else
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1024 std::stringstream stream;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1025 Exiv2::Exifdatum *exifdatum;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1026 Exiv2::Iptcdatum *iptcdatum;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1027 #if EXIV2_TEST_VERSION(0,16,0)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1028 Exiv2::Xmpdatum *xmpdatum;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1029 #endif
1572
28a6e6f6f8d1 compilation fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1528
diff changeset
1030 if ((exifdatum = dynamic_cast<Exiv2::Exifdatum *>(&item)))
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1031 stream << *exifdatum;
1572
28a6e6f6f8d1 compilation fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1528
diff changeset
1032 else if ((iptcdatum = dynamic_cast<Exiv2::Iptcdatum *>(&item)))
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1033 stream << *iptcdatum;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1034 #if EXIV2_TEST_VERSION(0,16,0)
1572
28a6e6f6f8d1 compilation fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1528
diff changeset
1035 else if ((xmpdatum = dynamic_cast<Exiv2::Xmpdatum *>(&item)))
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1036 stream << *xmpdatum;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1037 #endif
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1038 str = stream.str();
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1039 #endif
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1040 if (str.length() > 1024)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1041 {
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1042 /* truncate very long strings, they cause problems in gui */
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1043 str.erase(1024);
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1044 str.append("...");
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1045 }
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1046 }
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1047 else
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1048 {
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1049 str = item.toString();
1748
ef4988b2c1f3 strip the "lang=" prefix from exiv2 in all metadata formats
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1718
diff changeset
1050 }
ef4988b2c1f3 strip the "lang=" prefix from exiv2 in all metadata formats
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1718
diff changeset
1051 if (str.length() > 5 && str.substr(0, 5) == "lang=")
ef4988b2c1f3 strip the "lang=" prefix from exiv2 in all metadata formats
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1718
diff changeset
1052 {
ef4988b2c1f3 strip the "lang=" prefix from exiv2 in all metadata formats
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1718
diff changeset
1053 std::string::size_type pos = str.find_first_of(' ');
ef4988b2c1f3 strip the "lang=" prefix from exiv2 in all metadata formats
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1718
diff changeset
1054 if (pos != std::string::npos) str = str.substr(pos+1);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1055 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1056 list = g_list_append(list, utf8_validate_or_convert(str.c_str()));
1245
ec6d3673127f compilation fixes for older exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
1057 #if EXIV2_TEST_VERSION(0,16,0)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1058 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1059 else
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1060 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1061 /* read as a list */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1062 gint i;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1063 for (i = 0; i < item.count(); i++)
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1064 list = g_list_append(list, utf8_validate_or_convert(item.toString(i).c_str()));
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1065 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1066 #endif
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1067 return list;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1068 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1069
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1070 static GList *exif_get_metadata_simple(ExifData *exif, const gchar *key, MetadataFormat format)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1071 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1072 GList *list = NULL;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1073 try {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1074 try {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1075 Exiv2::ExifKey ekey(key);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1076 Exiv2::ExifData::iterator pos = exif->exifData().findKey(ekey);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1077 if (pos != exif->exifData().end())
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1078 list = exif_add_value_to_glist(list, *pos, format, &exif->exifData());
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1079
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1080 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1081 catch (Exiv2::AnyError& e) {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1082 try {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1083 Exiv2::IptcKey ekey(key);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1084 Exiv2::IptcData::iterator pos = exif->iptcData().begin();
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1085 while (pos != exif->iptcData().end())
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1086 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1087 if (pos->key() == key)
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1088 list = exif_add_value_to_glist(list, *pos, format, NULL);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1089 ++pos;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1090 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1091
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1092 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1093 catch (Exiv2::AnyError& e) {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1094 #if EXIV2_TEST_VERSION(0,16,0)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1095 Exiv2::XmpKey ekey(key);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1096 Exiv2::XmpData::iterator pos = exif->xmpData().findKey(ekey);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1097 if (pos != exif->xmpData().end())
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1098 list = exif_add_value_to_glist(list, *pos, format, NULL);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1099 #endif
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1100 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1101 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1102 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1103 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
1104 debug_exception(e);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1105 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1106 return list;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1107 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1108
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1109 GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1110 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1111 GList *list = NULL;
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1112
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1113 if (!key) return NULL;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1114
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1115 if (format == METADATA_FORMATTED)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1116 {
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1117 gchar *text;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1118 gint key_valid;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1119 text = exif_get_formatted_by_key(exif, key, &key_valid);
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1120 if (key_valid) return g_list_append(NULL, text);
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1121 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1122
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1123 list = exif_get_metadata_simple(exif, key, format);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1124
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1125 /* the following code can be ifdefed out as soon as Exiv2 supports it */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1126 if (!list)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1127 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1128 const AltKey *alt_key = find_alt_key(key);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1129 if (alt_key && alt_key->iptc_key)
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1130 list = exif_get_metadata_simple(exif, alt_key->iptc_key, format);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1131
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1132 #if !EXIV2_TEST_VERSION(0,17,0)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1133 /* with older Exiv2 versions exif is not synced */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1134 if (!list && alt_key && alt_key->exif_key)
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1135 list = exif_get_metadata_simple(exif, alt_key->exif_key, format);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1136 #endif
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1137 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1138 return list;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1139 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
1140
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
1141
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1142 void exif_add_jpeg_color_profile(ExifData *exif, unsigned char *cp_data, guint cp_length)
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1143 {
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1144 exif->add_jpeg_color_profile(cp_data, cp_length);
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1145 }
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1146
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1147 guchar *exif_get_color_profile(ExifData *exif, guint *data_len)
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1148 {
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1149 guchar *ret = exif->get_jpeg_color_profile(data_len);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1150 if (ret) return ret;
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1151
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1152 ExifItem *prof_item = exif_get_item(exif, "Exif.Image.InterColorProfile");
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1153 if (prof_item && exif_item_get_format_id(prof_item) == EXIF_FORMAT_UNDEFINED)
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1154 ret = (guchar *)exif_item_get_data(prof_item, data_len);
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1155 return ret;
449
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1156 }
19e6026ceed7 read color profiles from jpeg also with Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 414
diff changeset
1157
2490
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1158 gchar* exif_get_image_comment(FileData* fd)
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1159 {
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1160 if (!fd || !fd->exif)
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1161 return g_strdup("");
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1162
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1163 return g_strdup(fd->exif->image_comment().c_str());
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1164 }
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1165
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1166 void exif_set_image_comment(FileData* fd, const gchar* comment)
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1167 {
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1168 if (!fd || !fd->exif)
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1169 return;
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1170
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1171 fd->exif->set_image_comment(comment ? comment : "");
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1172 }
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1173
a1b125f07ead Fix #381: Feature-Request: Make JPEG comment available for overlays
Alexander Antimonov <>
parents: 2357
diff changeset
1174
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1175 #if EXIV2_TEST_VERSION(0,17,90)
187
26f824afc045 write support in Exiv2 wrapper; for now only string values
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 186
diff changeset
1176
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1177 guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height)
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1178 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1179 if (!exif) return NULL;
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1180
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
1181 if (!exif->image()) return NULL;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1182
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
1183 std::string const path = exif->image()->io().path();
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1184 /* given image pathname, first do simple (and fast) file extension test */
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
1185 gboolean is_raw = filter_file_class(path.c_str(), FORMAT_CLASS_RAWIMAGE);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1186
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1187 if (!is_raw && requested_width == 0) return NULL;
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1188
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1189 try {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1190
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1191 Exiv2::PreviewManager pm(*exif->image());
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1192
1064
6e011c2d9a4b follow Exiv2 SVN changes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1060
diff changeset
1193 Exiv2::PreviewPropertiesList list = pm.getPreviewProperties();
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1194
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1195 if (!list.empty())
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1196 {
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1197 Exiv2::PreviewPropertiesList::iterator pos;
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1198 Exiv2::PreviewPropertiesList::iterator last = --list.end();
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1199
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1200 if (requested_width == 0)
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1201 {
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1202 pos = last; // the largest
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1203 }
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1204 else
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1205 {
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1206 pos = list.begin();
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1207 while (pos != last)
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1208 {
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1209 if (pos->width_ >= (uint32_t)requested_width &&
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1210 pos->height_ >= (uint32_t)requested_height) break;
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1211 ++pos;
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1212 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1213
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1214 // we are not interested in smaller thumbnails in normal image formats - we can use full image instead
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1215 if (!is_raw)
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1216 {
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1217 if (pos->width_ < (uint32_t)requested_width || pos->height_ < (uint32_t)requested_height) return NULL;
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1218 }
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1219 }
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1220
1064
6e011c2d9a4b follow Exiv2 SVN changes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1060
diff changeset
1221 Exiv2::PreviewImage image = pm.getPreviewImage(*pos);
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1222
1064
6e011c2d9a4b follow Exiv2 SVN changes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1060
diff changeset
1223 Exiv2::DataBuf buf = image.copy();
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1224 std::pair<Exiv2::byte*, long> p = buf.release();
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1225
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1226 *data_len = p.second;
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1227 return p.first;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1228 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1229 return NULL;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1230 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1231 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
1232 debug_exception(e);
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1233 return NULL;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1234 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1235 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1236
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1237 void exif_free_preview(guchar *buf)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1238 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1239 delete[] (Exiv2::byte*)buf;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1240 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1241 #endif
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1242
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1243 }
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1244 #if !EXIV2_TEST_VERSION(0,17,90)
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1245
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1246 /* This is a dirty hack to support raw file preview, bassed on
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1247 tiffparse.cpp from Exiv2 examples */
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1248
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1249 class RawFile {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1250 public:
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1251
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1252 RawFile(Exiv2::BasicIo &io);
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1253 ~RawFile();
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1254
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1255 const Exiv2::Value *find(uint16_t tag, uint16_t group);
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1256
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1257 unsigned long preview_offset();
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1258
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1259 private:
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1260 int type;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1261 Exiv2::TiffComponent::AutoPtr rootDir;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1262 Exiv2::BasicIo &io_;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1263 const Exiv2::byte *map_data;
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1264 size_t map_len;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1265 unsigned long offset;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1266 };
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1267
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1268 typedef struct _UnmapData UnmapData;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1269 struct _UnmapData
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1270 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1271 guchar *ptr;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1272 guchar *map_data;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1273 size_t map_len;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1274 };
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1275
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1276 static GList *exif_unmap_list = 0;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1277
1060
54806f8e4af5 added option to use exif thumbnails
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1058
diff changeset
1278 extern "C" guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height)
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1279 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1280 unsigned long offset;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1281
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1282 if (!exif) return NULL;
1426
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
1283 if (!exif->image()) return NULL;
aedb4a9382eb handle sidecar files for raw formats that are not known to exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1422
diff changeset
1284
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
1285 std::string const path = exif->image()->io().path();
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1286
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1287 /* given image pathname, first do simple (and fast) file extension test */
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
1288 if (!filter_file_class(path.c_str(), FORMAT_CLASS_RAWIMAGE)) return NULL;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1289
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1290 try {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1291 struct stat st;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1292 guchar *map_data;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1293 size_t map_len;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1294 UnmapData *ud;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1295 int fd;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1296
1069
495c9ff682ed infrastructure for preprocessing of metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1064
diff changeset
1297 RawFile rf(exif->image()->io());
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1298 offset = rf.preview_offset();
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
1299 DEBUG_1("%s: offset %lu", path.c_str(), offset);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1300
2357
b4af88fd0190 Work around changed c++11 std::string implementation
David Kalnischkies <david@kalnischkies.de>
parents: 2350
diff changeset
1301 fd = open(path.c_str(), O_RDONLY);
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1302 if (fd == -1)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1303 {
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1304 return NULL;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1305 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1306
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1307 if (fstat(fd, &st) == -1)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1308 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1309 close(fd);
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1310 return NULL;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1311 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1312 map_len = st.st_size;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1313 map_data = (guchar *) mmap(0, map_len, PROT_READ, MAP_PRIVATE, fd, 0);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1314 close(fd);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1315 if (map_data == MAP_FAILED)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1316 {
1048
83d51cfb8ff4 updated preview loader to work with current svn version of libexiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1025
diff changeset
1317 return NULL;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1318 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1319 *data_len = map_len - offset;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1320 ud = g_new(UnmapData, 1);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1321 ud->ptr = map_data + offset;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1322 ud->map_data = map_data;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1323 ud->map_len = map_len;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1324
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1325 exif_unmap_list = g_list_prepend(exif_unmap_list, ud);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1326 return ud->ptr;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1327
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1328 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1329 catch (Exiv2::AnyError& e) {
1528
d99006e40479 improved Exiv2 error reporting:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1460
diff changeset
1330 debug_exception(e);
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1331 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1332 return NULL;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1333
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1334 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1335
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1336 void exif_free_preview(guchar *buf)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1337 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1338 GList *work = exif_unmap_list;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1339
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1340 while (work)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1341 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1342 UnmapData *ud = (UnmapData *)work->data;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1343 if (ud->ptr == buf)
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1344 {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1345 munmap(ud->map_data, ud->map_len);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1346 exif_unmap_list = g_list_remove_link(exif_unmap_list, work);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1347 g_free(ud);
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1348 return;
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1349 }
1025
600babb3bef9 fixed possible endless loop
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1016
diff changeset
1350 work = work->next;
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1351 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1352 g_assert_not_reached();
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1353 }
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1354
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1355 using namespace Exiv2;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1356
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1357 RawFile::RawFile(BasicIo &io) : io_(io), map_data(NULL), map_len(0), offset(0)
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1358 {
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1359 /*
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1360 struct stat st;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1361 if (fstat(fd, &st) == -1)
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1362 {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1363 throw Error(14);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1364 }
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1365 map_len = st.st_size;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1366 map_data = (Exiv2::byte *) mmap(0, map_len, PROT_READ, MAP_PRIVATE, fd, 0);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1367 if (map_data == MAP_FAILED)
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1368 {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1369 throw Error(14);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1370 }
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1371 */
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1372 if (io.open() != 0) {
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1373 throw Error(9, io.path(), strError());
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1374 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1375
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1376 map_data = io.mmap();
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1377 map_len = io.size();
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1378
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1379
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1380 type = Exiv2::ImageFactory::getType(map_data, map_len);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1381
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1382 #if EXIV2_TEST_VERSION(0,16,0)
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1383 TiffHeaderBase *tiffHeader = NULL;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1384 #else
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1385 TiffHeade2 *tiffHeader = NULL;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1386 #endif
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1387 Cr2Header *cr2Header = NULL;
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1388
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1389 switch (type) {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1390 case Exiv2::ImageType::tiff:
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1391 tiffHeader = new TiffHeade2();
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1392 break;
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1393 case Exiv2::ImageType::cr2:
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1394 cr2Header = new Cr2Header();
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1395 break;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1396 #if EXIV2_TEST_VERSION(0,16,0)
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1397 case Exiv2::ImageType::orf:
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1398 tiffHeader = new OrfHeader();
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1399 break;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1400 #endif
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1401 #if EXIV2_TEST_VERSION(0,13,0)
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1402 case Exiv2::ImageType::raf:
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1403 if (map_len < 84 + 4) throw Error(14);
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1404 offset = getULong(map_data + 84, bigEndian);
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1405 return;
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1406 #endif
191
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1407 case Exiv2::ImageType::crw:
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1408 {
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1409 // Parse the image, starting with a CIFF header component
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1410 Exiv2::CiffHeader::AutoPtr parseTree(new Exiv2::CiffHeader);
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1411 parseTree->read(map_data, map_len);
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1412 CiffComponent *entry = parseTree->findComponent(0x2007, 0);
191
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1413 if (entry) offset = entry->pData() - map_data;
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1414 return;
454d1bb98e7f crw preview support with exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 188
diff changeset
1415 }
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1416
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1417 default:
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1418 throw Error(3, "RAW");
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1419 }
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1420
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1421 // process tiff-like formats
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1422
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1423 TiffCompFactoryFct createFct = TiffCreator::create;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1424
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1425 rootDir = createFct(Tag::root, Group::none);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1426 if (0 == rootDir.get()) {
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1427 throw Error(1, "No root element defined in TIFF structure");
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1428 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1429
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1430 if (tiffHeader)
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1431 {
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1432 if (!tiffHeader->read(map_data, map_len)) throw Error(3, "TIFF");
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1433 #if EXIV2_TEST_VERSION(0,16,0)
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1434 rootDir->setStart(map_data + tiffHeader->offset());
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1435 #else
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1436 rootDir->setStart(map_data + tiffHeader->ifdOffset());
200
80ff546e4d58 exiv2 version checks
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 194
diff changeset
1437 #endif
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1438 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1439
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1440 if (cr2Header)
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1441 {
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1442 rootDir->setStart(map_data + cr2Header->offset());
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1443 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1444
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1445 TiffRwState::AutoPtr state(new TiffRwState(tiffHeader ? tiffHeader->byteOrder() : littleEndian, 0, createFct));
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1446
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1447 TiffReader reader(map_data,
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1448 map_len,
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1449 rootDir.get(),
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1450 state);
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1451
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1452 rootDir->accept(reader);
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1453
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1454 if (tiffHeader)
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1455 delete tiffHeader;
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1456 if (cr2Header)
201
cb13d818b733 improved support for older exiv2 versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 200
diff changeset
1457 delete cr2Header;
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1458 }
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1459
609
a69fc0381769 Use function(void) instead of function() for declaring functions which
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1460 RawFile::~RawFile(void)
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1461 {
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1462 io_.munmap();
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1463 io_.close();
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1464 }
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1465
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1466 const Value * RawFile::find(uint16_t tag, uint16_t group)
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1467 {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1468 TiffFinder finder(tag, group);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1469 rootDir->accept(finder);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1470 TiffEntryBase* te = dynamic_cast<TiffEntryBase*>(finder.result());
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1471 if (te)
194
5bd6e3e68582 raw related fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 191
diff changeset
1472 {
495
cbe33f121dea Introduce macros to display debug messages.
Laurent Monin <geeqie@norz.org>
parents: 485
diff changeset
1473 DEBUG_1("(tag: %04x %04x) ", tag, group);
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1474 return te->pValue();
194
5bd6e3e68582 raw related fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 191
diff changeset
1475 }
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1476 else
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1477 return NULL;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1478 }
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1479
609
a69fc0381769 Use function(void) instead of function() for declaring functions which
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1480 unsigned long RawFile::preview_offset(void)
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1481 {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1482 const Value *val;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1483 if (offset) return offset;
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1484
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1485 if (type == Exiv2::ImageType::cr2)
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1486 {
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1487 val = find(0x111, Group::ifd0);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1488 if (val) return val->toLong();
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1489
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1490 return 0;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1491 }
2270
132757bcc430 Remove some useless spaces in exiv2.cc
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2227
diff changeset
1492
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1493 val = find(0x201, Group::sub0_0);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1494 if (val) return val->toLong();
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1495
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1496 val = find(0x201, Group::ifd0);
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1497 if (val) return val->toLong();
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1498
186
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1499 val = find(0x201, Group::ignr); // for PEF files, originally it was probably ifd2
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1500 if (val) return val->toLong();
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1501
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1502 val = find(0x111, Group::sub0_1); // dng
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1503 if (val) return val->toLong();
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1504
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1505 return 0;
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1506 }
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1507
69d7fa90f4c8 a hack to read raw previews with exiv2 0.16, however it should be fixed
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 185
diff changeset
1508
1008
2c38f14a2227 use mmaped files image loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1509 #endif
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1510
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1511
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 855
diff changeset
1512 #endif
178
2e1758154286 first exiv2 support that does not crash immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1513 /* HAVE_EXIV2 */
1055
4bbdfab3c89a Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1053
diff changeset
1514 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */