From 4e78aeecc9a2840c7487ff3c0fae1b31fe9b83b1 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Sat, 31 Jan 2009 15:36:18 -0800 Subject: [PATCH] Separated the MNOTE_SANYO_TAG_SELFTIMER 2 sec. case from the other On/Off cases Renamed MNOTE_NIKON_TAG_PREVIEWIMAGE_IFD_POINTERS to show that it's an IFD. The case of IFDs in MakerNotes needs to be handled better because right now, those MakerNote IFD tags are corrupted since the sub-IFDs aren't being read and written. --- ChangeLog | 6 ++++++ libexif/olympus/mnote-olympus-entry.c | 24 ++++++++++++++++++++++-- libexif/olympus/mnote-olympus-tag.c | 2 +- libexif/olympus/mnote-olympus-tag.h | 14 +++++++------- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 227e118..44f9fb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,12 @@ * Fixed some signed vs unsigned formatting errors * Format the EXIF_TAG_GPS_TIME_STAMP & EXIF_TAG_GPS_ALTITUDE_REF tags * Improved the wrong data type fixup + * Separated the MNOTE_SANYO_TAG_SELFTIMER 2 sec. case from the other + On/Off cases + * Renamed MNOTE_NIKON_TAG_PREVIEWIMAGE_IFD_POINTERS to show that it's + an IFD. The case of IFDs in MakerNotes needs to be handled better + because right now, those MakerNote IFD tags are corrupted since + the sub-IFDs aren't being read and written. 2009-01-22 Dan Fandrich diff --git a/libexif/olympus/mnote-olympus-entry.c b/libexif/olympus/mnote-olympus-entry.c index ca9706b..a743ba1 100644 --- a/libexif/olympus/mnote-olympus-entry.c +++ b/libexif/olympus/mnote-olympus-entry.c @@ -516,7 +516,6 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m case MNOTE_SANYO_TAG_WIDERANGE: case MNOTE_SANYO_TAG_COLORADJUSTMENTMODE: case MNOTE_SANYO_TAG_QUICKSHOT: - case MNOTE_SANYO_TAG_SELFTIMER: case MNOTE_SANYO_TAG_VOICEMEMO: case MNOTE_SANYO_TAG_FLICKERREDUCE: case MNOTE_SANYO_TAG_OPTICALZOOM: @@ -533,7 +532,28 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m strncpy (v, _("On"), maxlen); break; default: - strncpy (v, _("Unknown"), maxlen); + sprintf (buf, _("Unknown %hu"), vs); + strncat (v, buf, maxlen - strlen (v)); + break; + } + break; + case MNOTE_SANYO_TAG_SELFTIMER: + CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); + CC (entry->components, 1, v, maxlen); + vs = exif_get_short (entry->data, entry->order); + switch (vs) { + case 0: + strncpy (v, _("Off"), maxlen); + break; + case 1: + strncpy (v, _("On"), maxlen); + break; + case 2: + strncpy (v, _("2 sec."), maxlen); + break; + default: + sprintf (buf, _("Unknown %hu"), vs); + strncat (v, buf, maxlen - strlen (v)); break; } break; diff --git a/libexif/olympus/mnote-olympus-tag.c b/libexif/olympus/mnote-olympus-tag.c index bc9c328..4dea065 100644 --- a/libexif/olympus/mnote-olympus-tag.c +++ b/libexif/olympus/mnote-olympus-tag.c @@ -47,7 +47,7 @@ static const struct { {MNOTE_NIKON_TAG_WHITEBALANCERB, "WHITEBALANCERB", N_("White Balance RB"), ""}, {MNOTE_NIKON_TAG_UNKNOWN_0X000D, NULL, NULL, NULL}, {MNOTE_NIKON_TAG_ISOSELECTION, "ISOSELECTION", N_("ISO Selection"), ""}, - {MNOTE_NIKON_TAG_PREVIEWIMAGE, "PREVIEWIMAGE", N_("Preview Image"), ""}, + {MNOTE_NIKON_TAG_PREVIEWIMAGE_IFD_POINTER, "PREVIEWIMAGE", N_("Preview Image IFD"), ""}, {MNOTE_NIKON_TAG_EXPOSUREDIFF, "EXPOSUREDIFF", N_("Exposurediff ?"), ""}, {MNOTE_NIKON_TAG_FLASHEXPCOMPENSATION, "FLASHEXPCOMPENSATION", N_("Flash Exposure Compensation"), ""}, {MNOTE_NIKON_TAG_ISO2, "ISO", N_("ISO Setting"), ""}, diff --git a/libexif/olympus/mnote-olympus-tag.h b/libexif/olympus/mnote-olympus-tag.h index 02f23eb..228db3c 100644 --- a/libexif/olympus/mnote-olympus-tag.h +++ b/libexif/olympus/mnote-olympus-tag.h @@ -42,7 +42,7 @@ enum _MnoteOlympusTag { MNOTE_NIKON_TAG_UNKNOWN_0X000D = 0x000d, MNOTE_NIKON_TAG_EXPOSUREDIFF = 0x000e, MNOTE_NIKON_TAG_ISOSELECTION = 0x000f, - MNOTE_NIKON_TAG_PREVIEWIMAGE = 0x0011, + MNOTE_NIKON_TAG_PREVIEWIMAGE_IFD_POINTER= 0x0011, MNOTE_NIKON_TAG_FLASHEXPCOMPENSATION = 0x0012, MNOTE_NIKON_TAG_ISO2 = 0x0013, MNOTE_NIKON_TAG_IMAGEBOUNDARY = 0x0016, @@ -163,6 +163,11 @@ enum _MnoteOlympusTag { MNOTE_OLYMPUS_TAG_LIGHTVALUECENTER = 0x103d, MNOTE_OLYMPUS_TAG_LIGHTVALUEPERIPHERY = 0x103e, + /* Epson */ + MNOTE_EPSON_TAG_IMAGE_WIDTH = 0x020b, + MNOTE_EPSON_TAG_IMAGE_HEIGHT = 0x020c, + MNOTE_EPSON_TAG_SOFTWARE = 0x020d, + /* Sanyo */ MNOTE_SANYO_TAG_SEQUENTIALSHOT = 0x020e, MNOTE_SANYO_TAG_WIDERANGE = 0x020f, @@ -181,11 +186,6 @@ enum _MnoteOlympusTag { MNOTE_SANYO_TAG_SCENESELECT = 0x021f, MNOTE_SANYO_TAG_MANUALFOCUSDISTANCE = 0x0223, MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL = 0x0224, - - /* Epson */ - MNOTE_EPSON_TAG_IMAGE_WIDTH = 0x020b, - MNOTE_EPSON_TAG_IMAGE_HEIGHT = 0x020c, - MNOTE_EPSON_TAG_SOFTWARE = 0x020d, }; typedef enum _MnoteOlympusTag MnoteOlympusTag; @@ -194,6 +194,7 @@ typedef enum _MnoteOlympusTag MnoteOlympusTag; #define MNOTE_OLYMPUS_TAG_UNKNOWN_2 MNOTE_OLYMPUS_TAG_FOCALPLANEDIAGONAL #define MNOTE_OLYMPUS_TAG_UNKNOWN_3 MNOTE_OLYMPUS_TAG_LENSDISTORTION #define MNOTE_OLYMPUS_TAG_UNKNOWN_5 MNOTE_OLYMPUS_TAG_DATADUMP +#define MNOTE_NIKON_TAG_PREVIEWIMAGE MNOTE_NIKON_TAG_PREVIEWIMAGE_IFD_POINTER /*! Return a textual name of the given tag within the Olympus-style MakerNote. * The name is a short, unique, non-localized text string containing only @@ -217,7 +218,6 @@ const char *mnote_olympus_tag_get_title (MnoteOlympusTag tag); * The description is a verbose, localized description of the tag. * * \param[in] tag EXIF tag - * \param[in] ifd IFD * \return textual description of the tag, or NULL if the tag is unknown */ const char *mnote_olympus_tag_get_description (MnoteOlympusTag tag); -- 2.7.4