From c126df0ddb11f3515e4ff1f81f9c54f06374a7d8 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Thu, 15 Jan 2009 23:07:23 -0800 Subject: [PATCH] Interpret more Sanyo MakerNote tags --- ChangeLog | 4 ++++ libexif/exif-entry.c | 5 ++++- libexif/olympus/mnote-olympus-entry.c | 30 ++++++++++++++++++++++++------ libexif/olympus/mnote-olympus-tag.c | 6 ++++-- libexif/olympus/mnote-olympus-tag.h | 7 +++++-- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a84beb..3aef756 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2009-01-15 Dan Fandrich + + * Interpret more Sanyo MakerNote tags + 2009-01-12 Dan Fandrich * Added support for Epson MakerNotes, which have the identical diff --git a/libexif/exif-entry.c b/libexif/exif-entry.c index 973d646..725d93a 100644 --- a/libexif/exif-entry.c +++ b/libexif/exif-entry.c @@ -637,7 +637,10 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen) } if ((e->size >= 8) && !memcmp (e->data, "UNICODE\0", 8)) { strncpy (val, _("Unsupported UNICODE string"), maxlen); - /* FIXME: use iconv to convert into the locale encoding */ + /* FIXME: use iconv to convert into the locale encoding. + * EXIF 2.2 implies (but does not say) that this encoding is + * UCS-2. + */ break; } if ((e->size >= 8) && !memcmp (e->data, "JIS\0\0\0\0\0", 8)) { diff --git a/libexif/olympus/mnote-olympus-entry.c b/libexif/olympus/mnote-olympus-entry.c index 354d8df..269c1d5 100644 --- a/libexif/olympus/mnote-olympus-entry.c +++ b/libexif/olympus/mnote-olympus-entry.c @@ -121,10 +121,10 @@ static const struct { {4, N_("Contrast-")}, {0, NULL}}}, { MNOTE_NIKON1_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT, - { {0, N_("ISO80")}, - {2, N_("ISO160")}, - {4, N_("ISO320")}, - {5, N_("ISO100")}, + { {0, N_("ISO 80")}, + {2, N_("ISO 160")}, + {4, N_("ISO 320")}, + {5, N_("ISO 100")}, {0, NULL}}}, { MNOTE_NIKON1_TAG_WHITEBALANCE, EXIF_FORMAT_SHORT, { {0, N_("Auto")}, @@ -220,12 +220,17 @@ static const struct { { {0, N_("Interlaced")}, {1, N_("Progressive")}, {0, NULL}}}, + { MNOTE_SANYO_TAG_SEQUENTIALSHOT, EXIF_FORMAT_SHORT, { {0, N_("None")}, {1, N_("Standard")}, {2, N_("Best")}, {3, N_("Adjust Exposure")}, {0, NULL}}}, + { MNOTE_SANYO_TAG_FOCUSMODE, EXIF_FORMAT_SHORT, + { {1, N_("Spot Focus")}, + {2, N_("Normal Focus")}, + {0, NULL}}}, { MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE, EXIF_FORMAT_SHORT, { {0, N_("Record while down")}, {1, N_("Press start, press stop")}, @@ -234,6 +239,13 @@ static const struct { { {0, N_("No")}, {1, N_("Yes")}, {0, NULL}}}, + { MNOTE_SANYO_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT, + { {0, N_("Auto")}, + {1, N_("ISO 50")}, + {3, N_("ISO 100")}, + {4, N_("ISO 200")}, + {5, N_("ISO 400")}, + {0, NULL}}}, { MNOTE_SANYO_TAG_SCENESELECT, EXIF_FORMAT_SHORT, { {0, N_("Off")}, {1, N_("Sport")}, @@ -321,7 +333,7 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m case MNOTE_NIKON_TAG_IMAGEADJUSTMENT: case MNOTE_NIKON_TAG_ADAPTER: case MNOTE_NIKON_TAG_SATURATION2: - case MNOTE_EPSON_TAG_OEM_MODEL: + case MNOTE_EPSON_TAG_SOFTWARE: CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen); memcpy(v, entry->data, MIN (maxlen, entry->size)); break; @@ -473,8 +485,10 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m case MNOTE_OLYMPUS_TAG_PREVIEWIMAGEVALID: case MNOTE_OLYMPUS_TAG_CCDSCANMODE: case MNOTE_SANYO_TAG_SEQUENTIALSHOT: + case MNOTE_SANYO_TAG_FOCUSMODE: case MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE: case MNOTE_SANYO_TAG_RESAVED: + case MNOTE_SANYO_TAG_CCDSENSITIVITY: case MNOTE_SANYO_TAG_SCENESELECT: case MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL: CC (entry->components, 1, v, maxlen); @@ -644,7 +658,11 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m case MNOTE_OLYMPUS_TAG_UNKNOWN_4: CF (entry->format, EXIF_FORMAT_LONG, v, maxlen); CC (entry->components, 30, v, maxlen); - /* TODO: display me */ + for (i=0; i < (int)entry->components; ++i) { + vs = exif_get_long (entry->data+4*i, entry->order); + sprintf (buf, "%lu ", vs); + strncat (v, buf, maxlen - strlen (v)); + } break; case MNOTE_OLYMPUS_TAG_FOCUSDIST: CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); diff --git a/libexif/olympus/mnote-olympus-tag.c b/libexif/olympus/mnote-olympus-tag.c index 86a71ad..881ff5c 100644 --- a/libexif/olympus/mnote-olympus-tag.c +++ b/libexif/olympus/mnote-olympus-tag.c @@ -118,7 +118,7 @@ static const struct { {MNOTE_OLYMPUS_TAG_ONETOUCHWB, "OneTouchWB", N_("One Touch White Balance"), ""}, {MNOTE_OLYMPUS_TAG_WHITEBALANCEBRACKET, "WhiteBalanceBracket", N_("White Balance Bracket"), ""}, {MNOTE_OLYMPUS_TAG_WHITEBALANCEBIAS, "WhiteBalanceBias", N_("White Balance Bias"), ""}, - {MNOTE_OLYMPUS_TAG_UNKNOWN_5, NULL, NULL, NULL}, + {MNOTE_OLYMPUS_TAG_DATADUMP, "DataDump", N_("Data Dump"), NULL}, {MNOTE_OLYMPUS_TAG_UNKNOWN_4, NULL, NULL, NULL}, {MNOTE_OLYMPUS_TAG_SHUTTERSPEED, "ShutterSpeed", N_("Shutter Speed"), ""}, {MNOTE_OLYMPUS_TAG_ISOVALUE, "ISOValue", N_("ISO Value"), ""}, @@ -170,6 +170,7 @@ static const struct { {MNOTE_SANYO_TAG_SEQUENTIALSHOT, "SequentialShot", N_("Sequential Shot"), ""}, {MNOTE_SANYO_TAG_WIDERANGE, "WideRange", N_("Wide Range"), ""}, {MNOTE_SANYO_TAG_COLORADJUSTMENTMODE, "ColorAdjustmentMode", N_("Color Adjustment Mode"), ""}, + {MNOTE_SANYO_TAG_FOCUSMODE, "FocusMode", N_("Focus Mode"), ""}, {MNOTE_SANYO_TAG_QUICKSHOT, "QuickShot", N_("Quick Shot"), ""}, {MNOTE_SANYO_TAG_SELFTIMER, "SelfTimer", N_("Self Timer"), ""}, {MNOTE_SANYO_TAG_VOICEMEMO, "VoiceMemo", N_("Voice Memo"), ""}, @@ -179,6 +180,7 @@ static const struct { {MNOTE_SANYO_TAG_DIGITALZOOM, "DigitalZoom", N_("Digital Zoom"), ""}, {MNOTE_SANYO_TAG_LIGHTSOURCESPECIAL, "LightSourceSpecial", N_("Light Source Special"), ""}, {MNOTE_SANYO_TAG_RESAVED, "Resaved", N_("Resaved"), ""}, + {MNOTE_SANYO_TAG_CCDSENSITIVITY, "CCDSensitivity", N_("CCD Sensitivity"), ""}, {MNOTE_SANYO_TAG_SCENESELECT, "SceneSelect", N_("Scene Select"), ""}, {MNOTE_SANYO_TAG_MANUALFOCUSDISTANCE, "ManualFocusDistance", N_("Manual Focus Distance"), ""}, {MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL, "SequenceShotInterval", N_("Sequence Shot Interval"), ""}, @@ -186,7 +188,7 @@ static const struct { /* Epson */ {MNOTE_EPSON_TAG_IMAGE_WIDTH, "EpsonImageWidth", N_("Epson Image Width"), ""}, {MNOTE_EPSON_TAG_IMAGE_HEIGHT, "EpsonImageHeight", N_("Epson Image Height"), ""}, - {MNOTE_EPSON_TAG_OEM_MODEL, "EpsonOEMModel", N_("OEM Model Name"), ""}, + {MNOTE_EPSON_TAG_SOFTWARE, "EpsonSoftware", N_("Epson Software Version"), ""}, #endif {0, NULL, NULL, NULL} }; diff --git a/libexif/olympus/mnote-olympus-tag.h b/libexif/olympus/mnote-olympus-tag.h index 16b006b..69badeb 100644 --- a/libexif/olympus/mnote-olympus-tag.h +++ b/libexif/olympus/mnote-olympus-tag.h @@ -115,7 +115,7 @@ enum _MnoteOlympusTag { MNOTE_OLYMPUS_TAG_ONETOUCHWB = 0x0302, MNOTE_OLYMPUS_TAG_WHITEBALANCEBRACKET = 0x0303, MNOTE_OLYMPUS_TAG_WHITEBALANCEBIAS = 0x0304, - MNOTE_OLYMPUS_TAG_UNKNOWN_5 = 0x0f00, + MNOTE_OLYMPUS_TAG_DATADUMP = 0x0f00, MNOTE_OLYMPUS_TAG_UNKNOWN_4 = 0x0f04, MNOTE_OLYMPUS_TAG_SHUTTERSPEED = 0x1000, MNOTE_OLYMPUS_TAG_ISOVALUE = 0x1001, @@ -167,6 +167,7 @@ enum _MnoteOlympusTag { MNOTE_SANYO_TAG_SEQUENTIALSHOT = 0x020e, MNOTE_SANYO_TAG_WIDERANGE = 0x020f, MNOTE_SANYO_TAG_COLORADJUSTMENTMODE = 0x0210, + MNOTE_SANYO_TAG_FOCUSMODE = 0x0212, MNOTE_SANYO_TAG_QUICKSHOT = 0x0213, MNOTE_SANYO_TAG_SELFTIMER = 0x0214, MNOTE_SANYO_TAG_VOICEMEMO = 0x0216, @@ -174,6 +175,7 @@ enum _MnoteOlympusTag { MNOTE_SANYO_TAG_FLICKERREDUCE = 0x0218, MNOTE_SANYO_TAG_OPTICALZOOM = 0x0219, MNOTE_SANYO_TAG_DIGITALZOOM = 0x021b, + MNOTE_SANYO_TAG_CCDSENSITIVITY = 0x021a, MNOTE_SANYO_TAG_LIGHTSOURCESPECIAL = 0x021d, MNOTE_SANYO_TAG_RESAVED = 0x021e, MNOTE_SANYO_TAG_SCENESELECT = 0x021f, @@ -183,7 +185,7 @@ enum _MnoteOlympusTag { /* Epson */ MNOTE_EPSON_TAG_IMAGE_WIDTH = 0x020b, MNOTE_EPSON_TAG_IMAGE_HEIGHT = 0x020c, - MNOTE_EPSON_TAG_OEM_MODEL = 0x020d, + MNOTE_EPSON_TAG_SOFTWARE = 0x020d, }; typedef enum _MnoteOlympusTag MnoteOlympusTag; @@ -191,6 +193,7 @@ typedef enum _MnoteOlympusTag MnoteOlympusTag; #define MNOTE_OLYMPUS_TAG_UNKNOWN_1 MNOTE_OLYMPUS_TAG_BWMODE #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 /*! 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 -- 2.7.4