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