summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/AS_DCP_MXF.cpp3
-rwxr-xr-xsrc/Dict.cpp105
-rwxr-xr-xsrc/KLV.h15
-rw-r--r--src/MDD.cpp2
-rwxr-xr-xsrc/MDD.h3
-rwxr-xr-xsrc/MXF.cpp5
-rwxr-xr-xsrc/asdcp-test.cpp21
7 files changed, 93 insertions, 61 deletions
diff --git a/src/AS_DCP_MXF.cpp b/src/AS_DCP_MXF.cpp
index 1e0e2f8..f8a415b 100755
--- a/src/AS_DCP_MXF.cpp
+++ b/src/AS_DCP_MXF.cpp
@@ -163,8 +163,7 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info, const D
ASDCP::Result_t
ASDCP::EssenceType(const char* filename, EssenceType_t& type)
{
- // TODO
- Dictionary m_Dict;
+ const Dictionary& m_Dict = DefaultCompositeDict();
ASDCP_TEST_NULL_STR(filename);
Kumu::FileReader Reader;
diff --git a/src/Dict.cpp b/src/Dict.cpp
index b6b31f8..deb05d8 100755
--- a/src/Dict.cpp
+++ b/src/Dict.cpp
@@ -33,41 +33,33 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#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 )
{
@@ -75,31 +67,80 @@ ASDCP::Dict::FindUL(const byte_t* ul_buf)
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
//
diff --git a/src/KLV.h b/src/KLV.h
index e9d0374..1a5c298 100755
--- a/src/KLV.h
+++ b/src/KLV.h
@@ -36,6 +36,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <KM_memio.h>
#include "AS_DCP.h"
#include "MDD.h"
+#include <map>
namespace ASDCP
@@ -138,20 +139,17 @@ inline const char* ui64sz(ui64_t i, char* buf)
{
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);
@@ -159,13 +157,16 @@ inline const char* ui64sz(ui64_t i, char* buf)
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;
};
diff --git a/src/MDD.cpp b/src/MDD.cpp
index 4c7fa27..9ddca06 100644
--- a/src/MDD.cpp
+++ b/src/MDD.cpp
@@ -858,8 +858,6 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
{ {0}, {0}, false, 0 }
};
-const ui32_t s_MDD_Table_size = 273;
-
//
// end MDD.cpp
//
diff --git a/src/MDD.h b/src/MDD.h
index b0bac3c..758096f 100755
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -310,6 +310,9 @@ namespace ASDCP {
MDD_GenericDescriptor_MXFInterop_SubDescriptors, // 272
MDD_Max
}; // enum MDD_t
+
+ const ui32_t MDD_Table_size = 273;
+
} // namespaceASDCP
diff --git a/src/MXF.cpp b/src/MXF.cpp
index bf8b049..9d20dcd 100755
--- a/src/MXF.cpp
+++ b/src/MXF.cpp
@@ -1382,9 +1382,6 @@ ASDCP::MXF::SetObjectFactory(ASDCP::UL label, ASDCP::MXF::MXFObjectFactory_t fac
ASDCP::MXF::InterchangeObject*
ASDCP::MXF::CreateObject(const Dictionary& Dict, const UL& label)
{
- if ( label == 0 )
- return 0;
-
if ( ! s_TypesInit )
{
Kumu::AutoMutex BlockLock(s_InitLock);
@@ -1396,7 +1393,7 @@ ASDCP::MXF::CreateObject(const Dictionary& Dict, const UL& label)
}
}
- FLi_t i = s_FactoryList.find(label);
+ FLi_t i = s_FactoryList.find(label.Value());
if ( i == s_FactoryList.end() )
return new InterchangeObject(Dict);
diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp
index 5b1167c..9397c50 100755
--- a/src/asdcp-test.cpp
+++ b/src/asdcp-test.cpp
@@ -1737,15 +1737,15 @@ show_file_info(CommandOptions& Options)
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);
}
@@ -1851,20 +1851,13 @@ main(int argc, const char** argv)
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;