~ubuntu-branches/ubuntu/jaunty/freeimage/jaunty

« back to all changes in this revision

Viewing changes to FreeImage/Source/Metadata/FreeImageTag.h

  • Committer: Bazaar Package Importer
  • Author(s): Andres Mejia
  • Date: 2008-05-15 03:18:00 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080515031800-rhaod8dwr4trqewm
Tags: 3.10.0-1
* New upstream release. Closes: #471242
* Added extra freeimage documentation in orig tarball.
* Added get-orig-source target.
* Added Homepage field in control file.
* Removing some unnecessary stuff from rules file.
* Adding some necessary build dependencies.
* Adding some modifications to allow for configuring various compiler flags.
* Fix FTBFS on amd64.
* Adding debug package.
* Added DM-Upload-Allowed: yes field.
* Added Vcs entries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// ==========================================================
2
 
// Tag manipulation functions
3
 
//
4
 
// Design and implementation by
5
 
// - Herv� Drolon <drolon@infonie.fr>
6
 
//
7
 
// This file is part of FreeImage 3
8
 
//
9
 
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
10
 
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
11
 
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
12
 
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
13
 
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
14
 
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
15
 
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
16
 
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
17
 
// THIS DISCLAIMER.
18
 
//
19
 
// Use at your own risk!
20
 
// ==========================================================
21
 
 
22
 
#ifndef FREEIMAGETAG_H
23
 
#define FREEIMAGETAG_H
24
 
 
25
 
// ==========================================================
26
 
// Exif JPEG tags
27
 
// ==========================================================
28
 
 
29
 
// ----------------------------------------------------------
30
 
// TIFF Rev. 6.0 Attribute Information Used in Exif
31
 
// ----------------------------------------------------------
32
 
 
33
 
// Tags relating to image data structure
34
 
 
35
 
#define TAG_IMAGE_WIDTH                                 0x0100
36
 
#define TAG_IMAGE_HEIGHT                                0x0101
37
 
#define TAG_BITS_PER_SAMPLE                             0x0102
38
 
#define TAG_COMPRESSION                                 0x0103
39
 
#define TAG_PHOTOMETRIC_INTERPRETATION  0x0106
40
 
#define TAG_ORIENTATION                                 0x0112
41
 
#define TAG_SAMPLES_PER_PIXEL                   0x0115
42
 
#define TAG_PLANAR_CONFIGURATION                0x011C
43
 
#define TAG_YCBCR_SUBSAMPLING                   0x0212
44
 
#define TAG_YCBCR_POSITIONING                   0x0213
45
 
#define TAG_X_RESOLUTION                                0x011A
46
 
#define TAG_Y_RESOLUTION                                0x011B
47
 
#define TAG_RESOLUTION_UNIT                             0x0128
48
 
 
49
 
// Tags relating to recording offset
50
 
 
51
 
#define TAG_STRIP_OFFSETS                                       0x0111
52
 
#define TAG_ROWS_PER_STRIP                                      0x0116
53
 
#define TAG_STRIP_BYTE_COUNTS                           0x0117
54
 
#define TAG_JPEG_INTERCHANGE_FORMAT                     0x0201
55
 
#define TAG_JPEG_INTERCHANGE_FORMAT_LENGTH      0x0202
56
 
 
57
 
// Tags relating to image data characteristics
58
 
 
59
 
#define TAG_TRANSFER_FUNCTION           0x012D
60
 
#define TAG_WHITE_POINT                         0x013E
61
 
#define TAG_PRIMARY_CHROMATICITIES      0x013F
62
 
#define TAG_YCBCR_COEFFICIENTS          0x0211
63
 
#define TAG_REFERENCE_BLACK_WHITE       0x0214
64
 
 
65
 
// Other tags
66
 
 
67
 
#define TAG_DATETIME                            0x0132
68
 
#define TAG_IMAGE_DESCRIPTION           0x010E
69
 
#define TAG_MAKE                                        0x010F
70
 
#define TAG_MODEL                                       0x0110
71
 
#define TAG_SOFTWARE                            0x0131
72
 
#define TAG_ARTIST                                      0x013B
73
 
#define TAG_COPYRIGHT                           0x8298
74
 
 
75
 
// ----------------------------------------------------------
76
 
// Exif IFD Attribute Information
77
 
// ----------------------------------------------------------
78
 
 
79
 
// Tags relating to version
80
 
 
81
 
#define TAG_EXIF_VERSION                        0x9000
82
 
#define TAG_FLASHPIX_VERSION            0xA000
83
 
 
84
 
