#include "KM_mutex.h"
#include "KLV.h"
#include "MDD.cpp"
-#include <map>
-
-static Kumu::Mutex s_Lock;
-static bool s_md_init = false;
-static std::map<ASDCP::UL, ui32_t> s_md_lookup;
//------------------------------------------------------------------------------------------
-static ASDCP::Dictionary s_SMPTEDict;
-static ASDCP::Dictionary s_InteropDict;
-static ASDCP::Dictionary s_CompositeDict;
-
-const ASDCP::Dictionary&
-ASDCP::DefaultSMPTEDict() { return s_SMPTEDict; }
+//static ASDCP::Dictionary s_SMPTEDict;
+//static ASDCP::Dictionary s_InteropDict;
const ASDCP::Dictionary&
-ASDCP::DefaultInteropDict() { return s_InteropDict; }
+ASDCP::DefaultSMPTEDict() {
+ // return s_SMPTEDict;
+ return DefaultCompositeDict();
+}
const ASDCP::Dictionary&
-ASDCP::DefaultCompositeDict() { return s_CompositeDict; }
-
-
-// singleton wrapper
-#if 0
-//
-const ASDCP::MDDEntry&
-ASDCP::Dict::Type(MDD_t type_id)
-{
- return s_MDD_Table[type_id];
+ASDCP::DefaultInteropDict() {
+ // return s_InteropDict;
+ return DefaultCompositeDict();
}
+//
+//
+static ASDCP::Dictionary s_CompositeDict;
+static Kumu::Mutex s_Lock;
+static bool s_md_init = false;
//
-const ASDCP::MDDEntry*
-ASDCP::Dict::FindUL(const byte_t* ul_buf)
+const ASDCP::Dictionary&
+ASDCP::DefaultCompositeDict()
{
if ( ! s_md_init )
{
if ( ! s_md_init )
{
- for ( ui32_t x = 0; x < s_MDD_Table_size; x++ )
- s_md_lookup.insert(std::map<UL, ui32_t>::value_type(UL(s_MDD_Table[x].ul), x));
+ for ( ui32_t x = 0; x < ASDCP::MDD_Table_size; x++ )
+ s_CompositeDict.AddEntry(s_MDD_Table[x], x);
+ // s_md_lookup.insert(std::map<UL, ui32_t>::value_type(UL(s_MDD_Table[x].ul), x));
s_md_init = true;
}
}
- std::map<UL, ui32_t>::iterator i = s_md_lookup.find(UL(ul_buf));
+ return s_CompositeDict;
+}
+
+//------------------------------------------------------------------------------------------
+//
+
+ASDCP::Dictionary::Dictionary() {}
+ASDCP::Dictionary::~Dictionary() {}
+
+
+//
+bool
+ASDCP::Dictionary::AddEntry(const MDDEntry& Entry, ui32_t index)
+{
+ m_MDD_Table[index] = Entry;
+ m_md_lookup.insert(std::map<UL, ui32_t>::value_type(UL(Entry.ul), index));
+ return true;
+}
+
+//
+const ASDCP::MDDEntry&
+ASDCP::Dictionary::Type(MDD_t type_id) const
+{
+ return m_MDD_Table[type_id];
+}
+
+//
+const ASDCP::MDDEntry*
+ASDCP::Dictionary::FindUL(const byte_t* ul_buf) const
+{
+ std::map<UL, ui32_t>::const_iterator i = m_md_lookup.find(UL(ul_buf));
- if ( i == s_md_lookup.end() )
+ if ( i == m_md_lookup.end() )
{
byte_t tmp_ul[SMPTE_UL_LENGTH];
memcpy(tmp_ul, ul_buf, SMPTE_UL_LENGTH);
tmp_ul[SMPTE_UL_LENGTH-1] = 0;
- i = s_md_lookup.find(UL(tmp_ul));
+ i = m_md_lookup.find(UL(tmp_ul));
- if ( i == s_md_lookup.end() )
+ if ( i == m_md_lookup.end() )
return 0;
}
- return &s_MDD_Table[(*i).second];
+ return &m_MDD_Table[(*i).second];
+}
+
+//
+void
+ASDCP::Dictionary::Dump(FILE* stream) const
+{
+ if ( stream == 0 )
+ stream = stderr;
+
+ MDD_t di = (MDD_t)0;
+ char str_buf[64];
+
+ while ( di < MDD_Max )
+ {
+ MDDEntry TmpType = m_MDD_Table[di];
+ UL TmpUL(TmpType.ul);
+ fprintf(stream, "%s: %s\n", TmpUL.EncodeString(str_buf, 64), TmpType.name);
+ di = (MDD_t)(di + 1);
+ }
}
-#endif
//
// end Dict.cpp
//
#include <KM_memio.h>
#include "AS_DCP.h"
#include "MDD.h"
+#include <map>
namespace ASDCP
{
public:
#if 0
- 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) {
- return Type(type_id).ul;
- }
#endif
private:
- // Dictionary* m_Dict;
+ std::map<ASDCP::UL, ui32_t> m_md_lookup;
+ MDDEntry m_MDD_Table[ASDCP::MDD_Table_size];
+
ASDCP_NO_COPY_CONSTRUCT(Dictionary);
Dictionary();
~Dictionary();
+ bool AddEntry(const MDDEntry& Entry, 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;
}
- const MDDEntry& Type(MDD_t type_id) const;
+ void Dump(FILE* = 0) const;
};
if ( ASDCP_SUCCESS(result) )
{
- TestHeader.Partition::Dump();
+ TestHeader.Partition::Dump(stdout);
if ( MXF::Identification* ID = TestHeader.GetIdentification() )
- ID->Dump();
+ ID->Dump(stdout);
else
fputs("File contains no Identification object.\n", stdout);
if ( MXF::SourcePackage* SP = TestHeader.GetSourcePackage() )
- SP->Dump();
+ SP->Dump(stdout);
else
fputs("File contains no SourcePackage object.\n", stdout);
}
for ( ui32_t i = 0; i < Options.file_count && ASDCP_SUCCESS(result); i++ )
result = digest_file(Options.filenames[i]);
}
-#if 0
else if ( Options.mode == MMT_UL_LIST )
{
- MDD_t di = (MDD_t)0;
-
- while ( di < MDD_Max )
- {
- MDDEntry TmpType = Dict::Type(di);
- UL TmpUL(TmpType.ul);
- fprintf(stdout, "%s: %s\n", TmpUL.EncodeString(str_buf, 64), TmpType.name);
- di = (MDD_t)(di + 1);
- }
+ if ( Options.use_smpte_labels )
+ DefaultSMPTEDict().Dump(stdout);
+ else
+ DefaultInteropDict().Dump(stdout);
}
-#endif
else if ( Options.mode == MMT_EXTRACT )
{
EssenceType_t EssenceType;