X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FDict.cpp;h=74a7b4e14b6b046236cd2a9807dc5b7dce72cfbf;hb=aac3cfda50b82f7b763b69b9acfcc4d63c81d98b;hp=3853e22f7b09840987ccb7444c8d0b732dd49d15;hpb=c96cba667b693f7858c87614a9a3c351c228c4a3;p=asdcplib.git diff --git a/src/Dict.cpp b/src/Dict.cpp index 3853e22..74a7b4e 100755 --- a/src/Dict.cpp +++ b/src/Dict.cpp @@ -124,6 +124,19 @@ ASDCP::DefaultSMPTEDict() return s_SMPTEDict; } +// +const ASDCP::MDDEntry& +ASDCP::MXFInterop_OPAtom_Entry() { + return s_MDD_Table[MDD_MXFInterop_OPAtom]; +} + +// +const ASDCP::MDDEntry& +ASDCP::SMPTE_390_OPAtom_Entry() { + return s_MDD_Table[MDD_OPAtom]; +} + + //------------------------------------------------------------------------------------------ // @@ -164,6 +177,12 @@ ASDCP::Dictionary::Init() bool ASDCP::Dictionary::AddEntry(const MDDEntry& Entry, ui32_t index) { + if ( index >= (ui32_t)MDD_Max ) + { + Kumu::DefaultLogSink().Warn("UL Dictionary: index exceeds maximum: %d\n", index); + return false; + } + bool result = true; // is this index already there? std::map::iterator rii = m_md_rev_lookup.find(index); @@ -191,6 +210,7 @@ ASDCP::Dictionary::AddEntry(const MDDEntry& Entry, ui32_t index) m_md_lookup.insert(std::map::value_type(TmpUL, index)); m_md_rev_lookup.insert(std::map::value_type(index, TmpUL)); + m_md_sym_lookup.insert(std::map::value_type(Entry.name, index)); m_MDD_Table[index] = Entry; return result; @@ -226,7 +246,7 @@ ASDCP::Dictionary::Type(MDD_t type_id) const std::map::const_iterator rii = m_md_rev_lookup.find(type_id); if ( rii == m_md_rev_lookup.end() ) - Kumu::DefaultLogSink().Warn("Unknown UL type_id: %d\n", type_id); + Kumu::DefaultLogSink().Warn("UL Dictionary: unknown UL type_id: %d\n", type_id); return m_MDD_Table[type_id]; } @@ -250,12 +270,28 @@ ASDCP::Dictionary::FindUL(const byte_t* ul_buf) const { char buf[64]; UL TmpUL(ul_buf); - Kumu::DefaultLogSink().Warn("Unknown UL: %s\n", TmpUL.EncodeString(buf, 64)); + Kumu::DefaultLogSink().Warn("UL Dictionary: unknown UL: %s\n", TmpUL.EncodeString(buf, 64)); return 0; } } - return &m_MDD_Table[(*i).second]; + return &m_MDD_Table[i->second]; +} + +// +const ASDCP::MDDEntry* +ASDCP::Dictionary::FindSymbol(const std::string& str) const +{ + assert(m_MDD_Table[0].name[0]); + std::map::const_iterator i = m_md_sym_lookup.find(str); + + if ( i == m_md_sym_lookup.end() ) + { + Kumu::DefaultLogSink().Warn("UL Dictionary: unknown symbol: %s\n", str.c_str()); + return 0; + } + + return &m_MDD_Table[i->second]; } //