// Tag relating to image data characteristics
85
 
 
86
 
#define TAG_COLOR_SPACE                         0xA001
87
 
 
88
 
// Tags relating to image configuration
89
 
 
90
 
#define TAG_COMPONENTS_CONFIGURATION    0x9101
91
 
#define TAG_COMPRESSED_BITS_PER_PIXEL   0x9102
92
 
#define TAG_PIXEL_X_DIMENSION                   0xA002
93
 
#define TAG_PIXEL_Y_DIMENSION                   0xA003
94
 
 
95
 
// Tags relating to user information
96
 
 
97
 
#define TAG_MARKER_NOTE         0x927C
98
 
#define TAG_USER_COMMENT        0x9286
99
 
    
100
 
// Tag relating to related file information
101
 
 
102
 
#define TAG_RELATED_SOUND_FILE                  0xA004
103
 
 
104
 
// Tags relating to date and time
105
 
 
106
 
#define TAG_DATETIME_ORIGINAL                   0x9003
107
 
#define TAG_DATETIME_DIGITIZED                  0x9004
108
 
#define TAG_SUBSECOND_TIME                              0x9290
109
 
#define TAG_SUBSECOND_TIME_ORIGINAL             0x9291
110
 
#define TAG_SUBSECOND_TIME_DIGITIZED    0x9292
111
 
 
112
 
// Tags relating to picture-taking conditions
113
 
 
114
 
#define TAG_EXPOSURE_TIME                               0x829A
115
 
#define TAG_FNUMBER                                             0x829D
116
 
#define TAG_EXPOSURE_PROGRAM                    0x8822
117
 
#define TAG_SPECTRAL_SENSITIVITY                0x8824
118
 
#define TAG_ISO_SPEED_RATINGS                   0x8827
119
 
#define TAG_OECF                                                0x8828
120
 
#define TAG_SHUTTER_SPEED_VALUE                 0x9201
121
 
#define TAG_APERTURE_VALUE                              0x9202
122
 
#define TAG_BRIGHTNESS_VALUE                    0x9203
123
 
#define TAG_EXPOSURE_BIAS_VALUE                 0x9204
124
 
#define TAG_MAX_APERTURE_VALUE                  0x9205
125
 
#define TAG_SUBJECT_DISTANCE                    0x9206
126
 
#define TAG_METERING_MODE                               0x9207
127
 
#define TAG_LIGHT_SOURCE                                0x9208
128
 
#define TAG_FLASH                                               0x9209
129
 
#define TAG_FOCAL_LENGTH                                0x920A
130
 
#define TAG_SUBJECT_AREA                                0x9214
131
 
#define TAG_FLASH_ENERGY                                0xA20B
132
 
#define TAG_SPATIAL_FREQ_RESPONSE               0xA20C
133
 
#define TAG_FOCAL_PLANE_X_RES                   0xA20E
134
 
#define TAG_FOCAL_PLANE_Y_RES                   0xA20F
135
 
#define TAG_FOCAL_PLANE_UNIT                    0xA210
136
 
#define TAG_SUBJECT_LOCATION                    0xA214
137
 
#define TAG_EXPOSURE_INDEX                              0xA215
138
 
#define TAG_SENSING_METHOD                              0xA217
139
 
#define TAG_FILE_SOURCE                                 0xA300
140
 
#define TAG_SCENE_TYPE                                  0xA301
141
 
#define TAG_CFA_PATTERN                                 0xA302
142
 
#define TAG_CUSTOM_RENDERED                             0xA401
143
 
#define TAG_EXPOSURE_MODE                               0xA402
144
 
#define TAG_WHITE_BALANCE                               0xA403
145
 
#define TAG_DIGITAL_ZOOM_RATIO                  0xA404
146
 
#define TAG_FOCAL_LENGTH_IN_35MM_FILM   0xA405
147
 
#define TAG_SCENE_CAPTURE_TYPE                  0xA406
148
 
#define TAG_GAIN_CONTROL                                0xA407
149
 
#define TAG_CONTRAST                                    0xA408
150
 
#define TAG_SATURATION                                  0xA409
151
 
#define TAG_SHARPNESS                                   0xA40A
152
 
#define TAG_DEVICE_SETTING_DESCRIPTION  0xA40B
153
 
#define TAG_SUBJECT_DISTANCE_RANGE              0xA40C
154
 
 
155
 
// Other tags
156
 
 
157
 
#define TAG_IMAGE_UNIQUE_ID                             0xA420
158
 
 
159
 
// ----------------------------------------------------------
160
 
// GPS Attribute Information
161
 
