Index: src/casiomn.cpp
===================================================================
diff --git a/trunk/src/casiomn.cpp b/trunk/src/casiomn.cpp
new file mode 10644
--- /dev/null	(Revision 0)
+++ b/trunk/src/casiomn.cpp	(Arbeitskopie)
@@ -0,0 +1,597 @@
+// ***************************************************************** -*- C++ -*-
+/*
+ * Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net>
+ *
+ * This program is part of the Exiv2 distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
+ */
+/*
+  File:      Casiomn.cpp
+  Version:   $Rev: 3091 $
+  History:   30-Oct-13, ahu: created
+  Credits:   See header file
+ */
+// *****************************************************************************
+#include "rcsid_int.hpp"
+EXIV2_RCSID("@(#) $Id: Casiomn.cpp 3091 2013-07-24 05:15:04Z robinwmills $")
+
+// *****************************************************************************
+// included header files
+#include "types.hpp"
+#include "Casiomn_int.hpp"
+#include "tags_int.hpp"
+#include "value.hpp"
+#include "i18n.h"                // NLS support.
+
+// + standard includes
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <cassert>
+#include <cstring>
+#include <vector>
+
+// *****************************************************************************
+// class member definitions
+namespace Exiv2 {
+    namespace Internal {
+
+    //! RecordingMode, tag 0x0001
+    extern const TagDetails casioRecordingMode[] = {
+        {  1, N_("Single Shutter") },
+        {  2, N_("Panorama")       },
+        {  3, N_("Night Scene")    },
+        {  4, N_("Portrait")       },
+        {  5, N_("Landscape")      },
+        {  7, N_("Panorama")       },
+        { 10, N_("Night Scene")    },
+        { 15, N_("Portrait")       },
+        { 16, N_("Landscape")      }
+    };
+
+    //! Quality, tag 0x0002
+    extern const TagDetails casioQuality[] = {
+        { 1, N_("Economy") },
+        { 2, N_("Normal")  },
+        { 3, N_("Fine")    }
+    };
+
+    //! Focus Mode, tag 0x0003
+    extern const TagDetails casioFocusMode[] = {
+        { 2, N_("Macro")    },
+        { 3, N_("Auto")     },
+        { 4, N_("Manual")   },
+        { 5, N_("Infinity") },
+        { 7, N_("Sport AF") }
+    };
+
+    //! FlashMode, tag 0x0004
+    extern const TagDetails casioFlashMode[] = {
+        { 1, N_("Auto")              },
+        { 2, N_("On")                },
+        { 3, N_("Off")               },
+        { 4, N_("Off")               },
+        { 5, N_("Red-eye Reduction") }
+    };
+
+    //! Flash intensity, tag 0x0005
+    extern const TagDetails casioFlashIntensity[] = {
+        { 11, N_("Weak")   },
+        { 12, N_("Low")    },
+        { 13, N_("Normal") },
+        { 14, N_("High")   },
+        { 15, N_("Strong") }
+    };
+
+    //! white balance, tag 0x0007
+    extern const TagDetails casioWhiteBalance[] = {
+        {   1, N_("Auto")        },
+        {   2, N_("Tungsten")    },
+        {   3, N_("Daylight")    },
+        {   4, N_("Fluorescent") },
+        {   5, N_("Shade")       },
+        { 129, N_("Manual")      }
+    };
+
+    //! Flash intensity, tag 0x0005
+    extern const TagDetails casioDigitalZoom[] = {
+        { 0x10000, N_("Off")   },
+        { 0x10001, N_("2x")    },
+        { 0x13333, N_("1.2x")  },
+        { 0x13ae1, N_("1.23x") },
+        { 0x19999, N_("1.6x")  },
+        { 0x20000, N_("2x")    },
+        { 0x33333, N_("3.2x")  },
+        { 0x40000, N_("4x")    }
+    };
+
+    //! Sharpness, tag 0x000b
+    extern const TagDetails casioSharpness[] = {
+        {  0, N_("Normal") },
+        {  1, N_("Soft")   },
+        {  2, N_("Hard")   },
+        { 16, N_("Normal") },
+        { 17, N_("+1")     },
+        { 18, N_("-1")     }
+    };
+        
+    //! Contrast, tag 0x000c
+    extern const TagDetails casioContrast[] = {
+        {  0, N_("Normal") },
+        {  1, N_("Low")   },
+        {  2, N_("High")   },
+        { 16, N_("Normal") },
+        { 17, N_("+1")     },
+        { 18, N_("-1")     }
+    };
+
+    //! Saturation, tag 0x000d
+    extern const TagDetails casioSaturation[] = {
+        {  0, N_("Normal") },
+        {  1, N_("Low")   },
+        {  2, N_("High")   },
+        { 16, N_("Normal") },
+        { 17, N_("+1")     },
+        { 18, N_("-1")     }
+    };
+
+    //! Enhancement, tag 0x0016
+    extern const TagDetails casioEnhancement[] = {
+        { 1, N_("Off")         },
+        { 2, N_("Red")         },
+        { 3, N_("Green")       },
+        { 4, N_("Blue")        },
+        { 5, N_("Flesh Tones") }
+    };
+
+    //! Color filter, tag 0x0017
+    extern const TagDetails casioColorFilter[] = {
+        { 1, N_("Off")           },
+        { 2, N_("Black & White") },
+        { 3, N_("Sepia")         },
+        { 4, N_("Red")           },
+        { 5, N_("Green")         },
+        { 6, N_("Blue")          },
+        { 7, N_("Yellow")        },
+        { 8, N_("Pink")          },
+        { 9, N_("Purple")        }
+    };
+
+    //! flash intensity 2, tag 0x0019
+    extern const TagDetails casioFlashIntensity2[] = {
+        { 1, N_("Normal") },
+        { 2, N_("Weak")   },
+        { 3, N_("Strong") }
+    };
+
+    //! CCD Sensitivity intensity, tag 0x0020
+    extern const TagDetails casioCCDSensitivity[] = {
+        {  64, N_("Normal")                     },
+        { 125, N_("+1.0")                       },
+        { 250, N_("+2.0")                       },
+        { 244, N_("+3.0")                       },
+        {  80, N_("Normal (ISO 80 equivalent)") },
+        { 100, N_("High")                       }
+    };
+
+    // Casio MakerNote Tag Info
+    const TagInfo CasioMakerNote::tagInfo_[] = {
+        TagInfo(0x0001, "RecodingMode", N_("RecodingMode"), N_("Recording Mode"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioRecordingMode)),
+        TagInfo(0x0002, "Quality", N_("Quality"), N_("Quality"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioQuality)),
+        TagInfo(0x0003, "FocusMode", N_("Focus Mode"), N_("Focus Mode"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioFocusMode)),
+        TagInfo(0x0004, "FlashMode", N_("Flash Mode"), N_("Flash Mode"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioFlashMode)),
+        TagInfo(0x0005, "FlashIntensity", N_("Flash Intensity"), N_("Flash Intensity"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioFlashIntensity)),
+        TagInfo(0x0006, "ObjectDistance", N_("Object Distance"), N_("Distance to object"), casioId, makerTags, unsignedLong, -1, print0x0006),
+        TagInfo(0x0007, "WhiteBalance", N_("White Balance"), N_("White balance settings"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioWhiteBalance)),
+        TagInfo(0x000a, "DigitalZoom", N_("Digital Zoom"), N_("Digital zoom"), casioId, makerTags, unsignedLong, -1, EXV_PRINT_TAG(casioDigitalZoom)),
+        TagInfo(0x000b, "Sharpness", N_("Sharpness"), N_("Sharpness"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioSharpness)),
+        TagInfo(0x000c, "Contrast", N_("Contrast"), N_("Contrast"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioContrast)),
+        TagInfo(0x000d, "Saturation", N_("Saturation"), N_("Saturation"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioSaturation)),
+        TagInfo(0x0014, "ISO", N_("ISO"), N_("ISO"), casioId, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x0015, "FirmwareDate", N_("Firmware date"), N_("Firmware date"), casioId, makerTags, asciiString, -1, print0x0015),
+        TagInfo(0x0016, "Enhancement", N_("Enhancement"), N_("Enhancement"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioEnhancement)),
+        TagInfo(0x0017, "ColorFilter", N_("Color Filter"), N_("Color Filter"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioColorFilter)),
+        TagInfo(0x0018, "AFPoint", N_("AF Point"), N_("AF Point"), casioId, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x0019, "FlashIntensity2", N_("Flash Intensity"), N_("Flash Intensity"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioFlashIntensity2)),
+        TagInfo(0x0020, "CCDSensitivity", N_("CCDSensitivity"), N_("CCDSensitivity"), casioId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casioCCDSensitivity)),
+        TagInfo(0x0e00, "PrintIM", N_("Print IM"), N_("PrintIM information"), casioId, makerTags, undefined, -1, printValue),
+        TagInfo(0xffff, "(UnknownCasioMakerNoteTag)", "(UnknownCasioMakerNoteTag)", N_("Unknown CasioMakerNote tag"), casioId, makerTags, asciiString, -1, printValue)
+    };
+
+    const TagInfo* CasioMakerNote::tagList()
+    {
+        return tagInfo_;
+    }
+
+    std::ostream& CasioMakerNote::print0x0006(std::ostream& os, const Value& value, const ExifData*)
+    {
+        std::ostringstream oss;
+        oss.copyfmt(os);
+        os << std::fixed << std::setprecision(2) << value.toLong() / 1000.0 << _(" m");
+        os.copyfmt(oss);
+        return os;
+    } 
+
+    std::ostream& CasioMakerNote::print0x0015(std::ostream& os, const Value& value, const ExifData*)
+    {
+        // format is:  "YYMM#00#00DDHH#00#00MM#00#00#00#00" or  "YYMM#00#00DDHH#00#00MMSS#00#00#00"
+        std::string s;
+        std::vector<char> numbers;
+        for(long i=0; i<value.size(); i++)
+        {
+            long l=value.toLong(i);
+            if(l!=0)
+            {
+                numbers.push_back((char)l);
+            };
+        };
+        if(numbers.size()>=10)
+        {
+            //year
+            long l=(numbers[0]-48)*10+(numbers[1]-48);
+            if(l<70)
+            {
+                l+=2000;
+            }
+            else
+            {
+                l+=1900;
+            };
+            os << l << ":";
+            // month, day, hour, minutes
+            os << numbers[2] << numbers[3] << ":" << numbers[4] << numbers[5] << " " << numbers[6] << numbers[7] << ":" << numbers[8] << numbers[9];
+            // optional seconds
+            if(numbers.size()==12)
+            {
+                os << ":" << numbers[10] << numbers[11];
+            };
+        }
+        else
+        {
+            os << value;
+        };
+        return os;
+    } 
+
+    //Casio Makernotes, Type 2
+    //! Quality Mode, tag 0x0004
+    extern const TagDetails casio2QualityMode[] = {
+        { 0, N_("Economy") },
+        { 1, N_("Normal")  },
+        { 2, N_("Fine")    }
+    };
+
+    //! Image Size, tag 0x0009
+    extern const TagDetails casio2ImageSize[] = {
+        {  0, "640x480"   },
+        {  4, "1600x1200" },
+        {  5, "2048x1536" },
+        { 20, "2288x1712" },
+        { 21, "2592x1944" },
+        { 22, "2304x1728" },
+        { 36, "3008x2008" }
+    };
+
+    //! Focus Mode, tag 0x000d
+    extern const TagDetails casio2FocusMode[] = {
+        { 0, N_("Normal") },
+        { 1, N_("Macro") }
+    };
+
+    //! ISO Speed, tag 0x0014
+    extern const TagDetails casio2IsoSpeed[] = {
+        { 3, "50"  },
+        { 4, "64"  },
+        { 6, "100" },
+        { 9, "200" }
+    };
+
+    //! White Balance, tag 0x0019
+    extern const TagDetails casio2WhiteBalance[] = {
+        { 0, N_("Auto")        },
+        { 1, N_("Daylight")    },
+        { 2, N_("Shade")       },
+        { 3, N_("Tungsten")    },
+        { 4, N_("Fluorescent") },
+        { 5, N_("Manual")      }
+    };
+
+    //! Saturation, tag 0x001f
+    extern const TagDetails casio2Saturation[] = {
+        { 0, N_("Low")    },
+        { 1, N_("Normal") },
+        { 2, N_("High")   }
+    };
+
+    //! Contrast, tag 0x0020
+    extern const TagDetails casio2Contrast[] = {
+        { 0, N_("Low")    },
+        { 1, N_("Normal") },
+        { 2, N_("High")   }
+    };
+
+    //! Sharpness, tag 0x0021
+    extern const TagDetails casio2Sharpness[] = {
+        { 0, N_("Soft")    },
+        { 1, N_("Normal") },
+        { 2, N_("Hard")   }
+    };
+
+    //! White Balance2, tag 0x2012
+    extern const TagDetails casio2WhiteBalance2[] = {
+        {  0, N_("Manual")      },
+        {  1, N_("Daylight")    },
+        {  2, N_("Cloudy")      },
+        {  3, N_("Shade")       },
+        {  4, N_("Flash")       },
+        {  6, N_("Fluorescent") },
+        {  9, N_("Tungsten")    },
+        { 10, N_("Tungsten")    },
+        { 12, N_("Flash")       }
+    };
+
+    //! Release Mode, tag 0x3001
+    extern const TagDetails casio2ReleaseMode[] = {
+        {  1, N_("Normal")              },
+        {  3, N_("AE Bracketing")       },
+        { 11, N_("WB Bracketing")       },
+        { 13, N_("Contrast Bracketing") },
+        { 19, N_("High Speed Burst")    }
+    };
+
+    //! Quality, tag 0x3002
+    extern const TagDetails casio2Quality[] = {
+        { 1, N_("Economy") },
+        { 2, N_("Normal")  },
+        { 3, N_("Fine")    }
+    };
+
+    //! Focus Mode 2, tag 0x3003
+    extern const TagDetails casio2FocusMode2[] = {
+        { 0, N_("Manual")                 },
+        { 1, N_("Focus Lock")             },
+        { 2, N_("Macro")                  },
+        { 3, N_("Single-Area Auto Focus") },
+        { 5, N_("Infinity")               },
+        { 6, N_("Multi-Area Auto Focus")  },
+        { 8, N_("Super Macro")            }
+    };
+
+    //! AutoISO, tag 0x3008
+    extern const TagDetails casio2AutoISO[] = {
+        {  1, N_("On")                   },
+        {  2, N_("Off")                  },
+        {  7, N_("On (high sensitiviy)") },
+        {  8, N_("On (anti-shake)")      },
+        { 10, N_("High Speed")           }
+    };
+
+    //! AFMode, tag 0x3009
+    extern const TagDetails casio2AFMode[] = {
+        { 0, N_("Off")            },
+        { 1, N_("Spot")           },
+        { 2, N_("Multi")          },
+        { 3, N_("Face Detection") },
+        { 4, N_("Tracking")       },
+        { 5, N_("Intelligent")    }
+    };
+
+    //! ColorMode, tag 0x3015
+    extern const TagDetails casio2ColorMode[] = {
+        { 0, N_("Off")           },
+        { 2, N_("Black & White") },
+        { 3, N_("Sepia")         }
+    };
+
+    //! Enhancement, tag 0x3016
+    extern const TagDetails casio2Enhancement[] = {
+        { 0, N_("Off")         },
+        { 1, N_("Scenery")     },
+        { 3, N_("Green")       },
+        { 5, N_("Unterwater")  },
+        { 9, N_("Flesh Tones") }
+
+    };
+
+    //! Color Filter, tag 0x3017
+    extern const TagDetails casio2ColorFilter[] = {
+        { 0, N_("Off")    },
+        { 1, N_("Blue")   },
+        { 3, N_("Green")  },
+        { 4, N_("Yellow") },
+        { 5, N_("Red")    },
+        { 6, N_("Purple") },
+        { 7, N_("Pink")   }
+    };
+
+    //! Art Mode, tag 0x301b
+    extern const TagDetails casio2ArtMode[] = {
+        {  0, N_("Normal")                },
+        {  8, N_("Silent Movie")          },
+        { 39, N_("HDR")                   },
+        { 45, N_("Premium Auto")          },
+        { 47, N_("Painting")              },
+        { 49, N_("Crayon Drawing")        },
+        { 51, N_("Panorama")              },
+        { 52, N_("Art HDR")               },
+        { 62, N_("High Speed Night Shot") },
+        { 64, N_("Monochrome")            },
+        { 67, N_("Toy Camera")            },
+        { 68, N_("Pop Art")               },
+        { 69, N_("Light Tone")            }
+    };
+
+    //! Lighting Mode, tag 0x302a
+    extern const TagDetails casio2LightingMode[] = {
+        { 0, N_("Off")                 },
+        { 1, N_("High Dynamic Range")  },
+        { 5, N_("Shadow Enhance Low")  },
+        { 6, N_("Shadow Enhance High") }
+    };
+        
+    //! Portrait Refiner, tag 0x302b
+    extern const TagDetails casio2PortraitRefiner[] = {
+        { 0, N_("Off") },
+        { 1, N_("+1")  },
+        { 2, N_("+2")  }
+    };
+
+    //! Special Effect Setting, tag 0x3031
+    extern const TagDetails casio2SpecialEffectSetting[] = {
+        {  0, N_("Off")             },
+        {  1, N_("Makeup")          },
+        {  2, N_("Mist Removal")    },
+        {  3, N_("Vivid Landscape") },
+        { 16, N_("Art Shot")        }
+    };
+
+    //! Drive Mode, tag 0x3103
+    extern const TagDetails casio2DriveMode[] = {
+        {   0, N_("Single Shot")         },
+        {   1, N_("Continuous Shooting") },
+        {   2, N_("Continuous (2 fps)")  },
+        {   3, N_("Continuous (3 fps)")  },
+        {   4, N_("Continuous (4 fps)")  },
+        {   5, N_("Continuous (5 fps)")  },
+        {   6, N_("Continuous (6 fps)")  },
+        {   7, N_("Continuous (7 fps)")  },
+        {  10, N_("Continuous (10 fps)") },
+        {  12, N_("Continuous (12 fps)") },
+        {  15, N_("Continuous (15 fps)") },
+        {  20, N_("Continuous (20 fps)") },
+        {  30, N_("Continuous (30 fps)") },
+        {  40, N_("Continuous (40 fps)") },
+        {  60, N_("Continuous (60 fps)") },
+        { 240, N_("Auto-N")              }
+    };
+
+    //! Video Quality, tag 0x4003
+    extern const TagDetails casio2VideoQuality[] = {
+        { 1, N_("Standard")        },
+        { 3, N_("HD (720p)")       },
+        { 4, N_("Full HD (1080p)") },
+        { 5, N_("Low")             }
+    };
+
+    // Casio2 MakerNote Tag Info
+    const TagInfo Casio2MakerNote::tagInfo_[] = {
+        TagInfo(0x0002, "PreviewImageSize", N_("Preview Image Size"), N_("Preview Image Size"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x0003, "PreviewImageLength", N_("Preview Image Length"), N_("Preview Image Length"), casio2Id, makerTags, unsignedLong, -1, printValue),
+        TagInfo(0x0004, "PreviewImageStart", N_("Preview Image Start"), N_("Preview Image Start"), casio2Id, makerTags, unsignedLong, -1, printValue),
+        TagInfo(0x0008, "QualityMode", N_("Quality Mode"), N_("Quality Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2QualityMode)),
+        TagInfo(0x0009, "ImageSize", N_("Image Size"), N_("Image Size"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2ImageSize)),
+        TagInfo(0x000d, "FocusMode", N_("Focus Mode"), N_("Focus Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2FocusMode)),
+        TagInfo(0x0014, "ISOSpeed", N_("ISO Speed"), N_("ISO Speed"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2IsoSpeed)),
+        TagInfo(0x0019, "WhiteBalance", N_("White Balance"), N_("White Balance Setting"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2WhiteBalance)),
+        TagInfo(0x001d, "FocalLength", N_("Focal Length"), N_("Focal Length"), casio2Id, makerTags, unsignedRational, -1, printValue),
+        TagInfo(0x001f, "Saturation", N_("Saturation"), N_("Saturation"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2Saturation)),
+        TagInfo(0x0020, "Contrast", N_("Contrast"), N_("Contrast"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2Contrast)),
+        TagInfo(0x0021, "Sharpness", N_("Sharpness"), N_("Sharpness"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2Sharpness)),
+        TagInfo(0x0e00, "PrintIM", N_("Print IM"), N_("PrintIM information"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x2000, "PreviewImage", N_("Preview Image"), N_("Preview Image"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x2001, "FirmwareDate", N_("Firmware Date"), N_("Firmware Date"), casio2Id, makerTags, asciiString, -1, print0x2001),
+        TagInfo(0x2011, "WhiteBalanceBias", N_("White Balance Bias"), N_("White Balance Bias"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x2012, "WhiteBalance2", N_("White Balance"), N_("White Balance Setting"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2WhiteBalance2)),
+        TagInfo(0x2021, "AFPointPosition", N_("AF Point Position"), N_("AF Point Position"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x2022, "ObjectDistance", N_("Object Distance"), N_("Object Distance"), casio2Id, makerTags, unsignedLong, -1, print0x2022),
+        TagInfo(0x2034, "FlashDistance", N_("Flash Distance"), N_("Flash Distance"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x2076, "SpecialEffectMode", N_("Special Effect Mode"), N_("Special Effect Mode"), casio2Id, makerTags, unsignedByte, -1, printValue),
+        TagInfo(0x2089, "FaceInfo", N_("Face Info"), N_("Face Info"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x211c, "FacesDetected", N_("Faces detected"), N_("Faces detected"), casio2Id, makerTags, unsignedByte, -1, printValue),
+        TagInfo(0x3000, "RecordMode", N_("Record Mode"), N_("Record Mode"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x3001, "ReleaseMode", N_("Release Mode"), N_("Release Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2ReleaseMode)),
+        TagInfo(0x3002, "Quality", N_("Quality"), N_("Quality"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2Quality)),
+        TagInfo(0x3003, "FocusMode2", N_("Focus Mode2"), N_("Focus Mode2"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2FocusMode2)),
+        TagInfo(0x3006, "HometownCity", N_("Home town city"), N_("Home town city"), casio2Id, makerTags, asciiString, -1, printValue),
+        TagInfo(0x3007, "BestShotMode", N_("Best Shot Mode"), N_("Best Shot Mode"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x3008, "AutoISO", N_("Auto ISO"), N_("Auto ISO"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2AutoISO)),
+        TagInfo(0x3009, "AFMode", N_("AF Mode"), N_("AF Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2AFMode)),
+        TagInfo(0x3011, "Sharpness2", N_("Sharpness"), N_("Sharpness"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x3012, "Contrast2", N_("Contrast"), N_("Contrast"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x3013, "Saturation2", N_("Saturation"), N_("Saturation"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x3014, "ISO", N_("ISO"), N_("ISO"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x3015, "ColorMode", N_("Color Mode"), N_("Color Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2ColorMode)),
+        TagInfo(0x3016, "Enhancement", N_("Enhancement"), N_("Enhancement"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2Enhancement)),
+        TagInfo(0x3017, "ColorFilter", N_("Color Filter"), N_("Color Filter"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2ColorFilter)),
+        TagInfo(0x301b, "ArtMode", N_("Art Mode"), N_("Art Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2ArtMode)),
+        TagInfo(0x301c, "SequenceNumber", N_("Sequence Number"), N_("Sequence Number"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x3020, "ImageStabilization", N_("Image Stabilization"), N_("Image Stabilization"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x302a, "LightingMode", N_("Lighting Mode"), N_("Lighting Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2LightingMode)),
+        TagInfo(0x302b, "PortraitRefiner", N_("Portrait Refiner"), N_("Portrait Refiner settings"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2PortraitRefiner)),
+        TagInfo(0x3030, "SpecialEffectLevel", N_("Special Effect Level"), N_("Special Effect Level"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x3031, "SpecialEffectSetting", N_("Special Effect Setting"), N_("Special Effect Setting"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2SpecialEffectSetting)),
+        TagInfo(0x3103, "DriveMode", N_("Drive Mode"), N_("Drive Mode"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2DriveMode)),
+        TagInfo(0x310b, "ArtModeParameters", N_("Art Mode Parameters"), N_("Art Mode Parameters"), casio2Id, makerTags, undefined, -1, printValue),
+        TagInfo(0x4001, "CaptureFrameRate", N_("Capture Frame Rate"), N_("Capture Frame Rate"), casio2Id, makerTags, unsignedShort, -1, printValue),
+        TagInfo(0x4003, "VideoQuality", N_("Video Quality"), N_("Video Quality"), casio2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(casio2VideoQuality)),
+        TagInfo(0xffff, "(UnknownCasio2MakerNoteTag)", "(UnknownCasio2MakerNoteTag)", N_("Unknown Casio2MakerNote tag"), casio2Id, makerTags, asciiString, -1, printValue)
+    };
+
+    const TagInfo* Casio2MakerNote::tagList()
+    {
+        return tagInfo_;
+    }
+
+    std::ostream& Casio2MakerNote::print0x2001(std::ostream& os, const Value& value, const ExifData*)
+    {
+        // format is:  "YYMM#00#00DDHH#00#00MM#00#00#00#00"
+        std::string s;
+        std::vector<char> numbers;
+        for(long i=0; i<value.size(); i++)
+        {
+            long l=value.toLong(i);
+            if(l!=0)
+            {
+                numbers.push_back((char)l);
+            };
+        };
+        if(numbers.size()>=10)
+        {
+            //year
+            long l=(numbers[0]-48)*10+(numbers[1]-48);
+            if(l<70)
+            {
+                l+=2000;
+            }
+            else
+            {
+                l+=1900;
+            };
+            os << l << ":";
+            // month, day, hour, minutes
+            os << numbers[2] << numbers[3] << ":" << numbers[4] << numbers[5] << " " << numbers[6] << numbers[7] << ":" << numbers[8] << numbers[9];
+        }
+        else
+        {
+            os << value;
+        };
+        return os;
+    } 
+
+    std::ostream& Casio2MakerNote::print0x2022(std::ostream& os, const Value& value, const ExifData*)
+    {
+        if(value.toLong()>=0x20000000)
+        {
+            return os << N_("Inf");
+        };
+        std::ostringstream oss;
+        oss.copyfmt(os);
+        os << std::fixed << std::setprecision(2) << value.toLong() / 1000.0 << _(" m");
+        os.copyfmt(oss);
+        return os;
+    } 
+
+}}                                      // namespace Internal, Exiv2
Index: src/casiomn_int.hpp
===================================================================
diff --git a/trunk/src/casiomn_int.hpp b/trunk/src/casiomn_int.hpp
new file mode 10644
--- /dev/null	(Revision 0)
+++ b/trunk/src/casiomn_int.hpp	(Arbeitskopie)
@@ -0,0 +1,84 @@
+// ***************************************************************** -*- C++ -*-
+/*
+ * Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net>
+ *
+ * This program is part of the Exiv2 distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
+ */
+/*!
+  @file    Casiomn_int.hpp
+  @brief   Casio MakerNote implemented using the following references:
+           <a href="http://gvsoft.homedns.org/exif/makernote-casio-type1.html">Casio MakerNote Information</a> by GVsoft,
+           Casio.pm of <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/">ExifTool</a> by Phil Harvey,
+           <a href="http://www.ozhiker.com/electronics/pjmt/jpeg_info/casio_mn.html#Casio_Type_1_Tags">Casio Makernote Format Specification</a> by Evan Hunter.
+  @version $Rev: 3091 $
+  @date    30-Oct-13, ahu: created
+ */
+#ifndef CASIOMN_INT_HPP_
+#define CASIOMN_INT_HPP_
+
+// *****************************************************************************
+// included header files
+#include "tags.hpp"
+#include "types.hpp"
+
+// + standard includes
+#include <string>
+#include <iosfwd>
+
+// *****************************************************************************
+// namespace extensions
+namespace Exiv2 {
+    namespace Internal {
+
+// *****************************************************************************
+// class definitions
+
+    //! MakerNote for Casio cameras
+    class CasioMakerNote {
+    public:
+        //! Return read-only list of built-in Casio tags
+        static const TagInfo* tagList();
+        //! Print ObjectDistance
+        static std::ostream& print0x0006(std::ostream& os, const Value& value, const ExifData*);
+        //! Print FirmwareDate
+        static std::ostream& print0x0015(std::ostream& os, const Value& value, const ExifData*);
+
+    private:
+        //! Makernote tag list
+        static const TagInfo tagInfo_[];
+
+    }; // class CasioMakerNote
+
+    //! MakerNote for Casio2 cameras
+    class Casio2MakerNote {
+    public:
+        //! Return read-only list of built-in Casio2 tags
+        static const TagInfo* tagList();
+        //! Print FirmwareDate
+        static std::ostream& print0x2001(std::ostream& os, const Value& value, const ExifData*);
+        //! Print ObjectDistance
+        static std::ostream& print0x2022(std::ostream& os, const Value& value, const ExifData*);
+
+    private:
+        //! Makernote tag list
+        static const TagInfo tagInfo_[];
+
+    }; // class Casio2MakerNote
+
+}}                                      // namespace Internal, Exiv2
+
+#endif                                  // #ifndef CasioMN_INT_HPP_
Index: src/easyaccess.cpp
===================================================================
diff --git a/trunk/src/easyaccess.cpp b/trunk/src/easyaccess.cpp
--- a/trunk/src/easyaccess.cpp	(Revision 3195)
+++ b/trunk/src/easyaccess.cpp	(Arbeitskopie)
@@ -106,7 +106,10 @@
             "Exif.Pentax.ISO",
             "Exif.PentaxDng.ISO",
             "Exif.Olympus.ISOSpeed",
-            "Exif.Samsung2.ISO"
+            "Exif.Samsung2.ISO",
+            "Exif.Casio.ISO",
+            "Exif.Casio2.ISO",
+            "Exif.Casio2.ISOSpeed"
         };
 
         // Find the first ISO value which is not "0"
@@ -220,7 +223,10 @@
             "Exif.Sony1Cs.Quality",
             "Exif.Sony2.JPEGQuality",
             "Exif.Sony2.Quality",
-            "Exif.Sony2Cs.Quality"
+            "Exif.Sony2Cs.Quality",
+            "Exif.Casio.Quality",
+            "Exif.Casio2.QualityMode",
+            "Exif.Casio2.Quality"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
@@ -248,6 +254,9 @@
             "Exif.Sony2.WhiteBalance",
             "Exif.Sony1.WhiteBalance2",
             "Exif.Sony2.WhiteBalance2",
+            "Exif.Casio.WhiteBalance",
+            "Exif.Casio2.WhiteBalance",
+            "Exif.Casio2.WhiteBalance2",
             "Exif.Photo.WhiteBalance"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
@@ -290,7 +299,10 @@
             "Exif.Panasonic.Saturation",
             "Exif.Pentax.Saturation",
             "Exif.PentaxDng.Saturation",
-            "Exif.Sigma.Saturation"
+            "Exif.Sigma.Saturation",
+            "Exif.Casio.Saturation",
+            "Exif.Casio2.Saturation",
+            "Exif.Casio2.Saturation2"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
@@ -309,7 +321,10 @@
             "Exif.Panasonic.Sharpness",
             "Exif.Pentax.Sharpness",
             "Exif.PentaxDng.Sharpness",
-            "Exif.Sigma.Sharpness"
+            "Exif.Sigma.Sharpness",
+            "Exif.Casio.Sharpness",
+            "Exif.Casio2.Sharpness",
+            "Exif.Casio2.Sharpness2"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
@@ -328,7 +343,11 @@
             "Exif.Panasonic.Contrast",
             "Exif.Pentax.Contrast",
             "Exif.PentaxDng.Contrast",
-            "Exif.Sigma.Contrast"
+            "Exif.Sigma.Contrast",
+            "Exif.Casio.Contrast",
+            "Exif.Casio2.Contrast",
+            "Exif.Casio2.Contrast2"
+
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
@@ -401,7 +420,9 @@
             "Exif.NikonLd2.FocusDistance",
             "Exif.NikonLd3.FocusDistance",
             "Exif.Olympus.FocusDistance",
-            "Exif.OlympusFi.FocusDistance"
+            "Exif.OlympusFi.FocusDistance",
+            "Exif.Casio.ObjectDistance",
+            "Exif.Casio2.ObjectDistance"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
@@ -430,7 +451,8 @@
             "Exif.NikonLd3.FocalLength",
             "Exif.MinoltaCsNew.FocalLength",
             "Exif.Pentax.FocalLength",
-            "Exif.PentaxDng.FocalLength"
+            "Exif.PentaxDng.FocalLength",
+            "Exif.Casio2.FocalLength"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
@@ -457,7 +479,9 @@
             "Exif.Sony2Cs.LocalAFAreaPoint",
             "Exif.Sony1Cs2.LocalAFAreaPoint",
             "Exif.Sony2Cs2.LocalAFAreaPoint",
-            "Exif.Sony1MltCsA100.LocalAFAreaPoint"
+            "Exif.Sony1MltCsA100.LocalAFAreaPoint",
+            "Exif.Casio.AFPoint",
+            "Exif.Casio2.AFPointPosition"
         };
         return findMetadatum(ed, keys, EXV_COUNTOF(keys));
     }
Index: src/makernote.cpp
===================================================================
diff --git a/trunk/src/makernote.cpp b/trunk/src/makernote.cpp
--- a/trunk/src/makernote.cpp	(Revision 3195)
+++ b/trunk/src/makernote.cpp	(Arbeitskopie)
@@ -73,6 +73,7 @@
         { "SAMSUNG",        samsung2Id,  newSamsungMn,   newSamsungMn2   },
         { "SIGMA",          sigmaId,     newSigmaMn,     newSigmaMn2     },
         { "SONY",           ifdIdNotSet, newSonyMn,      0               }, // mnGroup_ is not used
+        { "CASIO",          ifdIdNotSet, newCasioMn,     0               }, // mnGroup_ is not used
         // Entries below are only used for lookup by group
         { "-",              nikon1Id,    0,              newIfdMn2       },
         { "-",              nikon2Id,    0,              newNikon2Mn2    },
@@ -727,6 +728,59 @@
         return sizeOfSignature();
     } // SonyMnHeader::write
 
+    const byte Casio2MnHeader::signature_[] = {
+        'Q', 'V', 'C', '\0', '\0', '\0'
+    };
+    const ByteOrder Casio2MnHeader::byteOrder_ = bigEndian;
+
+    uint32_t Casio2MnHeader::sizeOfSignature()
+    {
+        return sizeof(signature_);
+    }
+
+    Casio2MnHeader::Casio2MnHeader()
+    {
+        read(signature_, sizeOfSignature(), invalidByteOrder );
+    }
+
+    Casio2MnHeader::~Casio2MnHeader()
+    {
+    }
+
+    uint32_t Casio2MnHeader::size() const
+    {
+        return sizeOfSignature();
+    }
+
+    uint32_t Casio2MnHeader::ifdOffset() const
+    {
+        return start_;
+    }
+
+    ByteOrder Casio2MnHeader::byteOrder() const
+    {
+        return byteOrder_;
+    }
+
+    bool Casio2MnHeader::read(const byte* pData,
+                            uint32_t    size,
+                            ByteOrder   /*byteOrder*/)
+    {
+        if (!pData || size < sizeOfSignature()) return false;
+        if (0 != memcmp(pData, signature_, sizeOfSignature())) return false;
+        buf_.alloc(sizeOfSignature());
+        std::memcpy(buf_.pData_, pData, buf_.size_);
+        start_ = sizeOfSignature();
+        return true;
+    } // Casio2MnHeader::read
+
+    uint32_t Casio2MnHeader::write(IoWrapper& ioWrapper,
+                                 ByteOrder /*byteOrder*/) const
+    {
+        ioWrapper.write(signature_, sizeOfSignature());
+        return sizeOfSignature();
+    } // Casio2MnHeader::write
+
     // *************************************************************************
     // free functions
 
@@ -970,6 +1024,29 @@
         return new TiffIfdMakernote(tag, group, mnGroup, 0, true);
     }
 
+    TiffComponent* newCasioMn(uint16_t    tag,
+                             IfdId       group,
+                             IfdId       mnGroup,
+                             const byte* pData,
+                             uint32_t    size,
+                             ByteOrder   byteOrder)
+    {
+        if (size > 6 && std::string(reinterpret_cast<const char*>(pData), 6)
+                        == std::string("QVC\0\0\0", 6)) {
+            return newCasio2Mn2(tag, group, casio2Id);
+        };
+        // Require at least an IFD with 1 entry, but not necessarily a next pointer
+        if (size < 14) return 0;
+        return newIfdMn2(tag, group, casioId);
+    }
+
+    TiffComponent* newCasio2Mn2(uint16_t tag,
+                               IfdId    group,
+                               IfdId    mnGroup)
+    {
+        return new TiffIfdMakernote(tag, group, mnGroup, new Casio2MnHeader);
+    }
+
     //! Structure for an index into the array set of complex binary arrays.
     struct NikonArrayIdx {
         //! Key for comparisons
Index: src/makernote_int.hpp
===================================================================
diff --git a/trunk/src/makernote_int.hpp b/trunk/src/makernote_int.hpp
--- a/trunk/src/makernote_int.hpp	(Revision 3195)
+++ b/trunk/src/makernote_int.hpp	(Arbeitskopie)
@@ -518,7 +518,41 @@
 
     }; // class SonyMnHeader
 
-// *****************************************************************************
+    //! Header of a Casio2 Makernote
+    class Casio2MnHeader : public MnHeader {
+    public:
+        //! @name Creators
+        //@{
+        //! Default constructor
+        Casio2MnHeader();
+        //! Virtual destructor.
+        virtual ~Casio2MnHeader();
+        //@}
+        //! @name Manipulators
+        //@{
+        virtual bool read(const byte* pData,
+                          uint32_t    size,
+                          ByteOrder   byteOrder);
+        //@}
+        //! @name Accessors
+        //@{
+        virtual uint32_t size() const;
+        virtual uint32_t write(IoWrapper& ioWrapper, ByteOrder byteOrder) const;
+        virtual uint32_t ifdOffset() const;
+        virtual ByteOrder byteOrder() const;
+        //@}
+        //! Return the size of the makernote header signature
+        static uint32_t sizeOfSignature();
+
+    private:
+        DataBuf buf_;                   //!< Raw header data
+        uint32_t start_;                //!< Start of the mn IFD rel. to mn start
+        static const byte signature_[]; //!< Casio makernote header signature
+        static const ByteOrder byteOrder_; //!< Byteorder for makernote (always big endian)
+
+    }; // class Casio2MnHeader
+
+    // *****************************************************************************
 // template, inline and free functions
 
     //! Function to create a simple IFD makernote (Canon, Minolta, Nikon1)
@@ -661,6 +695,19 @@
                                IfdId    group,
                                IfdId    mnGroup);
 
+    //! Function to create a Casio2 makernote
+    TiffComponent* newCasioMn(uint16_t    tag,
+                             IfdId       group,
+                             IfdId       mnGroup,
+                             const byte* pData,
+                             uint32_t    size,
+                             ByteOrder   byteOrder);
+
+    //! Function to create a Casio2 makernote
+    TiffComponent* newCasio2Mn2(uint16_t tag,
+                               IfdId    group,
+                               IfdId    mnGroup);
+
     /*!
       @brief Function to select cfg + def of the Sony Camera Settings complex binary array.
 
Index: src/preview.cpp
===================================================================
diff --git a/trunk/src/preview.cpp b/trunk/src/preview.cpp
--- a/trunk/src/preview.cpp	(Revision 3195)
+++ b/trunk/src/preview.cpp	(Arbeitskopie)
@@ -324,6 +324,7 @@
         { 0,                       createLoaderExifDataJpeg, 8 },
         { "image/x-panasonic-rw2", createLoaderExifDataJpeg, 9 },
         { 0,                       createLoaderExifDataJpeg,10 },
+        { 0,                       createLoaderExifDataJpeg,11 },
         { 0,                       createLoaderTiff,         0 },
         { 0,                       createLoaderTiff,         1 },
         { 0,                       createLoaderTiff,         2 },
@@ -367,7 +368,8 @@
         { "Exif.Olympus2.ThumbnailImage",              0                                                 }, //  7
         { "Exif.Minolta.Thumbnail",                    0                                                 }, //  8
         { "Exif.PanasonicRaw.PreviewImage",            0                                                 }, //  9
-        { "Exif.SamsungPreview.JPEGInterchangeFormat", "Exif.SamsungPreview.JPEGInterchangeFormatLength" }  // 10
+        { "Exif.SamsungPreview.JPEGInterchangeFormat", "Exif.SamsungPreview.JPEGInterchangeFormatLength" }, // 10
+        { "Exif.Casio2.PreviewImage",                  0                                                 }  // 11
     };
 
     const LoaderTiff::Param LoaderTiff::param_[] = {
Index: src/tags.cpp
===================================================================
diff --git a/trunk/src/tags.cpp b/trunk/src/tags.cpp
--- a/trunk/src/tags.cpp	(Revision 3195)
+++ b/trunk/src/tags.cpp	(Arbeitskopie)
@@ -42,6 +42,7 @@
 #include "i18n.h"                // NLS support.
 
 #include "canonmn_int.hpp"
+#include "casiomn_int.hpp"
 #include "fujimn_int.hpp"
 #include "minoltamn_int.hpp"
 #include "nikonmn_int.hpp"
@@ -104,6 +105,8 @@
         { canonFiId,       "Makernote", "CanonFi",      CanonMakerNote::tagListFi      },
         { canonPaId,       "Makernote", "CanonPa",      CanonMakerNote::tagListPa      },
         { canonPrId,       "Makernote", "CanonPr",      CanonMakerNote::tagListPr      },
+        { casioId,         "Makernote", "Casio",        CasioMakerNote::tagList        },
+        { casio2Id,        "Makernote", "Casio2",       Casio2MakerNote::tagList       },
         { fujiId,          "Makernote", "Fujifilm",     FujiMakerNote::tagList         },
         { minoltaId,       "Makernote", "Minolta",      MinoltaMakerNote::tagList      },
         { minoltaCs5DId,   "Makernote", "MinoltaCs5D",  MinoltaMakerNote::tagListCs5D  },
Index: src/tags_int.hpp
===================================================================
diff --git a/trunk/src/tags_int.hpp b/trunk/src/tags_int.hpp
--- a/trunk/src/tags_int.hpp	(Revision 3195)
+++ b/trunk/src/tags_int.hpp	(Arbeitskopie)
@@ -82,6 +82,8 @@
         canonPaId,
         canonFiId,
         canonPrId,
+        casioId,
+        casio2Id,
         fujiId,
         minoltaId,
         minoltaCs5DId,
Index: src/tiffimage.cpp
===================================================================
diff --git a/trunk/src/tiffimage.cpp b/trunk/src/tiffimage.cpp
--- a/trunk/src/tiffimage.cpp	(Revision 3195)
+++ b/trunk/src/tiffimage.cpp	(Arbeitskopie)
@@ -1252,6 +1252,8 @@
         { Tag::root, minoltaCsNewId,   minoltaId,        0x0003    },
         { Tag::root, minoltaCs7DId,    minoltaId,        0x0004    },
         { Tag::root, minoltaCs5DId,    minoltaId,        0x0114    },
+        { Tag::root, casioId,          exifId,           0x927c    },
+        { Tag::root, casio2Id,         exifId,           0x927c    },
         // ---------------------------------------------------------
         // Panasonic RW2 raw images
         { Tag::pana, ifdIdNotSet,      ifdIdNotSet,      Tag::pana },
@@ -1722,6 +1724,14 @@
         { Tag::next, panaRawId,        newTiffDirectory<ignoreId>                },
         {  Tag::all, panaRawId,        newTiffEntry                              },
 
+        // Casio makernote
+        { Tag::next, casioId,          newTiffDirectory<ignoreId>                },
+        {  Tag::all, casioId,          newTiffEntry                              },
+
+        // Casio2 makernote
+        { Tag::next, casio2Id,          newTiffDirectory<ignoreId>                },
+        {  Tag::all, casio2Id,          newTiffEntry                              },
+
         // -----------------------------------------------------------------------
         // Tags which are not de/encoded
         { Tag::next, ignoreId,           newTiffDirectory<ignoreId>              },
