Exiv2
|
Stateless parser class for XMP packets. Images use this class to parse and serialize XMP packets. The parser uses the XMP toolkit to do the job. More...
#include <xmp.hpp>
Public Types | |
enum | XmpFormatFlags { omitPacketWrapper = 0x0010UL, readOnlyPacket = 0x0020UL, useCompactFormat = 0x0040UL, includeThumbnailPad = 0x0100UL, exactPacketLength = 0x0200UL, writeAliasComments = 0x0400UL, omitAllFormatting = 0x0800UL } |
Options to control the format of the serialized XMP packet. More... | |
typedef void(* | XmpLockFct )(void *pLockData, bool lockUnlock) |
Lock/unlock function type. | |
Static Public Member Functions | |
static int | decode (XmpData &xmpData, const std::string &xmpPacket) |
Decode XMP metadata from an XMP packet xmpPacket into xmpData. The format of the XMP packet must follow the XMP specification. This method clears any previous contents of xmpData. | |
static int | encode (std::string &xmpPacket, const XmpData &xmpData, uint16_t formatFlags=useCompactFormat, uint32_t padding=0) |
Encode (serialize) XMP metadata from xmpData into a string xmpPacket. The XMP packet returned in the string follows the XMP specification. This method only modifies xmpPacket if the operations succeeds (return code 0). | |
static bool | initialize (XmpParser::XmpLockFct xmpLockFct=0, void *pLockData=0) |
Initialize the XMP Toolkit. | |
static void | terminate () |
Terminate the XMP Toolkit and unregister custom namespaces. |
Stateless parser class for XMP packets. Images use this class to parse and serialize XMP packets. The parser uses the XMP toolkit to do the job.
typedef void(* Exiv2::XmpParser::XmpLockFct)(void *pLockData, bool lockUnlock) |
Lock/unlock function type.
A function of this type can be passed to initialize() to make subsequent registration of XMP namespaces thread-safe. See the initialize() function for more information.
pLockData | Pointer to the pLockData passed to initialize() |
lockUnlock | Indicates whether to lock (true) or unlock (false) |
Options to control the format of the serialized XMP packet.
int Exiv2::XmpParser::decode | ( | XmpData & | xmpData, |
const std::string & | xmpPacket | ||
) | [static] |
Decode XMP metadata from an XMP packet xmpPacket into xmpData. The format of the XMP packet must follow the XMP specification. This method clears any previous contents of xmpData.
xmpData | Container for the decoded XMP properties |
xmpPacket | The raw XMP packet to decode |
References Exiv2::XmpData::add(), Exiv2::XmpData::clear(), EXV_ERROR, initialize(), Exiv2::XmpProperties::prefix(), Exiv2::XmpProperties::registerNs(), and Exiv2::string.
Referenced by Exiv2::Internal::TiffDecoder::decodeXmp(), Exiv2::XmpSidecar::readMetadata(), Exiv2::Jp2Image::readMetadata(), Exiv2::EpsImage::readMetadata(), and Exiv2::JpegBase::readMetadata().
int Exiv2::XmpParser::encode | ( | std::string & | xmpPacket, |
const XmpData & | xmpData, | ||
uint16_t | formatFlags = useCompactFormat , |
||
uint32_t | padding = 0 |
||
) | [static] |
Encode (serialize) XMP metadata from xmpData into a string xmpPacket. The XMP packet returned in the string follows the XMP specification. This method only modifies xmpPacket if the operations succeeds (return code 0).
xmpPacket | Reference to a string to hold the encoded XMP packet. |
xmpData | XMP properties to encode. |
formatFlags | Flags that control the format of the XMP packet, see enum XmpFormatFlags. |
padding | Padding length. |
References Exiv2::XmpData::begin(), Exiv2::XmpData::empty(), Exiv2::XmpData::end(), EXV_ERROR, initialize(), Exiv2::langAlt, Exiv2::XmpProperties::ns(), Exiv2::string, Exiv2::toString(), Exiv2::LangAltValue::value_, Exiv2::xmpAlt, Exiv2::XmpValue::xmpArrayType(), Exiv2::xmpBag, Exiv2::xmpSeq, Exiv2::XmpValue::xmpStruct(), and Exiv2::xmpText.
Referenced by Exiv2::XmpSidecar::writeMetadata(), and Exiv2::EpsImage::writeMetadata().
bool Exiv2::XmpParser::initialize | ( | XmpParser::XmpLockFct | xmpLockFct = 0 , |
void * | pLockData = 0 |
||
) | [static] |
Initialize the XMP Toolkit.
Calling this method is usually not needed, as encode() and decode() will initialize the XMP Toolkit if necessary.
The function takes optional pointers to a callback function xmpLockFct and related data pLockData that the parser uses when XMP namespaces are subsequently registered.
The initialize() function itself still is not thread-safe and needs to be called in a thread-safe manner (e.g., on program startup), but if used with suitable additional locking parameters, any subsequent registration of namespaces will be thread-safe.
Example usage on Windows using a critical section:
void main() { struct XmpLock { CRITICAL_SECTION cs; XmpLock() { InitializeCriticalSection(&cs); } ~XmpLock() { DeleteCriticalSection(&cs); } static void LockUnlock(void* pData, bool fLock) { XmpLock* pThis = reinterpret_cast<XmpLock*>(pData); if (pThis) { (fLock) ? EnterCriticalSection(&pThis->cs) : LeaveCriticalSection(&pThis->cs); } } } xmpLock; // Pass the locking mechanism to the XMP parser on initialization. // Note however that this call itself is still not thread-safe. Exiv2::XmpParser::initialize(XmpLock::LockUnlock, &xmpLock); // Program continues here, subsequent registrations of XMP // namespaces are serialized using xmpLock. }
void Exiv2::XmpParser::terminate | ( | ) | [static] |
Terminate the XMP Toolkit and unregister custom namespaces.
Call this method when the XmpParser is no longer needed to allow the XMP Toolkit to cleanly shutdown.
References Exiv2::XmpProperties::unregisterNs().