// ----------------------------------------------------------
162
 
 
163
 
#define TAG_GPS_VERSION_ID                              0x0000
164
 
#define TAG_GPS_LATITUDE_REF                    0x0001
165
 
#define TAG_GPS_LATITUDE                                0x0002
166
 
#define TAG_GPS_LONGITUDE_REF                   0x0003
167
 
#define TAG_GPS_LONGITUDE                               0x0004
168
 
#define TAG_GPS_ALTITUDE_REF                    0x0005
169
 
#define TAG_GPS_ALTITUDE                                0x0006
170
 
#define TAG_GPS_TIME_STAMP                              0x0007
171
 
#define TAG_GPS_SATELLITES                              0x0008
172
 
#define TAG_GPS_STATUS                                  0x0009
173
 
#define TAG_GPS_MEASURE_MODE                    0x000A
174
 
#define TAG_GPS_DOP                                             0x000B
175
 
#define TAG_GPS_SPEED_REF                               0x000C
176
 
#define TAG_GPS_SPEED                                   0x000D
177
 
#define TAG_GPS_TRACK_REF                               0x000E
178
 
#define TAG_GPS_TRACK                                   0x000F
179
 
#define TAG_GPS_IMG_DIRECTION_REF               0x0010
180
 
#define TAG_GPS_IMG_DIRECTION                   0x0011
181
 
#define TAG_GPS_MAP_DATUM                               0x0012
182
 
#define TAG_GPS_DEST_LATITUDE_REF               0x0013
183
 
#define TAG_GPS_DEST_LATITUDE                   0x0014
184
 
#define TAG_GPS_DEST_LONGITUDE_REF              0x0015
185
 
#define TAG_GPS_DEST_LONGITUDE                  0x0016
186
 
#define TAG_GPS_DEST_BEARING_REF                0x0017
187
 
#define TAG_GPS_DEST_BEARING                    0x0018
188
 
#define TAG_GPS_DEST_DISTANCE_REF               0x0019
189
 
#define TAG_GPS_DEST_DISTANCE                   0x001A
190
 
#define TAG_GPS_PROCESSING_METHOD               0x001B
191
 
#define TAG_GPS_AREA_INFORMATION                0x001C
192
 
#define TAG_GPS_DATE_STAMP                              0x001D
193
 
#define TAG_GPS_DIFFERENTIAL                    0x001E
194
 
 
195
 
// ==========================================================
196
 
// IPTC/NAA tags
197
 
// ==========================================================
198
 
 
199
 
#define TAG_RECORD_VERSION                                      0x0200
200
 
#define TAG_CAPTION                                                     0x0278
201
 
#define TAG_WRITER                                                      0x027A
202
 
#define TAG_HEADLINE                                            0x0269
203
 
#define TAG_SPECIAL_INSTRUCTIONS                        0x0228
204
 
#define TAG_BY_LINE                                                     0x0250
205
 
#define TAG_BY_LINE_TITLE                                       0x0255
206
 
#define TAG_CREDIT                                                      0x026E
207
 
#define TAG_SOURCE                                                      0x0273
208
 
#define TAG_OBJECT_NAME                                         0x0205
209
 
#define TAG_DATE_CREATED                                        0x0237
210
 
#define TAG_CITY                                                        0x025A
211
 
#define TAG_PROVINCE_OR_STATE                           0x025F
212
 
#define TAG_COUNTRY_OR_PRIMARY_LOCATION         0x0265
213
 
#define TAG_ORIGINAL_TRANSMISSION_REFERENCE 0x0267
214
 
#define TAG_CATEGORY                                            0x020F
215
 
#define TAG_SUPPLEMENTAL_CATEGORIES                     0x0214
216
 
#define TAG_URGENCY                                                     0x020A
217
 
#define TAG_KEYWORDS                                            0x0219
218
 
#define TAG_COPYRIGHT_NOTICE                            0x0274
219
 
#define TAG_RELEASE_DATE                                        0x021E
220
 
#define TAG_RELEASE_TIME                                        0x0223
221
 
#define TAG_TIME_CREATED                                        0x023C
222
 
#define TAG_ORIGINATING_PROGRAM                         0x0241
223
 
 
224
 
// ==========================================================
225
 
// GeoTIFF tags
226
 
// ==========================================================
227
 
 
228
 
// tags 33550 is a private tag registered to SoftDesk, Inc
229
 
#define TIFFTAG_GEOPIXELSCALE           33550
230
 
// tags 33920-33921 are private tags registered to Intergraph, Inc
231
 
