1 /* Eye Of GNOME -- Metadata Reader Interface
2  *
3  * Copyright (C) 2008 The Free Software Foundation
4  *
5  * Author: Felix Riemann <friemann@svn.gnome.org>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21 
22 #ifndef _EOG_METADATA_READER_H_
23 #define _EOG_METADATA_READER_H_
24 
25 #include <glib-object.h>
26 #ifdef HAVE_EXIF
27 #include "eog-exif-util.h"
28 #endif
29 #ifdef HAVE_EXEMPI
30 #include <exempi/xmp.h>
31 #endif
32 #ifdef HAVE_LCMS
33 #include <lcms2.h>
34 #endif
35 
36 G_BEGIN_DECLS
37 
38 #define EOG_TYPE_METADATA_READER	      (eog_metadata_reader_get_type ())
39 #define EOG_METADATA_READER(o)		      (G_TYPE_CHECK_INSTANCE_CAST ((o), EOG_TYPE_METADATA_READER, EogMetadataReader))
40 #define EOG_IS_METADATA_READER(o)	      (G_TYPE_CHECK_INSTANCE_TYPE ((o), EOG_TYPE_METADATA_READER))
41 #define EOG_METADATA_READER_GET_INTERFACE(o)  (G_TYPE_INSTANCE_GET_INTERFACE ((o), EOG_TYPE_METADATA_READER, EogMetadataReaderInterface))
42 
43 typedef struct _EogMetadataReader EogMetadataReader;
44 typedef struct _EogMetadataReaderInterface EogMetadataReaderInterface;
45 
46 struct _EogMetadataReaderInterface {
47 	GTypeInterface parent;
48 
49 	void		(*consume)		(EogMetadataReader *self,
50 						 const guchar *buf,
51 						 guint len);
52 
53 	gboolean	(*finished)		(EogMetadataReader *self);
54 
55 	void		(*get_raw_exif)		(EogMetadataReader *self,
56 						 guchar **data,
57 						 guint *len);
58 
59 	gpointer	(*get_exif_data)	(EogMetadataReader *self);
60 
61 	gpointer	(*get_icc_profile)	(EogMetadataReader *self);
62 
63 	gpointer	(*get_xmp_ptr)		(EogMetadataReader *self);
64 };
65 
66 typedef enum {
67 	EOG_METADATA_JPEG,
68 	EOG_METADATA_PNG
69 } EogMetadataFileType;
70 
71 G_GNUC_INTERNAL
72 GType                eog_metadata_reader_get_type	(void) G_GNUC_CONST;
73 
74 G_GNUC_INTERNAL
75 EogMetadataReader*   eog_metadata_reader_new 		(EogMetadataFileType type);
76 
77 G_GNUC_INTERNAL
78 void                 eog_metadata_reader_consume	(EogMetadataReader *emr,
79 							 const guchar *buf,
80 							 guint len);
81 
82 G_GNUC_INTERNAL
83 gboolean             eog_metadata_reader_finished	(EogMetadataReader *emr);
84 
85 G_GNUC_INTERNAL
86 void                 eog_metadata_reader_get_exif_chunk (EogMetadataReader *emr,
87 							 guchar **data,
88 							 guint *len);
89 
90 #ifdef HAVE_EXIF
91 G_GNUC_INTERNAL
92 ExifData*         eog_metadata_reader_get_exif_data	(EogMetadataReader *emr);
93 #endif
94 
95 #ifdef HAVE_EXEMPI
96 G_GNUC_INTERNAL
97 XmpPtr	     	     eog_metadata_reader_get_xmp_data	(EogMetadataReader *emr);
98 #endif
99 
100 #if 0
101 gpointer             eog_metadata_reader_get_iptc_chunk	(EogMetadataReader *emr);
102 IptcData*            eog_metadata_reader_get_iptc_data	(EogMetadataReader *emr);
103 #endif
104 
105 #ifdef HAVE_LCMS
106 G_GNUC_INTERNAL
107 cmsHPROFILE          eog_metadata_reader_get_icc_profile (EogMetadataReader *emr);
108 #endif
109 
110 G_END_DECLS
111 
112 #endif /* _EOG_METADATA_READER_H_ */
113