X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FKLV.h;h=f34ebd9744ea61a6f4dbc042b3e0e17efe6920d2;hb=5d86f368b2bade7bca7700c74f198ef7f4129b44;hp=ca455fc905cb808675bf445845429a811a904702;hpb=fd73a272189d3d121989b8437b7fbe5402160aaa;p=asdcplib.git diff --git a/src/KLV.h b/src/KLV.h index ca455fc..f34ebd9 100755 --- a/src/KLV.h +++ b/src/KLV.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2005-2009, John Hurst +Copyright (c) 2005-2018, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -106,6 +106,9 @@ inline const char* ui64sz(ui64_t i, char* buf) virtual ~UL() {} const char* EncodeString(char* str_buf, ui32_t buf_len) const; + bool operator==(const UL& rhs) const; + bool MatchIgnoreStream(const UL& rhs) const; + bool MatchExact(const UL& rhs) const; }; // UMID @@ -134,27 +137,33 @@ inline const char* ui64sz(ui64_t i, char* buf) const char* name; }; + const MDDEntry& MXFInterop_OPAtom_Entry(); + const MDDEntry& SMPTE_390_OPAtom_Entry(); + // class Dictionary { - std::map m_md_lookup; - std::map m_md_rev_lookup; - MDDEntry m_MDD_Table[ASDCP::MDD_Table_size]; + std::map m_md_lookup; + std::map m_md_sym_lookup; + std::map m_md_rev_lookup; ASDCP_NO_COPY_CONSTRUCT(Dictionary); public: + MDDEntry m_MDD_Table[(ui32_t)ASDCP::MDD_Max]; + 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* FindULAnyVersion(const byte_t*) const; + const MDDEntry* FindULExact(const byte_t*) const; + const MDDEntry* FindSymbol(const std::string&) const; const MDDEntry& Type(MDD_t type_id) const; + MDDEntry& MutableType(MDD_t type_id); inline const byte_t* ul(MDD_t type_id) const { return Type(type_id).ul; @@ -164,10 +173,12 @@ inline const char* ui64sz(ui64_t i, char* buf) }; + const Dictionary& AtmosSMPTEDict(); const Dictionary& DefaultSMPTEDict(); const Dictionary& DefaultInteropDict(); const Dictionary& DefaultCompositeDict(); + void default_md_object_init(); // class IPrimerLookup @@ -188,20 +199,42 @@ inline const char* ui64sz(ui64_t i, char* buf) const byte_t* m_KeyStart; ui32_t m_KLLength; const byte_t* m_ValueStart; - ui32_t m_ValueLength; + ui64_t m_ValueLength; + UL m_UL; public: KLVPacket() : m_KeyStart(0), m_KLLength(0), m_ValueStart(0), m_ValueLength(0) {} virtual ~KLVPacket() {} - ui32_t PacketLength() { + inline ui64_t PacketLength() { return m_KLLength + m_ValueLength; } + inline ui64_t ValueLength() { + return m_ValueLength; + } + + inline ui32_t KLLength() { + return m_KLLength; + } + + virtual UL GetUL(); + virtual bool SetUL(const UL&); 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 UL& label); virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer&, const UL& label, ui32_t length); + + virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer& fb, ui32_t length) + { + if ( ! m_UL.HasValue() ) + { + return RESULT_STATE; + } + + return WriteKLToBuffer(fb, m_UL, length); + } + virtual void Dump(FILE*, const Dictionary& Dict, bool show_value); }; @@ -210,10 +243,9 @@ inline const char* ui64sz(ui64_t i, char* buf) { ASDCP_NO_COPY_CONSTRUCT(KLVFilePacket); - protected: + public: ASDCP::FrameBuffer m_Buffer; - public: KLVFilePacket() {} virtual ~KLVFilePacket() {}