#define TIFFTAG_INTERGRAPH_MATRIX       33920
232
 
#define TIFFTAG_GEOTIEPOINTS            33922
233
 
// tags 34263-34264 are private tags registered to NASA-JPL Carto Group
234
 
#define TIFFTAG_JPL_CARTO_IFD           34263
235
 
#define TIFFTAG_GEOTRANSMATRIX          34264    /* New Matrix Tag replaces 33920 */
236
 
// tags 34735-3438 are private tags registered to SPOT Image, Inc
237
 
#define TIFFTAG_GEOKEYDIRECTORY         34735
238
 
#define TIFFTAG_GEODOUBLEPARAMS         34736
239
 
#define TIFFTAG_GEOASCIIPARAMS          34737
240
 
 
241
 
// ==========================================================
242
 
// FreeImage Animation tags
243
 
// ==========================================================
244
 
 
245
 
#define ANIMTAG_LOGICALWIDTH    0x0001
246
 
#define ANIMTAG_LOGICALHEIGHT   0x0002
247
 
#define ANIMTAG_GLOBALPALETTE   0x0003
248
 
#define ANIMTAG_LOOP                    0x0004
249
 
#define ANIMTAG_FRAMELEFT               0x1001
250
 
#define ANIMTAG_FRAMETOP                0x1002
251
 
#define ANIMTAG_NOLOCALPALETTE  0x1003
252
 
#define ANIMTAG_INTERLACED              0x1004
253
 
#define ANIMTAG_FRAMETIME               0x1005
254
 
#define ANIMTAG_DISPOSALMETHOD  0x1006
255
 
 
256
 
// --------------------------------------------------------------------------
257
 
// Helper functions to deal with the FITAG structure
258
 
// --------------------------------------------------------------------------
259
 
 
260
 
/** 
261
 
Describes the tag format descriptor
262
 
@param type Tag data type
263
 
@return Returns the width of a single element, in bytes
264
 
@see FREE_IMAGE_MDTYPE
265
 
*/
266
 
int FreeImage_TagDataWidth(WORD type);
267
 
 
268
 
// --------------------------------------------------------------------------
269
 
 
270
 
/**
271
 
        Structure to hold a tag information
272
 
*/
273
 
typedef struct tagTagInfo {
274
 
        WORD tag;                       // Tag ID (required)
275
 
        char *fieldname;        // Field name (required)
276
 
        char *description;      // Field description (may be NULL)
277
 
} TagInfo;
278
 
 
279
 
 
280
 
/**
281
 
        Class to hold tag information (based on Meyers� Singleton).<br>
282
 
 
283
 
        Sample usage :<br>
284
 
        <code>
285
 
        TagLib& s = TagLib::instance();
286
 
        TagInfo *tag_info = s.getTagInfo(EXIF_MAIN, 0x0100);
287
 
        </code>
288
 
 
289
 
*/
290
 
 
291
 
class TagLib {
292
 
public:
293
 
 
294
 
        /**
295
 
        internal tag info tables registered in TagLib
296
 
        */
297
 
        enum MDMODEL {
298
 
                UNKNOWN,
299
 
                EXIF_MAIN, 
300
 
                EXIF_EXIF, 
301
 
                EXIF_GPS, 
302
 
                EXIF_INTEROP,
303
 
                EXIF_MAKERNOTE_CANON,
304
 
                EXIF_MAKERNOTE_CASIOTYPE1,
305
 
                EXIF_MAKERNOTE_CASIOTYPE2,
306
 
                EXIF_MAKERNOTE_FUJIFILM,
307
 
                EXIF_MAKERNOTE_KYOCERA,
308
 
                EXIF_MAKERNOTE_MINOLTA,
309
 
                EXIF_MAKERNOTE_NIKONTYPE1,
310
 
                EXIF_MAKERNOTE_NIKONTYPE2,
311
 
                EXIF_MAKERNOTE_NIKONTYPE3,
312
 
                EXIF_MAKERNOTE_OLYMPUS,
313
 
                EXIF_MAKERNOTE_PANASONIC,
314
 
                EXIF_MAKERNOTE_ASAHI,
315
 
                EXIF_MAKERNOTE_PENTAX,
316
 
                EXIF_MAKERNOTE_SONY,
317
 
                IPTC,
318
 
                GEOTIFF,
319
 
                ANIMATION
320
 
        };
321
 
 
322
 
private:
323
 
 
324
 
        typedef std::map<WORD, TagInfo*> TAGINFO;
325
 
        typedef std::map<int, TAGINFO*>  TABLEMAP;
326
 
 
327
 
