exif-data.h File Reference

Defines the ExifData type and the associated functions. More...

`#include <libexif/exif-byte-order.h>`
`#include <libexif/exif-data-type.h>`
`#include <libexif/exif-ifd.h>`
`#include <libexif/exif-log.h>`
`#include <libexif/exif-tag.h>`
`#include <libexif/exif-content.h>`
`#include <libexif/exif-mnote-data.h>`
`#include <libexif/exif-mem.h>`

Go to the source code of this file.

## Data Structures

struct | _ExifData
| Represents the entire EXIF data found in an image. More...

## Macros

#define | exif_data_get_entry(d, t)
| Return an ExifEntry for the given tag if found in any IFD. More...

## Typedefs

typedef struct _ExifData | ExifData
| Represents the entire EXIF data found in an image.
typedef struct _ExifDataPrivate | ExifDataPrivate
typedef void(* | ExifDataForeachContentFunc) (ExifContent *, void *user_data)

## Enumerations

enum | ExifDataOption { EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS = 1 << 0, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION = 1 << 1, EXIF_DATA_OPTION_DONT_CHANGE_MAKER_NOTE = 1 << 2 }
| Options to configure the behaviour of ExifData. More...

## Functions

ExifData * | exif_data_new (void)
| Allocate a new ExifData. More...
ExifData * | exif_data_new_mem (ExifMem *)
| Allocate a new ExifData using the given memory allocator. More...
ExifData * | exif_data_new_from_file (const char *path)
| Allocate a new ExifData and load EXIF data from a JPEG file. More...
ExifData * | exif_data_new_from_data (const unsigned char *data, unsigned int size)
| Allocate a new ExifData and load EXIF data from a memory buffer. More...
void | exif_data_load_data (ExifData *data, const unsigned char *d, unsigned int size)
| Load the ExifData structure from the raw JPEG or EXIF data in the given memory buffer. More...
void | exif_data_save_data (ExifData *data, unsigned char **d, unsigned int *ds)
| Store raw EXIF data representing the ExifData structure into a memory buffer. More...
void | exif_data_ref (ExifData *data)
void | exif_data_unref (ExifData *data)
void | exif_data_free (ExifData *data)
ExifByteOrder | exif_data_get_byte_order (ExifData *data)
| Return the byte order in use by this EXIF structure. More...
void | exif_data_set_byte_order (ExifData *data, ExifByteOrder order)
| Set the byte order to use for this EXIF data. More...
ExifMnoteData * | exif_data_get_mnote_data (ExifData *d)
| Return the MakerNote data out of the EXIF data. More...
void | exif_data_fix (ExifData *d)
| Fix the EXIF data to bring it into specification. More...
void | exif_data_foreach_content (ExifData *data, ExifDataForeachContentFunc func, void *user_data)
| Execute a function on each IFD in turn. More...
const char * | exif_data_option_get_name (ExifDataOption o)
| Return a short textual description of the given ExifDataOption. More...
const char * | exif_data_option_get_description (ExifDataOption o)
| Return a verbose textual description of the given ExifDataOption. More...
void | exif_data_set_option (ExifData *d, ExifDataOption o)
| Set the given option on the given ExifData. More...
void | exif_data_unset_option (ExifData *d, ExifDataOption o)
| Clear the given option on the given ExifData. More...
void | exif_data_set_data_type (ExifData *d, ExifDataType dt)
| Set the data type for the given ExifData. More...
ExifDataType | exif_data_get_data_type (ExifData *d)
| Return the data type for the given ExifData. More...
void | exif_data_dump (ExifData *data)
| Dump all EXIF data to stdout. More...
void | exif_data_log (ExifData *data, ExifLog *log)
| Set the log message object for all IFDs. More...

## Detailed Description

Defines the ExifData type and the associated functions.

## Macro Definition Documentation

## exif_data_get_entry

#define exif_data_get_entry | ( |  | d,
|  |  | t
| ) |  |

