108 lines
3.5 KiB
C
108 lines
3.5 KiB
C
/* Metadata API.
|
|
*/
|
|
|
|
/*
|
|
|
|
Copyright (C) 1991-2005 The National Gallery
|
|
|
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
/*
|
|
|
|
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
|
|
*/
|
|
|
|
#ifndef IM_META_H
|
|
#define IM_META_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /*__cplusplus*/
|
|
|
|
/* Reserved header names.
|
|
*/
|
|
#define IM_META_EXIF_NAME "exif-data"
|
|
#define IM_META_ICC_NAME "icc-profile-data"
|
|
#define IM_META_XML "xml-header"
|
|
|
|
/* Types we add for meta fields.
|
|
*/
|
|
#define IM_TYPE_SAVE_STRING (im_save_string_get_type())
|
|
GType im_save_string_get_type( void );
|
|
const char *im_save_string_get( const GValue *value );
|
|
void im_save_string_set( GValue *value, const char *str );
|
|
void im_save_string_setf( GValue *value, const char *fmt, ... )
|
|
__attribute__((format(printf, 2, 3)));
|
|
|
|
#define IM_TYPE_AREA (im_area_get_type())
|
|
GType im_area_get_type( void );
|
|
|
|
#define IM_TYPE_REF_STRING (im_ref_string_get_type())
|
|
GType im_ref_string_get_type( void );
|
|
int im_ref_string_set( GValue *value, const char *str );
|
|
const char *im_ref_string_get( const GValue *value );
|
|
size_t im_ref_string_get_length( const GValue *value );
|
|
|
|
#define IM_TYPE_BLOB (im_blob_get_type())
|
|
GType im_blob_get_type( void );
|
|
void *im_blob_get( const GValue *value, size_t *data_length );
|
|
int im_blob_set( GValue *value, im_callback_fn free_fn,
|
|
void *data, size_t length );
|
|
|
|
/* What we store in the Meta hash table. We can't just use GHashTable's
|
|
* key/value pairs, since we need to iterate over meta in Meta_traverse order.
|
|
*
|
|
* We don't refcount at this level ... large meta values are refcounted by
|
|
* their GValue implementation, see eg. MetaArea below.
|
|
*/
|
|
typedef struct _Meta {
|
|
IMAGE *im;
|
|
|
|
char *field; /* strdup() of field name */
|
|
GValue value; /* copy of value */
|
|
} Meta;
|
|
|
|
int im_meta_set( IMAGE *, const char *field, GValue * );
|
|
int im_meta_get( IMAGE *, const char *field, GValue * );
|
|
GType im_meta_get_type( IMAGE *im, const char *field );
|
|
|
|
int im_meta_set_int( IMAGE *, const char *field, int i );
|
|
int im_meta_get_int( IMAGE *, const char *field, int *i );
|
|
int im_meta_set_double( IMAGE *, const char *field, double d );
|
|
int im_meta_get_double( IMAGE *, const char *field, double *d );
|
|
int im_meta_set_area( IMAGE *, const char *field, im_callback_fn, void * );
|
|
int im_meta_get_area( IMAGE *, const char *field, void **data );
|
|
int im_meta_set_string( IMAGE *, const char *field, const char *str );
|
|
int im_meta_get_string( IMAGE *, const char *field, char **str );
|
|
int im_meta_set_blob( IMAGE *im, const char *field,
|
|
im_callback_fn free_fn, void *blob, size_t blob_length );
|
|
int im_meta_get_blob( IMAGE *im, const char *field,
|
|
void **blob, size_t *blob_length );
|
|
|
|
/* Internal.
|
|
*/
|
|
void im__meta_init_types( void );
|
|
void im__meta_destroy( IMAGE *im );
|
|
int im__meta_cp( IMAGE *, const IMAGE * );
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /*__cplusplus*/
|
|
|
|
#endif /*!IM_META_H*/
|