        /// store hash tables for all known tag info tables
328
 
        TABLEMAP _table_map;
329
 
 
330
 
private:
331
 
        /**
332
 
        Constructor (private)<br>
333
 
        This is where the tag info tables are initialized.
334
 
        @see addMetadataModel
335
 
        */
336
 
        TagLib();
337
 
 
338
 
        /// Assignement operator (disabled)
339
 
        void operator=(TagLib&);
340
 
 
341
 
        /// Copy constructor (disabled)
342
 
        TagLib(const TagLib&);
343
 
        
344
 
        /** 
345
 
        Used in the constructor to initialize the tag tables
346
 
        @param md_model Internal metadata model
347
 
        @param tag_table Tag info table
348
 
        @return Returns TRUE if successful, returns FALSE otherwise
349
 
        */
350
 
        BOOL addMetadataModel(MDMODEL md_model, TagInfo *tag_table);
351
 
 
352
 
public:
353
 
        /// Destructor
354
 
        ~TagLib();
355
 
 
356
 
        /**
357
 
        @return Returns a reference to the TagLib instance
358
 
        */
359
 
        static TagLib& instance();
360
 
 
361
 
        /**
362
 
        Given a tag ID, returns its TagInfo descriptor
363
 
        @param md_model Internal metadata model
364
 
        @param tagID tag ID
365
 
        @return Returns the TagInfo descriptor if successful, returns NULL otherwise
366
 
        */
367
 
        const TagInfo* getTagInfo(MDMODEL md_model, WORD tagID);
368
 
 
369
 
        /**
370
 
        Given a tag ID, returns its tag field name. 
371
 
        When the tag is unknown and defaultKey is not NULL, a string such as "Tag 0x1234" is returned. 
372
 
        This string is contained in the provided defaultKey buffer (assumed to be an array of at least 16 chars). 
373
 
        @param md_model Internal metadata model
374
 
        @param tagID tag ID
375
 
        @param defaultKey Assumed to be an array of 16 chars. If not NULL, build a key for unknown tags
376
 
        @return Returns the tag field name if successful, returns an 'unknown tag' string contained in defaultKey otherwise
377
 
        */
378
 
        const char* getTagFieldName(MDMODEL md_model, WORD tagID, char *defaultKey);
379
 
 
380
 
        /**
381
 
        Given a tag ID, returns its description. 
382
 
        When the tag has no description, a NULL value is returned.
383
 
        @param md_model Internal metadata model
384
 
        @param tagID tag ID
385
 
        @return Returns the tag description if successful, returns NULL otherwise
386
 
        */
387
 
        const char* getTagDescription(MDMODEL md_model, WORD tagID);
388
 
 
389
 
        /**
390
 
        Given a tag field name, returns its tag ID. 
391
 
        When the tag doesn't exists, a value '-1' is returned.
392
 
        @param md_model Internal metadata model
393
 
        @param key tag field name
394
 
        @return Returns the tag ID if successful, returns -1 otherwise
395
 
        */
396
 
        int getTagID(MDMODEL md_model, const char *key);
397
 
 
398
 
        /**
399
 
        Perform a conversion between internal metadata models and FreeImage public metadata models
400
 
        @param md_model Internal metadata model
401
 
        */
402
 
        FREE_IMAGE_MDMODEL getFreeImageModel(MDMODEL model);
403
 
 
404
 
};
405
 
 
406
 
// --------------------------------------------------------------------------
407
 
// Constant strings
408
 
// --------------------------------------------------------------------------
409
 
 
410
 
/// Name of the XMP field
411
 
static char *g_TagLib_XMPFieldName = "XMLPacket";
412
 
 
413
 
// --------------------------------------------------------------------------
414
 
// Metadata routines
415
 
// --------------------------------------------------------------------------
416
 
 
417
 
#if defined(__cplusplus)
418
 
extern "C" {
419
 
#endif
420
 
 
421
 
// JPEG Exif profile
422
 
BOOL jpeg_read_exif_profile(FIBITMAP *dib, const BYTE *dataptr, unsigned int datalen);
423
 
 
424
 
// JPEG / TIFF IPTC profile
425
 
BOOL read_iptc_profile(FIBITMAP *dib, const BYTE *dataptr, unsigned int datalen);
426
 
BOOL write_iptc_profile(FIBITMAP *dib, BYTE **profile, unsigned *profile_size);
427
 
 
428
 
#if defined(__cplusplus)
429
 
}
430
 
#endif
431
 
 
432
 
 
433
 
#endif // FREEIMAGETAG_H
434
 
 
435