Value:
(exif_content_get_entry(d->ifd[EXIF_IFD_0],t) ? \
exif_content_get_entry(d->ifd[EXIF_IFD_0],t) : \
exif_content_get_entry(d->ifd[EXIF_IFD_1],t) ? \
exif_content_get_entry(d->ifd[EXIF_IFD_1],t) : \
exif_content_get_entry(d->ifd[EXIF_IFD_EXIF],t) ? \
exif_content_get_entry(d->ifd[EXIF_IFD_EXIF],t) : \
exif_content_get_entry(d->ifd[EXIF_IFD_GPS],t) ? \
exif_content_get_entry(d->ifd[EXIF_IFD_GPS],t) : \
exif_content_get_entry(d->ifd[EXIF_IFD_INTEROPERABILITY],t) ? \
exif_content_get_entry(d->ifd[EXIF_IFD_INTEROPERABILITY],t) : NULL)
exif_content_get_entry
ExifEntry * exif_content_get_entry(ExifContent *content, ExifTag tag)
Return the ExifEntry in this IFD corresponding to the given tag.
Definition: exif-content.c:196

Return an ExifEntry for the given tag if found in any IFD.

Each IFD is searched in turn and the first containing a tag with this number is returned.

Parameters

  [in] | d | ExifData
  [in] | t | ExifTag

Returns
  ExifEntry* if found, else NULL if not found

## Enumeration Type Documentation

## ExifDataOption

enum ExifDataOption

Options to configure the behaviour of ExifData.

Enumerator
EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS | Act as though unknown tags are not present.
EXIF_DATA_OPTION_FOLLOW_SPECIFICATION | Fix the EXIF tags to follow the spec.
EXIF_DATA_OPTION_DONT_CHANGE_MAKER_NOTE | Leave the MakerNote alone, which could cause it to be corrupted.

## Function Documentation

## exif_data_dump()

void exif_data_dump | ( | ExifData * | data | ) |

Dump all EXIF data to stdout.

This is intended for diagnostic purposes only.

Parameters

  [in] | data | EXIF data

References _ExifData::data, exif_content_dump(), _ExifData::ifd, and _ExifData::size.

## exif_data_fix()

void exif_data_fix | ( | ExifData * | d | ) |

Fix the EXIF data to bring it into specification.

Call exif_content_fix on each IFD to fix existing entries, create any new entries that are mandatory but do not yet exist, and remove any entries that are not allowed.

Parameters

  [in,out] | d | EXIF data

References exif_data_foreach_content().

## exif_data_foreach_content()

void exif_data_foreach_content | ( | ExifData * | data,
|  | ExifDataForeachContentFunc | func,
|  | void * | user_data
| ) |  |

Execute a function on each IFD in turn.

Parameters

  [in] | data | EXIF data over which to iterate
  [in] | func | function to call for each entry
  [in] | user_data | data to pass into func on each call

Referenced by exif_data_fix(), and exif_data_set_byte_order().

## exif_data_get_byte_order()

ExifByteOrder exif_data_get_byte_order | ( | ExifData * | data | ) |

Return the byte order in use by this EXIF structure.

Parameters

  [in] | data | EXIF data

Returns
  byte order

Referenced by exif_entry_get_value(), and exif_entry_initialize().

## exif_data_get_data_type()

ExifDataType exif_data_get_data_type | ( | ExifData * | d | ) |

Return the data type for the given ExifData.

Parameters

  [in] | d | EXIF data

Returns
  data type, or #EXIF_DATA_TYPE_UNKNOWN on error

Referenced by exif_content_fix().

## exif_data_get_mnote_data()

ExifMnoteData* exif_data_get_mnote_data | ( | ExifData * | d | ) |

Return the MakerNote data out of the EXIF data.

Only certain MakerNote formats that are recognized by libexif are supported. The pointer references a member of the ExifData structure and must NOT be freed by the caller.

Parameters

  [in] | d | EXIF data

Returns
  MakerNote data, or NULL if not found or not supported

## exif_data_load_data()

void exif_data_load_data | ( | ExifData * | data,
|  | const unsigned char * | d,
|  | unsigned int | size
| ) |  |

Load the ExifData structure from the raw JPEG or EXIF data in the given memory buffer.

If the EXIF data contains a recognized MakerNote, it is loaded and stored as well for later retrieval by exif_data_get_mnote_data. If the EXIF_DATA_OPTION_FOLLOW_SPECIFICATION option has been set on this ExifData, then the tags are automatically fixed after loading (by calling exif_data_fix).

Parameters

  [in,out] | data | EXIF data
  [in] | d | pointer to raw JPEG or EXIF data
  [in] | size | number of bytes of data at d

Referenced by exif_data_new_from_data(), and exif_loader_get_data().

## exif_data_log()

