Mercurial > geeqie
diff src/exif-int.h @ 176:695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
author | nadvornik |
---|---|
date | Wed, 13 Feb 2008 13:57:31 +0000 |
parents | |
children | 9dc8bc9b2bb9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/exif-int.h Wed Feb 13 13:57:31 2008 +0000 @@ -0,0 +1,175 @@ +/* + * GQView + * (C) 2006 John Ellis + * + * Authors: + * Support for Exif file format, originally written by Eric Swalens. + * Modified by Quy Tonthat + * Reimplemented with generic data storage by John Ellis + * + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef __EXIF_INT_H +#define __EXIF_INT_H + +#include "exif.h" + +/* + *----------------------------------------------------------------------------- + * Tag formats + *----------------------------------------------------------------------------- + */ + +typedef enum { + EXIF_BYTE_ORDER_INTEL, + EXIF_BYTE_ORDER_MOTOROLA +} ExifByteOrder; + +typedef struct _ExifFormatAttrib ExifFormatAttrib; +struct _ExifFormatAttrib +{ + ExifFormatType type; + guint size; + const gchar *short_name; + const gchar *description; +}; + +/* the list of known tag data formats */ +extern ExifFormatAttrib ExifFormatList[]; + + +/* + *----------------------------------------------------------------------------- + * Data storage + *----------------------------------------------------------------------------- + */ + +typedef struct _ExifMarker ExifMarker; +typedef struct _ExifTextList ExifTextList; + +struct _ExifData +{ + GList *items; /* list of (ExifItem *) */ + GList *current; /* for exif_get_next_item */ +}; + + +struct _ExifItem +{ + ExifFormatType format; + guint tag; + const ExifMarker *marker; + guint elements; + gpointer data; + guint data_len; +}; + +struct _ExifMarker +{ + guint tag; + ExifFormatType format; + gint components; + gchar *key; + gchar *description; + ExifTextList *list; +}; + +#define EXIF_MARKER_LIST_END { 0x0000, EXIF_FORMAT_UNKNOWN, 0, NULL, NULL, NULL } + +struct _ExifTextList +{ + gint value; + const gchar* description; +}; + +#define EXIF_TEXT_LIST_END { -1, NULL } + + +typedef struct _ExifFormattedText ExifFormattedText; +struct _ExifFormattedText +{ + const gchar *key; + const gchar *description; +}; + + +/* + *----------------------------------------------------------------------------- + * Data + *----------------------------------------------------------------------------- + */ + + + +/* the known exif tags list */ +extern ExifMarker ExifKnownMarkersList[]; + +/* the unknown tags utilize this generic list */ +extern ExifMarker ExifUnknownMarkersList[]; + +/* the list of specially formatted keys, for human readable output */ +extern ExifFormattedText ExifFormattedList[]; + + +/* + *----------------------------------------------------------------------------- + * functions + *----------------------------------------------------------------------------- + */ + + +/* usually for debugging to stdout */ +void exif_write_data_list(ExifData *exif, FILE *f, gint human_readable_list); + + + +/* These funcs for use by makernote/tiff parsers only */ + +#define EXIF_TIFF_MAX_LEVELS 4 + +#define EXIF_TIFD_OFFSET_TAG 0 +#define EXIF_TIFD_OFFSET_FORMAT 2 +#define EXIF_TIFD_OFFSET_COUNT 4 +#define EXIF_TIFD_OFFSET_DATA 8 +#define EXIF_TIFD_SIZE 12 + + +guint16 exif_byte_get_int16(unsigned char *f, ExifByteOrder bo); +guint32 exif_byte_get_int32(unsigned char *f, ExifByteOrder bo); +void exif_byte_put_int16(unsigned char *f, guint16 n, ExifByteOrder bo); +void exif_byte_put_int32(unsigned char *f, guint32 n, ExifByteOrder bo); + +ExifItem *exif_item_new(ExifFormatType format, guint tag, + guint elements, const ExifMarker *marker); +void exif_item_copy_data(ExifItem *item, void *src, guint len, + ExifFormatType src_format, ExifByteOrder bo); + +gint exif_parse_IFD_table(ExifData *exif, + unsigned char *tiff, guint offset, + guint size, ExifByteOrder bo, + gint level, + const ExifMarker *list); + +gint exif_tiff_directory_offset(unsigned char *data, const guint len, + guint *offset, ExifByteOrder *bo); +gint exif_tiff_parse(ExifData *exif, unsigned char *tiff, guint size, ExifMarker *list); + +gchar *exif_text_list_find_value(ExifTextList *list, guint value); + + +#endif +