Mercurial > geeqie
annotate src/exif.h @ 1167:e812b1a7adda
Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
author | zas_ |
---|---|
date | Sat, 22 Nov 2008 16:24:23 +0000 |
parents | aeae25d5d50d |
children | 9e424170e958 |
rev | line source |
---|---|
9 | 1 /* |
541 | 2 * Geeqie |
3 * (C) 2006 John Ellis | |
475 | 4 * Copyright (C) 2008 The Geeqie Team |
9 | 5 * |
6 * Authors: | |
442 | 7 * Support for Exif file format, originally written by Eric Swalens. |
9 | 8 * Modified by Quy Tonthat |
9 * Reimplemented with generic data storage by John Ellis | |
10 * | |
11 | |
12 This program is free software; you can redistribute it and/or modify | |
13 it under the terms of the GNU General Public License as published by | |
14 the Free Software Foundation; either version 2 of the License, or | |
15 (at your option) any later version. | |
16 | |
17 This program is distributed in the hope that it will be useful, | |
18 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 GNU General Public License for more details. | |
21 | |
22 You should have received a copy of the GNU General Public License | |
23 along with this program; if not, write to the Free Software | |
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
25 */ | |
26 | |
27 #ifndef __EXIF_H | |
28 #define __EXIF_H | |
29 | |
30 | |
31 /* | |
32 *----------------------------------------------------------------------------- | |
33 * Tag formats | |
34 *----------------------------------------------------------------------------- | |
35 */ | |
36 | |
54
b58cac75ad12
Thu Jun 9 22:23:18 2005 John Ellis <johne@verizon.net>
gqview
parents:
51
diff
changeset
|
37 #define EXIF_FORMAT_COUNT 13 |
b58cac75ad12
Thu Jun 9 22:23:18 2005 John Ellis <johne@verizon.net>
gqview
parents:
51
diff
changeset
|
38 |
9 | 39 typedef enum { |
40 EXIF_FORMAT_UNKNOWN = 0, | |
41 EXIF_FORMAT_BYTE_UNSIGNED = 1, | |
42 EXIF_FORMAT_STRING = 2, | |
43 EXIF_FORMAT_SHORT_UNSIGNED = 3, | |
44 EXIF_FORMAT_LONG_UNSIGNED = 4, | |
45 EXIF_FORMAT_RATIONAL_UNSIGNED = 5, | |
46 EXIF_FORMAT_BYTE = 6, | |
47 EXIF_FORMAT_UNDEFINED = 7, | |
48 EXIF_FORMAT_SHORT = 8, | |
49 EXIF_FORMAT_LONG = 9, | |
50 EXIF_FORMAT_RATIONAL = 10, | |
51 EXIF_FORMAT_FLOAT = 11, | |
52 EXIF_FORMAT_DOUBLE = 12 | |
53 } ExifFormatType; | |
54 | |
178
9dc8bc9b2bb9
first exiv2 support that does not crash immediately
nadvornik
parents:
177
diff
changeset
|
55 |
9 | 56 /* |
57 *----------------------------------------------------------------------------- | |
58 * Data storage | |
59 *----------------------------------------------------------------------------- | |
60 */ | |
61 | |
176
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
62 typedef struct _ExifItem ExifItem; |
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
63 |
9 | 64 typedef struct _ExifRational ExifRational; |
65 struct _ExifRational | |
66 { | |
51
276ea4c98d33
Sat Jun 4 22:24:00 2005 John Ellis <johne@verizon.net>
gqview
parents:
47
diff
changeset
|
67 guint32 num; |
276ea4c98d33
Sat Jun 4 22:24:00 2005 John Ellis <johne@verizon.net>
gqview
parents:
47
diff
changeset
|
68 guint32 den; |
9 | 69 }; |
70 | |
71 | |
72 /* enums useful for image manipulation */ | |
73 | |
74 typedef enum { | |
75 EXIF_ORIENTATION_UNKNOWN = 0, | |
76 EXIF_ORIENTATION_TOP_LEFT = 1, | |
77 EXIF_ORIENTATION_TOP_RIGHT = 2, | |
78 EXIF_ORIENTATION_BOTTOM_RIGHT = 3, | |
79 EXIF_ORIENTATION_BOTTOM_LEFT = 4, | |
80 EXIF_ORIENTATION_LEFT_TOP = 5, | |
81 EXIF_ORIENTATION_RIGHT_TOP = 6, | |
82 EXIF_ORIENTATION_RIGHT_BOTTOM = 7, | |
83 EXIF_ORIENTATION_LEFT_BOTTOM = 8 | |
84 } ExifOrientationType; | |
85 | |
86 typedef enum { | |
87 EXIF_UNIT_UNKNOWN = 0, | |
88 EXIF_UNIT_NOUNIT = 1, | |
89 EXIF_UNIT_INCH = 2, | |
90 EXIF_UNIT_CENTIMETER = 3 | |
91 } ExifUnitType; | |
92 | |
93 | |
548
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
94 typedef struct _ExifFormattedText ExifFormattedText; |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
95 struct _ExifFormattedText |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
96 { |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
97 const gchar *key; |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
98 const gchar *description; |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
99 gchar *(*build_func)(ExifData *exif); |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
100 }; |
7ada6e5d4de8
Add a pointer to the build function in the formatted exif tags struct
zas_
parents:
541
diff
changeset
|
101 |
9 | 102 /* |
103 *----------------------------------------------------------------------------- | |
104 * functions | |
105 *----------------------------------------------------------------------------- | |
106 */ | |
107 | |
449 | 108 ExifData *exif_read(gchar *path, gchar *sidecar_path); |
188
0584cb78aa14
write comment and keywords to xmp, sidecars are used if exist
nadvornik
parents:
187
diff
changeset
|
109 |
449 | 110 ExifData *exif_read_fd(FileData *fd); |
844 | 111 void exif_free_fd(FileData *fd, ExifData *exif); |
188
0584cb78aa14
write comment and keywords to xmp, sidecars are used if exist
nadvornik
parents:
187
diff
changeset
|
112 |
1069 | 113 /* exif_read returns processed data (merged from image and sidecar, etc.) |
114 this function gives access to the original data from the image. | |
115 original data are part of the processed data and should not be freed separately */ | |
116 ExifData *exif_get_original(ExifData *processed); | |
188
0584cb78aa14
write comment and keywords to xmp, sidecars are used if exist
nadvornik
parents:
187
diff
changeset
|
117 |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
118 gint exif_write(ExifData *exif); |
9 | 119 void exif_free(ExifData *exif); |
120 | |
121 gchar *exif_get_data_as_text(ExifData *exif, const gchar *key); | |
122 gint exif_get_integer(ExifData *exif, const gchar *key, gint *value); | |
123 ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign); | |
124 | |
125 ExifItem *exif_get_item(ExifData *exif, const gchar *key); | |
187
9eafc4957f1a
write support in Exiv2 wrapper; for now only string values
nadvornik
parents:
185
diff
changeset
|
126 ExifItem *exif_add_item(ExifData *exif, const gchar *key); |
176
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
127 ExifItem *exif_get_first_item(ExifData *exif); |
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
128 ExifItem *exif_get_next_item(ExifData *exif); |
9 | 129 |
187
9eafc4957f1a
write support in Exiv2 wrapper; for now only string values
nadvornik
parents:
185
diff
changeset
|
130 |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
131 gchar *exif_item_get_tag_name(ExifItem *item); |
176
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
132 guint exif_item_get_tag_id(ExifItem *item); |
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
133 guint exif_item_get_elements(ExifItem *item); |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
134 gchar *exif_item_get_data(ExifItem *item, guint *data_len); |
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
135 gchar *exif_item_get_description(ExifItem *item); |
176
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
138
diff
changeset
|
136 guint exif_item_get_format_id(ExifItem *item); |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
137 const gchar *exif_item_get_format_name(ExifItem *item, gint brief); |
9 | 138 gchar *exif_item_get_data_as_text(ExifItem *item); |
139 gint exif_item_get_integer(ExifItem *item, gint *value); | |
1058
b600689a677e
Fix up few signed vs unsigned warnings: exif_item_get_rational() last parameter is now of guint type.
zas_
parents:
1055
diff
changeset
|
140 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n); |
9 | 141 |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
142 gchar *exif_item_get_string(ExifItem *item, gint idx); |
188
0584cb78aa14
write comment and keywords to xmp, sidecars are used if exist
nadvornik
parents:
187
diff
changeset
|
143 |
1053
77ca9a5d42be
fixed charset of exiv2 strings in non-utf8 locales
nadvornik
parents:
1052
diff
changeset
|
144 gchar *exif_get_description_by_key(const gchar *key); |
77ca9a5d42be
fixed charset of exiv2 strings in non-utf8 locales
nadvornik
parents:
1052
diff
changeset
|
145 gchar *exif_get_tag_description_by_key(const gchar *key); |
182 | 146 |
147 gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gint *key_valid); | |
9 | 148 |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
149 gint exif_item_delete(ExifData *exif, ExifItem *item); |
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
150 gint exif_item_set_string(ExifItem *item, const gchar *str); |
187
9eafc4957f1a
write support in Exiv2 wrapper; for now only string values
nadvornik
parents:
185
diff
changeset
|
151 |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
152 guchar *exif_get_color_profile(ExifData *exif, guint *data_len); |
187
9eafc4957f1a
write support in Exiv2 wrapper; for now only string values
nadvornik
parents:
185
diff
changeset
|
153 |
449 | 154 /* jpeg embedded icc support */ |
155 | |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
156 void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_length); |
449 | 157 |
158 | |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
159 gint exif_jpeg_segment_find(guchar *data, guint size, |
449 | 160 guchar app_marker, const gchar *magic, guint magic_len, |
161 guint *seg_offset, guint *seg_length); | |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
844
diff
changeset
|
162 gint exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size); |
449 | 163 |
164 /*raw support */ | |
1060 | 165 guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height); |
1008 | 166 void exif_free_preview(guchar *buf); |
47
aa4c0e1b54b0
Fri Jun 3 01:49:20 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
167 |
449 | 168 |
9 | 169 #endif |
1055
1646720364cf
Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents:
1053
diff
changeset
|
170 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |