exif-data.c File Reference

#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)
ExifMnoteDataexif_data_get_mnote_data (ExifData *d)
ExifDataexif_data_new (void)
ExifDataexif_data_new_mem (ExifMem *mem)
ExifDataexif_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)
ExifDataexif_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)
ExifLogexif_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 Documentation

#define CHECK_REC (  ) 

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

Definition at line 50 of file exif-data.c.

Referenced by exif_data_load_data().

#define JPEG_MARKER_APP1   0xe1

Definition at line 52 of file exif-data.c.

Referenced by exif_data_load_data().

#define JPEG_MARKER_SOI   0xd8

Definition at line 48 of file exif-data.c.

Referenced by exif_data_load_data().

#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,
 )     (((a) > (b)) ? (a) : (b))

Definition at line 41 of file exif-data.c.


Typedef Documentation

typedef struct _ByteOrderChangeData ByteOrderChangeData

Definition at line 1034 of file exif-data.c.


Enumeration Type Documentation

enum ExifDataTypeMakerNote

Enumerator:
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.


Function Documentation

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]

Definition at line 435 of file exif-data.c.

References cmp_func(), and EXIF_BYTE_ORDER_INTEL.

static int cmp_func_motorola ( const void *  elem1,
const void *  elem2 
) [static]

Definition at line 442 of file exif-data.c.

References cmp_func(), and EXIF_BYTE_ORDER_MOTOROLA.

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().

ExifLog * exif_data_get_log ( ExifData  ) 

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  ) 

Definition at line 91 of file exif-data.c.

References _ExifDataPrivate::md, and _ExifData::priv.

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().

void exif_data_log ( ExifData data,
ExifLog log 
)

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 
)

Definition at line 149 of file exif-data.c.

References exif_data_load_data(), and exif_data_new().

ExifData* exif_data_new_from_file ( const char *  path  ) 

load exif data from file

Parameters:
[in] path filename including path
Foo bar blah bleh baz.

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().

ExifData* exif_data_new_mem ( ExifMem mem  ) 

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  ) 

Definition at line 1111 of file exif-data.c.

References _, exif_data_option, name, and option.

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.


Variable Documentation

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.

ExifDataOption option

Definition at line 1098 of file exif-data.c.

Referenced by exif_data_option_get_description(), and exif_data_option_get_name().


Generated on Tue Dec 19 14:34:00 2006 for EXIF library (libexif) Internals by  doxygen 1.5.1