annotate src/exif.h @ 9:d907d608745f

Sync to GQview 1.5.9 release. ######## DO NOT BASE ENHANCEMENTS OR TRANSLATION UPDATES ON CODE IN THIS CVS! This CVS is never up to date with current development and is provided solely for reference purposes, please use the latest official release package when making any changes or translation updates. ########
author gqview
date Sat, 26 Feb 2005 00:13:35 +0000
parents
children aa4c0e1b54b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2 * GQView
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3 * (C) 2004 John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
4 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 * Authors:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 * Support for Exif file format, originally written by Eric Swalens.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 * Modified by Quy Tonthat
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * Reimplemented with generic data storage by John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11 This program is free software; you can redistribute it and/or modify
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12 it under the terms of the GNU General Public License as published by
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 the Free Software Foundation; either version 2 of the License, or
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 (at your option) any later version.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 This program is distributed in the hope that it will be useful,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 GNU General Public License for more details.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 You should have received a copy of the GNU General Public License
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22 along with this program; if not, write to the Free Software
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
25
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 #ifndef __EXIF_H
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 #define __EXIF_H
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32 * Tag formats
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37 EXIF_FORMAT_UNKNOWN = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38 EXIF_FORMAT_BYTE_UNSIGNED = 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39 EXIF_FORMAT_STRING = 2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 EXIF_FORMAT_SHORT_UNSIGNED = 3,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41 EXIF_FORMAT_LONG_UNSIGNED = 4,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42 EXIF_FORMAT_RATIONAL_UNSIGNED = 5,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43 EXIF_FORMAT_BYTE = 6,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44 EXIF_FORMAT_UNDEFINED = 7,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45 EXIF_FORMAT_SHORT = 8,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46 EXIF_FORMAT_LONG = 9,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47 EXIF_FORMAT_RATIONAL = 10,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 EXIF_FORMAT_FLOAT = 11,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49 EXIF_FORMAT_DOUBLE = 12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50 } ExifFormatType;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52 typedef struct _ExifFormatAttrib ExifFormatAttrib;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 struct _ExifFormatAttrib
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55 ExifFormatType type;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56 int size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57 const char *short_name;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 const char *description;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
60
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61 /* the list of known tag data formats */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
62 extern ExifFormatAttrib ExifFormatList[];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
63
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
64
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
67 * Data storage
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
68 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
70
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
71 typedef struct _ExifData ExifData;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 struct _ExifData
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74 GList *items; /* list of (ExifItem *) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77 typedef struct _ExifRational ExifRational;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 struct _ExifRational
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80 unsigned long int num;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
81 unsigned long int den;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85 typedef struct _ExifItem ExifItem;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 typedef struct _ExifMarker ExifMarker;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 typedef struct _ExifTextList ExifTextList;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 struct _ExifItem
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 ExifFormatType format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 int tag;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 ExifMarker *marker;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 int elements;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 gpointer data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 int data_len;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 struct _ExifMarker
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 int tag;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 ExifFormatType format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 int components;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 char *key;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 char *description;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106 ExifTextList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 struct _ExifTextList
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 int value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 const char* description;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116 typedef struct _ExifFormattedText ExifFormattedText;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 struct _ExifFormattedText
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 const char *key;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 const char *description;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
122
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126 * Data
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130 /* enums useful for image manipulation */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
132 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133 EXIF_ORIENTATION_UNKNOWN = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 EXIF_ORIENTATION_TOP_LEFT = 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135 EXIF_ORIENTATION_TOP_RIGHT = 2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
136 EXIF_ORIENTATION_BOTTOM_RIGHT = 3,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
137 EXIF_ORIENTATION_BOTTOM_LEFT = 4,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
138 EXIF_ORIENTATION_LEFT_TOP = 5,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
139 EXIF_ORIENTATION_RIGHT_TOP = 6,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 EXIF_ORIENTATION_RIGHT_BOTTOM = 7,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141 EXIF_ORIENTATION_LEFT_BOTTOM = 8
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
142 } ExifOrientationType;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 EXIF_UNIT_UNKNOWN = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 EXIF_UNIT_NOUNIT = 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147 EXIF_UNIT_INCH = 2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 EXIF_UNIT_CENTIMETER = 3
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
149 } ExifUnitType;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 /* the known exif tags list */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 extern ExifMarker ExifKnownMarkersList[];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155 /* the unknown tags utilize this generic list */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 extern ExifMarker ExifUnknownMarkersList[];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 /* the list of specially formatted keys, for human readable output */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159 extern ExifFormattedText ExifFormattedList[];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164 * functions
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168 ExifData *exif_read(const gchar *path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 void exif_free(ExifData *exif);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 gchar *exif_get_data_as_text(ExifData *exif, const gchar *key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 gint exif_get_integer(ExifData *exif, const gchar *key, gint *value);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 double exif_rational_to_double(ExifRational *r, gint sign);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 ExifItem *exif_get_item(ExifData *exif, const gchar *key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
178 const char *exif_item_get_tag_name(ExifItem *item);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 const char *exif_item_get_description(ExifItem *item);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180 const char *exif_item_get_format_name(ExifItem *item, gint brief);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181 gchar *exif_item_get_data_as_text(ExifItem *item);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182 gint exif_item_get_integer(ExifItem *item, gint *value);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
183 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185 const gchar *exif_get_description_by_key(const gchar *key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 /* usually for debugging to stdout */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 void exif_write_data_list(ExifData *exif, FILE *f, gint human_readable_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191 #endif