#ifndef __EXIF_H
#define __EXIF_H
+#include <glib.h>
+
+#include "typedefs.h"
+
+struct ExifData;
+struct ExifItem;
+struct FileData;
+
#define EXIF_FORMATTED() "formatted."
#define EXIF_FORMATTED_LEN (sizeof(EXIF_FORMATTED()) - 1)
#define EXIF_FORMAT_COUNT 13
-typedef enum {
+enum ExifFormatType {
EXIF_FORMAT_UNKNOWN = 0,
EXIF_FORMAT_BYTE_UNSIGNED = 1,
EXIF_FORMAT_STRING = 2,
EXIF_FORMAT_RATIONAL = 10,
EXIF_FORMAT_FLOAT = 11,
EXIF_FORMAT_DOUBLE = 12
-} ExifFormatType;
+};
/*
*-----------------------------------------------------------------------------
*/
-typedef struct _ExifItem ExifItem;
-
-typedef struct _ExifRational ExifRational;
-struct _ExifRational
+struct ExifRational
{
guint32 num;
guint32 den;
/* enums useful for image manipulation */
-typedef enum {
+enum ExifOrientationType {
EXIF_ORIENTATION_UNKNOWN = 0,
EXIF_ORIENTATION_TOP_LEFT = 1,
EXIF_ORIENTATION_TOP_RIGHT = 2,
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;
*-----------------------------------------------------------------------------
*/
-void exif_init(void);
+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);
gchar *exif_item_get_description(ExifItem *item);
guint exif_item_get_format_id(ExifItem *item);
const gchar *exif_item_get_format_name(ExifItem *item, gboolean brief);
-gchar *exif_item_get_data_as_text(ExifItem *item);
+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);
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: */