1 /*
2  * * Copyright (C) 2006-2011 Anders Brander <anders@brander.dk>,
3  * * Anders Kvist <akv@lnxbx.dk> and Klaus Post <klauspost@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  */
19 
20 #ifndef RS_METADATA_H
21 #define RS_METADATA_H
22 
23 #include <glib-object.h>
24 
25 G_BEGIN_DECLS
26 
27 #define RS_TYPE_METADATA rs_metadata_get_type()
28 #define RS_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_METADATA, RSMetadata))
29 #define RS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_METADATA, RSMetadataClass))
30 #define RS_IS_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_METADATA))
31 #define RS_IS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_METADATA))
32 #define RS_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_METADATA, RSMetadataClass))
33 
34 typedef enum {
35 	MAKE_UNKNOWN = 0,
36 	MAKE_CANON,
37 	MAKE_CASIO,
38 	MAKE_EPSON,
39 	MAKE_FUJIFILM,
40 	MAKE_HASSELBLAD,
41 	MAKE_KODAK,
42 	MAKE_LEICA,
43 	MAKE_MAMIYA,
44 	MAKE_MINOLTA,
45 	MAKE_NIKON,
46 	MAKE_OLYMPUS,
47 	MAKE_PANASONIC,
48 	MAKE_PENTAX,
49 	MAKE_PHASEONE,
50 	MAKE_POLAROID,
51 	MAKE_RICOH,
52 	MAKE_SAMSUNG,
53 	MAKE_SIGMA,
54 	MAKE_SONY,
55 } RS_MAKE;
56 
57 struct _RSMetadata {
58 	GObject parent;
59 	gboolean dispose_has_run;
60 	RS_MAKE make;
61 	gchar *make_ascii;
62 	gchar *model_ascii;
63 	gchar *time_ascii;
64 	GTime timestamp;
65 	gushort orientation;
66 	gfloat aperture;
67 	gushort iso;
68 	gfloat shutterspeed;
69 	guint thumbnail_start;
70 	guint thumbnail_length;
71 	guint preview_start;
72 	guint preview_length;
73 	guint16 preview_planar_config;
74 	guint preview_width;
75 	guint preview_height;
76 	guint16 preview_bits [3];
77 	gdouble cam_mul[4];
78 	gdouble contrast;
79 	gdouble saturation;
80 	gdouble color_tone;
81 	gshort focallength;
82 	GdkPixbuf *thumbnail;
83 
84 	/* Lens info */
85 	gint lens_id;
86 	gdouble lens_min_focal;
87 	gdouble lens_max_focal;
88 	gdouble lens_min_aperture;
89 	gdouble lens_max_aperture;
90 	gchar *fixed_lens_identifier;
91 	gchar *lens_identifier;
92 };
93 
94 typedef struct {
95   GObjectClass parent_class;
96 } RSMetadataClass;
97 
98 GType rs_metadata_get_type (void);
99 
100 extern RSMetadata *rs_metadata_new (void);
101 extern RSMetadata *rs_metadata_new_from_file(const gchar *filename);
102 extern gboolean rs_metadata_load_from_file(RSMetadata *metadata, const gchar *filename);
103 extern void rs_metadata_normalize_wb(RSMetadata *metadata);
104 extern gchar *rs_metadata_get_short_description(RSMetadata *metadata);
105 extern GdkPixbuf *rs_metadata_get_thumbnail(RSMetadata *metadata);
106 
107 /* Attempts to load cached metadata first, then falls back to reading from file */
108 extern gboolean rs_metadata_load(RSMetadata *metadata, const gchar *filename);
109 
110 /* Save metadata to cache xml file and sidecar thumbnail*/
111 extern void rs_metadata_cache_save(RSMetadata *metadata, const gchar *filename);
112 
113 /**
114  * Deletes the on-disk cache (if any) for a photo
115  * @param filename The filename of the PHOTO - not the cache itself
116  */
117 extern void rs_metadata_delete_cache(const gchar *filename);
118 
119 G_END_DECLS
120 
121 #endif /* RS_METADATA_H */
122 
123