Interpret more Sanyo MakerNote tags
authorDan Fandrich <dan@coneharvesters.com>
Fri, 16 Jan 2009 07:07:23 +0000 (23:07 -0800)
committerDan Fandrich <dan@coneharvesters.com>
Fri, 16 Jan 2009 07:07:23 +0000 (23:07 -0800)
ChangeLog
libexif/exif-entry.c
libexif/olympus/mnote-olympus-entry.c
libexif/olympus/mnote-olympus-tag.c
libexif/olympus/mnote-olympus-tag.h

index 8a84beb..3aef756 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-01-15  Dan Fandrich <dan@coneharvesters.com>
+
+       * Interpret more Sanyo MakerNote tags
+
 2009-01-12  Dan Fandrich <dan@coneharvesters.com>
 
        * Added support for Epson MakerNotes, which have the identical
index 973d646..725d93a 100644 (file)
@@ -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)) {
index 354d8df..269c1d5 100644 (file)
@@ -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);
index 86a71ad..881ff5c 100644 (file)
@@ -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}
 };
index 16b006b..69badeb 100644 (file)
@@ -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