You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(22) |
Sep
(57) |
Oct
(39) |
Nov
(93) |
Dec
(72) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(15) |
Feb
(8) |
Mar
(12) |
Apr
(25) |
May
(2) |
Jun
|
Jul
(11) |
Aug
(32) |
Sep
(18) |
Oct
(53) |
Nov
|
Dec
(11) |
2004 |
Jan
(19) |
Feb
(1) |
Mar
(15) |
Apr
(17) |
May
(56) |
Jun
(19) |
Jul
(6) |
Aug
(16) |
Sep
(44) |
Oct
(31) |
Nov
(36) |
Dec
(13) |
2005 |
Jan
(2) |
Feb
(41) |
Mar
(304) |
Apr
(176) |
May
(19) |
Jun
(33) |
Jul
(14) |
Aug
(21) |
Sep
(4) |
Oct
(3) |
Nov
|
Dec
(8) |
2006 |
Jan
(18) |
Feb
(9) |
Mar
(5) |
Apr
(2) |
May
(2) |
Jun
(4) |
Jul
(2) |
Aug
|
Sep
(7) |
Oct
(10) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
(3) |
Mar
(1) |
Apr
(4) |
May
(124) |
Jun
(59) |
Jul
(1) |
Aug
(13) |
Sep
(3) |
Oct
(11) |
Nov
(30) |
Dec
(35) |
2008 |
Jan
(31) |
Feb
(42) |
Mar
(4) |
Apr
(5) |
May
(2) |
Jun
(12) |
Jul
(8) |
Aug
(2) |
Sep
(4) |
Oct
(5) |
Nov
(89) |
Dec
(23) |
2009 |
Jan
(71) |
Feb
(5) |
Mar
(8) |
Apr
(7) |
May
(8) |
Jun
(7) |
Jul
|
Aug
(4) |
Sep
(58) |
Oct
(74) |
Nov
(53) |
Dec
(32) |
2010 |
Jan
(8) |
Feb
(13) |
Mar
(4) |
Apr
|
May
|
Jun
(10) |
Jul
(1) |
Aug
(2) |
Sep
(12) |
Oct
(17) |
Nov
(2) |
Dec
(24) |
2011 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(24) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
(20) |
Mar
(18) |
Apr
|
May
|
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(12) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(8) |
Jun
|
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(5) |
From: Lutz M. <lu...@us...> - 2005-05-01 17:39:36
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv872/libexif Modified Files: exif-data.c Log Message: 2005-05-01 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_data_fix): Don't create EXIF_IFD_1 if no thumbnail data is available. Index: exif-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-data.c,v retrieving revision 1.81 retrieving revision 1.82 diff -u -p -d -r1.81 -r1.82 --- exif-data.c 30 Apr 2005 00:55:28 -0000 1.81 +++ exif-data.c 1 May 2005 17:39:25 -0000 1.82 @@ -1112,7 +1112,21 @@ exif_data_unset_option (ExifData *d, Exi static void fix_func (ExifContent *c, void *data) { - exif_content_fix (c); + switch (exif_content_get_ifd (c)) { + case EXIF_IFD_1: + if (c->parent->data) + exif_content_fix (c); + else { + exif_log (c->parent->priv->log, EXIF_LOG_CODE_DEBUG, "exif-data", + "No thumbnail but entries on thumbnail. These entries have been " + "removed."); + while (c->count) + exif_content_remove_entry (c, c->entries[c->count - 1]); + } + break; + default: + exif_content_fix (c); + } } void |
From: Lutz M. <lu...@us...> - 2005-04-30 01:17:38
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14550 Modified Files: ChangeLog README Log Message: 2005-04-30 Lutz Mueller <lu...@us...> * test/test-mem.c: Show how to create EXIF data. * README: New section USAGE. Index: README =================================================================== RCS file: /cvsroot/libexif/libexif/README,v retrieving revision 1.10 retrieving revision 1.11 diff -u -p -d -r1.10 -r1.11 --- README 30 Mar 2005 07:55:00 -0000 1.10 +++ README 30 Apr 2005 01:17:28 -0000 1.11 @@ -27,6 +27,16 @@ libexif can only handle some maker notes work needs to be done. Note that libmnote has been merged with libexif - it is no longer needed. +USAGE +----- + +Until someone writes some documentation, you need to refer to the header +files. The short test-program test/test-mem illustrates how to create valid +EXIF data from scratch, how to save EXIF data and how to load EXIF data +from data in memory. Don't hesitate to contact us +(<lib...@li...>) if you've got any questions +on how to use libexif. + FRONTENDS --------- @@ -50,12 +60,6 @@ LIBRARIES I know of the following libraries that use or have been inspired by libexif: - pel: PHP-Code (http://pel.sourceforge.net) -TODO ----- - -We should probably support the generation of an empty EXIF structure with all -mandatory tags. First ideas are in exif-tag.c. This has not yet been finished. - AUTHORS ------- Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.215 retrieving revision 1.216 diff -u -p -d -r1.215 -r1.216 --- ChangeLog 30 Apr 2005 00:55:27 -0000 1.215 +++ ChangeLog 30 Apr 2005 01:17:28 -0000 1.216 @@ -1,5 +1,10 @@ 2005-04-30 Lutz Mueller <lu...@us...> + * test/test-mem.c: Show how to create EXIF data. + * README: New section USAGE. + +2005-04-30 Lutz Mueller <lu...@us...> + * libexif/exif-data-type.h: New * libexif/*: Lots of changes to make it possible to validate data against the specification. |
From: Lutz M. <lu...@us...> - 2005-04-30 01:17:38
|
Update of /cvsroot/libexif/libexif/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14550/test Modified Files: test-mem.c Log Message: 2005-04-30 Lutz Mueller <lu...@us...> * test/test-mem.c: Show how to create EXIF data. * README: New section USAGE. Index: test-mem.c =================================================================== RCS file: /cvsroot/libexif/libexif/test/test-mem.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -p -d -r1.8 -r1.9 --- test-mem.c 10 Mar 2005 21:17:57 -0000 1.8 +++ test-mem.c 30 Apr 2005 01:17:28 -0000 1.9 @@ -39,24 +39,10 @@ main (int argc, char **argv) printf ("Creating EXIF data...\n"); ed = exif_data_new (); + exif_data_set_data_type (ed, EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY); - printf ("Creating EXIF entry...\n"); - e = exif_entry_new (); - exif_content_add_entry (ed->ifd[EXIF_IFD_0], e); - exif_entry_initialize (e, EXIF_TAG_EXIF_VERSION); - exif_entry_unref (e); - - printf ("Creating another EXIF entry...\n"); - e = exif_entry_new (); - exif_content_add_entry (ed->ifd[EXIF_IFD_0], e); - exif_entry_initialize (e, EXIF_TAG_DATE_TIME); - exif_entry_unref (e); - - printf ("Creating an EXIF entry in the EXIF IFD...\n"); - e = exif_entry_new (); - exif_content_add_entry (ed->ifd[EXIF_IFD_EXIF], e); - exif_entry_initialize (e, EXIF_TAG_FLASH_PIX_VERSION); - exif_entry_unref (e); + printf ("Fill EXIF data with all necessary entries to follow specs...\n"); + exif_data_fix (ed); exif_data_dump (ed); |
From: Lutz M. <lu...@us...> - 2005-04-30 00:56:07
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2801 Modified Files: ChangeLog Log Message: 2005-04-30 Lutz Mueller <lu...@us...> * libexif/exif-data-type.h: New * libexif/*: Lots of changes to make it possible to validate data against the specification. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.214 retrieving revision 1.215 diff -u -p -d -r1.214 -r1.215 --- ChangeLog 27 Apr 2005 21:11:50 -0000 1.214 +++ ChangeLog 30 Apr 2005 00:55:27 -0000 1.215 @@ -1,3 +1,9 @@ +2005-04-30 Lutz Mueller <lu...@us...> + + * libexif/exif-data-type.h: New + * libexif/*: Lots of changes to make it possible to validate data against + the specification. + 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_data_load_data_content): Add a special case. |
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2801/libexif Modified Files: Makefile.am exif-content.c exif-content.h exif-data.c exif-data.h exif-tag.c exif-tag.h Added Files: exif-data-type.h Log Message: 2005-04-30 Lutz Mueller <lu...@us...> * libexif/exif-data-type.h: New * libexif/*: Lots of changes to make it possible to validate data against the specification. Index: exif-content.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-content.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -p -d -r1.17 -r1.18 --- exif-content.c 27 Apr 2005 06:45:41 -0000 1.17 +++ exif-content.c 30 Apr 2005 00:55:28 -0000 1.18 @@ -223,3 +223,56 @@ exif_content_get_ifd (ExifContent *c) ((c)->parent->ifd[EXIF_IFD_INTEROPERABILITY] == (c)) ? EXIF_IFD_INTEROPERABILITY : EXIF_IFD_COUNT; } + +static void +fix_func (ExifEntry *e, void *data) +{ + exif_entry_fix (e); +} + +void +exif_content_fix (ExifContent *c) +{ + ExifIfd ifd = exif_content_get_ifd (c); + ExifDataType dt; + ExifTag t; + ExifEntry *e; + + if (!c) return; + + dt = exif_data_get_data_type (c->parent); + + /* First of all, fix all existing entries. */ + exif_content_foreach_entry (c, fix_func, NULL); + + /* + * Then check for existing tags that are not allowed and for + * non-existing mandatory tags. + */ + for (t = 0; t <= 0xffff; t++) { + switch (exif_tag_get_support_level_in_ifd (t, ifd, dt)) { + case EXIF_SUPPORT_LEVEL_MANDATORY: + if (exif_content_get_entry (c, t)) break; + exif_log (c->priv->log, EXIF_LOG_CODE_DEBUG, "exif-content", + "Tag '%s' is mandatory in IFD '%s' and has therefore been added.", + exif_tag_get_name_in_ifd (t, ifd), exif_ifd_get_name (ifd)); + e = exif_entry_new (); + exif_content_add_entry (c, e); + exif_entry_initialize (e, t); + exif_entry_unref (e); + break; + case EXIF_SUPPORT_LEVEL_NOT_RECORDED: + e = exif_content_get_entry (c, t); + if (!e) break; + exif_log (c->priv->log, EXIF_LOG_CODE_DEBUG, "exif-content", + "Tag '%s' is not recoreded in IFD '%s' and has therefore been " + "removed.", exif_tag_get_name_in_ifd (t, ifd), + exif_ifd_get_name (ifd)); + exif_content_remove_entry (c, e); + break; + case EXIF_SUPPORT_LEVEL_OPTIONAL: + default: + break; + } + } +} Index: exif-tag.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-tag.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -p -d -r1.26 -r1.27 --- exif-tag.c 28 Apr 2005 22:12:17 -0000 1.26 +++ exif-tag.c 30 Apr 2005 00:55:42 -0000 1.27 @@ -26,21 +26,24 @@ #include <stdlib.h> #include <string.h> -typedef enum { - ESL_MANDATORY = 1, /* Mandatory */ - ESL_CMANDATORY = 2, /* Conditionally mandatory */ - ESL_OPTIONAL = 3, /* Optional */ - /* 4 left out intentionally because we felt like it */ - ESL_COPTIONAL = 5, /* Conditionally optional */ - ESL_NOT_RECORDED = 6 /* Not recorded */ -} ExifSL; /* Exif Support Level */ +#define ESL_NNNN { EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED } +#define ESL_OOOO { EXIF_SUPPORT_LEVEL_OPTIONAL, EXIF_SUPPORT_LEVEL_OPTIONAL, EXIF_SUPPORT_LEVEL_OPTIONAL, EXIF_SUPPORT_LEVEL_OPTIONAL } +#define ESL_MMMN { EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_NOT_RECORDED } +#define ESL_MMMM { EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_MANDATORY } +#define ESL_OMON { EXIF_SUPPORT_LEVEL_OPTIONAL, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_OPTIONAL, EXIF_SUPPORT_LEVEL_NOT_RECORDED } +#define ESL_NNOO { EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_OPTIONAL, EXIF_SUPPORT_LEVEL_OPTIONAL } +#define ESL_NNMN { EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_NOT_RECORDED } +#define ESL_NNMM { EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_MANDATORY, EXIF_SUPPORT_LEVEL_MANDATORY } +#define ESL_NNNM { EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_MANDATORY } +#define ESL_NNNO { EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_NOT_RECORDED, EXIF_SUPPORT_LEVEL_OPTIONAL } +#define ESL_GPS { ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN } static struct { ExifTag tag; const char *name; const char *title; const char *description; - ExifSL esl[EXIF_IFD_COUNT]; + ExifSupportLevel esl[EXIF_IFD_COUNT][4]; } ExifTagTable[] = { {EXIF_TAG_NEW_SUBFILE_TYPE, "NewSubfileType", "New Subfile Type", N_("A general indication of the kind of data " @@ -52,38 +55,36 @@ static struct { "including the termination code (NULL). see the separate " "volume of Recommended Exif Interoperability Rules (ExifR98) " "for other tags used for ExifR98."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_NOT_RECORDED, ESL_COPTIONAL}}, + { ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_OOOO } }, {EXIF_TAG_INTEROPERABILITY_VERSION, "InteroperabilityVersion", "InteroperabilityVersion", "", - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_NOT_RECORDED, ESL_OPTIONAL}}, + { ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_OOOO } }, {EXIF_TAG_IMAGE_WIDTH, "ImageWidth", N_("Image Width"), N_("The number of columns of image data, equal to the number of " "pixels per row. In JPEG compressed data a JPEG marker is " "used instead of this tag."), - {ESL_MANDATORY, ESL_MANDATORY, ESL_MANDATORY, ESL_NOT_RECORDED}}, + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_IMAGE_LENGTH, "ImageLength", N_("Image Length"), N_("The number of rows of image data. In JPEG compressed data a " "JPEG marker is used instead of this tag."), - {ESL_MANDATORY, ESL_MANDATORY, ESL_MANDATORY, ESL_NOT_RECORDED}}, + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_BITS_PER_SAMPLE, "BitsPerSample", N_("Bits per Sample"), N_("The number of bits per image component. In this standard each " "component of the image is 8 bits, so the value for this " "tag is 9. See also <SamplesPerPixel>. In JPEG compressed data " "a JPEG marker is used instead of this tag."), - {ESL_MANDATORY, ESL_MANDATORY, ESL_MANDATORY, ESL_NOT_RECORDED}}, + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_COMPRESSION, "Compression", N_("Compression"), N_("The compression scheme used for the image data. When a " "primary image is JPEG compressed, this designation is " "not necessary and is omitted. When thumbnails use JPEG " "compression, this tag value is set to 6."), - {ESL_MANDATORY, ESL_MANDATORY, ESL_MANDATORY, ESL_NOT_RECORDED}}, + { ESL_MMMN, ESL_MMMM, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_PHOTOMETRIC_INTERPRETATION, "PhotometricInterpretation", N_("Photometric Interpretation"), N_("The pixel composition. In JPEG compressed data a JPEG " "marker is used instead of this tag."), - {ESL_MANDATORY, ESL_MANDATORY, ESL_MANDATORY, ESL_NOT_RECORDED}}, + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_FILL_ORDER, "FillOrder", N_("Fill Order"), ""}, {EXIF_TAG_DOCUMENT_NAME, "DocumentName", N_("Document Name"), ""}, {EXIF_TAG_IMAGE_DESCRIPTION, "ImageDescription", @@ -93,92 +94,105 @@ static struct { "the like. Two-bytes character codes cannot be used. " "When a 2-bytes code is necessary, the Exif Private tag " "<UserComment> is to be used."), - {ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY}}, + { ESL_OOOO, ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_MAKE, "Make", N_("Manufacturer"), N_("The manufacturer of the recording " "equipment. This is the manufacturer of the DSC, scanner, " "video digitizer or other equipment that generated the " "image. When the field is left blank, it is treated as " "unknown."), - {ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY}}, + { ESL_OOOO, ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN }}, {EXIF_TAG_MODEL, "Model", N_("Model"), N_("The model name or model number of the equipment. This is the " "model name or number of the DSC, scanner, video digitizer " "or other equipment that generated the image. When the field " "is left blank, it is treated as unknown."), - {ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY}}, + { ESL_OOOO, ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_STRIP_OFFSETS, "StripOffsets", N_("Strip Offsets"), N_("For each strip, the byte offset of that strip. It is " "recommended that this be selected so the number of strip " "bytes does not exceed 64 Kbytes. With JPEG compressed " "data this designation is not needed and is omitted. See also " "<RowsPerStrip> and <StripByteCounts>."), - {ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY}}, + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_ORIENTATION, "Orientation", N_("Orientation"), N_("The image orientation viewed in terms of rows and columns."), - {ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY, ESL_CMANDATORY}}, + { ESL_OOOO, ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SAMPLES_PER_PIXEL, "SamplesPerPixel", N_("Samples per Pixel"), N_("The number of components per pixel. Since this standard applies " "to RGB and YCbCr images, the value set for this tag is 3. " "In JPEG compressed data a JPEG marker is used instead of this " - "tag.")}, + "tag."), + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_ROWS_PER_STRIP, "RowsPerStrip", N_("Rows per Strip"), N_("The number of rows per strip. This is the number of rows " "in the image of one strip when an image is divided into " "strips. With JPEG compressed data this designation is not " "needed and is omitted. See also <RowsPerStrip> and " - "<StripByteCounts>.")}, + "<StripByteCounts>."), + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_STRIP_BYTE_COUNTS, "StripByteCounts", N_("Strip Byte Count"), N_("The total number of bytes in each strip. With JPEG compressed " - "data this designation is not needed and is omitted.")}, + "data this designation is not needed and is omitted."), + { ESL_MMMN, ESL_MMMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_X_RESOLUTION, "XResolution", N_("x-Resolution"), N_("The number of pixels per <ResolutionUnit> in the <ImageWidth> " "direction. When the image resolution is unknown, 72 [dpi] " - "is designated.")}, + "is designated."), + { ESL_MMMM, ESL_MMMM, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_Y_RESOLUTION, "YResolution", N_("y-Resolution"), N_("The number of pixels per <ResolutionUnit> in the <ImageLength> " - "direction. The same value as <XResolution> is designated.")}, + "direction. The same value as <XResolution> is designated."), + { ESL_MMMM, ESL_MMMM, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_PLANAR_CONFIGURATION, "PlanarConfiguration", N_("Planar Configuration"), N_("Indicates whether pixel components are recorded in a chunky " "or planar format. In JPEG compressed files a JPEG marker " "is used instead of this tag. If this field does not exist, " - "the TIFF default of 1 (chunky) is assumed.")}, + "the TIFF default of 1 (chunky) is assumed."), + { ESL_OMON, ESL_OMON, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_RESOLUTION_UNIT, "ResolutionUnit", N_("Resolution Unit"), N_("The unit for measuring <XResolution> and <YResolution>. The same " "unit is used for both <XResolution> and <YResolution>. If " - "the image resolution is unknown, 2 (inches) is designated.")}, + "the image resolution is unknown, 2 (inches) is designated."), + { ESL_MMMM, ESL_MMMM, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_TRANSFER_FUNCTION, "TransferFunction", N_("Transfer Function"), N_("A transfer function for the image, described in tabular style. " "Normally this tag is not necessary, since color space is " - "specified in the color space information tag (<ColorSpace>).")}, + "specified in the color space information tag (<ColorSpace>)."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SOFTWARE, "Software", N_("Software"), N_("This tag records the name and version of the software or " "firmware of the camera or image input device used to " "generate the image. The detailed format is not specified, but " "it is recommended that the example shown below be " "followed. When the field is left blank, it is treated as " - "unknown.")}, + "unknown."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_DATE_TIME, "DateTime", N_("Date and Time"), N_("The date and time of image creation. In this standard " - "(EXIF-2.1) it is the date and time the file was changed.")}, + "(EXIF-2.1) it is the date and time the file was changed."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_ARTIST, "Artist", N_("Artist"), N_("This tag records the name of the camera owner, photographer or " "image creator. The detailed format is not specified, but it is " "recommended that the information be written as in the example " "below for ease of Interoperability. When the field is " - "left blank, it is treated as unknown.")}, + "left blank, it is treated as unknown."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_WHITE_POINT, "WhitePoint", N_("White Point"), N_("The chromaticity of the white point of the image. Normally " "this tag is not necessary, since color space is specified " - "in the colorspace information tag (<ColorSpace>).")}, + "in the colorspace information tag (<ColorSpace>)."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_PRIMARY_CHROMATICITIES, "PrimaryChromaticities", N_("Primary Chromaticities"), N_("The chromaticity of the three primary colors of the image. " "Normally this tag is not necessary, since colorspace is " - "specified in the colorspace information tag (<ColorSpace>).")}, + "specified in the colorspace information tag (<ColorSpace>)."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_TRANSFER_RANGE, "TransferRange", N_("Transfer Range"), ""}, {EXIF_TAG_SUB_IFDS, "SubIFDs", "SubIFD Offsets", N_("Defined by Adobe Corporation " "to enable TIFF Trees within a TIFF file.")}, @@ -187,7 +201,8 @@ static struct { N_("JPEG Interchange Format"), N_("The offset to the start byte (SOI) of JPEG compressed " "thumbnail data. This is not used for primary image " - "JPEG data.")}, + "JPEG data."), + { ESL_NNNN, ESL_NNNM, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, "JPEGInterchangeFormatLength", N_("JPEG Interchange Format Length"), N_("The number of bytes of JPEG compressed thumbnail data. This " @@ -196,7 +211,8 @@ static struct { "bitstream from SOI to EOI. Appn and COM markers should " "not be recorded. Compressed thumbnails must be recorded in no " "more than 64 Kbytes, including all other data to be " - "recorded in APP1.")}, + "recorded in APP1."), + { ESL_NNNN, ESL_NNNM, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_YCBCR_COEFFICIENTS, "YCbCrCoefficients", N_("YCbCr Coefficients"), N_("The matrix coefficients for transformation from RGB to YCbCr " @@ -205,12 +221,14 @@ static struct { "as the default. The color space is declared in a " "color space information tag, with the default being the value " "that gives the optimal image characteristics " - "Interoperability this condition.")}, + "Interoperability this condition."), + { ESL_NNOO, ESL_NNOO, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_YCBCR_SUB_SAMPLING, "YCbCrSubSampling", N_("YCbCr Sub-Sampling"), N_("The sampling ratio of chrominance components in relation to the " "luminance component. In JPEG compressed data a JPEG marker " - "is used instead of this tag.")}, + "is used instead of this tag."), + { ESL_NNMN, ESL_NNMN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_YCBCR_POSITIONING, "YCbCrPositioning", N_("YCbCr Positioning"), N_("The position of chrominance components in relation to the " @@ -225,7 +243,8 @@ static struct { "does not have the capability of supporting both kinds of " "<YCbCrPositioning>, it shall follow the TIFF default regardless " "of the value in this field. It is preferable that readers " - "be able to support both centered and co-sited positioning.")}, + "be able to support both centered and co-sited positioning."), + { ESL_NNMM, ESL_NNOO, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_REFERENCE_BLACK_WHITE, "ReferenceBlackWhite", N_("Reference Black/White"), N_("The reference black point value and reference white point " @@ -233,7 +252,8 @@ static struct { "below are given as defaults here. The color space is declared " "in a color space information tag, with the default " "being the value that gives the optimal image characteristics " - "Interoperability these conditions.")}, + "Interoperability these conditions."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_XML_PACKET, "XMLPacket", N_("XML Packet"), N_("XMP Metadata")}, {EXIF_TAG_RELATED_IMAGE_FILE_FORMAT, "RelatedImageFileFormat", "RelatedImageFileFormat", ""}, @@ -269,47 +289,50 @@ static struct { "the photographer copyright part consists of one space followed " "by a terminating NULL code, then the editor copyright is given " "(see example 3). When the field is left blank, it is treated " - "as unknown.")}, + "as unknown."), + { ESL_OOOO, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_EXPOSURE_TIME, "ExposureTime", N_("Exposure Time"), - N_("Exposure time, given in seconds (sec).")}, + N_("Exposure time, given in seconds (sec)."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_FNUMBER, "FNumber", N_("FNumber"), - N_("The F number.")}, + N_("The F number."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_IPTC_NAA, "IPTC/NAA", "IPTC/NAA", ""}, {EXIF_TAG_IMAGE_RESOURCES, "ImageResources", N_("Image Resources Block"), ""}, {EXIF_TAG_EXIF_IFD_POINTER, "ExifIfdPointer", "ExifIFDPointer", N_("A pointer to the Exif IFD. Interoperability, Exif IFD has the " "same structure as that of the IFD specified in TIFF. " "ordinarily, however, it does not contain image data as in " - "the case of TIFF.")}, + "the case of TIFF."), + { ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_INTER_COLOR_PROFILE, "InterColorProfile", "InterColorProfile", ""}, {EXIF_TAG_EXPOSURE_PROGRAM, "ExposureProgram", "ExposureProgram", N_("The class of the program used by the camera to set exposure " - "when the picture is taken.")}, + "when the picture is taken."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SPECTRAL_SENSITIVITY, "SpectralSensitivity", N_("Spectral Sensitivity"), N_("Indicates the spectral sensitivity of each channel of the " "camera used. The tag value is an ASCII string compatible " - "with the standard developed by the ASTM Technical committee.")}, + "with the standard developed by the ASTM Technical committee."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_GPS_INFO_IFD_POINTER, "GPSInfoIFDPointer", "GPSInfoIFDPointer", N_("A pointer to the GPS Info IFD. The " "Interoperability structure of the GPS Info IFD, like that of " - "Exif IFD, has no image data.")}, + "Exif IFD, has no image data."), + { ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_GPS_VERSION_ID, "GPSVersionID", N_("GPS tag version"), N_("Indicates the version of <GPSInfoIFD>. The version is given " "as 2.0.0.0. This tag is mandatory when <GPSInfo> tag is " "present. (Note: The <GPSVersionID tag is given in bytes, " "unlike the <ExifVersion> tag. When the version is " - "2.0.0.0, the tag value is 02000000.H)."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + "2.0.0.0, the tag value is 02000000.H)."), ESL_GPS}, {EXIF_TAG_GPS_LATITUDE_REF, "GPSLatitudeRef", N_("North or South Latitude"), N_("Indicates whether the latitude is north or south latitude. The " "ASCII value 'N' indicates north latitude, and 'S' is south " - "latitude."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + "latitude."), ESL_GPS}, {EXIF_TAG_GPS_LATITUDE, "GPSLatitude", N_("Latitude"), N_("Indicates the latitude. The latitude is expressed as three " "RATIONAL values giving the degrees, minutes, and seconds, " @@ -317,14 +340,11 @@ static struct { "the format is dd/1,mm/1,ss/1. When degrees and minutes are used " "and, for example, fractions of minutes are given up to two " "two decimal places, the format is dd/1,mmmm/100,0/1."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + ESL_GPS}, {EXIF_TAG_GPS_LONGITUDE_REF, "GPSLongitudeRef", N_("East or West Longitude"), N_("Indicates whether the longitude is east or west longitude. " "ASCII 'E' indicates east longitude, and 'W' is west " - "longitude."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + "longitude."), ESL_GPS}, {EXIF_TAG_GPS_LONGITUDE, "GPSLongitude", N_("Longitude"), N_("Indicates the longitude. The longitude is expressed as three " "RATIONAL values giving the degrees, minutes, and seconds, " @@ -332,42 +352,42 @@ static struct { "the format is ddd/1,mm/1,ss/1. When degrees and minutes are " "used and, for example, fractions of minutes are given up to " "two decimal places, the format is ddd/1,mmmm/100,0/1."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + ESL_GPS}, {EXIF_TAG_GPS_ALTITUDE_REF, "GPSAltitudeRef", N_("Altitude reference"), N_("Indicates the altitude used as the reference altitude. If the " "reference is sea level and the altitude is above sea level, 0 " "is given. If the altitude is below sea level, a value of 1 is given " "and the altitude is indicated as an absolute value in the " "GSPAltitude tag. The reference unit is meters. Note that this tag " - "is BYTE type, unlike other reference tags."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + "is BYTE type, unlike other reference tags."), ESL_GPS}, {EXIF_TAG_GPS_ALTITUDE, "GPSAltitude", N_("Altitude"), N_("Indicates the altitude based on the reference in GPSAltitudeRef. " "Altitude is expressed as one RATIONAL value. The reference unit " - "is meters."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_OPTIONAL, ESL_NOT_RECORDED}}, + "is meters."), ESL_GPS}, {EXIF_TAG_ISO_SPEED_RATINGS, "ISOSpeedRatings", N_("ISO Speed Ratings"), N_("Indicates the ISO Speed and ISO Latitude of the camera or " - "input device as specified in ISO 12232.")}, + "input device as specified in ISO 12232."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_OECF, "OECF", "OECF", N_("Indicates the Opto-Electoric Conversion Function (OECF) " "specified in ISO 14524. <OECF> is the relationship between " - "the camera optical input and the image values.")}, + "the camera optical input and the image values."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_EXIF_VERSION, "ExifVersion", N_("Exif Version"), N_("The version of this standard supported. Nonexistence of this " - "field is taken to mean nonconformance to the standard.")}, + "field is taken to mean nonconformance to the standard."), + { ESL_NNNN, ESL_NNNN, ESL_MMMM, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_DATE_TIME_ORIGINAL, "DateTimeOriginal", N_("Date and Time (original)"), N_("The date and time when the original image data was generated. " "For a digital still camera " - "the date and time the picture was taken are recorded.")}, + "the date and time the picture was taken are recorded."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_DATE_TIME_DIGITIZED, "DateTimeDigitized", N_("Date and Time (digitized)"), - N_("The date and time when the image was stored as digital data. ")}, + N_("The date and time when the image was stored as digital data. "), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_COMPONENTS_CONFIGURATION, "ComponentsConfiguration", "ComponentsConfiguration", N_("Information specific to compressed data. The channels of " @@ -377,44 +397,56 @@ static struct { "However, since <PhotometricInterpretation> can only " "express the order of Y, Cb and Cr, this tag is provided " "for cases when compressed data uses components other than " - "Y, Cb, and Cr and to enable support of other sequences.")}, + "Y, Cb, and Cr and to enable support of other sequences."), + { ESL_NNNN, ESL_NNNN, ESL_NNNM, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_COMPRESSED_BITS_PER_PIXEL, "CompressedBitsPerPixel", N_("Compressed Bits per Pixel"), N_("Information specific to compressed data. The compression mode " "used for a compressed image is indicated in unit bits " - "per pixel.")}, + "per pixel."), + { ESL_NNNN, ESL_NNNN, ESL_NNNO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SHUTTER_SPEED_VALUE, "ShutterSpeedValue", N_("Shutter speed"), N_("Shutter speed. The unit is the APEX (Additive System of " - "Photographic Exposure) setting (see Appendix C).")}, + "Photographic Exposure) setting (see Appendix C)."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_APERTURE_VALUE, "ApertureValue", N_("Aperture"), - N_("The lens aperture. The unit is the APEX value.")}, + N_("The lens aperture. The unit is the APEX value."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_BRIGHTNESS_VALUE, "BrightnessValue", N_("Brightness"), N_("The value of brightness. The unit is the APEX value. " - "Ordinarily it is given in the range of -99.99 to 99.99.")}, + "Ordinarily it is given in the range of -99.99 to 99.99."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_EXPOSURE_BIAS_VALUE, "ExposureBiasValue", N_("Exposure Bias"), N_("The exposure bias. The units is the APEX value. Ordinarily " - "it is given in the range of -99.99 to 99.99.")}, + "it is given in the range of -99.99 to 99.99."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_MAX_APERTURE_VALUE, "MaxApertureValue", "MaxApertureValue", N_("The smallest F number of the lens. The unit is the APEX value. " "Ordinarily it is given in the range of 00.00 to 99.99, " - "but it is not limited to this range.")}, + "but it is not limited to this range."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SUBJECT_DISTANCE, "SubjectDistance", N_("Subject Distance"), - N_("The distance to the subject, given in meters.")}, + N_("The distance to the subject, given in meters."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_METERING_MODE, "MeteringMode", N_("Metering Mode"), - N_("The metering mode.")}, + N_("The metering mode."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_LIGHT_SOURCE, "LightSource", N_("Light Source"), - N_("The kind of light source.")}, + N_("The kind of light source."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_FLASH, "Flash", N_("Flash"), N_("This tag is recorded when an image is taken using a strobe " "light (flash).")}, {EXIF_TAG_FOCAL_LENGTH, "FocalLength", N_("Focal Length"), N_("The actual focal length of the lens, in mm. Conversion is not " - "made to the focal length of a 35 mm film camera.")}, + "made to the focal length of a 35 mm film camera."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_MAKER_NOTE, "MakerNote", N_("Maker Note"), N_("A tag for manufacturers of Exif writers to record any desired " - "information. The contents are up to the manufacturer.")}, + "information. The contents are up to the manufacturer."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_USER_COMMENT, "UserComment", N_("User Comment"), N_("A tag for Exif users to write keywords or comments on the image " "besides those in <ImageDescription>, and without the " @@ -438,20 +470,25 @@ static struct { "do not use the <UserComment> tag (see Table 7). " "When a <UserComment> area is set aside, it is recommended that " "the ID code be ASCII and that the following user comment " - "part be filled with blank characters [20.H].")}, + "part be filled with blank characters [20.H]."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SUB_SEC_TIME, "SubsecTime", "SubsecTime", N_("A tag used to record fractions of seconds for the " - "<DateTime> tag.")}, + "<DateTime> tag."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SUB_SEC_TIME_ORIGINAL, "SubSecTimeOriginal", "SubSecTimeOriginal", N_("A tag used to record fractions of seconds for the " - "<DateTimeOriginal> tag.")}, + "<DateTimeOriginal> tag."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_SUB_SEC_TIME_DIGITIZED, "SubSecTimeDigitized", "SubSecTimeDigitized", N_("A tag used to record fractions of seconds for the " - "<DateTimeDigitized> tag.")}, + "<DateTimeDigitized> tag."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_FLASH_PIX_VERSION, "FlashPixVersion", "FlashPixVersion", - N_("The FlashPix format version supported by a FPXR file.")}, + N_("The FlashPix format version supported by a FPXR file."), + { ESL_NNNN, ESL_NNNN, ESL_MMMM, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_COLOR_SPACE, "ColorSpace", N_("Color Space"), N_("The color space information tag is always " "recorded as the color space specifier. Normally sRGB (=1) " @@ -459,14 +496,16 @@ static struct { "conditions and environment. If a color space other than " "sRGB is used, Uncalibrated (=FFFF.H) is set. Image data " "recorded as Uncalibrated can be treated as sRGB when it is " - "converted to FlashPix. On sRGB see Appendix E.")}, + "converted to FlashPix. On sRGB see Appendix E."), + { ESL_NNNN, ESL_NNNN, ESL_MMMM, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_PIXEL_X_DIMENSION, "PixelXDimension", "PixelXDimension", N_("Information specific to compressed data. When a " "compressed file is recorded, the valid width of the " "meaningful image must be recorded in this tag, whether or " "not there is padding data or a restart marker. This tag " "should not exist in an uncompressed file. For details see " - "section 2.8.1 and Appendix F.")}, + "section 2.8.1 and Appendix F."), + { ESL_NNNN, ESL_NNNN, ESL_NNNM, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_PIXEL_Y_DIMENSION, "PixelYDimension", "PixelYDimension", N_("Information specific to compressed data. When a compressed " "file is recorded, the valid height of the meaningful image " @@ -475,7 +514,8 @@ static struct { "uncompressed file. For details see section 2.8.1 and Appendix " "F. Since data padding is unnecessary in the vertical direction, " "the number of lines recorded in this valid image height tag " - "will in fact be the same as that recorded in the SOF.")}, + "will in fact be the same as that recorded in the SOF."), + { ESL_NNNN, ESL_NNNN, ESL_NNNM, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_RELATED_SOUND_FILE, "RelatedSoundFile", "RelatedSoundFile", N_("This tag is used to record the name of an audio file related " @@ -507,7 +547,8 @@ static struct { "information is an ASCII character string, it is terminated by " "NULL. When this tag is used to map audio files, the relation " "of the audio file to image data must also be indicated on the " - "audio file end.")}, + "audio file end."), + { ESL_NNNN, ESL_NNNN, ESL_OOOO, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_INTEROPERABILITY_IFD_POINTER, "InteroperabilityIFDPointer", "InteroperabilityIFDPointer", N_("Interoperability IFD is composed of tags which stores the " @@ -518,8 +559,7 @@ static struct { "but does not contain the " "image data characteristically compared with normal TIFF " "IFD."), - {ESL_NOT_RECORDED, ESL_NOT_RECORDED, ESL_NOT_RECORDED, - ESL_NOT_RECORDED, ESL_OPTIONAL}}, + { ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN, ESL_NNNN } }, {EXIF_TAG_FLASH_ENERGY, "FlashEnergy", N_("Flash Energy"), N_("Indicates the strobe energy at the time the image is " "captured, as measured in Beam Candle Power Seconds (BCPS).")}, @@ -657,6 +697,12 @@ exif_tag_table_count (void) return sizeof (ExifTagTable) / sizeof (ExifTagTable[0]); } +#define RECORDED \ +((ExifTagTable[i].esl[ifd][EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY] != EXIF_SUPPORT_LEVEL_NOT_RECORDED) || \ + (ExifTagTable[i].esl[ifd][EXIF_DATA_TYPE_UNCOMPRESSED_PLANAR] != EXIF_SUPPORT_LEVEL_NOT_RECORDED) || \ + (ExifTagTable[i].esl[ifd][EXIF_DATA_TYPE_UNCOMPRESSED_YCC] != EXIF_SUPPORT_LEVEL_NOT_RECORDED) || \ + (ExifTagTable[i].esl[ifd][EXIF_DATA_TYPE_COMPRESSED] != EXIF_SUPPORT_LEVEL_NOT_RECORDED)) + const char * exif_tag_get_name_in_ifd (ExifTag tag, ExifIfd ifd) { @@ -664,8 +710,7 @@ exif_tag_get_name_in_ifd (ExifTag tag, E if (ifd >= EXIF_IFD_COUNT) return NULL; for (i = 0; ExifTagTable[i].name; i++) - if ((ExifTagTable[i].tag == tag) && - (ExifTagTable[i].esl[ifd] != ESL_NOT_RECORDED)) break; + if ((ExifTagTable[i].tag == tag) && RECORDED) break; return ExifTagTable[i].name; } @@ -680,8 +725,7 @@ exif_tag_get_title_in_ifd (ExifTag tag, if (ifd >= EXIF_IFD_COUNT) return NULL; for (i = 0; ExifTagTable[i].title; i++) - if ((ExifTagTable[i].tag == tag) && - (ExifTagTable[i].esl[ifd] != ESL_NOT_RECORDED)) break; + if ((ExifTagTable[i].tag == tag) && RECORDED) break; return _(ExifTagTable[i].title); } @@ -695,8 +739,7 @@ exif_tag_get_description_in_ifd (ExifTag if (ifd >= EXIF_IFD_COUNT) return NULL; for (i = 0; ExifTagTable[i].description; i++) - if ((ExifTagTable[i].tag == tag) && - (ExifTagTable[i].esl[ifd] != ESL_NOT_RECORDED)) break; + if ((ExifTagTable[i].tag == tag) && RECORDED) break; return _(ExifTagTable[i].description); } @@ -744,3 +787,18 @@ exif_tag_from_name (const char *name) if (!strcmp (ExifTagTable[i].name, name)) break; return ExifTagTable[i].tag; } + +ExifSupportLevel +exif_tag_get_support_level_in_ifd (ExifTag tag, ExifIfd ifd, ExifDataType t) +{ + unsigned int i; + + if (ifd >= EXIF_IFD_COUNT) return EXIF_SUPPORT_LEVEL_UNKNOWN; + if (t >= EXIF_DATA_TYPE_COUNT) return EXIF_SUPPORT_LEVEL_UNKNOWN; + + for (i = 0; ExifTagTable[i].description; i++) + if ((ExifTagTable[i].tag == tag) && + (ExifTagTable[i].esl[ifd][t] != EXIF_SUPPORT_LEVEL_NOT_RECORDED)) + return ExifTagTable[i].esl[ifd][t]; + return EXIF_SUPPORT_LEVEL_NOT_RECORDED; +} Index: Makefile.am =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/Makefile.am,v retrieving revision 1.33 retrieving revision 1.34 diff -u -p -d -r1.33 -r1.34 --- Makefile.am 24 Apr 2005 09:00:29 -0000 1.33 +++ Makefile.am 30 Apr 2005 00:55:28 -0000 1.34 @@ -43,6 +43,7 @@ libexifinclude_HEADERS = \ exif-byte-order.h \ exif-content.h \ exif-data.h \ + exif-data-type.h \ exif-entry.h \ exif-format.h \ exif-ifd.h \ --- NEW FILE: exif-data-type.h --- (This appears to be a binary file; contents omitted.) Index: exif-data.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-data.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -p -d -r1.11 -r1.12 --- exif-data.h 24 Apr 2005 19:01:11 -0000 1.11 +++ exif-data.h 30 Apr 2005 00:55:42 -0000 1.12 @@ -28,6 +28,7 @@ extern "C" { #endif /* __cplusplus */ #include <libexif/exif-byte-order.h> +#include <libexif/exif-data-type.h> #include <libexif/exif-ifd.h> #include <libexif/exif-log.h> #include <libexif/exif-tag.h> @@ -74,6 +75,7 @@ ExifByteOrder exif_data_get_byte_order void exif_data_set_byte_order (ExifData *data, ExifByteOrder order); ExifMnoteData *exif_data_get_mnote_data (ExifData *); +void exif_data_fix (ExifData *); typedef void (* ExifDataForeachContentFunc) (ExifContent *, void *user_data); void exif_data_foreach_content (ExifData *data, @@ -82,14 +84,16 @@ void exif_data_foreach_content typedef enum { EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS = 1 << 0, - EXIF_DATA_OPTION_FIX_INVALID_FORMAT = 1 << 1 + EXIF_DATA_OPTION_FOLLOW_SPECIFICATION = 1 << 1 } ExifDataOption; const char *exif_data_option_get_name (ExifDataOption); const char *exif_data_option_get_description (ExifDataOption); +void exif_data_set_option (ExifData *, ExifDataOption); +void exif_data_unset_option (ExifData *, ExifDataOption); -void exif_data_set_option (ExifData *, ExifDataOption); -void exif_data_unset_option (ExifData *, ExifDataOption); +void exif_data_set_data_type (ExifData *, ExifDataType); +ExifDataType exif_data_get_data_type (ExifData *); /* For debugging purposes and error reporting */ void exif_data_dump (ExifData *data); Index: exif-tag.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-tag.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -p -d -r1.13 -r1.14 --- exif-tag.h 26 Apr 2005 20:17:46 -0000 1.13 +++ exif-tag.h 30 Apr 2005 00:55:42 -0000 1.14 @@ -26,6 +26,7 @@ extern "C" { #endif /* __cplusplus */ #include <libexif/exif-ifd.h> +#include <libexif/exif-data-type.h> typedef enum { EXIF_TAG_INTEROPERABILITY_INDEX = 0x0001, @@ -173,11 +174,19 @@ typedef enum { #define EXIF_TAG_GPS_DATE_STAMP 0x001d #define EXIF_TAG_GPS_DIFFERENTIAL 0x001e +typedef enum { + EXIF_SUPPORT_LEVEL_UNKNOWN = 0, + EXIF_SUPPORT_LEVEL_NOT_RECORDED, + EXIF_SUPPORT_LEVEL_MANDATORY, + EXIF_SUPPORT_LEVEL_OPTIONAL +} ExifSupportLevel; -ExifTag exif_tag_from_name (const char *); -const char *exif_tag_get_name_in_ifd (ExifTag, ExifIfd); -const char *exif_tag_get_title_in_ifd (ExifTag, ExifIfd); -const char *exif_tag_get_description_in_ifd (ExifTag, ExifIfd); +ExifTag exif_tag_from_name (const char *); +const char *exif_tag_get_name_in_ifd (ExifTag, ExifIfd); +const char *exif_tag_get_title_in_ifd (ExifTag, ExifIfd); +const char *exif_tag_get_description_in_ifd (ExifTag, ExifIfd); +ExifSupportLevel exif_tag_get_support_level_in_ifd (ExifTag, ExifIfd, + ExifDataType); /* Don't use these functions. They are here for compatibility only. */ const char *exif_tag_get_name (ExifTag tag); Index: exif-content.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-content.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -p -d -r1.12 -r1.13 --- exif-content.h 27 Apr 2005 06:45:42 -0000 1.12 +++ exif-content.h 30 Apr 2005 00:55:28 -0000 1.13 @@ -52,9 +52,10 @@ void exif_content_ref (ExifC void exif_content_unref (ExifContent *content); void exif_content_free (ExifContent *content); -void exif_content_add_entry (ExifContent *content, ExifEntry *e); -void exif_content_remove_entry (ExifContent *content, ExifEntry *e); -ExifEntry *exif_content_get_entry (ExifContent *content, ExifTag tag); +void exif_content_add_entry (ExifContent *, ExifEntry *); +void exif_content_remove_entry (ExifContent *, ExifEntry *); +ExifEntry *exif_content_get_entry (ExifContent *, ExifTag); +void exif_content_fix (ExifContent *); typedef void (* ExifContentForeachEntryFunc) (ExifEntry *, void *user_data); void exif_content_foreach_entry (ExifContent *content, Index: exif-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-data.c,v retrieving revision 1.80 retrieving revision 1.81 diff -u -p -d -r1.80 -r1.81 --- exif-data.c 27 Apr 2005 21:11:51 -0000 1.80 +++ exif-data.c 30 Apr 2005 00:55:28 -0000 1.81 @@ -68,6 +68,7 @@ struct _ExifDataPrivate unsigned int offset_mnote; ExifDataOption options; + ExifDataType data_type; }; static void * @@ -127,9 +128,12 @@ exif_data_new_mem (ExifMem *mem) data->ifd[i]->parent = data; } - /* Standard options */ + /* Default options */ exif_data_set_option (data, EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS); - exif_data_set_option (data, EXIF_DATA_OPTION_FIX_INVALID_FORMAT); + exif_data_set_option (data, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION); + + /* Default data type: none */ + exif_data_set_data_type (data, EXIF_DATA_TYPE_COUNT); return (data); } @@ -192,9 +196,6 @@ exif_data_load_data_entry (ExifData *dat entry->data[6]); data->priv->offset_mnote = doff; } - - if (data->priv->options & EXIF_DATA_OPTION_FIX_INVALID_FORMAT) - exif_entry_fix (entry); } static void @@ -837,6 +838,9 @@ exif_data_load_data (ExifData *data, con data->priv->offset_mnote); exif_mnote_data_load (data->priv->md, d, ds); } + + if (data->priv->options & EXIF_DATA_OPTION_FOLLOW_SPECIFICATION) + exif_data_fix (data); } void @@ -1063,9 +1067,9 @@ static struct { } exif_data_option[] = { {EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS, N_("Ignore unknown tags"), N_("Ignore unknown tags when loading EXIF data.")}, - {EXIF_DATA_OPTION_FIX_INVALID_FORMAT, N_("Fix invalid format"), - N_("Automatically fix the format of entries " - "that are not in the correct format.")}, + {EXIF_DATA_OPTION_FOLLOW_SPECIFICATION, N_("Follow specification"), + N_("Add, correct and remove entries to get EXIF data that follows " + "the specification.")}, {0, NULL, NULL} }; @@ -1104,3 +1108,29 @@ exif_data_unset_option (ExifData *d, Exi d->priv->options &= ~o; } + +static void +fix_func (ExifContent *c, void *data) +{ + exif_content_fix (c); +} + +void +exif_data_fix (ExifData *d) +{ + exif_data_foreach_content (d, fix_func, NULL); +} + +void +exif_data_set_data_type (ExifData *d, ExifDataType dt) +{ + if (!d || !d->priv) return; + + d->priv->data_type = dt; +} + +ExifDataType +exif_data_get_data_type (ExifData *d) +{ + return (d && d->priv) ? d->priv->data_type : EXIF_DATA_TYPE_COUNT; +} |
From: Hans U. N. <hu...@us...> - 2005-04-29 18:03:47
|
Update of /cvsroot/libexif/m4m In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29017/m4m Modified Files: gp-gettext-hack.m4 Log Message: get rid of redundant linefeed in configure output Index: gp-gettext-hack.m4 =================================================================== RCS file: /cvsroot/libexif/m4m/gp-gettext-hack.m4,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -d -r1.1 -r1.2 --- gp-gettext-hack.m4 9 Apr 2005 20:18:59 -0000 1.1 +++ gp-gettext-hack.m4 29 Apr 2005 18:03:38 -0000 1.2 @@ -54,11 +54,10 @@ fi AC_DEFUN([GP_GETTEXT_FLAGS], [ AC_REQUIRE([AM_GNU_GETTEXT]) -AC_REQUIRE([GP_CONFIG_MSG]) +AC_REQUIRE([GP_CONFIG_INIT]) if test "x${BUILD_INCLUDED_LIBINTL}" = "xyes"; then AM_CFLAGS="${AM_CFLAGS} -I\$(top_srcdir)/intl" fi -GP_CONFIG_MSG GP_CONFIG_MSG([Use translations],[${USE_NLS}]) if test "x$USE_NLS" = "xyes" && test "${BUILD_INCLUDED_LIBINTL}"; then GP_CONFIG_MSG([Use included libintl],[${BUILD_INCLUDED_LIBINTL}]) |
From: Hans U. N. <hu...@us...> - 2005-04-29 12:39:00
|
Update of /cvsroot/libexif/m4m In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15652/m4m Modified Files: gp-check-library.m4 Log Message: only compile without libusb if explicitly requested Index: gp-check-library.m4 =================================================================== RCS file: /cvsroot/libexif/m4m/gp-check-library.m4,v retrieving revision 1.7 retrieving revision 1.8 diff -u -p -d -r1.7 -r1.8 --- gp-check-library.m4 27 Apr 2005 14:37:17 -0000 1.7 +++ gp-check-library.m4 29 Apr 2005 12:38:49 -0000 1.8 @@ -20,6 +20,7 @@ dnl default: [ dnl ACTION-IF-NOT-FOUND shell action to execute if not found dnl default: [] dnl OPTIONAL-REQUIRED-ETC one of "mandatory", "default-on", "default-off" +dnl "disable-explicitly" dnl default: [mandatory] dnl WHERE-TO-GET-IT place where to find the library, e.g. a URL dnl default: [] @@ -31,6 +32,15 @@ dnl the outcome of the test dnl * execute additional checks to define more specific variables, e.g. dnl for different API versions dnl +dnl What the OPTIONAL-REQUIRED-ETC options mean: +dnl +dnl mandatory Absolute requirement, cannot be disabled. +dnl default-on If found, it is used. If not found, it is not used. +dnl default-off In case of --with-libfoo, detect it. Without +dnl --with-libfoo, do not look for and use it. +dnl disable-explicitly Required by default, but can be disabled by +dnl explicitly giving --without-libfoo. +dnl dnl These results have happened after calling GP_CHECK_LIBRARY: dnl dnl AM_CONDITIONAL([HAVE_VARPREFIX],[ if found ]) @@ -278,6 +288,31 @@ PKG_CONFIG_PATH=${PKG_CONFIG_PATH} $9])) fi ])dnl +dnl +dnl Abort configure script if not found and not explicitly disabled +dnl +m4_if([$8],[disable-explicitly],[ +if test "x${[try_][$1]}" != "xno" && test "x${[have_][$1]}" = "xno"; then + AC_MSG_ERROR([ +PKG_CONFIG_PATH=${PKG_CONFIG_PATH} +[$1][_LIBS]=${[$1][_LIBS]} +[$1][_CFLAGS]=${[$1][_CFLAGS]} + +* Fatal: ${PACKAGE_NAME} by default requires $2 to build. +* You must explicitly disable $2 to build ${PACKAGE_TARNAME} without it. +* +* Possible solutions: +* - call configure with --with-$2=no or --without-$2 +* - set PKG_CONFIG_PATH to adequate value +* - call configure with [$1][_LIBS]=.. and [$1][_CFLAGS]=.. +* - call configure with one of the --with-$2 parameters +]m4_ifval([$9],[dnl +* - get $2 and install it +],[dnl +* - get $2 and install it: + $9])) +fi +])dnl AM_CONDITIONAL([HAVE_][$1], [test "x$have_[$1]" = "xyes"]) if test "x$have_[$1]" = "xyes"; then AC_DEFINE([HAVE_][$1], 1, [whether we compile with ][$2][ support]) @@ -314,6 +349,8 @@ m4_if([$8], [], [dnl _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[mandatory],[$9])], [$8], [default-on], [dnl _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])], + [$8], [disable-explicitly], [dnl + _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])], [$8], [default-off], [dnl _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])], [$8], [mandatory], [dnl |
From: Hans U. N. <hu...@us...> - 2005-04-28 22:12:28
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19650 Modified Files: exif-tag.c Log Message: 4 intentionally left out from sequence because we felt like it Index: exif-tag.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-tag.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -p -d -r1.25 -r1.26 --- exif-tag.c 26 Apr 2005 20:17:46 -0000 1.25 +++ exif-tag.c 28 Apr 2005 22:12:17 -0000 1.26 @@ -30,6 +30,7 @@ typedef enum { ESL_MANDATORY = 1, /* Mandatory */ ESL_CMANDATORY = 2, /* Conditionally mandatory */ ESL_OPTIONAL = 3, /* Optional */ + /* 4 left out intentionally because we felt like it */ ESL_COPTIONAL = 5, /* Conditionally optional */ ESL_NOT_RECORDED = 6 /* Not recorded */ } ExifSL; /* Exif Support Level */ |
From: Lutz M. <lu...@us...> - 2005-04-27 21:12:00
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28596/libexif Modified Files: exif-data.c Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_data_load_data_content): Add a special case. Index: exif-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-data.c,v retrieving revision 1.79 retrieving revision 1.80 diff -u -p -d -r1.79 -r1.80 --- exif-data.c 27 Apr 2005 20:53:52 -0000 1.79 +++ exif-data.c 27 Apr 2005 21:11:51 -0000 1.80 @@ -370,6 +370,17 @@ exif_data_load_data_content (ExifData *d * 0 is a valid tag in the GPS IFD. */ if (!exif_tag_get_name_in_ifd (tag, ifd)) { + + /* + * Special case: Tag and format 0. That's against specification. + * At least up to 2.2. But Photoshop writes it anyways. + */ + if (!memcmp (d + offset + 12 * i, "\0\0\0\0", 4)) { + exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, "ExifData", + "Skipping empty entry at position %i in '%s'.", i, + exif_ifd_get_name (ifd)); + break; + } exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, "ExifData", "Unknown tag 0x%04x (entry %i in '%s'). Please report this tag " "to <lib...@li...>.", tag, i, |
From: Lutz M. <lu...@us...> - 2005-04-27 21:12:00
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28596 Modified Files: ChangeLog Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_data_load_data_content): Add a special case. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.213 retrieving revision 1.214 diff -u -p -d -r1.213 -r1.214 --- ChangeLog 27 Apr 2005 20:53:51 -0000 1.213 +++ ChangeLog 27 Apr 2005 21:11:50 -0000 1.214 @@ -1,5 +1,9 @@ 2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-data.c (exif_data_load_data_content): Add a special case. + +2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-data.c (exif_data_load_data_content): Better check for validity of tags. |
From: Lutz M. <lu...@us...> - 2005-04-27 20:54:03
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19097 Modified Files: ChangeLog Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_data_load_data_content): Better check for validity of tags. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.212 retrieving revision 1.213 diff -u -p -d -r1.212 -r1.213 --- ChangeLog 27 Apr 2005 20:40:53 -0000 1.212 +++ ChangeLog 27 Apr 2005 20:53:51 -0000 1.213 @@ -1,5 +1,10 @@ 2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-data.c (exif_data_load_data_content): Better check for + validity of tags. + +2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-entry.c (exif_entry_fix): Some day, we'll get this right. 2005-04-27 Lutz Mueller <lu...@us...> |
From: Lutz M. <lu...@us...> - 2005-04-27 20:54:03
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19097/libexif Modified Files: exif-data.c Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_data_load_data_content): Better check for validity of tags. Index: exif-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-data.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -p -d -r1.78 -r1.79 --- exif-data.c 26 Apr 2005 20:17:45 -0000 1.78 +++ exif-data.c 27 Apr 2005 20:53:52 -0000 1.79 @@ -280,7 +280,7 @@ exif_data_load_data_thumbnail (ExifData #undef CHECK_REC #define CHECK_REC(i) \ -if (data->ifd[(i)] == ifd) { \ +if ((i) == ifd) { \ exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, \ "ExifData", "Recursive entry in IFD " \ "'%s' detected. Skipping...", \ @@ -297,7 +297,7 @@ if (data->ifd[(i)]->count) { \ } static void -exif_data_load_data_content (ExifData *data, ExifContent *ifd, +exif_data_load_data_content (ExifData *data, ExifIfd ifd, const unsigned char *d, unsigned int ds, unsigned int offset) { @@ -308,6 +308,7 @@ exif_data_load_data_content (ExifData *d ExifTag tag; if (!data || !data->priv) return; + if ((ifd < 0) || (ifd >= EXIF_IFD_COUNT)) return; /* Read the number of entries */ if (offset >= ds - 1) return; @@ -333,18 +334,15 @@ exif_data_load_data_content (ExifData *d switch (tag) { case EXIF_TAG_EXIF_IFD_POINTER: CHECK_REC (EXIF_IFD_EXIF); - exif_data_load_data_content (data, - data->ifd[EXIF_IFD_EXIF], d, ds, o); + exif_data_load_data_content (data, EXIF_IFD_EXIF, d, ds, o); break; case EXIF_TAG_GPS_INFO_IFD_POINTER: CHECK_REC (EXIF_IFD_GPS); - exif_data_load_data_content (data, - data->ifd[EXIF_IFD_GPS], d, ds, o); + exif_data_load_data_content (data, EXIF_IFD_GPS, d, ds, o); break; case EXIF_TAG_INTEROPERABILITY_IFD_POINTER: CHECK_REC (EXIF_IFD_INTEROPERABILITY); - exif_data_load_data_content (data, - data->ifd[EXIF_IFD_INTEROPERABILITY], d, ds, o); + exif_data_load_data_content (data, EXIF_IFD_INTEROPERABILITY, d, ds, o); break; case EXIF_TAG_JPEG_INTERCHANGE_FORMAT: thumbnail_offset = o; @@ -371,17 +369,18 @@ exif_data_load_data_content (ExifData *d * versions of the standard have defined additional tags. Note that * 0 is a valid tag in the GPS IFD. */ - if (!exif_tag_get_name (tag)) { + if (!exif_tag_get_name_in_ifd (tag, ifd)) { exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, "ExifData", - "Unknown tag %x (entry %i). Please report this tag " - "to <lib...@li...>.", tag, i); + "Unknown tag 0x%04x (entry %i in '%s'). Please report this tag " + "to <lib...@li...>.", tag, i, + exif_ifd_get_name (ifd)); if (data->priv->options & EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS) break; } entry = exif_entry_new_mem (data->priv->mem); exif_data_load_data_entry (data, entry, d, ds, offset + 12 * i); - exif_content_add_entry (ifd, entry); + exif_content_add_entry (data->ifd[ifd], entry); exif_entry_unref (entry); break; } @@ -771,8 +770,7 @@ exif_data_load_data (ExifData *data, con "IFD 0 at %i.", (int) offset); /* Parse the actual exif data (usually offset 14 from start) */ - exif_data_load_data_content (data, data->ifd[EXIF_IFD_0], d + 6, - ds - 6, offset); + exif_data_load_data_content (data, EXIF_IFD_0, d + 6, ds - 6, offset); /* IFD 1 offset */ if (offset + 6 + 2 > ds) { @@ -794,8 +792,7 @@ exif_data_load_data (ExifData *data, con return; } - exif_data_load_data_content (data, data->ifd[EXIF_IFD_1], d + 6, - ds - 6, offset); + exif_data_load_data_content (data, EXIF_IFD_1, d + 6, ds - 6, offset); } /* |
From: Lutz M. <lu...@us...> - 2005-04-27 20:41:15
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12421 Modified Files: ChangeLog Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_fix): Some day, we'll get this right. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.211 retrieving revision 1.212 diff -u -p -d -r1.211 -r1.212 --- ChangeLog 27 Apr 2005 06:45:39 -0000 1.211 +++ ChangeLog 27 Apr 2005 20:40:53 -0000 1.212 @@ -1,5 +1,9 @@ 2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-entry.c (exif_entry_fix): Some day, we'll get this right. + +2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-entry.h * libexif/exif-content.h: New convenience functions/macros. |
From: Lutz M. <lu...@us...> - 2005-04-27 20:41:15
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12421/libexif Modified Files: exif-entry.c Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_fix): Some day, we'll get this right. Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.85 retrieving revision 1.86 diff -u -p -d -r1.85 -r1.86 --- exif-entry.c 27 Apr 2005 05:47:23 -0000 1.85 +++ exif-entry.c 27 Apr 2005 20:40:54 -0000 1.86 @@ -289,7 +289,7 @@ exif_entry_fix (ExifEntry *e) * bytes for the format specifyer. */ for (i = 0; (i < e->size) && !e->data[i]; i++); - if (!i) for ( ; (i < e->size) && (e->data[i] = ' '); i++); + if (!i) for ( ; (i < e->size) && (e->data[i] == ' '); i++); if ((i >= 8) && (i < e->size)) { exif_entry_log (e, EXIF_LOG_CODE_DEBUG, "Tag 'UserComment' is not empty but does not start with " |
From: Hans U. N. <hu...@us...> - 2005-04-27 14:37:26
|
Update of /cvsroot/libexif/m4m In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13992 Modified Files: gp-check-library.m4 Log Message: better docs for GP_CHECK_LIBRARY Index: gp-check-library.m4 =================================================================== RCS file: /cvsroot/libexif/m4m/gp-check-library.m4,v retrieving revision 1.6 retrieving revision 1.7 diff -u -p -d -r1.6 -r1.7 --- gp-check-library.m4 22 Apr 2005 15:02:20 -0000 1.6 +++ gp-check-library.m4 27 Apr 2005 14:37:17 -0000 1.7 @@ -9,7 +9,7 @@ dnl Parameters: dnl dnl VARNAMEPART partial variable name for variable definitions dnl libname name of library -dnl VERSION-REQUIREMENT check for the version using pkg-config +dnl VERSION-REQUIREMENT check for the version using pkg-config. dnl default: [] dnl headername name of header file dnl default: [] @@ -21,7 +21,7 @@ dnl ACTION-IF-NOT-FOUND shell acti dnl default: [] dnl OPTIONAL-REQUIRED-ETC one of "mandatory", "default-on", "default-off" dnl default: [mandatory] -dnl WHERE-TO-GET-IT place where to find the library +dnl WHERE-TO-GET-IT place where to find the library, e.g. a URL dnl default: [] dnl dnl What the ACTION-IFs can do: @@ -31,14 +31,14 @@ dnl the outcome of the test dnl * execute additional checks to define more specific variables, e.g. dnl for different API versions dnl -dnl Results after calling it: +dnl These results have happened after calling GP_CHECK_LIBRARY: dnl dnl AM_CONDITIONAL([HAVE_VARPREFIX],[ if found ]) dnl AM_SUBST([have_VARPREFIX], [ "yes" if found, "no" if not found ]) dnl AM_SUBST([VARPREFIX_CFLAGS],[ -I, -D and stuff ]) -dnl AM_SUBST([VARPREFIX_LIBS], [ /path/to/libname.la ]) +dnl AM_SUBST([VARPREFIX_LIBS], [ /path/to/libname.la -L/path -lfoo ]) dnl -dnl Parameters to ./configure which influence the results: +dnl Parameters to ./configure which influence the GP_CHECK_LIBRARY results: dnl dnl * VARNAMEPART_LIBS=/foobar/arm-palmos/lib/libname.la dnl VARNAMEPART_CFLAGS=-I/foobar/include @@ -51,6 +51,7 @@ dnl dnl Examples: dnl GP_CHECK_LIBRARY([LIBEXIF], [libexif])dnl dnl GP_CHECK_LIBRARY([LIBEXIF], [libexif-gtk], [>= 0.3.3])dnl +dnl note the space! ^ dnl dnl Possible enhancements: dnl |
From: Hans U. N. <hu...@us...> - 2005-04-27 14:26:59
|
Update of /cvsroot/libexif/exif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6921/src/exif Modified Files: configure.ac Log Message: pkg-config needs a space here Index: configure.ac =================================================================== RCS file: /cvsroot/libexif/exif/configure.ac,v retrieving revision 1.4 retrieving revision 1.5 diff -u -p -d -r1.4 -r1.5 --- configure.ac 27 Apr 2005 06:44:19 -0000 1.4 +++ configure.ac 27 Apr 2005 14:26:33 -0000 1.5 @@ -61,7 +61,7 @@ AC_CHECK_HEADER([iconv.h], [ # --------------------------------------------------------------------------- # libraries needed # --------------------------------------------------------------------------- -GP_CHECK_LIBRARY([LIBEXIF],[libexif],[>=0.6.13]) +GP_CHECK_LIBRARY([LIBEXIF],[libexif],[>= 0.6.13]) # --------------------------------------------------------------------------- |
From: Lutz M. <lu...@us...> - 2005-04-27 06:45:53
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27172/libexif Modified Files: exif-content.c exif-content.h exif-entry.h Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-entry.h * libexif/exif-content.h: New convenience functions/macros. Index: exif-content.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-content.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -p -d -r1.16 -r1.17 --- exif-content.c 24 Apr 2005 09:03:15 -0000 1.16 +++ exif-content.c 27 Apr 2005 06:45:41 -0000 1.17 @@ -209,3 +209,17 @@ exif_content_log (ExifContent *content, content->priv->log = log; exif_log_ref (log); } + +ExifIfd +exif_content_get_ifd (ExifContent *c) +{ + if (!c || !c->parent) return EXIF_IFD_COUNT; + + return + ((c)->parent->ifd[EXIF_IFD_0] == (c)) ? EXIF_IFD_0 : + ((c)->parent->ifd[EXIF_IFD_1] == (c)) ? EXIF_IFD_1 : + ((c)->parent->ifd[EXIF_IFD_EXIF] == (c)) ? EXIF_IFD_EXIF : + ((c)->parent->ifd[EXIF_IFD_GPS] == (c)) ? EXIF_IFD_GPS : + ((c)->parent->ifd[EXIF_IFD_INTEROPERABILITY] == (c)) ? EXIF_IFD_INTEROPERABILITY : + EXIF_IFD_COUNT; +} Index: exif-content.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-content.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -p -d -r1.11 -r1.12 --- exif-content.h 15 Nov 2004 22:41:06 -0000 1.11 +++ exif-content.h 27 Apr 2005 06:45:42 -0000 1.12 @@ -62,6 +62,7 @@ void exif_content_foreach_entry void *user_data); /* For your convenience */ +ExifIfd exif_content_get_ifd (ExifContent *); #define exif_content_get_value(c,t,v,m) \ (exif_content_get_entry (c,t) ? \ exif_entry_get_value (exif_content_get_entry (c,t),v,m) : NULL) Index: exif-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -p -d -r1.12 -r1.13 --- exif-entry.h 2 Oct 2004 05:55:26 -0000 1.12 +++ exif-entry.h 27 Apr 2005 06:45:42 -0000 1.13 @@ -62,6 +62,8 @@ const char *exif_entry_get_value (ExifEn void exif_entry_dump (ExifEntry *entry, unsigned int indent); +#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT) + #ifdef __cplusplus } #endif /* __cplusplus */ |
From: Lutz M. <lu...@us...> - 2005-04-27 06:45:53
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27172 Modified Files: ChangeLog Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/exif-entry.h * libexif/exif-content.h: New convenience functions/macros. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.210 retrieving revision 1.211 diff -u -p -d -r1.210 -r1.211 --- ChangeLog 27 Apr 2005 05:47:19 -0000 1.210 +++ ChangeLog 27 Apr 2005 06:45:39 -0000 1.211 @@ -1,5 +1,10 @@ 2005-04-27 Lutz Mueller <lu...@us...> + * libexif/exif-entry.h + * libexif/exif-content.h: New convenience functions/macros. + +2005-04-27 Lutz Mueller <lu...@us...> + * configure.ac: AGE = 1 * libexif/exif-entry.c (exif_entry_fix): Add a break to avoid unnecessary checks. |
From: Lutz M. <lu...@us...> - 2005-04-27 06:44:35
|
Update of /cvsroot/libexif/exif/exif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26328/exif Modified Files: actions.c main.c utils.c Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/main.c * libexif/actions.c: Use logging mechanism. Use new exif_tag_get_* functions. Index: main.c =================================================================== RCS file: /cvsroot/libexif/exif/exif/main.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -p -d -r1.50 -r1.51 --- main.c 31 Mar 2005 08:15:40 -0000 1.50 +++ main.c 27 Apr 2005 06:44:22 -0000 1.51 @@ -60,8 +60,10 @@ internal_error (void) } static void -show_entry (ExifEntry *entry, const char *caption, unsigned int machine_readable) +show_entry (ExifEntry *entry, unsigned int machine_readable) { + ExifIfd ifd = exif_entry_get_ifd (entry); + if (machine_readable) { char b[1024]; @@ -70,8 +72,9 @@ show_entry (ExifEntry *entry, const char } printf (_("EXIF entry '%s' (0x%x, '%s') exists in IFD '%s':"), - C(exif_tag_get_title (entry->tag)), entry->tag, - C(exif_tag_get_name (entry->tag)), caption); + C(exif_tag_get_title_in_ifd (entry->tag, ifd)), entry->tag, + C(exif_tag_get_name_in_ifd (entry->tag, ifd)), + C(exif_ifd_get_name (ifd))); printf ("\n"); exif_entry_dump (entry, 0); @@ -86,7 +89,7 @@ search_entry (ExifData *ed, ExifTag tag, for (i = 0; i < EXIF_IFD_COUNT; i++) { entry = exif_content_get_entry (ed->ifd[i], tag); if (entry) - show_entry (entry, exif_ifd_get_name (i), machine_readable); + show_entry (entry, machine_readable); } } @@ -139,7 +142,7 @@ convert_arg_to_entry (const char *set_va s = exif_format_get_size (e->format); switch (e->format) { case EXIF_FORMAT_ASCII: - internal_error (); /* Previously handled */ + internal_error (); /* Previously handled */ break; case EXIF_FORMAT_SHORT: exif_set_short (e->data + (s * i), o, atoi (buf)); @@ -191,6 +194,12 @@ log_func_exit (ExifLog *log, ExifLogCode const char *format, va_list args, void *data) { switch (code) { + case -1: + put_colorstring (stderr, COL_RED); + vfprintf (stderr, format, args); + fprintf (stderr, "\n"); + put_colorstring (stderr, COL_NORMAL); + exit (1); case EXIF_LOG_CODE_NO_MEMORY: case EXIF_LOG_CODE_CORRUPT_DATA: put_colorstring (stderr, COL_RED); @@ -246,10 +255,16 @@ log_func (ExifLog *log, ExifLogCode code const char *format, va_list args, void *data) { switch (code) { + case -1: + put_colorstring (stderr, COL_RED); + vfprintf (stderr, format, args); + fprintf (stderr, "\n"); + put_colorstring (stderr, COL_NORMAL); + exit (1); case EXIF_LOG_CODE_DEBUG: put_colorstring (stdout, COL_GREEN); - printf ("%s: ", domain); - vprintf (format, args); + fprintf (stdout, "%s: ", domain); + vfprintf (stdout, format, args); put_colorstring (stdout, COL_NORMAL); printf ("\n"); break; @@ -295,7 +310,7 @@ static unsigned int extract_thumbnail = static unsigned int remove_tag = 0; static unsigned int list_mnote = 0, debug = 0; static const char *set_value = NULL, *ifd_string = NULL, *tag_string = NULL; -static ExifIfd ifd = -1; +static ExifIfd ifd = EXIF_IFD_0; static ExifTag tag = 0; static ExifOptions eo = {0, 0}; @@ -369,38 +384,28 @@ main (int argc, const char **argv) return (1); } - if (tag_string) { - tag = exif_tag_from_string (tag_string); - if (!tag || !exif_tag_get_name (tag)) { - fprintf (stderr, _("Invalid tag '%s'!"), tag_string); - fputc ('\n', stderr); - return (1); - } - eo.tag = tag; - } - if (ifd_string) { ifd = exif_ifd_from_string (ifd_string); if ((ifd < EXIF_IFD_0) || (ifd >= EXIF_IFD_COUNT) || - !exif_ifd_get_name (ifd)) { - fprintf (stderr, _("Invalid IFD '%s'. Valid IFDs are " - "'0', '1', 'EXIF', 'GPS', and " - "'Interoperability'."), ifd_string); - fputc ('\n', stderr); - return (1); - } + !exif_ifd_get_name (ifd)) + exif_log (log, -1, "exif", _("Invalid IFD '%s'. Valid IFDs are " + "'0', '1', 'EXIF', 'GPS', and " + "'Interoperability'."), ifd_string); + } + + if (tag_string) { + tag = exif_tag_from_string (tag_string); + if (tag == 0xffff) + exif_log (log, -1, "exif", _("Invalid tag '%s'!"), tag_string); + eo.tag = tag; } if (show_description) { - if (!eo.tag) { - fprintf (stderr, _("Please specify a tag!")); - fputc ('\n', stderr); - return (1); - } + if (!eo.tag) exif_log (log, -1, "exif", _("Please specify a tag!")); printf (_("Tag '%s' (0x%04x, '%s'): %s"), - C(exif_tag_get_title (eo.tag)), eo.tag, - C(exif_tag_get_name (eo.tag)), - C(exif_tag_get_description (eo.tag))); + C(exif_tag_get_title_in_ifd (eo.tag, ifd)), eo.tag, + C(exif_tag_get_name_in_ifd (eo.tag, ifd)), + C(exif_tag_get_description_in_ifd (eo.tag, ifd))); printf ("\n"); return (0); } @@ -425,12 +430,9 @@ main (int argc, const char **argv) ed->ifd[EXIF_IFD_1]->count || ed->ifd[EXIF_IFD_EXIF]->count || ed->ifd[EXIF_IFD_GPS]->count || - ed->ifd[EXIF_IFD_INTEROPERABILITY]->count)) { - fprintf (stderr, _("'%s' does not " - "contain EXIF data!"), *args); - fputc ('\n', stderr); - exit (1); - } + ed->ifd[EXIF_IFD_INTEROPERABILITY]->count)) + exif_log (log, -1, "exif", _("'%s' does not " + "contain EXIF data!"), *args); /* Where do we save the output? */ memset (fname, 0, sizeof (fname)); @@ -450,45 +452,33 @@ main (int argc, const char **argv) e = exif_content_get_entry ( ed->ifd[ifd], tag); if (e) - show_entry (e, ifd_string, machine_readable); - else { - fprintf (stderr, _("IFD '%s' " - "does not contain tag " - "'%s'."), - ifd_string, tag_string); - fputc ('\n', stderr); - return (1); - } + show_entry (e, machine_readable); + else + exif_log (log, -1, "exif", _("IFD '%s' " + "does not contain tag '%s'."), ifd_string, tag_string); } else { search_entry (ed, eo.tag, machine_readable); } } else if (extract_thumbnail) { /* No thumbnail? Exit. */ - if (!ed->data) { - fprintf (stderr, _("'%s' does not " - "contain a thumbnail!"), - *args); - fputc ('\n', stderr); - return (1); - } + if (!ed->data) + exif_log (log, -1, "exif", _("'%s' does not " + "contain a thumbnail!"), *args); /* Save the thumbnail */ f = fopen (fname, "wb"); - if (!f) { + if (!f) #ifdef __GNUC__ - fprintf (stderr, + exif_log (log, -1, "exif", _("Could not open '%s' for " "writing (%m)!"), fname); #else - fprintf (stderr, + exif_log (log, -1, "exif", _("Could not open '%s' for " "writing (%s)!"), fname, strerror (errno)); #endif - fputc ('\n', stderr); - return (1); - } fwrite (ed->data, 1, ed->size, f); fclose (f); fprintf (stdout, _("Wrote file '%s'."), @@ -518,42 +508,30 @@ main (int argc, const char **argv) /* Insert new thumbnail */ f = fopen (ithumbnail, "rb"); - if (!f) { + if (!f) #ifdef __GNUC__ - fprintf (stderr, _("Could not open " + exif_log (log, -1, "exif", _("Could not open " "'%s' (%m)!"), ithumbnail); #else - fprintf (stderr, _("Could not open " + exif_log (log, -1, "exif", _("Could not open " "'%s' (%s)!"), ithumbnail, strerror (errno)); #endif - fputc ('\n', stderr); - return (1); - } fseek (f, 0, SEEK_END); ed->size = ftell (f); ed->data = malloc (sizeof (char) * ed->size); - if (ed->size && !ed->data) { - fprintf (stderr, _("Could not " - "allocate %i byte(s)."), - ed->size); - fputc ('\n', stderr); - return (1); - } + if (ed->size && !ed->data) EXIF_LOG_NO_MEMORY (log, "exif", ed->size); fseek (f, 0, SEEK_SET); if (fread (ed->data, sizeof (char), - ed->size, f) != ed->size) { + ed->size, f) != ed->size) #ifdef __GNUC__ - fprintf (stderr, _("Could not read " + exif_log (log, -1, "exif", _("Could not read " "'%s' (%m)."), ithumbnail); #else - fprintf (stderr, _("Could not read " + exif_log (log, -1, "exif", _("Could not read " "'%s' (%s)."), ithumbnail, strerror (errno)); #endif - fputc ('\n', stderr); - return (1); - } fclose (f); save_exif_data_to_file (ed, log, *args, fname); @@ -561,21 +539,12 @@ main (int argc, const char **argv) } else if (set_value) { /* We need a tag... */ - if (!tag) { - fprintf (stderr, _("You need to " - "specify a tag!")); - fputc ('\n', stderr); - return (1); - } + if (!tag) exif_log (log, -1, "exif", _("You need to specify a tag!")); /* ... and an IFD. */ if ((ifd < EXIF_IFD_0) || - (ifd >= EXIF_IFD_COUNT)) { - fprintf (stderr, _("You need to " - "specify an IFD!")); - fputc ('\n', stderr); - return (1); - } + (ifd >= EXIF_IFD_COUNT)) + exif_log (log, -1, "exif", _("You need to specify an IFD!")); /* If the entry doesn't exist, create it. */ e = exif_content_get_entry (ed->ifd[ifd], tag); @@ -593,12 +562,8 @@ main (int argc, const char **argv) /* We need an IFD. */ if ((ifd < EXIF_IFD_0) || - (ifd >= EXIF_IFD_COUNT)) { - fprintf (stderr, _("You need to " - "specify an IFD!")); - fputc ('\n', stderr); - return (1); - } + (ifd >= EXIF_IFD_COUNT)) + exif_log (log, -1, "exif", _("You need to specify an IFD!")); if (!tag) { while (ed->ifd[ifd] && @@ -609,17 +574,12 @@ main (int argc, const char **argv) } else { e = exif_content_get_entry ( ed->ifd[ifd], tag); - if (!e) { - fprintf (stderr, _("IFD '%s' " - "does not contain a " + if (!e) + exif_log (log, -1, "exif", _("IFD '%s' does not contain a " "tag '%s'!"), exif_ifd_get_name (ifd), - exif_tag_get_name (tag)); - fputc ('\n', stderr); - return (1); - } - exif_content_remove_entry (ed->ifd[ifd], - e); + exif_tag_get_name_in_ifd (tag, ifd)); + exif_content_remove_entry (ed->ifd[ifd], e); } /* Save modified data. */ Index: utils.c =================================================================== RCS file: /cvsroot/libexif/exif/exif/utils.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -p -d -r1.8 -r1.9 --- utils.c 5 Dec 2004 21:29:06 -0000 1.8 +++ utils.c 27 Apr 2005 06:44:22 -0000 1.9 @@ -32,7 +32,7 @@ exif_tag_from_string (const char *string const char *name; if (!string) - return (0); + return 0xffff; /* Is the string a tag's name or title? */ for (tag = 0xffff; tag > 0; tag--) { @@ -53,7 +53,7 @@ exif_tag_from_string (const char *string if (string[i] == 'x') break; if (i == strlen (string)) - return (0); + return 0xffff; string += i + 1; tag = 0; Index: actions.c =================================================================== RCS file: /cvsroot/libexif/exif/exif/actions.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -p -d -r1.25 -r1.26 --- actions.c 29 Mar 2005 01:33:44 -0000 1.25 +++ actions.c 27 Apr 2005 06:44:22 -0000 1.26 @@ -66,11 +66,12 @@ show_entry (ExifEntry *e, void *data) { unsigned char *ids = data; char v[128]; + ExifIfd ifd = exif_entry_get_ifd (e); if (*ids) fprintf (stdout, "0x%04x", e->tag); else - fprintf (stdout, "%-20.20s", C(exif_tag_get_title (e->tag))); + fprintf (stdout, "%-20.20s", C(exif_tag_get_title_in_ifd (e->tag, ifd))); printf ("|"); if (*ids) fprintf (stdout, "%-72.72s", @@ -189,11 +190,12 @@ show_entry_machine (ExifEntry *e, void * { unsigned char *ids = data; char v[1024]; + ExifIfd ifd = exif_entry_get_ifd (e); if (*ids) { fprintf (stdout, "0x%04x", e->tag); } else { - fputs (CN (exif_tag_get_title (e->tag)), stdout); + fputs (CN (exif_tag_get_title_in_ifd (e->tag, ifd)), stdout); } fputc ('\t', stdout); fputs (CN (exif_entry_get_value (e, v, sizeof (v))), stdout); |
From: Lutz M. <lu...@us...> - 2005-04-27 06:44:33
|
Update of /cvsroot/libexif/exif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26328 Modified Files: ChangeLog configure.ac Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * libexif/main.c * libexif/actions.c: Use logging mechanism. Use new exif_tag_get_* functions. Index: configure.ac =================================================================== RCS file: /cvsroot/libexif/exif/configure.ac,v retrieving revision 1.3 retrieving revision 1.4 diff -u -p -d -r1.3 -r1.4 --- configure.ac 25 Apr 2005 18:06:43 -0000 1.3 +++ configure.ac 27 Apr 2005 06:44:19 -0000 1.4 @@ -61,7 +61,7 @@ AC_CHECK_HEADER([iconv.h], [ # --------------------------------------------------------------------------- # libraries needed # --------------------------------------------------------------------------- -GP_CHECK_LIBRARY([LIBEXIF],[libexif]) +GP_CHECK_LIBRARY([LIBEXIF],[libexif],[>=0.6.13]) # --------------------------------------------------------------------------- Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/exif/ChangeLog,v retrieving revision 1.55 retrieving revision 1.56 diff -u -p -d -r1.55 -r1.56 --- ChangeLog 30 Mar 2005 10:37:37 -0000 1.55 +++ ChangeLog 27 Apr 2005 06:44:19 -0000 1.56 @@ -1,3 +1,9 @@ +2005-04-27 Lutz Mueller <lu...@us...> + + * libexif/main.c + * libexif/actions.c: Use logging mechanism. Use new exif_tag_get_* + functions. + 2005-03-30 Jan Patera <pa...@us...> * libjpeg/jpeg-data/c: memset in jpeg_data_append_section(). |
From: Lutz M. <lu...@us...> - 2005-04-27 05:47:34
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6603/libexif Modified Files: exif-entry.c Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * configure.ac: AGE = 1 * libexif/exif-entry.c (exif_entry_fix): Add a break to avoid unnecessary checks. Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -p -d -r1.84 -r1.85 --- exif-entry.c 26 Apr 2005 20:37:33 -0000 1.84 +++ exif-entry.c 27 Apr 2005 05:47:23 -0000 1.85 @@ -295,9 +295,13 @@ exif_entry_fix (ExifEntry *e) "Tag 'UserComment' is not empty but does not start with " "format identifyer. This has been fixed."); memcpy (e->data, "ASCII\0\0\0", 8); + break; } - /* First 8 bytes need to follow the specification. */ + /* + * First 8 bytes need to follow the specification. If they don't, + * assume ASCII. + */ if (memcmp (e->data, "ASCII\0\0\0" , 8) && memcmp (e->data, "UNICODE\0" , 8) && memcmp (e->data, "JIS\0\0\0\0\0" , 8) && |
From: Lutz M. <lu...@us...> - 2005-04-27 05:47:33
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6603 Modified Files: ChangeLog configure.ac Log Message: 2005-04-27 Lutz Mueller <lu...@us...> * configure.ac: AGE = 1 * libexif/exif-entry.c (exif_entry_fix): Add a break to avoid unnecessary checks. Index: configure.ac =================================================================== RCS file: /cvsroot/libexif/libexif/configure.ac,v retrieving revision 1.7 retrieving revision 1.8 diff -u -p -d -r1.7 -r1.8 --- configure.ac 25 Apr 2005 18:06:45 -0000 1.7 +++ configure.ac 27 Apr 2005 05:47:19 -0000 1.8 @@ -37,7 +37,7 @@ dnl - REVISION (Minor): Increment any t dnl 0 if you incremented CURRENT. dnl - CURRENT (Major): Increment if the interface has changes or removals. dnl --------------------------------------------------------------------------- -LIBEXIF_AGE=0 +LIBEXIF_AGE=1 LIBEXIF_REVISION=0 LIBEXIF_CURRENT=12 AC_SUBST([LIBEXIF_AGE]) Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.209 retrieving revision 1.210 diff -u -p -d -r1.209 -r1.210 --- ChangeLog 26 Apr 2005 20:37:09 -0000 1.209 +++ ChangeLog 27 Apr 2005 05:47:19 -0000 1.210 @@ -1,3 +1,9 @@ +2005-04-27 Lutz Mueller <lu...@us...> + + * configure.ac: AGE = 1 + * libexif/exif-entry.c (exif_entry_fix): Add a break to avoid unnecessary + checks. + 2005-04-26 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_fix): Leave ' ' untouched, too. |
From: Lutz M. <lu...@us...> - 2005-04-26 20:37:42
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26659/libexif Modified Files: exif-entry.c Log Message: 2005-04-26 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_fix): Leave ' ' untouched, too. Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -p -d -r1.83 -r1.84 --- exif-entry.c 25 Apr 2005 21:06:20 -0000 1.83 +++ exif-entry.c 26 Apr 2005 20:37:33 -0000 1.84 @@ -256,27 +256,12 @@ exif_entry_fix (ExifEntry *e) e->format = EXIF_FORMAT_UNDEFINED; } - /* If the tag is all empty, there's nothing to do. */ - for (i = 0; (i < e->size) && !e->data[i]; i++); - if (i && (i == e->size) && (i >= 8)) break; - /* Some packages like Canon ZoomBrowser EX 4.5 store only one zero byte followed by 7 bytes of rubbish */ if ((e->size >= 8) && (e->data[0] == 0)) { memcpy(e->data, "\0\0\0\0\0\0\0\0", 8); } - /* Some cameras fill the tag with ' '. This is wrong. */ - for (i = 0; (i < e->size) && (e->data[i] == ' '); i++); - if (i && (i == e->size)) { - exif_entry_log (e, EXIF_LOG_CODE_DEBUG, - "The value of 'UserComment' is against specification. The value " - "has been reset."); - exif_mem_free (e->priv->mem, e->data); - e->data = NULL; - e->size = 0; - } - /* There need to be at least 8 bytes. */ if (e->size < 8) { e->data = exif_entry_realloc (e, e->data, 8 + e->size); @@ -303,9 +288,11 @@ exif_entry_fix (ExifEntry *e) * afterwards, let's assume ASCII and claim the 8 first * bytes for the format specifyer. */ - if (e->size >= 8) { + for (i = 0; (i < e->size) && !e->data[i]; i++); + if (!i) for ( ; (i < e->size) && (e->data[i] = ' '); i++); + if ((i >= 8) && (i < e->size)) { exif_entry_log (e, EXIF_LOG_CODE_DEBUG, - "Tag 'UserComment' did not start with " + "Tag 'UserComment' is not empty but does not start with " "format identifyer. This has been fixed."); memcpy (e->data, "ASCII\0\0\0", 8); } |
From: Lutz M. <lu...@us...> - 2005-04-26 20:37:18
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26454 Modified Files: ChangeLog Log Message: 2005-04-26 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_fix): Leave ' ' untouched, too. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.208 retrieving revision 1.209 diff -u -p -d -r1.208 -r1.209 --- ChangeLog 26 Apr 2005 20:17:44 -0000 1.208 +++ ChangeLog 26 Apr 2005 20:37:09 -0000 1.209 @@ -1,5 +1,9 @@ 2005-04-26 Lutz Mueller <lu...@us...> + * libexif/exif-entry.c (exif_entry_fix): Leave ' ' untouched, too. + +2005-04-26 Lutz Mueller <lu...@us...> + * libexif/exif-tag.[c,h] (exif_tag_[name,title,description]_in_ifd): New. 2005-04-25 Lutz Mueller <lu...@us...> |
From: Lutz M. <lu...@us...> - 2005-04-26 20:18:08
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14514 Modified Files: ChangeLog Log Message: 2005-04-26 Lutz Mueller <lu...@us...> * libexif/exif-tag.[c,h] (exif_tag_[name,title,description]_in_ifd): New. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.207 retrieving revision 1.208 diff -u -p -d -r1.207 -r1.208 --- ChangeLog 25 Apr 2005 21:06:19 -0000 1.207 +++ ChangeLog 26 Apr 2005 20:17:44 -0000 1.208 @@ -1,3 +1,7 @@ +2005-04-26 Lutz Mueller <lu...@us...> + + * libexif/exif-tag.[c,h] (exif_tag_[name,title,description]_in_ifd): New. + 2005-04-25 Lutz Mueller <lu...@us...> * libexif/exif-data.c (exif_entry_fix): '\0...' as USER_COMMENT is ok, too. |