Remove commented out code.
[geeqie.git] / src / exif.h
1 /*
2  * Geeqie
3  * (C) 2006 John Ellis
4  *  Copyright (C) 2008 - 2012 The Geeqie Team
5  *
6  *  Authors:
7  *    Support for Exif file format, originally written by Eric Swalens.
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 #define EXIF_FORMATTED() "formatted."
31 #define EXIF_FORMATTED_LEN (sizeof(EXIF_FORMATTED()) - 1)
32
33 /*
34  *-----------------------------------------------------------------------------
35  * Tag formats
36  *-----------------------------------------------------------------------------
37  */
38
39 #define EXIF_FORMAT_COUNT 13
40
41 typedef enum {
42         EXIF_FORMAT_UNKNOWN             = 0,
43         EXIF_FORMAT_BYTE_UNSIGNED       = 1,
44         EXIF_FORMAT_STRING              = 2,
45         EXIF_FORMAT_SHORT_UNSIGNED      = 3,
46         EXIF_FORMAT_LONG_UNSIGNED       = 4,
47         EXIF_FORMAT_RATIONAL_UNSIGNED   = 5,
48         EXIF_FORMAT_BYTE                = 6,
49         EXIF_FORMAT_UNDEFINED           = 7,
50         EXIF_FORMAT_SHORT               = 8,
51         EXIF_FORMAT_LONG                = 9,
52         EXIF_FORMAT_RATIONAL            = 10,
53         EXIF_FORMAT_FLOAT               = 11,
54         EXIF_FORMAT_DOUBLE              = 12
55 } ExifFormatType;
56
57
58 /*
59  *-----------------------------------------------------------------------------
60  * Data storage
61  *-----------------------------------------------------------------------------
62  */
63
64 typedef struct _ExifItem ExifItem;
65
66 typedef struct _ExifRational ExifRational;
67 struct _ExifRational
68 {
69         guint32 num;
70         guint32 den;
71 };
72
73
74 /* enums useful for image manipulation */
75
76 typedef enum {
77         EXIF_ORIENTATION_UNKNOWN        = 0,
78         EXIF_ORIENTATION_TOP_LEFT       = 1,
79         EXIF_ORIENTATION_TOP_RIGHT      = 2,
80         EXIF_ORIENTATION_BOTTOM_RIGHT   = 3,
81         EXIF_ORIENTATION_BOTTOM_LEFT    = 4,
82         EXIF_ORIENTATION_LEFT_TOP       = 5,
83         EXIF_ORIENTATION_RIGHT_TOP      = 6,
84         EXIF_ORIENTATION_RIGHT_BOTTOM   = 7,
85         EXIF_ORIENTATION_LEFT_BOTTOM    = 8
86 } ExifOrientationType;
87
88 typedef enum {
89         EXIF_UNIT_UNKNOWN       = 0,
90         EXIF_UNIT_NOUNIT        = 1,
91         EXIF_UNIT_INCH          = 2,
92         EXIF_UNIT_CENTIMETER    = 3
93 } ExifUnitType;
94
95 typedef struct _ExifFormattedText ExifFormattedText;
96 struct _ExifFormattedText
97 {
98         const gchar *key;
99         const gchar *description;
100         gchar *(*build_func)(ExifData *exif);
101 };
102
103 /*
104  *-----------------------------------------------------------------------------
105  * functions
106  *-----------------------------------------------------------------------------
107  */
108
109 void exif_init(void);
110
111 ExifData *exif_read(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp);
112
113 ExifData *exif_read_fd(FileData *fd);
114 void exif_free_fd(FileData *fd, ExifData *exif);
115
116 /* exif_read returns processed data (merged from image and sidecar, etc.)
117    this function gives access to the original data from the image.
118    original data are part of the processed data and should not be freed separately */
119 ExifData *exif_get_original(ExifData *processed);
120
121
122 gboolean exif_write(ExifData *exif);
123 gboolean exif_write_sidecar(ExifData *exif, gchar *path);
124
125 void exif_free(ExifData *exif);
126
127 gchar *exif_get_data_as_text(ExifData *exif, const gchar *key);
128 gint exif_get_integer(ExifData *exif, const gchar *key, gint *value);
129 ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign);
130
131 ExifItem *exif_get_item(ExifData *exif, const gchar *key);
132 ExifItem *exif_get_first_item(ExifData *exif);
133 ExifItem *exif_get_next_item(ExifData *exif);
134
135
136 gchar *exif_item_get_tag_name(ExifItem *item);
137 guint exif_item_get_tag_id(ExifItem *item);
138 guint exif_item_get_elements(ExifItem *item);
139 gchar *exif_item_get_data(ExifItem *item, guint *data_len);
140 gchar *exif_item_get_description(ExifItem *item);
141 guint exif_item_get_format_id(ExifItem *item);
142 const gchar *exif_item_get_format_name(ExifItem *item, gboolean brief);
143 gchar *exif_item_get_data_as_text(ExifItem *item);
144 gint exif_item_get_integer(ExifItem *item, gint *value);
145 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n);
146
147 gchar *exif_item_get_string(ExifItem *item, gint idx);
148
149 gchar *exif_get_description_by_key(const gchar *key);
150 gchar *exif_get_tag_description_by_key(const gchar *key);
151
152 gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gboolean *key_valid);
153
154 gint exif_update_metadata(ExifData *exif, const gchar *key, const GList *values);
155 GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format);
156
157 guchar *exif_get_color_profile(ExifData *exif, guint *data_len);
158
159 /* jpeg embedded icc support */
160
161 void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_length);
162
163
164 gboolean exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size);
165
166 /*raw support */
167 guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height);
168 void exif_free_preview(guchar *buf);
169
170 gchar *metadata_file_info(FileData *fd, const gchar *key, MetadataFormat format);
171
172 #endif
173 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */