/*
- * Geeqie
- * (C) 2006 John Ellis
- * Copyright (C) 2008 The Geeqie Team
+ * Copyright (C) 2006 John Ellis
+ * Copyright (C) 2008 - 2016 The Geeqie Team
*
- * Authors:
- * Support for Exif file format, originally written by Eric Swalens.
- * Modified by Quy Tonthat
- * Reimplemented with generic data storage by John Ellis
+ * Authors: Eric Swalens, Quy Tonthat, John Ellis
*
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
#ifndef __EXIF_H
#define __EXIF_H
+#define EXIF_FORMATTED() "formatted."
+#define EXIF_FORMATTED_LEN (sizeof(EXIF_FORMATTED()) - 1)
/*
*-----------------------------------------------------------------------------
EXIF_UNIT_CENTIMETER = 3
} ExifUnitType;
-
typedef struct _ExifFormattedText ExifFormattedText;
struct _ExifFormattedText
{
*-----------------------------------------------------------------------------
*/
-ExifData *exif_read(gchar *path, gchar *sidecar_path);
+void exif_init(void);
+
+ExifData *exif_read(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp);
ExifData *exif_read_fd(FileData *fd);
void exif_free_fd(FileData *fd, ExifData *exif);
+/* exif_read returns processed data (merged from image and sidecar, etc.)
+ this function gives access to the original data from the image.
+ original data are part of the processed data and should not be freed separately */
+ExifData *exif_get_original(ExifData *processed);
+
+
+gboolean exif_write(ExifData *exif);
+gboolean exif_write_sidecar(ExifData *exif, gchar *path);
-gint exif_write(ExifData *exif);
void exif_free(ExifData *exif);
gchar *exif_get_data_as_text(ExifData *exif, const gchar *key);
ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign);
ExifItem *exif_get_item(ExifData *exif, const gchar *key);
-ExifItem *exif_add_item(ExifData *exif, const gchar *key);
ExifItem *exif_get_first_item(ExifData *exif);
ExifItem *exif_get_next_item(ExifData *exif);
gchar *exif_item_get_data(ExifItem *item, guint *data_len);
gchar *exif_item_get_description(ExifItem *item);
guint exif_item_get_format_id(ExifItem *item);
-const gchar *exif_item_get_format_name(ExifItem *item, gint brief);
+const gchar *exif_item_get_format_name(ExifItem *item, gboolean brief);
gchar *exif_item_get_data_as_text(ExifItem *item);
gint exif_item_get_integer(ExifItem *item, gint *value);
ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n);
gchar *exif_get_description_by_key(const gchar *key);
gchar *exif_get_tag_description_by_key(const gchar *key);
-gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gint *key_valid);
+gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gboolean *key_valid);
-gint exif_item_delete(ExifData *exif, ExifItem *item);
-gint exif_item_set_string(ExifItem *item, const gchar *str);
+gint exif_update_metadata(ExifData *exif, const gchar *key, const GList *values);
+GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format);
guchar *exif_get_color_profile(ExifData *exif, guint *data_len);
void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_length);
-gint exif_jpeg_segment_find(guchar *data, guint size,
- guchar app_marker, const gchar *magic, guint magic_len,
- guint *seg_offset, guint *seg_length);
-gint exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size);
+gboolean exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size);
+
+/* support for so called "jpeg comment" */
+gchar* exif_get_image_comment(FileData* fd);
+void exif_set_image_comment(FileData* fd, const gchar* comment);
/*raw support */
guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height);
void exif_free_preview(guchar *buf);
+gchar *metadata_file_info(FileData *fd, const gchar *key, MetadataFormat format);
#endif
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */