From 44fc9ec528c8735fc790968b71afa0d4fa57e344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20D=C3=ADaz=20M=C3=A1s?= Date: Thu, 23 Nov 2017 19:27:26 +0100 Subject: [PATCH] Move Cr2Header to a new .cpp file --- src/CMakeLists.txt | 8 +++-- src/cr2image.cpp | 70 ------------------------------------------- src/cr2image_int.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 73 deletions(-) create mode 100644 src/cr2image_int.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 709aa3fb..ec7f084d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,6 +59,8 @@ set( LIBEXIV2_SRC asfvideo.cpp xmp.cpp xmpsidecar.cpp utilsvideo.cpp + + cr2image_int.cpp ) # Public C++ header files @@ -225,10 +227,10 @@ if (EXIV2_ENABLE_WEBREADY) endif() if ( MSVC ) - target_compile_definitions(exiv2lib - PRIVATE + target_compile_definitions(exiv2lib + PRIVATE PSAPI_VERSION=1 # to be compatible with <= WinVista (#905) - ) + ) source_group("Header Files" FILES ${LIBEXIV2_HDR} ) source_group("Header Files" FILES ${LIBCURL_HDR} ) diff --git a/src/cr2image.cpp b/src/cr2image.cpp index f29daed0..98a6adf2 100644 --- a/src/cr2image.cpp +++ b/src/cr2image.cpp @@ -229,73 +229,3 @@ namespace Exiv2 { } } // namespace Exiv2 - -namespace Exiv2 { - namespace Internal { - - const char* Cr2Header::cr2sig_ = "CR\2\0"; - - Cr2Header::Cr2Header(ByteOrder byteOrder) - : TiffHeaderBase(42, 16, byteOrder, 0x00000010), - offset2_(0x00000000) - { - } - - Cr2Header::~Cr2Header() - { - } - - bool Cr2Header::read(const byte* pData, uint32_t size) - { - if (size < 16) return false; - - if (pData[0] == 'I' && pData[0] == pData[1]) { - setByteOrder(littleEndian); - } - else if (pData[0] == 'M' && pData[0] == pData[1]) { - setByteOrder(bigEndian); - } - else { - return false; - } - if (tag() != getUShort(pData + 2, byteOrder())) return false; - setOffset(getULong(pData + 4, byteOrder())); - if (0 != memcmp(pData + 8, cr2sig_, 4)) return false; - offset2_ = getULong(pData + 12, byteOrder()); - - return true; - } // Cr2Header::read - - DataBuf Cr2Header::write() const - { - DataBuf buf(16); - switch (byteOrder()) { - case littleEndian: - buf.pData_[0] = 'I'; - break; - case bigEndian: - buf.pData_[0] = 'M'; - break; - case invalidByteOrder: - assert(false); - break; - } - buf.pData_[1] = buf.pData_[0]; - - us2Data(buf.pData_ + 2, tag(), byteOrder()); - ul2Data(buf.pData_ + 4, 0x00000010, byteOrder()); - memcpy(buf.pData_ + 8, cr2sig_, 4); - // Write a dummy value for the RAW IFD offset. The offset-writer is used to set this offset in a second pass. - ul2Data(buf.pData_ + 12, 0x00000000, byteOrder()); - return buf; - } // Cr2Header::write - - bool Cr2Header::isImageTag(uint16_t tag, IfdId group, const PrimaryGroups* /*pPrimaryGroups*/) const - { - // CR2 image tags are all IFD2 and IFD3 tags - if (group == ifd2Id || group == ifd3Id) return true; - // ...and any (IFD0) tag that is in the TIFF image tags list - return isTiffImageTag(tag, group); - } - -}} // namespace Internal, Exiv2 diff --git a/src/cr2image_int.cpp b/src/cr2image_int.cpp new file mode 100644 index 00000000..a0f6816d --- /dev/null +++ b/src/cr2image_int.cpp @@ -0,0 +1,71 @@ +#include "cr2image_int.hpp" + +namespace Exiv2 { + namespace Internal { + + const char* Cr2Header::cr2sig_ = "CR\2\0"; + + Cr2Header::Cr2Header(ByteOrder byteOrder) + : TiffHeaderBase(42, 16, byteOrder, 0x00000010), + offset2_(0x00000000) + { + } + + Cr2Header::~Cr2Header() + { + } + + bool Cr2Header::read(const byte* pData, uint32_t size) + { + if (size < 16) return false; + + if (pData[0] == 'I' && pData[0] == pData[1]) { + setByteOrder(littleEndian); + } + else if (pData[0] == 'M' && pData[0] == pData[1]) { + setByteOrder(bigEndian); + } + else { + return false; + } + if (tag() != getUShort(pData + 2, byteOrder())) return false; + setOffset(getULong(pData + 4, byteOrder())); + if (0 != memcmp(pData + 8, cr2sig_, 4)) return false; + offset2_ = getULong(pData + 12, byteOrder()); + + return true; + } // Cr2Header::read + + DataBuf Cr2Header::write() const + { + DataBuf buf(16); + switch (byteOrder()) { + case littleEndian: + buf.pData_[0] = 'I'; + break; + case bigEndian: + buf.pData_[0] = 'M'; + break; + case invalidByteOrder: + assert(false); + break; + } + buf.pData_[1] = buf.pData_[0]; + + us2Data(buf.pData_ + 2, tag(), byteOrder()); + ul2Data(buf.pData_ + 4, 0x00000010, byteOrder()); + memcpy(buf.pData_ + 8, cr2sig_, 4); + // Write a dummy value for the RAW IFD offset. The offset-writer is used to set this offset in a second pass. + ul2Data(buf.pData_ + 12, 0x00000000, byteOrder()); + return buf; + } // Cr2Header::write + + bool Cr2Header::isImageTag(uint16_t tag, IfdId group, const PrimaryGroups* /*pPrimaryGroups*/) const + { + // CR2 image tags are all IFD2 and IFD3 tags + if (group == ifd2Id || group == ifd3Id) return true; + // ...and any (IFD0) tag that is in the TIFF image tags list + return isTiffImageTag(tag, group); + } + +}} // namespace Internal, Exiv2