Use util_clip_triangle() in pan_item_tri_new()
[geeqie.git] / src / exif.h
index d19f6e3..a10f801 100644 (file)
@@ -1,33 +1,36 @@
 /*
- * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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.
+#ifndef __EXIF_H
+#define __EXIF_H
 
-    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.
+#include <glib.h>
 
-    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.
-*/
+#include "typedefs.h"
 
-#ifndef __EXIF_H
-#define __EXIF_H
+struct ExifData;
+struct ExifItem;
+struct FileData;
 
-#define EXIF_FORMATTED(x) "formatted."x
+#define EXIF_FORMATTED() "formatted."
 #define EXIF_FORMATTED_LEN (sizeof(EXIF_FORMATTED()) - 1)
 
 /*
@@ -38,7 +41,7 @@
 
 #define EXIF_FORMAT_COUNT 13
 
-typedef enum {
+enum ExifFormatType {
        EXIF_FORMAT_UNKNOWN             = 0,
        EXIF_FORMAT_BYTE_UNSIGNED       = 1,
        EXIF_FORMAT_STRING              = 2,
@@ -52,7 +55,7 @@ typedef enum {
        EXIF_FORMAT_RATIONAL            = 10,
        EXIF_FORMAT_FLOAT               = 11,
        EXIF_FORMAT_DOUBLE              = 12
-} ExifFormatType;
+};
 
 
 /*
@@ -61,10 +64,7 @@ typedef enum {
  *-----------------------------------------------------------------------------
  */
 
-typedef struct _ExifItem ExifItem;
-
-typedef struct _ExifRational ExifRational;
-struct _ExifRational
+struct ExifRational
 {
        guint32 num;
        guint32 den;
@@ -73,7 +73,7 @@ struct _ExifRational
 
 /* enums useful for image manipulation */
 
-typedef enum {
+enum ExifOrientationType {
        EXIF_ORIENTATION_UNKNOWN        = 0,
        EXIF_ORIENTATION_TOP_LEFT       = 1,
        EXIF_ORIENTATION_TOP_RIGHT      = 2,
@@ -83,18 +83,16 @@ typedef enum {
        EXIF_ORIENTATION_RIGHT_TOP      = 6,
        EXIF_ORIENTATION_RIGHT_BOTTOM   = 7,
        EXIF_ORIENTATION_LEFT_BOTTOM    = 8
-} ExifOrientationType;
+};
 
-typedef enum {
+enum ExifUnitType {
        EXIF_UNIT_UNKNOWN       = 0,
        EXIF_UNIT_NOUNIT        = 1,
        EXIF_UNIT_INCH          = 2,
        EXIF_UNIT_CENTIMETER    = 3
-} ExifUnitType;
-
+};
 
-typedef struct _ExifFormattedText ExifFormattedText;
-struct _ExifFormattedText
+struct ExifFormattedText
 {
        const gchar *key;
        const gchar *description;
@@ -107,15 +105,20 @@ struct _ExifFormattedText
  *-----------------------------------------------------------------------------
  */
 
+void exif_init();
+
 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);
+/**
+ * @headerfile exif_get_original
+ * 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 *exif);
 
 
 gboolean exif_write(ExifData *exif);
@@ -138,8 +141,8 @@ guint exif_item_get_elements(ExifItem *item);
 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);
-gchar *exif_item_get_data_as_text(ExifItem *item);
+const gchar *exif_item_get_format_name(ExifItem *item, gboolean brief);
+gchar *exif_item_get_data_as_text(ExifItem *item, ExifData *exif);
 gint exif_item_get_integer(ExifItem *item, gint *value);
 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n);
 
@@ -148,10 +151,10 @@ gchar *exif_item_get_string(ExifItem *item, gint idx);
 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_update_metadata(ExifData *exif, const gchar *key, const GList *values);
-GList *exif_get_metadata(ExifData *exif, const gchar *key);
+GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format);
 
 guchar *exif_get_color_profile(ExifData *exif, guint *data_len);
 
@@ -160,15 +163,18 @@ 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);
+void exif_free_preview(const guchar *buf);
 
+gchar *metadata_file_info(FileData *fd, const gchar *key, MetadataFormat format);
+gchar *metadata_lua_info(FileData *fd, const gchar *key, MetadataFormat format);
 
 #endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */