X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FKLV.h;h=68d5a3cf7b5c36a98e9c427b7f3f37f1927f6711;hb=f6382ee078c3d7de2dbf3a01f5624345d2c61e4a;hp=9eb230b6d91c663285158ecfa7ae6c65a65d4cd6;hpb=30d642bd3b8474744dfbdcc2bdc46cdf827102c4;p=asdcplib.git diff --git a/src/KLV.h b/src/KLV.h index 9eb230b..68d5a3c 100755 --- a/src/KLV.h +++ b/src/KLV.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2005-2006, John Hurst +Copyright (c) 2005-2009, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -32,9 +32,11 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _KLV_H_ #define _KLV_H_ -#include "FileIO.h" -#include "MemIO.h" +#include +#include +#include "AS_DCP.h" #include "MDD.h" +#include namespace ASDCP @@ -44,9 +46,35 @@ namespace ASDCP const ui32_t SMPTE_UL_LENGTH = 16; const ui32_t SMPTE_UMID_LENGTH = 32; const byte_t SMPTE_UL_START[4] = { 0x06, 0x0e, 0x2b, 0x34 }; + +#ifndef MAX_KLV_PACKET_LENGTH const ui32_t MAX_KLV_PACKET_LENGTH = 1024*1024*64; +#endif const ui32_t IdentBufferLen = 128; + const ui32_t IntBufferLen = 64; + +inline const char* i64sz(i64_t i, char* buf) +{ + assert(buf); +#ifdef WIN32 + snprintf(buf, IntBufferLen, "%I64d", i); +#else + snprintf(buf, IntBufferLen, "%lld", i); +#endif + return buf; +} + +inline const char* ui64sz(ui64_t i, char* buf) +{ + assert(buf); +#ifdef WIN32 + snprintf(buf, IntBufferLen, "%I64u", i); +#else + snprintf(buf, IntBufferLen, "%llu", i); +#endif + return buf; +} struct TagValue { @@ -66,21 +94,37 @@ namespace ASDCP } }; - // - class IArchive + using Kumu::UUID; + + // Universal Label + class UL : public Kumu::Identifier { public: - virtual ~IArchive() {} - virtual Result_t Unarchive(ASDCP::MemIOReader& Reader) = 0; - virtual bool HasValue() const = 0; - virtual Result_t Archive(ASDCP::MemIOWriter& Writer) const = 0; + UL() {} + UL(const UL& rhs) : Kumu::Identifier(rhs) {} + UL(const byte_t* value) : Kumu::Identifier(value) {} + virtual ~UL() {} + + const char* EncodeString(char* str_buf, ui32_t buf_len) const; + }; + + // UMID + class UMID : public Kumu::Identifier + { + public: + UMID() {} + UMID(const UMID& rhs) : Kumu::Identifier(rhs) {} + UMID(const byte_t* value) : Kumu::Identifier(value) {} + virtual ~UMID() {} + + void MakeUMID(int Type); + void MakeUMID(int Type, const UUID& ID); + const char* EncodeString(char* str_buf, ui32_t buf_len) const; }; -} // namespace ASDCP -#include "Identifier.h" + const byte_t nil_UMID[SMPTE_UMID_LENGTH] = {0}; + const UMID NilUMID(nil_UMID); -namespace ASDCP -{ // struct MDDEntry { @@ -90,31 +134,43 @@ namespace ASDCP const char* name; }; + const MDDEntry& MXFInterop_OPAtom_Entry(); + const MDDEntry& SMPTE_390_OPAtom_Entry(); + // - class Dict + class Dictionary { + std::map m_md_lookup; + std::map m_md_rev_lookup; + MDDEntry m_MDD_Table[(ui32_t)ASDCP::MDD_Max]; + + ASDCP_NO_COPY_CONSTRUCT(Dictionary); + public: - static const MDDEntry* FindUL(const byte_t*); - static const MDDEntry* FindName(const char*); - static const MDDEntry& Type(MDD_t type_id); - static bool Replace(const MDDEntry& Entry); - static void Restore(const byte_t* ul); - static void RestoreAll(); - - inline static const byte_t* ul(MDD_t type_id) { + Dictionary(); + ~Dictionary(); + + bool operator==(const Dictionary& rhs) const { return this == &rhs; } + + void Init(); + bool AddEntry(const MDDEntry& Entry, ui32_t index); + bool DeleteEntry(ui32_t index); + + const MDDEntry* FindUL(const byte_t*) const; + const MDDEntry& Type(MDD_t type_id) const; + + inline const byte_t* ul(MDD_t type_id) const { return Type(type_id).ul; } - private: - Dict* m_Dict; - ASDCP_NO_COPY_CONSTRUCT(Dict); + void Dump(FILE* = 0) const; + }; - protected: - Dict(); - public: - ~Dict(); - }; + const Dictionary& DefaultSMPTEDict(); + const Dictionary& DefaultInteropDict(); + const Dictionary& DefaultCompositeDict(); + // class IPrimerLookup @@ -147,9 +203,9 @@ namespace ASDCP virtual bool HasUL(const byte_t*); virtual Result_t InitFromBuffer(const byte_t*, ui32_t); - virtual Result_t InitFromBuffer(const byte_t*, ui32_t, const byte_t* label); - virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer&, const byte_t* label, ui32_t length); - virtual void Dump(FILE*, bool); + virtual Result_t InitFromBuffer(const byte_t*, ui32_t, const UL& label); + virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer&, const UL& label, ui32_t length); + virtual void Dump(FILE*, const Dictionary& Dict, bool show_value); }; // @@ -164,9 +220,9 @@ namespace ASDCP KLVFilePacket() {} virtual ~KLVFilePacket() {} - virtual Result_t InitFromFile(const FileReader&); - virtual Result_t InitFromFile(const FileReader&, const byte_t* label); - virtual Result_t WriteKLToFile(FileWriter& Writer, const byte_t* label, ui32_t length); + virtual Result_t InitFromFile(const Kumu::FileReader&); + virtual Result_t InitFromFile(const Kumu::FileReader&, const UL& label); + virtual Result_t WriteKLToFile(Kumu::FileWriter& Writer, const UL& label, ui32_t length); }; } // namespace ASDCP