#include <config.h>
#include <libexif/exif-mnote-data.h>
#include <libexif/exif-data.h>
#include <libexif/exif-ifd.h>
#include <libexif/exif-mnote-data-priv.h>
#include <libexif/exif-utils.h>
#include <libexif/exif-loader.h>
#include <libexif/exif-log.h>
#include <libexif/i18n.h>
#include <libexif/olympus/exif-mnote-data-olympus.h>
#include <libexif/canon/exif-mnote-data-canon.h>
#include <libexif/pentax/exif-mnote-data-pentax.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
Include dependency graph for exif-data.c:
Go to the source code of this file.
Data Structures | |
struct | _ExifDataPrivate |
struct | _ByteOrderChangeData |
Defines | |
#define | MAX(a, b) (((a) > (b)) ? (a) : (b)) |
#define | JPEG_MARKER_SOI 0xd8 |
#define | JPEG_MARKER_APP0 0xe0 |
#define | JPEG_MARKER_APP1 0xe1 |
#define | CHECK_REC(i) |
#define | LOG_TOO_SMALL |
Typedefs | |
typedef _ByteOrderChangeData | ByteOrderChangeData |
Enumerations | |
enum | ExifDataTypeMakerNote { EXIF_DATA_TYPE_MAKER_NOTE_NONE = 0, EXIF_DATA_TYPE_MAKER_NOTE_CANON = 1, EXIF_DATA_TYPE_MAKER_NOTE_OLYMPUS = 2, EXIF_DATA_TYPE_MAKER_NOTE_PENTAX = 3 } |
Functions | |
static void * | exif_data_alloc (ExifData *data, unsigned int i) |
ExifMnoteData * | exif_data_get_mnote_data (ExifData *d) |
ExifData * | exif_data_new (void) |
ExifData * | exif_data_new_mem (ExifMem *mem) |
ExifData * | exif_data_new_from_data (const unsigned char *data, unsigned int size) |
static void | exif_data_load_data_entry (ExifData *data, ExifEntry *entry, const unsigned char *d, unsigned int size, unsigned int offset) |
static void | exif_data_save_data_entry (ExifData *data, ExifEntry *e, unsigned char **d, unsigned int *ds, unsigned int offset) |
static void | exif_data_load_data_thumbnail (ExifData *data, const unsigned char *d, unsigned int ds, ExifLong offset, ExifLong size) |
static void | exif_data_load_data_content (ExifData *data, ExifIfd ifd, const unsigned char *d, unsigned int ds, unsigned int offset, unsigned int recursion_depth) |
static int | cmp_func (const unsigned char *p1, const unsigned char *p2, ExifByteOrder o) |
static int | cmp_func_intel (const void *elem1, const void *elem2) |
static int | cmp_func_motorola (const void *elem1, const void *elem2) |
static void | exif_data_save_data_content (ExifData *data, ExifContent *ifd, unsigned char **d, unsigned int *ds, unsigned int offset) |
static ExifDataTypeMakerNote | exif_data_get_type_maker_note (ExifData *d) |
void | exif_data_load_data (ExifData *data, const unsigned char *d_orig, unsigned int ds_orig) |
void | exif_data_save_data (ExifData *data, unsigned char **d, unsigned int *ds) |
ExifData * | exif_data_new_from_file (const char *path) |
load exif data from file | |
void | exif_data_ref (ExifData *data) |
void | exif_data_unref (ExifData *data) |
void | exif_data_free (ExifData *data) |
void | exif_data_dump (ExifData *data) |
ExifByteOrder | exif_data_get_byte_order (ExifData *data) |
void | exif_data_foreach_content (ExifData *data, ExifDataForeachContentFunc func, void *user_data) |
static void | entry_set_byte_order (ExifEntry *e, void *data) |
static void | content_set_byte_order (ExifContent *content, void *data) |
void | exif_data_set_byte_order (ExifData *data, ExifByteOrder order) |
void | exif_data_log (ExifData *data, ExifLog *log) |
ExifLog * | exif_data_get_log (ExifData *) |
const char * | exif_data_option_get_name (ExifDataOption o) |
const char * | exif_data_option_get_description (ExifDataOption o) |
void | exif_data_set_option (ExifData *d, ExifDataOption o) |
void | exif_data_unset_option (ExifData *d, ExifDataOption o) |
static void | fix_func (ExifContent *c, void *data) |
void | exif_data_fix (ExifData *d) |
void | exif_data_set_data_type (ExifData *d, ExifDataType dt) |
ExifDataType | exif_data_get_data_type (ExifData *d) |
Variables | |
static const unsigned char | ExifHeader [] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00} |
struct { | |
ExifDataOption option | |
const char * name | |
const char * description | |
} | exif_data_option [] |
#define CHECK_REC | ( | i | ) |
Value:
if ((i) == ifd) { \ exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, \ "ExifData", "Recursive entry in IFD " \ "'%s' detected. Skipping...", \ exif_ifd_get_name (i)); \ break; \ } \ if (data->ifd[(i)]->count) { \ exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, \ "ExifData", "Attemt to load IFD " \ "'%s' multiple times detected. " \ "Skipping...", \ exif_ifd_get_name (i)); \ break; \ }
Definition at line 296 of file exif-data.c.
Referenced by exif_data_load_data_content().
#define JPEG_MARKER_APP0 0xe0 |
#define JPEG_MARKER_APP1 0xe1 |
#define JPEG_MARKER_SOI 0xd8 |
#define LOG_TOO_SMALL |
Value:
exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "ExifData", \ _("Size of data too small to allow for EXIF data."));
Definition at line 693 of file exif-data.c.
Referenced by exif_data_load_data().
#define MAX | ( | a, | |||
b | ) | (((a) > (b)) ? (a) : (b)) |
Definition at line 41 of file exif-data.c.
typedef struct _ByteOrderChangeData ByteOrderChangeData |
Definition at line 1034 of file exif-data.c.
EXIF_DATA_TYPE_MAKER_NOTE_NONE | |
EXIF_DATA_TYPE_MAKER_NOTE_CANON | |
EXIF_DATA_TYPE_MAKER_NOTE_OLYMPUS | |
EXIF_DATA_TYPE_MAKER_NOTE_PENTAX |
Definition at line 647 of file exif-data.c.
static int cmp_func | ( | const unsigned char * | p1, | |
const unsigned char * | p2, | |||
ExifByteOrder | o | |||
) | [static] |
Definition at line 426 of file exif-data.c.
References exif_get_short().
Referenced by cmp_func_intel(), and cmp_func_motorola().
static int cmp_func_intel | ( | const void * | elem1, | |
const void * | elem2 | |||
) | [static] |
static int cmp_func_motorola | ( | const void * | elem1, | |
const void * | elem2 | |||
) | [static] |
static void content_set_byte_order | ( | ExifContent * | content, | |
void * | data | |||
) | [static] |
Definition at line 1051 of file exif-data.c.
References entry_set_byte_order(), and exif_content_foreach_entry().
Referenced by exif_data_set_byte_order().
static void entry_set_byte_order | ( | ExifEntry * | e, | |
void * | data | |||
) | [static] |
Definition at line 1040 of file exif-data.c.
References _ExifEntry::components, _ExifEntry::data, exif_array_set_byte_order(), _ExifEntry::format, _ByteOrderChangeData::new, and _ByteOrderChangeData::old.
Referenced by content_set_byte_order().
static void* exif_data_alloc | ( | ExifData * | data, | |
unsigned int | i | |||
) | [static] |
Definition at line 75 of file exif-data.c.
References EXIF_LOG_NO_MEMORY, exif_mem_alloc(), _ExifDataPrivate::log, _ExifDataPrivate::mem, and _ExifData::priv.
Referenced by exif_data_load_data_entry(), exif_data_load_data_thumbnail(), and exif_data_save_data().
void exif_data_dump | ( | ExifData * | data | ) |
Definition at line 986 of file exif-data.c.
References _ExifContent::count, exif_content_dump(), EXIF_IFD_COUNT, exif_ifd_get_name(), and _ExifData::ifd.
void exif_data_fix | ( | ExifData * | d | ) |
Definition at line 1171 of file exif-data.c.
References exif_data_foreach_content(), and fix_func().
Referenced by exif_data_load_data().
void exif_data_foreach_content | ( | ExifData * | data, | |
ExifDataForeachContentFunc | func, | |||
void * | user_data | |||
) |
Definition at line 1022 of file exif-data.c.
References EXIF_IFD_COUNT, and _ExifData::ifd.
Referenced by exif_data_fix(), and exif_data_set_byte_order().
void exif_data_free | ( | ExifData * | data | ) |
Definition at line 949 of file exif-data.c.
References exif_content_unref(), EXIF_IFD_COUNT, _ExifData::ifd, _ExifDataPrivate::mem, and _ExifData::priv.
Referenced by exif_data_new_mem(), and exif_data_unref().
ExifByteOrder exif_data_get_byte_order | ( | ExifData * | data | ) |
Definition at line 1013 of file exif-data.c.
References _ExifDataPrivate::order, and _ExifData::priv.
Referenced by exif_entry_fix(), exif_entry_get_value(), and exif_entry_initialize().
ExifDataType exif_data_get_data_type | ( | ExifData * | d | ) |
Definition at line 1186 of file exif-data.c.
References _ExifDataPrivate::data_type, EXIF_DATA_TYPE_COUNT, and _ExifData::priv.
Referenced by exif_content_fix().
Definition at line 1090 of file exif-data.c.
References _ExifDataPrivate::log, and _ExifData::priv.
Referenced by exif_entry_alloc(), exif_entry_log(), and exif_entry_realloc().
ExifMnoteData* exif_data_get_mnote_data | ( | ExifData * | d | ) |
static ExifDataTypeMakerNote exif_data_get_type_maker_note | ( | ExifData * | d | ) | [static] |
Definition at line 655 of file exif-data.c.
References _ExifEntry::data, exif_data_get_entry, EXIF_DATA_TYPE_MAKER_NOTE_CANON, EXIF_DATA_TYPE_MAKER_NOTE_NONE, EXIF_DATA_TYPE_MAKER_NOTE_OLYMPUS, EXIF_DATA_TYPE_MAKER_NOTE_PENTAX, exif_entry_get_value(), EXIF_TAG_MAKE, EXIF_TAG_MAKER_NOTE, _ExifEntry::size, and value.
Referenced by exif_data_load_data().
void exif_data_load_data | ( | ExifData * | data, | |
const unsigned char * | d_orig, | |||
unsigned int | ds_orig | |||
) |
Definition at line 698 of file exif-data.c.
References _, EXIF_BYTE_ORDER_INTEL, EXIF_BYTE_ORDER_MOTOROLA, exif_data_fix(), exif_data_get_type_maker_note(), exif_data_load_data_content(), EXIF_DATA_OPTION_FOLLOW_SPECIFICATION, EXIF_DATA_TYPE_MAKER_NOTE_CANON, EXIF_DATA_TYPE_MAKER_NOTE_OLYMPUS, EXIF_DATA_TYPE_MAKER_NOTE_PENTAX, exif_get_long(), exif_get_short(), EXIF_IFD_0, EXIF_IFD_1, exif_log(), EXIF_LOG_CODE_CORRUPT_DATA, EXIF_LOG_CODE_DEBUG, exif_mnote_data_canon_new(), exif_mnote_data_load(), exif_mnote_data_log(), exif_mnote_data_olympus_new(), exif_mnote_data_pentax_new(), exif_mnote_data_set_byte_order(), exif_mnote_data_set_offset(), ExifHeader, JPEG_MARKER_APP0, JPEG_MARKER_APP1, JPEG_MARKER_SOI, _ExifDataPrivate::log, LOG_TOO_SMALL, _ExifDataPrivate::order, and _ExifData::priv.
Referenced by exif_data_new_from_data(), and exif_loader_get_data().
static void exif_data_load_data_content | ( | ExifData * | data, | |
ExifIfd | ifd, | |||
const unsigned char * | d, | |||
unsigned int | ds, | |||
unsigned int | offset, | |||
unsigned int | recursion_depth | |||
) | [static] |
Definition at line 314 of file exif-data.c.
References CHECK_REC, exif_content_add_entry(), exif_data_load_data_entry(), exif_data_load_data_thumbnail(), EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS, exif_entry_new_mem(), exif_entry_unref(), exif_get_long(), exif_get_short(), EXIF_IFD_COUNT, EXIF_IFD_EXIF, exif_ifd_get_name(), EXIF_IFD_GPS, EXIF_IFD_INTEROPERABILITY, exif_log(), EXIF_LOG_CODE_CORRUPT_DATA, EXIF_LOG_CODE_DEBUG, EXIF_TAG_EXIF_IFD_POINTER, exif_tag_get_name_in_ifd(), EXIF_TAG_GPS_INFO_IFD_POINTER, EXIF_TAG_INTEROPERABILITY_IFD_POINTER, EXIF_TAG_JPEG_INTERCHANGE_FORMAT, EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, _ExifData::ifd, _ExifDataPrivate::log, _ExifDataPrivate::mem, _ExifDataPrivate::options, _ExifDataPrivate::order, _ExifData::priv, and tag.
Referenced by exif_data_load_data().
static void exif_data_load_data_entry | ( | ExifData * | data, | |
ExifEntry * | entry, | |||
const unsigned char * | d, | |||
unsigned int | size, | |||
unsigned int | offset | |||
) | [static] |
Definition at line 159 of file exif-data.c.
References _ExifEntry::components, _ExifEntry::data, exif_data_alloc(), exif_format_get_size(), exif_get_long(), exif_get_short(), exif_log(), EXIF_LOG_CODE_DEBUG, exif_tag_get_name(), EXIF_TAG_MAKER_NOTE, _ExifEntry::format, _ExifDataPrivate::log, _ExifDataPrivate::offset_mnote, _ExifDataPrivate::order, _ExifData::priv, _ExifEntry::size, and _ExifEntry::tag.
Referenced by exif_data_load_data_content().
static void exif_data_load_data_thumbnail | ( | ExifData * | data, | |
const unsigned char * | d, | |||
unsigned int | ds, | |||
ExifLong | offset, | |||
ExifLong | size | |||
) | [static] |
Definition at line 277 of file exif-data.c.
References _ExifData::data, exif_data_alloc(), exif_log(), EXIF_LOG_CODE_DEBUG, exif_mem_free(), _ExifDataPrivate::log, _ExifDataPrivate::mem, _ExifData::priv, and _ExifData::size.
Referenced by exif_data_load_data_content().
Definition at line 1073 of file exif-data.c.
References exif_content_log(), EXIF_IFD_COUNT, exif_log_ref(), exif_log_unref(), _ExifData::ifd, _ExifDataPrivate::log, and _ExifData::priv.
Referenced by exif_loader_get_data().
ExifData* exif_data_new | ( | void | ) |
Definition at line 97 of file exif-data.c.
References exif_data_new_mem(), exif_mem_new_default(), and exif_mem_unref().
Referenced by exif_data_new_from_data().
ExifData* exif_data_new_from_data | ( | const unsigned char * | data, | |
unsigned int | size | |||
) |
ExifData* exif_data_new_from_file | ( | const char * | path | ) |
load exif data from file
[in] | path | filename including path |
Definition at line 915 of file exif-data.c.
References exif_loader_get_data(), exif_loader_new(), exif_loader_unref(), and exif_loader_write_file().
Definition at line 108 of file exif-data.c.
References exif_content_new_mem(), exif_data_free(), EXIF_IFD_COUNT, exif_mem_alloc(), exif_mem_free(), exif_mem_ref(), _ExifData::ifd, _ExifDataPrivate::mem, _ExifContent::parent, _ExifData::priv, and _ExifDataPrivate::ref_count.
Referenced by exif_data_new(), and exif_loader_get_data().
const char* exif_data_option_get_description | ( | ExifDataOption | o | ) |
Definition at line 1122 of file exif-data.c.
References _, description, exif_data_option, and option.
const char* exif_data_option_get_name | ( | ExifDataOption | o | ) |
void exif_data_ref | ( | ExifData * | data | ) |
Definition at line 929 of file exif-data.c.
References _ExifData::priv, and _ExifDataPrivate::ref_count.
void exif_data_save_data | ( | ExifData * | data, | |
unsigned char ** | d, | |||
unsigned int * | ds | |||
) |
Definition at line 875 of file exif-data.c.
References EXIF_BYTE_ORDER_INTEL, exif_data_alloc(), exif_data_save_data_content(), EXIF_IFD_0, exif_log(), EXIF_LOG_CODE_DEBUG, exif_set_long(), exif_set_short(), ExifHeader, _ExifData::ifd, _ExifDataPrivate::log, _ExifDataPrivate::order, and _ExifData::priv.
static void exif_data_save_data_content | ( | ExifData * | data, | |
ExifContent * | ifd, | |||
unsigned char ** | d, | |||
unsigned int * | ds, | |||
unsigned int | offset | |||
) | [static] |
Definition at line 449 of file exif-data.c.
References _ExifContent::count, exif_data_save_data_entry(), EXIF_FORMAT_LONG, EXIF_IFD_0, EXIF_IFD_1, EXIF_IFD_COUNT, EXIF_IFD_EXIF, exif_ifd_get_name(), EXIF_IFD_GPS, EXIF_IFD_INTEROPERABILITY, exif_log(), EXIF_LOG_CODE_DEBUG, EXIF_LOG_NO_MEMORY, exif_mem_realloc(), exif_set_long(), exif_set_short(), EXIF_TAG_EXIF_IFD_POINTER, EXIF_TAG_GPS_INFO_IFD_POINTER, _ExifData::ifd, ifd, _ExifDataPrivate::log, _ExifDataPrivate::mem, _ExifDataPrivate::order, _ExifData::priv, and _ExifData::size.
Referenced by exif_data_save_data().
static void exif_data_save_data_entry | ( | ExifData * | data, | |
ExifEntry * | e, | |||
unsigned char ** | d, | |||
unsigned int * | ds, | |||
unsigned int | offset | |||
) | [static] |
Definition at line 209 of file exif-data.c.
References _ExifEntry::components, _ExifEntry::data, exif_format_get_size(), EXIF_LOG_NO_MEMORY, exif_mem_free(), exif_mem_realloc(), exif_mnote_data_save(), exif_mnote_data_set_offset(), exif_set_long(), exif_set_short(), EXIF_TAG_MAKER_NOTE, _ExifEntry::format, _ExifDataPrivate::log, _ExifDataPrivate::md, _ExifDataPrivate::mem, _ExifDataPrivate::order, _ExifData::priv, _ExifEntry::size, and _ExifEntry::tag.
Referenced by exif_data_save_data_content().
void exif_data_set_byte_order | ( | ExifData * | data, | |
ExifByteOrder | order | |||
) |
Definition at line 1057 of file exif-data.c.
References content_set_byte_order(), exif_data_foreach_content(), exif_mnote_data_set_byte_order(), _ExifDataPrivate::md, _ByteOrderChangeData::new, _ByteOrderChangeData::old, _ExifDataPrivate::order, and _ExifData::priv.
void exif_data_set_data_type | ( | ExifData * | d, | |
ExifDataType | dt | |||
) |
Definition at line 1177 of file exif-data.c.
References _ExifDataPrivate::data_type, and _ExifData::priv.
void exif_data_set_option | ( | ExifData * | d, | |
ExifDataOption | o | |||
) |
Definition at line 1133 of file exif-data.c.
References _ExifDataPrivate::options, and _ExifData::priv.
void exif_data_unref | ( | ExifData * | data | ) |
Definition at line 938 of file exif-data.c.
References exif_data_free(), _ExifData::priv, and _ExifDataPrivate::ref_count.
void exif_data_unset_option | ( | ExifData * | d, | |
ExifDataOption | o | |||
) |
Definition at line 1142 of file exif-data.c.
References _ExifDataPrivate::options, and _ExifData::priv.
static void fix_func | ( | ExifContent * | c, | |
void * | data | |||
) | [static] |
Definition at line 1151 of file exif-data.c.
References exif_content_fix(), exif_content_get_ifd(), exif_content_remove_entry(), EXIF_IFD_1, exif_log(), and EXIF_LOG_CODE_DEBUG.
const char* description |
Definition at line 1100 of file exif-data.c.
struct { ... } exif_data_option[] [static] |
Referenced by exif_data_option_get_description(), and exif_data_option_get_name().
const unsigned char ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00} [static] |
Definition at line 54 of file exif-data.c.
Referenced by exif_data_load_data(), exif_data_save_data(), and exif_loader_write().
const char* name |
Definition at line 1099 of file exif-data.c.
Definition at line 1098 of file exif-data.c.
Referenced by exif_data_option_get_description(), and exif_data_option_get_name().