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