diff --git a/src/makernote2.cpp b/src/makernote2.cpp index aae68b98..4fe3b87b 100644 --- a/src/makernote2.cpp +++ b/src/makernote2.cpp @@ -405,11 +405,16 @@ namespace Exiv2 { TiffComponent* newSonyMn(uint16_t tag, uint16_t group, uint16_t mnGroup, - const byte* /*pData*/, - uint32_t /*size*/, + const byte* pData, + uint32_t size, ByteOrder /*byteOrder*/) { - return new TiffIfdMakernote(tag, group, mnGroup, new SonyMnHeader); + // If there is no "SONY DSC " string we assume it's a simple IFD Makernote + if (size < 12 || std::string(reinterpret_cast(pData), 12) + != std::string("SONY DSC \0\0\0", 12)) { + return new TiffIfdMakernote(tag, group, Group::sony2mn, 0, true); + } + return new TiffIfdMakernote(tag, group, Group::sony1mn, new SonyMnHeader, false); } } // namespace Exiv2 diff --git a/src/makernote2.hpp b/src/makernote2.hpp index e51d53b3..58d740d2 100644 --- a/src/makernote2.hpp +++ b/src/makernote2.hpp @@ -55,8 +55,9 @@ namespace Exiv2 { const uint16_t nikon3mn = 266; //!< Nikon3 makernote const uint16_t panamn = 267; //!< Panasonic makernote const uint16_t sigmamn = 268; //!< Sigma makernote - const uint16_t sonymn = 269; //!< Sony makernote - + const uint16_t sonymn = 269; //!< Any Sony makernote (pseudo group) + const uint16_t sony1mn = 270; //!< Sony1 makernote + const uint16_t sony2mn = 271; //!< Sony2 makernote } // ***************************************************************************** diff --git a/src/tiffcomposite.cpp b/src/tiffcomposite.cpp index 390e99b9..29e7d1e9 100644 --- a/src/tiffcomposite.cpp +++ b/src/tiffcomposite.cpp @@ -105,13 +105,15 @@ namespace Exiv2 { case 260: group = "CanonCs1"; break; case 261: group = "CanonCs2"; break; case 262: group = "CanonCf"; break; - // 263 not needed (canonmn) + // 263 not needed (nikonmn) case 264: group = "Nikon1"; break; case 265: group = "Nikon2"; break; case 266: group = "Nikon3"; break; case 267: group = "Panasonic"; break; case 268: group = "Sigma"; break; - case 269: group = "Sony"; break; + // 269 not needed (sonymn) + case 270: group = "Sony"; break; + case 271: group = "Sony"; break; default: group = "Unknown"; break; } return group;