C++程序  |  88行  |  3.32 KB

/*! \file exif.h exif/exif.h
 * \brief Dummy header file for documentation purposes
 * \date 2007
 * \author Hans Ulrich Niedermann, et. al.
 *
 * \mainpage The libexif library
 *
 * \section general_notes General Notes
 *
 * This documentation is work in progress, as is the code itself.
 *
 * \section using_libexif Using libexif
 *
 * \#include <libexif/exif-data.h>
 *
 * libexif provides a libexif.pc file for use with pkgconfig on the
 * libexif installation. If you are using libtool to build your
 * package, you can also make use of libexif-uninstalled.pc.
 *
 * An application using libexif would typically first create an #ExifLoader to
 * load EXIF data into memory. From there, it would extract that data as
 * an #ExifData to start manipulating it. Each IFD is represented by its own
 * #ExifContent within that #ExifData, which contains all the tag data in
 * #ExifEntry form.  If the MakerNote data is required, an #ExifMnoteData
 * can be extracted from the #ExifData and manipulated with the MakerNote
 * functions.
 *
 * libexif is written in C using an object-based style that defines
 * sets of functions that operate on each data structure.
 *
 * \section data_structures Primary Data Structures
 *
 * #ExifLoader
 * State maintained by the loader interface while importing EXIF data
 * from an external file or memory
 *
 * #ExifData
 * The entirety of EXIF data found in an image
 *
 * #ExifContent
 * All EXIF tags in a single IFD
 *
 * #ExifEntry
 * Data found in a single EXIF tag
 *
 * #ExifMnoteData
 * All data found in the MakerNote tag
 *
 * #ExifLog
 * State maintained by the logging interface
 *
 * \section string_conventions String Conventions
 *
 * Strings are 8 bit characters ("char*"). When libexif is compiled with
 * NLS, character set and encoding are as set in the current locale,
 * except for strings that come directly from the data in EXIF
 * tags which are generally returned in raw form.  Most EXIF strings are
 * defined to be plain 7-bit ASCII so this raw form should be acceptable in
 * any UNIX locale, but some software ignores the specification and
 * writes 8-bit characters.  It is up to the application to detect this
 * and deal with it intelligently.
 *
 * \section memory_management Memory Management Patterns
 *
 * For pointers to data objects, libexif uses reference counting. The
 * pattern is to use the foo_new() function to create a data object,
 * foo_ref() to increase the reference counter, and foo_unref() to
 * decrease the reference counter and possibly free(3)ing the memory.
 *
 * Libexif by default relies on the calloc(3), realloc(3), and free(3)
 * functions, but the libexif user can tell libexif to use their
 * special memory management functions at runtime.
 * 
 * \section thread_safety Thread Safety
 * 
 * libexif is thread safe when the underlying C library is also thread safe.
 * Some C libraries may require defining a special macro (like _REENTRANT)
 * to ensure this, or may require linking to a special thread-safe version of
 * the library.
 *
 * The programmer must ensure that each object allocated by libexif is only
 * used in a single thread at once. For example, an ExifData* allocated
 * in one thread can't be used in a second thread if there is any chance
 * that the first thread could use it at the same time. Multiple threads
 * can use libexif without issues if they never share handles.
 *
 */