00001
00023 #ifndef __EXIF_DATA_H__
00024 #define __EXIF_DATA_H__
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 #include <libexif/exif-byte-order.h>
00031 #include <libexif/exif-data-type.h>
00032 #include <libexif/exif-ifd.h>
00033 #include <libexif/exif-log.h>
00034 #include <libexif/exif-tag.h>
00035
00036 typedef struct _ExifData ExifData;
00037 typedef struct _ExifDataPrivate ExifDataPrivate;
00038
00039 #include <libexif/exif-content.h>
00040 #include <libexif/exif-mnote-data.h>
00041 #include <libexif/exif-mem.h>
00042
00043 struct _ExifData
00044 {
00045 ExifContent *ifd[EXIF_IFD_COUNT];
00046
00047 unsigned char *data;
00048 unsigned int size;
00049
00050 ExifDataPrivate *priv;
00051 };
00052
00053 ExifData *exif_data_new (void);
00054 ExifData *exif_data_new_mem (ExifMem *);
00055
00059 ExifData *exif_data_new_from_file (const char *path);
00060 ExifData *exif_data_new_from_data (const unsigned char *data,
00061 unsigned int size);
00062
00063 void exif_data_load_data (ExifData *data, const unsigned char *d,
00064 unsigned int size);
00065 void exif_data_save_data (ExifData *data, unsigned char **d,
00066 unsigned int *size);
00067
00068 void exif_data_ref (ExifData *data);
00069 void exif_data_unref (ExifData *data);
00070 void exif_data_free (ExifData *data);
00071
00072 ExifByteOrder exif_data_get_byte_order (ExifData *data);
00073 void exif_data_set_byte_order (ExifData *data, ExifByteOrder order);
00074
00075 ExifMnoteData *exif_data_get_mnote_data (ExifData *);
00076 void exif_data_fix (ExifData *);
00077
00078 typedef void (* ExifDataForeachContentFunc) (ExifContent *, void *user_data);
00079 void exif_data_foreach_content (ExifData *data,
00080 ExifDataForeachContentFunc func,
00081 void *user_data);
00082
00083 typedef enum {
00084 EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS = 1 << 0,
00085 EXIF_DATA_OPTION_FOLLOW_SPECIFICATION = 1 << 1,
00086 EXIF_DATA_OPTION_DONT_CHANGE_MAKER_NOTE = 1 << 2
00087 } ExifDataOption;
00088
00089 const char *exif_data_option_get_name (ExifDataOption);
00090 const char *exif_data_option_get_description (ExifDataOption);
00091 void exif_data_set_option (ExifData *, ExifDataOption);
00092 void exif_data_unset_option (ExifData *, ExifDataOption);
00093
00094 void exif_data_set_data_type (ExifData *, ExifDataType);
00095 ExifDataType exif_data_get_data_type (ExifData *);
00096
00097
00098 void exif_data_dump (ExifData *data);
00099 void exif_data_log (ExifData *data, ExifLog *log);
00100
00102 #define exif_data_get_entry(d,t) \
00103 (exif_content_get_entry(d->ifd[EXIF_IFD_0],t) ? \
00104 exif_content_get_entry(d->ifd[EXIF_IFD_0],t) : \
00105 exif_content_get_entry(d->ifd[EXIF_IFD_1],t) ? \
00106 exif_content_get_entry(d->ifd[EXIF_IFD_1],t) : \
00107 exif_content_get_entry(d->ifd[EXIF_IFD_EXIF],t) ? \
00108 exif_content_get_entry(d->ifd[EXIF_IFD_EXIF],t) : \
00109 exif_content_get_entry(d->ifd[EXIF_IFD_GPS],t) ? \
00110 exif_content_get_entry(d->ifd[EXIF_IFD_GPS],t) : \
00111 exif_content_get_entry(d->ifd[EXIF_IFD_INTEROPERABILITY],t) ? \
00112 exif_content_get_entry(d->ifd[EXIF_IFD_INTEROPERABILITY],t) : NULL)
00113
00114 #ifdef __cplusplus
00115 }
00116 #endif
00117
00118 #endif