void exif_data_log | ( | ExifData * | data,
|  | ExifLog * | log
| ) |  |

Set the log message object for all IFDs.

Parameters

  [in] | data | EXIF data
  [in] | log | ExifLog

Referenced by exif_loader_get_data().

## exif_data_new()

ExifData* exif_data_new | ( | void |  | ) |

Allocate a new ExifData.

The ExifData contains an empty ExifContent for each IFD and the default set of options, which has EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS and EXIF_DATA_OPTION_FOLLOW_SPECIFICATION set.

Returns
  allocated ExifData, or NULL on error

References exif_data_new_mem(), exif_mem_new_default(), and exif_mem_unref().

Referenced by exif_data_new_from_data().

## exif_data_new_from_data()

ExifData* exif_data_new_from_data | ( | const unsigned char * | data,
|  | unsigned int | size
| ) |  |

Allocate a new ExifData and load EXIF data from a memory buffer.

Parameters

  [in] | data | pointer to raw JPEG or EXIF data
  [in] | size | number of bytes of data at data

Returns
  allocated ExifData, or NULL on error

References _ExifEntry::components, exif_data_load_data(), exif_data_new(), exif_get_long(), exif_get_short(), _ExifEntry::format, and _ExifEntry::tag.

## exif_data_new_from_file()

ExifData* exif_data_new_from_file | ( | const char * | path | ) |

Allocate a new ExifData and load EXIF data from a JPEG file.

Uses an ExifLoader internally to do the loading.

Parameters

  [in] | path | filename including path

Returns
  allocated ExifData, or NULL on error

References exif_loader_get_data(), exif_loader_new(), exif_loader_unref(), and exif_loader_write_file().

## exif_data_new_mem()

ExifData* exif_data_new_mem | ( | ExifMem * |  | ) |

Allocate a new ExifData using the given memory allocator.

The ExifData contains an empty ExifContent for each IFD and the default set of options, which has EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS and EXIF_DATA_OPTION_FOLLOW_SPECIFICATION set.

Returns
  allocated ExifData, or NULL on error

Referenced by exif_data_new(), and exif_loader_get_data().

## exif_data_option_get_description()

const char* exif_data_option_get_description | ( | ExifDataOption | o | ) |

Return a verbose textual description of the given ExifDataOption.

Parameters

  [in] | o | option

Returns
  verbose localized textual description of the option

## exif_data_option_get_name()

const char* exif_data_option_get_name | ( | ExifDataOption | o | ) |

Return a short textual description of the given ExifDataOption.

Parameters

  [in] | o | option

Returns
  localized textual description of the option

## exif_data_save_data()

void exif_data_save_data | ( | ExifData * | data,
|  | unsigned char ** | d,
|  | unsigned int * | ds
| ) |  |

Store raw EXIF data representing the ExifData structure into a memory buffer.

The buffer is allocated by this function and must subsequently be freed by the caller using the matching free function as used by the ExifMem in use by this ExifData.

Parameters

  [in] | data | EXIF data
  [out] | d | pointer to buffer pointer containing raw EXIF data on return
  [out] | ds | pointer to variable to hold the number of bytes of data at d, or set to 0 on error

References EXIF_BYTE_ORDER_INTEL, exif_set_long(), and exif_set_short().

## exif_data_set_byte_order()

void exif_data_set_byte_order | ( | ExifData * | data,
|  | ExifByteOrder | order
| ) |  |

Set the byte order to use for this EXIF data.

If any tags already exist (including MakerNote tags) they are are converted to the specified byte order.

Parameters

  [in,out] | data | EXIF data
  [in] | order | byte order

References exif_data_foreach_content().

## exif_data_set_data_type()

void exif_data_set_data_type | ( | ExifData * | d,
|  | ExifDataType | dt
| ) |  |

Set the data type for the given ExifData.

Parameters

  [in] | d | EXIF data
  [in] | dt | data type

## exif_data_set_option()

void exif_data_set_option | ( | ExifData * | d,
|  | ExifDataOption | o
| ) |  |

Set the given option on the given ExifData.

Parameters

  [in] | d | EXIF data
  [in] | o | option

## exif_data_unset_option()

void exif_data_unset_option | ( | ExifData * | d,
|  | ExifDataOption | o
| ) |  |

Clear the given option on the given ExifData.

Parameters

  [in] | d | EXIF data
  [in] | o | option