summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/AS_DCP.h19
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp65
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp28
-rwxr-xr-xsrc/AS_DCP_MXF.cpp11
-rwxr-xr-xsrc/AS_DCP_PCM.cpp29
-rw-r--r--src/AS_DCP_TimedText.cpp37
-rwxr-xr-xsrc/AS_DCP_internal.h10
-rwxr-xr-xsrc/Dict.cpp19
-rwxr-xr-xsrc/Index.cpp7
-rwxr-xr-xsrc/KLV.cpp26
-rwxr-xr-xsrc/KLV.h43
-rw-r--r--src/MDD.cpp5
-rwxr-xr-xsrc/MDD.h1
-rwxr-xr-xsrc/MXF.cpp72
-rwxr-xr-xsrc/MXF.h37
-rwxr-xr-xsrc/MXFTypes.h6
-rwxr-xr-xsrc/Metadata.cpp216
-rwxr-xr-xsrc/Metadata.h118
-rwxr-xr-xsrc/asdcp-test.cpp4
-rwxr-xr-xsrc/h__Reader.cpp17
-rwxr-xr-xsrc/h__Writer.cpp108
-rwxr-xr-xsrc/klvwalk.cpp8
22 files changed, 528 insertions, 358 deletions
diff --git a/src/AS_DCP.h b/src/AS_DCP.h
index 93288dd..da18976 100755
--- a/src/AS_DCP.h
+++ b/src/AS_DCP.h
@@ -294,19 +294,26 @@ namespace ASDCP {
// MXF files use SMPTE Universal Labels to identify data items. The set of Labels
// in a file is determined by the MXF Operational Pattern and any constraining
// documentation. There are currently two flavors of AS-DCP file in use: MXF Interop
- // and SMPTE. The two differ only in the values of two labels:
+ // (AKA JPEG Interop) and SMPTE. The two differ in the values of three labels:
//
- // OP Atom / Interop : 06 0e 2b 34 04 01 01 01 0d 01 02 01 10 00 00 00
- // OP Atom / SMPTE : 06 0e 2b 34 04 01 01 02 0d 01 02 01 10 00 00 00
- // and
- // EKLV Packet / Interop : 06 0e 2b 34 02 04 01 07 0d 01 03 01 02 7e 01 00
- // EKLV Packet / SMPTE : 06 0e 2b 34 02 04 01 01 0d 01 03 01 02 7e 01 00
+ // OPAtom
+ // Interop : 06 0e 2b 34 04 01 01 01 0d 01 02 01 10 00 00 00
+ // SMPTE : 06 0e 2b 34 04 01 01 02 0d 01 02 01 10 00 00 00
+ //
+ // EKLV Packet:
+ // Interop : 06 0e 2b 34 02 04 01 07 0d 01 03 01 02 7e 01 00
+ // SMPTE : 06 0e 2b 34 02 04 01 01 0d 01 03 01 02 7e 01 00
+ //
+ // GenericDescriptor/SubDescriptors:
+ // Interop : 06 0e 2b 34 01 01 01 02 06 01 01 04 06 10 00 00
+ // SMPTE : 06 0e 2b 34 01 01 01 09 06 01 01 04 06 10 00 00
//
// asdcplib will read any (otherwise valid) file which has any combination of the
// above values. When writing files, MXF Interop labels are used by default. To
// write a file containing SMPTE labels, replace the default label set value in
// the WriterInfo before calling OpenWrite()
//
+ //
enum LabelSet_t
{
LS_MXF_UNKNOWN,
diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp
index fda81ad..20e3e8c 100755
--- a/src/AS_DCP_JP2K.cpp
+++ b/src/AS_DCP_JP2K.cpp
@@ -204,6 +204,7 @@ ASDCP::JP2K::PictureDescriptorDump(const PictureDescriptor& PDesc, FILE* stream)
//
// hidden, internal implementation of JPEG 2000 reader
+
class lh__Reader : public ASDCP::h__Reader
{
RGBAEssenceDescriptor* m_EssenceDescriptor;
@@ -217,7 +218,8 @@ class lh__Reader : public ASDCP::h__Reader
public:
PictureDescriptor m_PDesc; // codestream parameter list
- lh__Reader() : m_EssenceDescriptor(0), m_EssenceSubDescriptor(0), m_Format(ESS_UNKNOWN) {}
+ lh__Reader(const Dictionary& d) :
+ ASDCP::h__Reader(d), m_EssenceDescriptor(0), m_EssenceSubDescriptor(0), m_Format(ESS_UNKNOWN) {}
Result_t OpenRead(const char*, EssenceType_t);
Result_t ReadFrame(ui32_t, JP2K::FrameBuffer&, AESDecContext*, HMACContext*);
Result_t MD_to_JP2K_PDesc(JP2K::PictureDescriptor& PDesc);
@@ -357,13 +359,18 @@ lh__Reader::ReadFrame(ui32_t FrameNum, JP2K::FrameBuffer& FrameBuf,
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- return ReadEKLVFrame(FrameNum, FrameBuf, Dict::ul(MDD_JPEG2000Essence), Ctx, HMAC);
+ return ReadEKLVFrame(FrameNum, FrameBuf, m_Dict.ul(MDD_JPEG2000Essence), Ctx, HMAC);
}
//
class ASDCP::JP2K::MXFReader::h__Reader : public lh__Reader
{
+ ASDCP_NO_COPY_CONSTRUCT(h__Reader);
+ h__Reader();
+
+public:
+ h__Reader(const Dictionary& d) : lh__Reader(d) {}
};
@@ -391,7 +398,7 @@ ASDCP::JP2K::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const
ASDCP::JP2K::MXFReader::MXFReader()
{
- m_Reader = new h__Reader;
+ m_Reader = new h__Reader(DefaultCompositeDict());
}
@@ -468,12 +475,13 @@ ASDCP::JP2K::MXFReader::DumpIndex(FILE* stream) const
//------------------------------------------------------------------------------------------
+
class ASDCP::JP2K::MXFSReader::h__SReader : public lh__Reader
{
ui32_t m_StereoFrameReady;
public:
- h__SReader() : m_StereoFrameReady(0xffffffff) {}
+ h__SReader(const Dictionary& d) : lh__Reader(d), m_StereoFrameReady(0xffffffff) {}
//
Result_t ReadFrame(ui32_t FrameNum, StereoscopicPhase_t phase, FrameBuffer& FrameBuf,
@@ -539,7 +547,7 @@ public:
{
ui32_t SequenceNum = FrameNum * 2;
SequenceNum += ( phase == SP_RIGHT ) ? 2 : 1;
- result = ReadEKLVPacket(FrameNum, SequenceNum, FrameBuf, Dict::ul(MDD_JPEG2000Essence), Ctx, HMAC);
+ result = ReadEKLVPacket(FrameNum, SequenceNum, FrameBuf, m_Dict.ul(MDD_JPEG2000Essence), Ctx, HMAC);
}
return result;
@@ -550,7 +558,7 @@ public:
ASDCP::JP2K::MXFSReader::MXFSReader()
{
- m_Reader = new h__SReader;
+ m_Reader = new h__SReader(DefaultCompositeDict());
}
@@ -646,15 +654,16 @@ ASDCP::JP2K::MXFSReader::DumpIndex(FILE* stream) const
//
class lh__Writer : public ASDCP::h__Writer
{
+ ASDCP_NO_COPY_CONSTRUCT(lh__Writer);
+ lh__Writer();
+
JPEG2000PictureSubDescriptor* m_EssenceSubDescriptor;
public:
PictureDescriptor m_PDesc;
byte_t m_EssenceUL[SMPTE_UL_LENGTH];
- ASDCP_NO_COPY_CONSTRUCT(lh__Writer);
-
- lh__Writer() : m_EssenceSubDescriptor(0) {
+ lh__Writer(const Dictionary& d) : ASDCP::h__Writer(d), m_EssenceSubDescriptor(0) {
memset(m_EssenceUL, 0, SMPTE_UL_LENGTH);
}
@@ -699,12 +708,12 @@ lh__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc)
if ( PDesc.StoredWidth < 2049 )
{
- PDescObj->PictureEssenceCoding.Set(Dict::ul(MDD_JP2KEssenceCompression_2K));
+ PDescObj->PictureEssenceCoding.Set(m_Dict.ul(MDD_JP2KEssenceCompression_2K));
m_EssenceSubDescriptor->Rsize = 3;
}
else
{
- PDescObj->PictureEssenceCoding.Set(Dict::ul(MDD_JP2KEssenceCompression_4K));
+ PDescObj->PictureEssenceCoding.Set(m_Dict.ul(MDD_JP2KEssenceCompression_4K));
m_EssenceSubDescriptor->Rsize = 4;
}
@@ -758,12 +767,12 @@ lh__Writer::OpenWrite(const char* filename, EssenceType_t type, ui32_t HeaderSiz
if ( ASDCP_SUCCESS(result) )
{
m_HeaderSize = HeaderSize;
- RGBAEssenceDescriptor* tmp_rgba = new RGBAEssenceDescriptor;
+ RGBAEssenceDescriptor* tmp_rgba = new RGBAEssenceDescriptor(m_Dict);
tmp_rgba->ComponentMaxRef = 4095;
tmp_rgba->ComponentMinRef = 0;
m_EssenceDescriptor = tmp_rgba;
- m_EssenceSubDescriptor = new JPEG2000PictureSubDescriptor;
+ m_EssenceSubDescriptor = new JPEG2000PictureSubDescriptor(m_Dict);
m_EssenceSubDescriptorList.push_back((InterchangeObject*)m_EssenceSubDescriptor);
GenRandomValue(m_EssenceSubDescriptor->InstanceUID);
@@ -771,7 +780,7 @@ lh__Writer::OpenWrite(const char* filename, EssenceType_t type, ui32_t HeaderSiz
if ( type == ASDCP::ESS_JPEG_2000_S && m_Info.LabelSetType == LS_MXF_SMPTE )
{
- InterchangeObject* StereoSubDesc = new StereoscopicPictureSubDescriptor;
+ InterchangeObject* StereoSubDesc = new StereoscopicPictureSubDescriptor(m_Dict);
m_EssenceSubDescriptorList.push_back(StereoSubDesc);
GenRandomValue(StereoSubDesc->InstanceUID);
m_EssenceDescriptor->SubDescriptors.push_back(StereoSubDesc->InstanceUID);
@@ -797,13 +806,13 @@ lh__Writer::SetSourceStream(const PictureDescriptor& PDesc, const std::string& l
Result_t result = JP2K_PDesc_to_MD(m_PDesc);
if ( ASDCP_SUCCESS(result) )
- result = WriteMXFHeader(label, UL(Dict::ul(MDD_JPEG_2000Wrapping)),
- PICT_DEF_LABEL, UL(Dict::ul(MDD_PictureDataDef)),
+ result = WriteMXFHeader(label, UL(m_Dict.ul(MDD_JPEG_2000Wrapping)),
+ PICT_DEF_LABEL, UL(m_Dict.ul(MDD_PictureDataDef)),
LocalEditRate, 24 /* TCFrameRate */);
if ( ASDCP_SUCCESS(result) )
{
- memcpy(m_EssenceUL, Dict::ul(MDD_JPEG2000Essence), SMPTE_UL_LENGTH);
+ memcpy(m_EssenceUL, m_Dict.ul(MDD_JPEG2000Essence), SMPTE_UL_LENGTH);
m_EssenceUL[SMPTE_UL_LENGTH-1] = 1; // first (and only) essence container
result = m_State.Goto_READY();
}
@@ -859,6 +868,11 @@ lh__Writer::Finalize()
//
class ASDCP::JP2K::MXFWriter::h__Writer : public lh__Writer
{
+ ASDCP_NO_COPY_CONSTRUCT(h__Writer);
+ h__Writer();
+
+public:
+ h__Writer(const Dictionary& d) : lh__Writer(d) {}
};
@@ -881,7 +895,11 @@ ASDCP::Result_t
ASDCP::JP2K::MXFWriter::OpenWrite(const char* filename, const WriterInfo& Info,
const PictureDescriptor& PDesc, ui32_t HeaderSize)
{
- m_Writer = new h__Writer;
+ if ( Info.LabelSetType == LS_MXF_SMPTE )
+ m_Writer = new h__Writer(DefaultSMPTEDict());
+ else
+ m_Writer = new h__Writer(DefaultInteropDict());
+
m_Writer->m_Info = Info;
Result_t result = m_Writer->OpenWrite(filename, ASDCP::ESS_JPEG_2000, HeaderSize);
@@ -926,10 +944,12 @@ ASDCP::JP2K::MXFWriter::Finalize()
//
class ASDCP::JP2K::MXFSWriter::h__SWriter : public lh__Writer
{
+ ASDCP_NO_COPY_CONSTRUCT(h__SWriter);
+ h__SWriter();
StereoscopicPhase_t m_NextPhase;
public:
- h__SWriter() : m_NextPhase(SP_LEFT) {}
+ h__SWriter(const Dictionary& d) : lh__Writer(d), m_NextPhase(SP_LEFT) {}
//
Result_t WriteFrame(const FrameBuffer& FrameBuf, StereoscopicPhase_t phase,
@@ -977,8 +997,11 @@ ASDCP::Result_t
ASDCP::JP2K::MXFSWriter::OpenWrite(const char* filename, const WriterInfo& Info,
const PictureDescriptor& PDesc, ui32_t HeaderSize)
{
- m_Writer = new h__SWriter;
-
+ if ( Info.LabelSetType == LS_MXF_SMPTE )
+ m_Writer = new h__SWriter(DefaultSMPTEDict());
+ else
+ m_Writer = new h__SWriter(DefaultInteropDict());
+
if ( PDesc.EditRate != ASDCP::EditRate_24 )
{
DefaultLogSink().Error("Stereoscopic wrapping requires 24 fps input streams.\n");
diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp
index 98d55c6..580c08f 100755
--- a/src/AS_DCP_MPEG2.cpp
+++ b/src/AS_DCP_MPEG2.cpp
@@ -163,11 +163,12 @@ ASDCP::MPEG2::VideoDescriptorDump(const VideoDescriptor& VDesc, FILE* stream)
class ASDCP::MPEG2::MXFReader::h__Reader : public ASDCP::h__Reader
{
ASDCP_NO_COPY_CONSTRUCT(h__Reader);
+ h__Reader();
public:
VideoDescriptor m_VDesc; // video parameter list
- h__Reader() {}
+ h__Reader(const Dictionary& d) : ASDCP::h__Reader(d) {}
~h__Reader() {}
Result_t OpenRead(const char*);
Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*);
@@ -254,7 +255,7 @@ ASDCP::MPEG2::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& Fram
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- Result_t result = ReadEKLVFrame(FrameNum, FrameBuf, Dict::ul(MDD_MPEG2Essence), Ctx, HMAC);
+ Result_t result = ReadEKLVFrame(FrameNum, FrameBuf, m_Dict.ul(MDD_MPEG2Essence), Ctx, HMAC);
if ( ASDCP_FAILURE(result) )
return result;
@@ -304,7 +305,7 @@ ASDCP::MPEG2::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const
ASDCP::MPEG2::MXFReader::MXFReader()
{
- m_Reader = new h__Reader;
+ m_Reader = new h__Reader(DefaultCompositeDict());
}
@@ -407,14 +408,15 @@ ASDCP::MPEG2::MXFReader::DumpIndex(FILE* stream) const
//
class ASDCP::MPEG2::MXFWriter::h__Writer : public ASDCP::h__Writer
{
+ ASDCP_NO_COPY_CONSTRUCT(h__Writer);
+ h__Writer();
+
public:
VideoDescriptor m_VDesc;
ui32_t m_GOPOffset;
byte_t m_EssenceUL[SMPTE_UL_LENGTH];
- ASDCP_NO_COPY_CONSTRUCT(h__Writer);
-
- h__Writer() : m_GOPOffset(0) {
+ h__Writer(const Dictionary& d) : ASDCP::h__Writer(d), m_GOPOffset(0) {
memset(m_EssenceUL, 0, SMPTE_UL_LENGTH);
}
@@ -440,7 +442,7 @@ ASDCP::MPEG2::MXFWriter::h__Writer::OpenWrite(const char* filename, ui32_t Heade
if ( ASDCP_SUCCESS(result) )
{
m_HeaderSize = HeaderSize;
- m_EssenceDescriptor = new MPEG2VideoDescriptor;
+ m_EssenceDescriptor = new MPEG2VideoDescriptor(m_Dict);
result = m_State.Goto_INIT();
}
@@ -458,13 +460,13 @@ ASDCP::MPEG2::MXFWriter::h__Writer::SetSourceStream(const VideoDescriptor& VDesc
Result_t result = MPEG2_VDesc_to_MD(m_VDesc, (MPEG2VideoDescriptor*)m_EssenceDescriptor);
if ( ASDCP_SUCCESS(result) )
- result = WriteMXFHeader(MPEG_PACKAGE_LABEL, UL(Dict::ul(MDD_MPEG2_VESWrapping)),
- PICT_DEF_LABEL, UL(Dict::ul(MDD_PictureDataDef)),
+ result = WriteMXFHeader(MPEG_PACKAGE_LABEL, UL(m_Dict.ul(MDD_MPEG2_VESWrapping)),
+ PICT_DEF_LABEL, UL(m_Dict.ul(MDD_PictureDataDef)),
m_VDesc.EditRate, 24 /* TCFrameRate */);
if ( ASDCP_SUCCESS(result) )
{
- memcpy(m_EssenceUL, Dict::ul(MDD_MPEG2Essence), SMPTE_UL_LENGTH);
+ memcpy(m_EssenceUL, m_Dict.ul(MDD_MPEG2Essence), SMPTE_UL_LENGTH);
m_EssenceUL[SMPTE_UL_LENGTH-1] = 1; // first (and only) essence container
result = m_State.Goto_READY();
}
@@ -566,7 +568,11 @@ ASDCP::Result_t
ASDCP::MPEG2::MXFWriter::OpenWrite(const char* filename, const WriterInfo& Info,
const VideoDescriptor& VDesc, ui32_t HeaderSize)
{
- m_Writer = new h__Writer;
+ if ( Info.LabelSetType == LS_MXF_SMPTE )
+ m_Writer = new h__Writer(DefaultSMPTEDict());
+ else
+ m_Writer = new h__Writer(DefaultInteropDict());
+
m_Writer->m_Info = Info;
Result_t result = m_Writer->OpenWrite(filename, HeaderSize);
diff --git a/src/AS_DCP_MXF.cpp b/src/AS_DCP_MXF.cpp
index 98f92d1..1e0e2f8 100755
--- a/src/AS_DCP_MXF.cpp
+++ b/src/AS_DCP_MXF.cpp
@@ -132,7 +132,7 @@ ASDCP::MD_to_WriterInfo(Identification* InfoObj, WriterInfo& Info)
//
Result_t
-ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
+ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info, const Dictionary& Dict)
{
ASDCP_TEST_NULL(InfoObj);
@@ -140,8 +140,8 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
memcpy(Info.ContextID, InfoObj->ContextID.Value(), UUIDlen);
memcpy(Info.CryptographicKeyID, InfoObj->CryptographicKeyID.Value(), UUIDlen);
- UL MIC_SHA1(Dict::ul(MDD_MICAlgorithm_HMAC_SHA1));
- UL MIC_NONE(Dict::ul(MDD_MICAlgorithm_NONE));
+ UL MIC_SHA1(Dict.ul(MDD_MICAlgorithm_HMAC_SHA1));
+ UL MIC_NONE(Dict.ul(MDD_MICAlgorithm_NONE));
if ( InfoObj->MICAlgorithm == MIC_SHA1 )
Info.UsesHMAC = true;
@@ -163,9 +163,12 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
ASDCP::Result_t
ASDCP::EssenceType(const char* filename, EssenceType_t& type)
{
+ // TODO
+ Dictionary m_Dict;
+
ASDCP_TEST_NULL_STR(filename);
Kumu::FileReader Reader;
- OPAtomHeader TestHeader;
+ OPAtomHeader TestHeader(m_Dict);
Result_t result = Reader.OpenRead(filename);
diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp
index 6cf907e..6ca3a77 100755
--- a/src/AS_DCP_PCM.cpp
+++ b/src/AS_DCP_PCM.cpp
@@ -194,11 +194,12 @@ calc_CBR_frame_size(ASDCP::WriterInfo& Info, const ASDCP::PCM::AudioDescriptor&
class ASDCP::PCM::MXFReader::h__Reader : public ASDCP::h__Reader
{
ASDCP_NO_COPY_CONSTRUCT(h__Reader);
+ h__Reader();
public:
AudioDescriptor m_ADesc;
- h__Reader() {}
+ h__Reader(const Dictionary& d) : ASDCP::h__Reader(d) {}
~h__Reader() {}
Result_t OpenRead(const char*);
Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*);
@@ -266,7 +267,7 @@ ASDCP::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameB
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- return ReadEKLVFrame(FrameNum, FrameBuf, Dict::ul(MDD_WAVEssence), Ctx, HMAC);
+ return ReadEKLVFrame(FrameNum, FrameBuf, m_Dict.ul(MDD_WAVEssence), Ctx, HMAC);
}
//------------------------------------------------------------------------------------------
@@ -290,7 +291,7 @@ ASDCP::PCM::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const
ASDCP::PCM::MXFReader::MXFReader()
{
- m_Reader = new h__Reader;
+ m_Reader = new h__Reader(DefaultCompositeDict());
}
@@ -374,14 +375,14 @@ ASDCP::PCM::MXFReader::DumpIndex(FILE* stream) const
//
class ASDCP::PCM::MXFWriter::h__Writer : public ASDCP::h__Writer
{
+ ASDCP_NO_COPY_CONSTRUCT(h__Writer);
+ h__Writer();
+
public:
AudioDescriptor m_ADesc;
byte_t m_EssenceUL[SMPTE_UL_LENGTH];
-
-
- ASDCP_NO_COPY_CONSTRUCT(h__Writer);
- h__Writer(){
+ h__Writer(const Dictionary& d) : ASDCP::h__Writer(d) {
memset(m_EssenceUL, 0, SMPTE_UL_LENGTH);
}
@@ -408,7 +409,7 @@ ASDCP::PCM::MXFWriter::h__Writer::OpenWrite(const char* filename, ui32_t HeaderS
if ( ASDCP_SUCCESS(result) )
{
m_HeaderSize = HeaderSize;
- m_EssenceDescriptor = new WaveAudioDescriptor;
+ m_EssenceDescriptor = new WaveAudioDescriptor(m_Dict);
result = m_State.Goto_INIT();
}
@@ -443,13 +444,13 @@ ASDCP::PCM::MXFWriter::h__Writer::SetSourceStream(const AudioDescriptor& ADesc)
Result_t result = PCM_ADesc_to_MD(m_ADesc, (WaveAudioDescriptor*)m_EssenceDescriptor);
if ( ASDCP_SUCCESS(result) )
- result = WriteMXFHeader(PCM_PACKAGE_LABEL, UL(Dict::ul(MDD_WAVWrapping)),
- SOUND_DEF_LABEL, UL(Dict::ul(MDD_SoundDataDef)),
+ result = WriteMXFHeader(PCM_PACKAGE_LABEL, UL(m_Dict.ul(MDD_WAVWrapping)),
+ SOUND_DEF_LABEL, UL(m_Dict.ul(MDD_SoundDataDef)),
m_ADesc.SampleRate, 24 /* TCFrameRate */, calc_CBR_frame_size(m_Info, m_ADesc));
if ( ASDCP_SUCCESS(result) )
{
- memcpy(m_EssenceUL, Dict::ul(MDD_WAVEssence), SMPTE_UL_LENGTH);
+ memcpy(m_EssenceUL, m_Dict.ul(MDD_WAVEssence), SMPTE_UL_LENGTH);
m_EssenceUL[SMPTE_UL_LENGTH-1] = 1; // first (and only) essence container
result = m_State.Goto_READY();
}
@@ -512,7 +513,11 @@ ASDCP::Result_t
ASDCP::PCM::MXFWriter::OpenWrite(const char* filename, const WriterInfo& Info,
const AudioDescriptor& ADesc, ui32_t HeaderSize)
{
- m_Writer = new h__Writer;
+ if ( Info.LabelSetType == LS_MXF_SMPTE )
+ m_Writer = new h__Writer(DefaultSMPTEDict());
+ else
+ m_Writer = new h__Writer(DefaultInteropDict());
+
m_Writer->m_Info = Info;
Result_t result = m_Writer->OpenWrite(filename, HeaderSize);
diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp
index 441a770..c319850 100644
--- a/src/AS_DCP_TimedText.cpp
+++ b/src/AS_DCP_TimedText.cpp
@@ -133,7 +133,7 @@ class ASDCP::TimedText::MXFReader::h__Reader : public ASDCP::h__Reader
public:
TimedTextDescriptor m_TDesc;
- h__Reader() : m_EssenceDescriptor(0) {
+ h__Reader(const Dictionary& d) : ASDCP::h__Reader(d), m_EssenceDescriptor(0) {
memset(&m_TDesc.AssetID, 0, UUIDlen);
}
@@ -233,7 +233,7 @@ ASDCP::TimedText::MXFReader::h__Reader::ReadTimedTextResource(FrameBuffer& Frame
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- Result_t result = ReadEKLVFrame(0, FrameBuf, Dict::ul(MDD_TimedTextEssence), Ctx, HMAC);
+ Result_t result = ReadEKLVFrame(0, FrameBuf, m_Dict.ul(MDD_TimedTextEssence), Ctx, HMAC);
if( ASDCP_SUCCESS(result) )
{
@@ -303,7 +303,7 @@ ASDCP::TimedText::MXFReader::h__Reader::ReadAncillaryResource(const byte_t* uuid
}
// read the partition header
- MXF::Partition GSPart;
+ MXF::Partition GSPart(m_Dict);
result = GSPart.InitFromFile(m_File);
if( ASDCP_SUCCESS(result) )
@@ -318,7 +318,7 @@ ASDCP::TimedText::MXFReader::h__Reader::ReadAncillaryResource(const byte_t* uuid
// read the essence packet
if( ASDCP_SUCCESS(result) )
- result = ReadEKLVPacket(0, 1, FrameBuf, Dict::ul(MDD_GenericStream_DataElement), Ctx, HMAC);
+ result = ReadEKLVPacket(0, 1, FrameBuf, m_Dict.ul(MDD_GenericStream_DataElement), Ctx, HMAC);
}
}
}
@@ -331,7 +331,7 @@ ASDCP::TimedText::MXFReader::h__Reader::ReadAncillaryResource(const byte_t* uuid
ASDCP::TimedText::MXFReader::MXFReader()
{
- m_Reader = new h__Reader;
+ m_Reader = new h__Reader(DefaultSMPTEDict());
}
@@ -435,14 +435,15 @@ ASDCP::TimedText::MXFReader::DumpIndex(FILE* stream) const
//
class ASDCP::TimedText::MXFWriter::h__Writer : public ASDCP::h__Writer
{
+ ASDCP_NO_COPY_CONSTRUCT(h__Writer);
+ h__Writer();
+
public:
TimedTextDescriptor m_TDesc;
byte_t m_EssenceUL[SMPTE_UL_LENGTH];
ui32_t m_EssenceStreamID;
- ASDCP_NO_COPY_CONSTRUCT(h__Writer);
-
- h__Writer() : m_EssenceStreamID(10) {
+ h__Writer(const Dictionary& d) : ASDCP::h__Writer(d), m_EssenceStreamID(10) {
memset(m_EssenceUL, 0, SMPTE_UL_LENGTH);
}
@@ -484,7 +485,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::OpenWrite(char const* filename, ui32_t H
if ( ASDCP_SUCCESS(result) )
{
m_HeaderSize = HeaderSize;
- m_EssenceDescriptor = new MXF::TimedTextDescriptor();
+ m_EssenceDescriptor = new MXF::TimedTextDescriptor(m_Dict);
result = m_State.Goto_INIT();
}
@@ -504,7 +505,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::SetSourceStream(ASDCP::TimedText::TimedT
for ( ri = m_TDesc.ResourceList.begin() ; ri != m_TDesc.ResourceList.end() && ASDCP_SUCCESS(result); ri++ )
{
- TimedTextResourceSubDescriptor* resourceSubdescriptor = new TimedTextResourceSubDescriptor;
+ TimedTextResourceSubDescriptor* resourceSubdescriptor = new TimedTextResourceSubDescriptor(m_Dict);
GenRandomValue(resourceSubdescriptor->InstanceUID);
resourceSubdescriptor->AncillaryResourceID.Set((*ri).ResourceID);
resourceSubdescriptor->MIMEMediaType = MIME2str((*ri).Type);
@@ -519,9 +520,9 @@ ASDCP::TimedText::MXFWriter::h__Writer::SetSourceStream(ASDCP::TimedText::TimedT
{
InitHeader();
AddDMSegment(m_TDesc.EditRate, 24, TIMED_TEXT_DEF_LABEL,
- UL(Dict::ul(MDD_PictureDataDef)), TIMED_TEXT_PACKAGE_LABEL);
+ UL(m_Dict.ul(MDD_PictureDataDef)), TIMED_TEXT_PACKAGE_LABEL);
- AddEssenceDescriptor(UL(Dict::ul(MDD_TimedTextWrapping)));
+ AddEssenceDescriptor(UL(m_Dict.ul(MDD_TimedTextWrapping)));
result = m_HeaderPart.WriteToFile(m_File, m_HeaderSize);
@@ -531,7 +532,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::SetSourceStream(ASDCP::TimedText::TimedT
if ( ASDCP_SUCCESS(result) )
{
- memcpy(m_EssenceUL, Dict::ul(MDD_TimedTextEssence), SMPTE_UL_LENGTH);
+ memcpy(m_EssenceUL, m_Dict.ul(MDD_TimedTextEssence), SMPTE_UL_LENGTH);
m_EssenceUL[SMPTE_UL_LENGTH-1] = 1; // first (and only) essence container
result = m_State.Goto_READY();
}
@@ -584,8 +585,8 @@ ASDCP::TimedText::MXFWriter::h__Writer::WriteAncillaryResource(const ASDCP::Time
Kumu::fpos_t here = m_File.Tell();
// create generic stream partition header
- static UL GenericStream_DataElement(Dict::ul(MDD_GenericStream_DataElement));
- MXF::Partition GSPart;
+ static UL GenericStream_DataElement(m_Dict.ul(MDD_GenericStream_DataElement));
+ MXF::Partition GSPart(m_Dict);
GSPart.ThisPartition = here;
GSPart.PreviousPartition = m_HeaderPart.m_RIP.PairArray.back().ByteOffset;
@@ -593,8 +594,8 @@ ASDCP::TimedText::MXFWriter::h__Writer::WriteAncillaryResource(const ASDCP::Time
GSPart.OperationalPattern = m_HeaderPart.OperationalPattern;
m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(m_EssenceStreamID++, here));
- GSPart.EssenceContainers.push_back(UL(Dict::ul(MDD_TimedTextEssence)));
- UL TmpUL(Dict::ul(MDD_GenericStreamPartition));
+ GSPart.EssenceContainers.push_back(UL(m_Dict.ul(MDD_TimedTextEssence)));
+ UL TmpUL(m_Dict.ul(MDD_GenericStreamPartition));
Result_t result = GSPart.WriteToFile(m_File, TmpUL);
if ( ASDCP_SUCCESS(result) )
@@ -641,7 +642,7 @@ ASDCP::TimedText::MXFWriter::OpenWrite(const char* filename, const WriterInfo& I
return RESULT_FORMAT;
}
- m_Writer = new h__Writer;
+ m_Writer = new h__Writer(DefaultSMPTEDict());
m_Writer->m_Info = Info;
Result_t result = m_Writer->OpenWrite(filename, HeaderSize);
diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h
index 428b69f..af2c0c1 100755
--- a/src/AS_DCP_internal.h
+++ b/src/AS_DCP_internal.h
@@ -86,7 +86,7 @@ namespace ASDCP
//
Result_t MD_to_WriterInfo(MXF::Identification*, WriterInfo&);
- Result_t MD_to_CryptoInfo(MXF::CryptographicContext*, WriterInfo&);
+ Result_t MD_to_CryptoInfo(MXF::CryptographicContext*, WriterInfo&, const Dictionary&);
Result_t EncryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESEncContext*);
Result_t DecryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESDecContext*);
@@ -111,8 +111,10 @@ namespace ASDCP
class h__Reader
{
ASDCP_NO_COPY_CONSTRUCT(h__Reader);
+ h__Reader();
public:
+ const Dictionary& m_Dict;
Kumu::FileReader m_File;
OPAtomHeader m_HeaderPart;
Partition m_BodyPart;
@@ -122,7 +124,7 @@ namespace ASDCP
ASDCP::FrameBuffer m_CtFrameBuf;
Kumu::fpos_t m_LastPosition;
- h__Reader();
+ h__Reader(const Dictionary&);
virtual ~h__Reader();
Result_t InitInfo();
@@ -181,8 +183,10 @@ namespace ASDCP
class h__Writer
{
ASDCP_NO_COPY_CONSTRUCT(h__Writer);
+ h__Writer();
public:
+ const Dictionary& m_Dict;
Kumu::FileWriter m_File;
ui32_t m_HeaderSize;
OPAtomHeader m_HeaderPart;
@@ -203,7 +207,7 @@ namespace ASDCP
WriterInfo m_Info;
DurationElementList_t m_DurationUpdateList;
- h__Writer();
+ h__Writer(const Dictionary&);
virtual ~h__Writer();
void InitHeader();
diff --git a/src/Dict.cpp b/src/Dict.cpp
index eabbb82..b6b31f8 100755
--- a/src/Dict.cpp
+++ b/src/Dict.cpp
@@ -40,8 +40,23 @@ static bool s_md_init = false;
static std::map<ASDCP::UL, ui32_t> s_md_lookup;
//------------------------------------------------------------------------------------------
-// singleton wrapper
+static ASDCP::Dictionary s_SMPTEDict;
+static ASDCP::Dictionary s_InteropDict;
+static ASDCP::Dictionary s_CompositeDict;
+
+const ASDCP::Dictionary&
+ASDCP::DefaultSMPTEDict() { return s_SMPTEDict; }
+
+const ASDCP::Dictionary&
+ASDCP::DefaultInteropDict() { return s_InteropDict; }
+
+const ASDCP::Dictionary&
+ASDCP::DefaultCompositeDict() { return s_CompositeDict; }
+
+
+// singleton wrapper
+#if 0
//
const ASDCP::MDDEntry&
ASDCP::Dict::Type(MDD_t type_id)
@@ -84,7 +99,7 @@ ASDCP::Dict::FindUL(const byte_t* ul_buf)
return &s_MDD_Table[(*i).second];
}
-
+#endif
//
// end Dict.cpp
//
diff --git a/src/Index.cpp b/src/Index.cpp
index 3bebb1d..e231f8e 100755
--- a/src/Index.cpp
+++ b/src/Index.cpp
@@ -34,7 +34,8 @@ const ui32_t kl_length = ASDCP::SMPTE_UL_LENGTH + ASDCP::MXF_BER_LENGTH;
//
-ASDCP::MXF::IndexTableSegment::IndexTableSegment() :
+ASDCP::MXF::IndexTableSegment::IndexTableSegment(const Dictionary& d) :
+ InterchangeObject(d), m_Dict(d),
IndexStartPosition(0), IndexDuration(0), EditUnitByteCount(0),
IndexSID(129), BodySID(1), SliceCount(0), PosTableCount(0)
{
@@ -85,7 +86,7 @@ ASDCP::MXF::IndexTableSegment::WriteToTLVSet(TLVWriter& TLVSet)
ASDCP::Result_t
ASDCP::MXF::IndexTableSegment::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_IndexTableSegment);
+ m_Typeinfo = &m_Dict.Type(MDD_IndexTableSegment);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -93,7 +94,7 @@ ASDCP::MXF::IndexTableSegment::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
ASDCP::MXF::IndexTableSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_IndexTableSegment);
+ m_Typeinfo = &m_Dict.Type(MDD_IndexTableSegment);
return InterchangeObject::WriteToBuffer(Buffer);
}
diff --git a/src/KLV.cpp b/src/KLV.cpp
index b9b17f7..a91d32b 100755
--- a/src/KLV.cpp
+++ b/src/KLV.cpp
@@ -45,13 +45,12 @@ const ui32_t tmp_read_size = 32;
//
ASDCP::Result_t
-ASDCP::KLVPacket::InitFromBuffer(const byte_t* buf, ui32_t buf_len, const byte_t* label)
+ASDCP::KLVPacket::InitFromBuffer(const byte_t* buf, ui32_t buf_len, const UL& label)
{
Result_t result = KLVPacket::InitFromBuffer(buf, buf_len);
if ( ASDCP_SUCCESS(result) )
- result = ( memcmp(m_KeyStart, label, SMPTE_UL_LENGTH) == 0 ) ?
- RESULT_OK : RESULT_FAIL;
+ result = ( UL(m_KeyStart) == label ) ? RESULT_OK : RESULT_FAIL;
return result;
}
@@ -108,7 +107,7 @@ ASDCP::KLVPacket::HasUL(const byte_t* ul)
//
ASDCP::Result_t
-ASDCP::KLVPacket::WriteKLToBuffer(ASDCP::FrameBuffer& Buffer, const byte_t* label, ui32_t length)
+ASDCP::KLVPacket::WriteKLToBuffer(ASDCP::FrameBuffer& Buffer, const UL& label, ui32_t length)
{
if ( Buffer.Size() + kl_length > Buffer.Capacity() )
{
@@ -116,7 +115,7 @@ ASDCP::KLVPacket::WriteKLToBuffer(ASDCP::FrameBuffer& Buffer, const byte_t* labe
return RESULT_FAIL;
}
- memcpy(Buffer.Data() + Buffer.Size(), label, SMPTE_UL_LENGTH);
+ memcpy(Buffer.Data() + Buffer.Size(), label.Value(), label.Size());
if ( ! Kumu::write_BER(Buffer.Data() + Buffer.Size() + SMPTE_UL_LENGTH, length, MXF_BER_LENGTH) )
return RESULT_FAIL;
@@ -127,7 +126,7 @@ ASDCP::KLVPacket::WriteKLToBuffer(ASDCP::FrameBuffer& Buffer, const byte_t* labe
//
void
-ASDCP::KLVPacket::Dump(FILE* stream, bool show_hex)
+ASDCP::KLVPacket::Dump(FILE* stream, const Dictionary& Dict, bool show_value)
{
if ( stream == 0 )
stream = stderr;
@@ -139,11 +138,11 @@ ASDCP::KLVPacket::Dump(FILE* stream, bool show_hex)
char buf[64];
fprintf(stream, "%s", TmpUL.EncodeString(buf, 64));
- const MDDEntry* Entry = Dict::FindUL(m_KeyStart);
+ const MDDEntry* Entry = Dict.FindUL(m_KeyStart);
fprintf(stream, " len: %7u (%s)\n", m_ValueLength, (Entry ? Entry->name : "Unknown"));
- if ( show_hex && m_ValueLength < 1000 )
- Kumu::hexdump(m_ValueStart, Kumu::xmin(m_ValueLength, (ui32_t)64), stream);
+ if ( show_value && m_ValueLength < 1000 )
+ Kumu::hexdump(m_ValueStart, Kumu::xmin(m_ValueLength, (ui32_t)128), stream);
}
else
{
@@ -153,13 +152,12 @@ ASDCP::KLVPacket::Dump(FILE* stream, bool show_hex)
//
ASDCP::Result_t
-ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader, const byte_t* label)
+ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader, const UL& label)
{
Result_t result = KLVFilePacket::InitFromFile(Reader);
if ( ASDCP_SUCCESS(result) )
- result = ( memcmp(m_KeyStart, label, SMPTE_UL_LENGTH) == 0 ) ?
- RESULT_OK : RESULT_FAIL;
+ result = ( UL(m_KeyStart) == label ) ? RESULT_OK : RESULT_FAIL;
return result;
}
@@ -266,10 +264,10 @@ ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader)
//
ASDCP::Result_t
-ASDCP::KLVFilePacket::WriteKLToFile(Kumu::FileWriter& Writer, const byte_t* label, ui32_t length)
+ASDCP::KLVFilePacket::WriteKLToFile(Kumu::FileWriter& Writer, const UL& label, ui32_t length)
{
byte_t buffer[kl_length];
- memcpy(buffer, label, SMPTE_UL_LENGTH);
+ memcpy(buffer, label.Value(), label.Size());
if ( ! Kumu::write_BER(buffer+SMPTE_UL_LENGTH, length, MXF_BER_LENGTH) )
return RESULT_FAIL;
diff --git a/src/KLV.h b/src/KLV.h
index 5ed77d0..e9d0374 100755
--- a/src/KLV.h
+++ b/src/KLV.h
@@ -45,11 +45,13 @@ 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;
+ const ui32_t IntBufferLen = 64;
inline const char* i64sz(i64_t i, char* buf)
{
@@ -132,9 +134,10 @@ inline const char* ui64sz(ui64_t i, char* buf)
};
//
- class Dict
+ class Dictionary
{
public:
+#if 0
static const MDDEntry* FindUL(const byte_t*);
static const MDDEntry* FindName(const char*);
static const MDDEntry& Type(MDD_t type_id);
@@ -145,18 +148,32 @@ inline const char* ui64sz(ui64_t i, char* buf)
inline static const byte_t* ul(MDD_t type_id) {
return Type(type_id).ul;
}
+#endif
private:
- Dict* m_Dict;
- ASDCP_NO_COPY_CONSTRUCT(Dict);
+ // Dictionary* m_Dict;
+ ASDCP_NO_COPY_CONSTRUCT(Dictionary);
- protected:
- Dict();
public:
- ~Dict();
+ Dictionary();
+ ~Dictionary();
+
+ const MDDEntry* FindUL(const byte_t*) const;
+
+ inline const byte_t* ul(MDD_t type_id) const {
+ return Type(type_id).ul;
+ }
+
+ const MDDEntry& Type(MDD_t type_id) const;
};
+
+ const Dictionary& DefaultSMPTEDict();
+ const Dictionary& DefaultInteropDict();
+ const Dictionary& DefaultCompositeDict();
+
+
//
class IPrimerLookup
{
@@ -188,9 +205,9 @@ inline const char* ui64sz(ui64_t i, char* buf)
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);
};
//
@@ -206,8 +223,8 @@ inline const char* ui64sz(ui64_t i, char* buf)
virtual ~KLVFilePacket() {}
virtual Result_t InitFromFile(const Kumu::FileReader&);
- virtual Result_t InitFromFile(const Kumu::FileReader&, const byte_t* label);
- virtual Result_t WriteKLToFile(Kumu::FileWriter& Writer, const byte_t* label, ui32_t length);
+ 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
diff --git a/src/MDD.cpp b/src/MDD.cpp
index 1630b9a..4c7fa27 100644
--- a/src/MDD.cpp
+++ b/src/MDD.cpp
@@ -851,11 +851,14 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
{ { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0c, // 271
0x0d, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00 },
{0x00, 0x00}, false, "GenericStream_DataElement" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 272
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x10, 0x00, 0x00 },
+ {0}, true, "GenericDescriptor_MXFInterop_SubDescriptors" },
{ {0}, {0}, false, 0 }
};
-const ui32_t s_MDD_Table_size = 272;
+const ui32_t s_MDD_Table_size = 273;
//
// end MDD.cpp
diff --git a/src/MDD.h b/src/MDD.h
index 343757e..b0bac3c 100755
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -307,6 +307,7 @@ namespace ASDCP {
MDD_StereoscopicPictureSubDescriptor, // 269
MDD_WaveAudioDescriptor_ChannelAssignment, // 270
MDD_GenericStream_DataElement, // 271
+ MDD_GenericDescriptor_MXFInterop_SubDescriptors, // 272
MDD_Max
}; // enum MDD_t
} // namespaceASDCP
diff --git a/src/MXF.cpp b/src/MXF.cpp
index 2a70e7e..bf8b049 100755
--- a/src/MXF.cpp
+++ b/src/MXF.cpp
@@ -113,7 +113,7 @@ ASDCP::MXF::RIP::GetPairBySID(ui32_t SID, Pair& outPair) const
ASDCP::Result_t
ASDCP::MXF::RIP::InitFromFile(const Kumu::FileReader& Reader)
{
- Result_t result = KLVFilePacket::InitFromFile(Reader, Dict::ul(MDD_RandomIndexMetadata));
+ Result_t result = KLVFilePacket::InitFromFile(Reader, m_Dict.ul(MDD_RandomIndexMetadata));
if ( ASDCP_SUCCESS(result) )
{
@@ -136,7 +136,7 @@ ASDCP::MXF::RIP::WriteToFile(Kumu::FileWriter& Writer)
Result_t result = Buffer.Capacity(RIPSize);
if ( ASDCP_SUCCESS(result) )
- result = WriteKLToFile(Writer, Dict::ul(MDD_RandomIndexMetadata), RIPSize);
+ result = WriteKLToFile(Writer, m_Dict.ul(MDD_RandomIndexMetadata), RIPSize);
if ( ASDCP_SUCCESS(result) )
{
@@ -164,7 +164,7 @@ ASDCP::MXF::RIP::Dump(FILE* stream)
if ( stream == 0 )
stream = stderr;
- KLVFilePacket::Dump(stream, false);
+ KLVFilePacket::Dump(stream, m_Dict, false);
PairArray.Dump(stream, false);
}
@@ -251,7 +251,8 @@ public:
//
-ASDCP::MXF::Partition::Partition() :
+ASDCP::MXF::Partition::Partition(const Dictionary& d) :
+ m_Dict(d),
MajorVersion(1), MinorVersion(2),
KAGSize(1), ThisPartition(0), PreviousPartition(0),
FooterPartition(0), HeaderByteCount(0), IndexByteCount(0), IndexSID(0),
@@ -383,7 +384,7 @@ ASDCP::MXF::Partition::Dump(FILE* stream)
if ( stream == 0 )
stream = stderr;
- KLVFilePacket::Dump(stream, false);
+ KLVFilePacket::Dump(stream, m_Dict, false);
fprintf(stream, " MajorVersion = %hu\n", MajorVersion);
fprintf(stream, " MinorVersion = %hu\n", MinorVersion);
fprintf(stream, " KAGSize = %u\n", KAGSize);
@@ -396,7 +397,7 @@ ASDCP::MXF::Partition::Dump(FILE* stream)
fprintf(stream, " BodyOffset = %s\n", ui64sz(BodyOffset, identbuf));
fprintf(stream, " BodySID = %u\n", BodySID);
fprintf(stream, " OperationalPattern = %s\n", OperationalPattern.EncodeString(identbuf, IdentBufferLen));
- fputs("Essence Containers:\n", stream); EssenceContainers.Dump(stream, false);
+ fputs("Essence Containers:\n", stream); EssenceContainers.Dump(stream);
}
@@ -417,7 +418,7 @@ public:
//
-ASDCP::MXF::Primer::Primer() : m_LocalTag(0xff) {}
+ASDCP::MXF::Primer::Primer(const Dictionary& d) : m_LocalTag(0xff), m_Dict(d) {}
//
ASDCP::MXF::Primer::~Primer() {}
@@ -434,7 +435,7 @@ ASDCP::MXF::Primer::ClearTagList()
ASDCP::Result_t
ASDCP::MXF::Primer::InitFromBuffer(const byte_t* p, ui32_t l)
{
- Result_t result = KLVPacket::InitFromBuffer(p, l, Dict::ul(MDD_Primer));
+ Result_t result = KLVPacket::InitFromBuffer(p, l, m_Dict.ul(MDD_Primer));
if ( ASDCP_SUCCESS(result) )
{
@@ -481,7 +482,7 @@ ASDCP::MXF::Primer::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
if ( ASDCP_SUCCESS(result) )
{
ui32_t packet_length = MemWRT.Length();
- result = WriteKLToBuffer(Buffer, Dict::ul(MDD_Primer), packet_length);
+ result = WriteKLToBuffer(Buffer, m_Dict.ul(MDD_Primer), packet_length);
if ( ASDCP_SUCCESS(result) )
Buffer.Size(Buffer.Size() + packet_length);
@@ -555,7 +556,7 @@ ASDCP::MXF::Primer::Dump(FILE* stream)
if ( stream == 0 )
stream = stderr;
- KLVPacket::Dump(stream, false);
+ KLVPacket::Dump(stream, m_Dict, false);
fprintf(stream, "Primer: %u %s\n",
(ui32_t)LocalTagEntryBatch.size(),
( LocalTagEntryBatch.size() == 1 ? "entry" : "entries" ));
@@ -563,7 +564,7 @@ ASDCP::MXF::Primer::Dump(FILE* stream)
Batch<LocalTagEntry>::iterator i = LocalTagEntryBatch.begin();
for ( ; i != LocalTagEntryBatch.end(); i++ )
{
- const MDDEntry* Entry = Dict::FindUL((*i).UL.Value());
+ const MDDEntry* Entry = m_Dict.FindUL((*i).UL.Value());
fprintf(stream, " %s %s\n", (*i).EncodeString(identbuf, IdentBufferLen), (Entry ? Entry->name : "Unknown"));
}
}
@@ -610,7 +611,7 @@ ASDCP::MXF::Preface::WriteToTLVSet(TLVWriter& TLVSet)
ASDCP::Result_t
ASDCP::MXF::Preface::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_Preface);
+ m_Typeinfo = &m_Dict.Type(MDD_Preface);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -618,7 +619,7 @@ ASDCP::MXF::Preface::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
ASDCP::MXF::Preface::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_Preface);
+ m_Typeinfo = &m_Dict.Type(MDD_Preface);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -646,7 +647,7 @@ ASDCP::MXF::Preface::Dump(FILE* stream)
//------------------------------------------------------------------------------------------
//
-ASDCP::MXF::OPAtomHeader::OPAtomHeader() : m_Preface(0), m_HasRIP(false) {}
+ASDCP::MXF::OPAtomHeader::OPAtomHeader(const Dictionary& d) : Partition(d), m_Dict(d), m_RIP(d), m_Primer(d), m_Preface(0), m_HasRIP(false) {}
ASDCP::MXF::OPAtomHeader::~OPAtomHeader() {}
//
@@ -701,13 +702,13 @@ ASDCP::MXF::OPAtomHeader::InitFromFile(const Kumu::FileReader& Reader)
return result;
// is it really OP-Atom?
- UL OPAtomUL(Dict::ul(MDD_OPAtom));
- UL InteropOPAtomUL(Dict::ul(MDD_MXFInterop_OPAtom));
+ UL OPAtomUL(m_Dict.ul(MDD_OPAtom));
+ UL InteropOPAtomUL(m_Dict.ul(MDD_MXFInterop_OPAtom));
if ( ! ( OperationalPattern == OPAtomUL || OperationalPattern == InteropOPAtomUL ) )
{
char strbuf[IdentBufferLen];
- const MDDEntry* Entry = Dict::FindUL(OperationalPattern.Value());
+ const MDDEntry* Entry = m_Dict.FindUL(OperationalPattern.Value());
if ( Entry == 0 )
DefaultLogSink().Warn("Operational pattern is not OP-Atom: %s\n", OperationalPattern.EncodeString(strbuf, IdentBufferLen));
else
@@ -771,7 +772,7 @@ ASDCP::MXF::OPAtomHeader::InitFromBuffer(const byte_t* p, ui32_t l)
while ( ASDCP_SUCCESS(result) && p < end_p )
{
// parse the packets and index them by uid, discard KLVFill items
- InterchangeObject* object = CreateObject(p);
+ InterchangeObject* object = CreateObject(m_Dict, p);
assert(object);
object->m_Lookup = &m_Primer;
@@ -782,11 +783,11 @@ ASDCP::MXF::OPAtomHeader::InitFromBuffer(const byte_t* p, ui32_t l)
if ( ASDCP_SUCCESS(result) )
{
- if ( object->IsA(Dict::ul(MDD_KLVFill)) )
+ if ( object->IsA(m_Dict.ul(MDD_KLVFill)) )
{
delete object;
}
- else if ( object->IsA(Dict::ul(MDD_Primer)) )
+ else if ( object->IsA(m_Dict.ul(MDD_Primer)) )
{
delete object;
result = m_Primer.InitFromBuffer(redo_p, end_p - redo_p);
@@ -795,7 +796,7 @@ ASDCP::MXF::OPAtomHeader::InitFromBuffer(const byte_t* p, ui32_t l)
{
m_PacketList->AddPacket(object);
- if ( object->IsA(Dict::ul(MDD_Preface)) && m_Preface == 0 )
+ if ( object->IsA(m_Dict.ul(MDD_Preface)) && m_Preface == 0 )
m_Preface = (Preface*)object;
}
}
@@ -893,7 +894,7 @@ ASDCP::MXF::OPAtomHeader::WriteToFile(Kumu::FileWriter& Writer, ui32_t HeaderSiz
if ( ASDCP_SUCCESS(result) )
{
- UL TmpUL(Dict::ul(MDD_ClosedCompleteHeader));
+ UL TmpUL(m_Dict.ul(MDD_ClosedCompleteHeader));
result = Partition::WriteToFile(Writer, TmpUL);
}
@@ -931,7 +932,7 @@ ASDCP::MXF::OPAtomHeader::WriteToFile(Kumu::FileWriter& Writer, ui32_t HeaderSiz
}
klv_fill_length -= kl_length;
- result = WriteKLToFile(Writer, Dict::ul(MDD_KLVFill), klv_fill_length);
+ result = WriteKLToFile(Writer, m_Dict.ul(MDD_KLVFill), klv_fill_length);
if ( ASDCP_SUCCESS(result) )
result = NilBuf.Capacity(klv_fill_length);
@@ -969,7 +970,8 @@ ASDCP::MXF::OPAtomHeader::Dump(FILE* stream)
//------------------------------------------------------------------------------------------
//
-ASDCP::MXF::OPAtomIndexFooter::OPAtomIndexFooter() :
+ASDCP::MXF::OPAtomIndexFooter::OPAtomIndexFooter(const Dictionary& d) :
+ Partition(d), m_Dict(d),
m_CurrentSegment(0), m_BytesPerEditUnit(0), m_BodySID(0),
m_ECOffset(0), m_Lookup(0)
{
@@ -1038,7 +1040,7 @@ ASDCP::MXF::OPAtomIndexFooter::InitFromBuffer(const byte_t* p, ui32_t l)
while ( ASDCP_SUCCESS(result) && p < end_p )
{
// parse the packets and index them by uid, discard KLVFill items
- InterchangeObject* object = CreateObject(p);
+ InterchangeObject* object = CreateObject(m_Dict, p);
assert(object);
object->m_Lookup = m_Lookup;
@@ -1107,7 +1109,7 @@ ASDCP::MXF::OPAtomIndexFooter::WriteToFile(Kumu::FileWriter& Writer, ui64_t dura
if ( ASDCP_SUCCESS(result) )
{
IndexByteCount = FooterBuffer.Size();
- UL FooterUL(Dict::ul(MDD_CompleteFooter));
+ UL FooterUL(m_Dict.ul(MDD_CompleteFooter));
result = Partition::WriteToFile(Writer, FooterUL);
}
@@ -1181,7 +1183,7 @@ ASDCP::MXF::OPAtomIndexFooter::SetIndexParamsCBR(IPrimerLookup* lookup, ui32_t s
m_BytesPerEditUnit = size;
m_EditRate = Rate;
- IndexTableSegment* Index = new IndexTableSegment;
+ IndexTableSegment* Index = new IndexTableSegment(m_Dict);
AddChildObject(Index);
Index->EditUnitByteCount = m_BytesPerEditUnit;
Index->IndexEditRate = Rate;
@@ -1211,7 +1213,7 @@ ASDCP::MXF::OPAtomIndexFooter::PushIndexEntry(const IndexTableSegment::IndexEntr
// do we have an available segment?
if ( m_CurrentSegment == 0 )
{ // no, set up a new segment
- m_CurrentSegment = new IndexTableSegment;
+ m_CurrentSegment = new IndexTableSegment(m_Dict);
assert(m_CurrentSegment);
AddChildObject(m_CurrentSegment);
m_CurrentSegment->DeltaEntryArray.push_back(IndexTableSegment::DeltaEntry());
@@ -1223,7 +1225,7 @@ ASDCP::MXF::OPAtomIndexFooter::PushIndexEntry(const IndexTableSegment::IndexEntr
m_CurrentSegment->IndexDuration = m_CurrentSegment->IndexEntryArray.size();
ui64_t StartPosition = m_CurrentSegment->IndexStartPosition + m_CurrentSegment->IndexDuration;
- m_CurrentSegment = new IndexTableSegment;
+ m_CurrentSegment = new IndexTableSegment(m_Dict);
assert(m_CurrentSegment);
AddChildObject(m_CurrentSegment);
m_CurrentSegment->DeltaEntryArray.push_back(IndexTableSegment::DeltaEntry());
@@ -1311,7 +1313,7 @@ ASDCP::MXF::InterchangeObject::Dump(FILE* stream)
char identbuf[IdentBufferLen];
fputc('\n', stream);
- KLVPacket::Dump(stream, false);
+ KLVPacket::Dump(stream, m_Dict, false);
fprintf(stream, " InstanceUID = %s\n", InstanceUID.EncodeHex(identbuf, IdentBufferLen));
fprintf(stream, " GenerationUID = %s\n", GenerationUID.EncodeHex(identbuf, IdentBufferLen));
}
@@ -1376,10 +1378,9 @@ ASDCP::MXF::SetObjectFactory(ASDCP::UL label, ASDCP::MXF::MXFObjectFactory_t fac
s_FactoryList.Insert(label, factory);
}
-
//
ASDCP::MXF::InterchangeObject*
-ASDCP::MXF::CreateObject(const byte_t* label)
+ASDCP::MXF::CreateObject(const Dictionary& Dict, const UL& label)
{
if ( label == 0 )
return 0;
@@ -1390,7 +1391,7 @@ ASDCP::MXF::CreateObject(const byte_t* label)
if ( ! s_TypesInit )
{
- MXF::Metadata_InitTypes();
+ MXF::Metadata_InitTypes(Dict);
s_TypesInit = true;
}
}
@@ -1398,13 +1399,12 @@ ASDCP::MXF::CreateObject(const byte_t* label)
FLi_t i = s_FactoryList.find(label);
if ( i == s_FactoryList.end() )
- return new InterchangeObject;
+ return new InterchangeObject(Dict);
- return i->second();
+ return i->second(Dict);
}
-
//
// end MXF.cpp
//
diff --git a/src/MXF.h b/src/MXF.h
index 06d06a0..989a53b 100755
--- a/src/MXF.h
+++ b/src/MXF.h
@@ -41,13 +41,13 @@ namespace ASDCP
class InterchangeObject;
//
- typedef ASDCP::MXF::InterchangeObject* (*MXFObjectFactory_t)();
+ typedef ASDCP::MXF::InterchangeObject* (*MXFObjectFactory_t)(const Dictionary&);
//
void SetObjectFactory(UL label, MXFObjectFactory_t factory);
//
- InterchangeObject* CreateObject(const byte_t* label);
+ InterchangeObject* CreateObject(const Dictionary& Dict, const UL& label);
// seek an open file handle to the start of the RIP KLV packet
@@ -57,6 +57,7 @@ namespace ASDCP
class RIP : public ASDCP::KLVFilePacket
{
ASDCP_NO_COPY_CONSTRUCT(RIP);
+ RIP();
public:
//
@@ -94,9 +95,10 @@ namespace ASDCP
}
};
+ const Dictionary& m_Dict;
Array<Pair> PairArray;
- RIP() {}
+ RIP(const Dictionary& d) : m_Dict(d) {}
virtual ~RIP() {}
virtual Result_t InitFromFile(const Kumu::FileReader& Reader);
virtual Result_t WriteToFile(Kumu::FileWriter& Writer);
@@ -109,12 +111,15 @@ namespace ASDCP
class Partition : public ASDCP::KLVFilePacket
{
ASDCP_NO_COPY_CONSTRUCT(Partition);
+ Partition();
protected:
class h__PacketList;
mem_ptr<h__PacketList> m_PacketList;
public:
+ const Dictionary& m_Dict;
+
ui16_t MajorVersion;
ui16_t MinorVersion;
ui32_t KAGSize;
@@ -129,7 +134,7 @@ namespace ASDCP
UL OperationalPattern;
Batch<UL> EssenceContainers;
- Partition();
+ Partition(const Dictionary&);
virtual ~Partition();
virtual void AddChildObject(InterchangeObject*);
virtual Result_t InitFromFile(const Kumu::FileReader& Reader);
@@ -147,6 +152,7 @@ namespace ASDCP
mem_ptr<h__PrimerLookup> m_Lookup;
ui8_t m_LocalTag;
ASDCP_NO_COPY_CONSTRUCT(Primer);
+ Primer();
public:
//
@@ -179,8 +185,9 @@ namespace ASDCP
};
Batch<LocalTagEntry> LocalTagEntryBatch;
+ const Dictionary& m_Dict;
- Primer();
+ Primer(const Dictionary&);
virtual ~Primer();
virtual void ClearTagList();
@@ -197,15 +204,18 @@ namespace ASDCP
//
class InterchangeObject : public ASDCP::KLVPacket
{
+ InterchangeObject();
+
protected:
const MDDEntry* m_Typeinfo;
public:
+ const Dictionary& m_Dict;
IPrimerLookup* m_Lookup;
UUID InstanceUID;
UUID GenerationUID;
- InterchangeObject() : m_Typeinfo(0), m_Lookup(0) {}
+ InterchangeObject(const Dictionary& d) : m_Typeinfo(0), m_Dict(d), m_Lookup(0) {}
virtual ~InterchangeObject() {}
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
@@ -220,8 +230,10 @@ namespace ASDCP
class Preface : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(Preface);
+ Preface();
public:
+ const Dictionary& m_Dict;
UUID GenerationUID;
Timestamp LastModifiedDate;
ui16_t Version;
@@ -233,7 +245,7 @@ namespace ASDCP
Batch<UL> EssenceContainers;
Batch<UL> DMSchemes;
- Preface() : Version(258), ObjectModelVersion(0) {}
+ Preface(const Dictionary& d) : InterchangeObject(d), m_Dict(d), Version(258), ObjectModelVersion(0) {}
virtual ~Preface() {}
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
@@ -288,6 +300,8 @@ namespace ASDCP
const char* EncodeString(char* str_buf, ui32_t buf_len) const;
};
+ const Dictionary& m_Dict;
+
Rational IndexEditRate;
ui64_t IndexStartPosition;
ui64_t IndexDuration;
@@ -299,7 +313,7 @@ namespace ASDCP
Batch<DeltaEntry> DeltaEntryArray;
Batch<IndexEntry> IndexEntryArray;
- IndexTableSegment();
+ IndexTableSegment(const Dictionary&);
virtual ~IndexTableSegment();
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
@@ -317,15 +331,17 @@ namespace ASDCP
class OPAtomHeader : public Partition
{
ASDCP_NO_COPY_CONSTRUCT(OPAtomHeader);
+ OPAtomHeader();
public:
+ const Dictionary& m_Dict;
ASDCP::MXF::RIP m_RIP;
ASDCP::MXF::Primer m_Primer;
Preface* m_Preface;
ASDCP::FrameBuffer m_Buffer;
bool m_HasRIP;
- OPAtomHeader();
+ OPAtomHeader(const Dictionary&);
virtual ~OPAtomHeader();
virtual Result_t InitFromFile(const Kumu::FileReader& Reader);
virtual Result_t InitFromPartitionBuffer(const byte_t* p, ui32_t l);
@@ -350,10 +366,11 @@ namespace ASDCP
ASDCP_NO_COPY_CONSTRUCT(OPAtomIndexFooter);
public:
+ const Dictionary& m_Dict;
Kumu::fpos_t m_ECOffset;
IPrimerLookup* m_Lookup;
- OPAtomIndexFooter();
+ OPAtomIndexFooter(const Dictionary&);
virtual ~OPAtomIndexFooter();
virtual Result_t InitFromFile(const Kumu::FileReader& Reader);
virtual Result_t InitFromPartitionBuffer(const byte_t* p, ui32_t l);
diff --git a/src/MXFTypes.h b/src/MXFTypes.h
index df9f530..d42fe69 100755
--- a/src/MXFTypes.h
+++ b/src/MXFTypes.h
@@ -41,9 +41,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// used with TLVReader::Read*
//
// these are used below to manufacture arguments
-#define OBJ_READ_ARGS(s,l) Dict::Type(MDD_##s##_##l), &l
-#define OBJ_WRITE_ARGS(s,l) Dict::Type(MDD_##s##_##l), &l
-#define OBJ_TYPE_ARGS(t) Dict::Type(MDD_##t).ul
+#define OBJ_READ_ARGS(s,l) m_Dict.Type(MDD_##s##_##l), &l
+#define OBJ_WRITE_ARGS(s,l) m_Dict.Type(MDD_##s##_##l), &l
+#define OBJ_TYPE_ARGS(t) m_Dict.Type(MDD_##t).ul
namespace ASDCP
diff --git a/src/Metadata.cpp b/src/Metadata.cpp
index f509aaa..7ad1832 100755
--- a/src/Metadata.cpp
+++ b/src/Metadata.cpp
@@ -40,67 +40,67 @@ const ui32_t kl_length = ASDCP::SMPTE_UL_LENGTH + ASDCP::MXF_BER_LENGTH;
//------------------------------------------------------------------------------------------
-static InterchangeObject* Preface_Factory() { return new Preface; }
-static InterchangeObject* IndexTableSegment_Factory() { return new IndexTableSegment; }
-
-static InterchangeObject* Identification_Factory() { return new Identification; }
-static InterchangeObject* ContentStorage_Factory() { return new ContentStorage; }
-static InterchangeObject* EssenceContainerData_Factory() { return new EssenceContainerData; }
-static InterchangeObject* MaterialPackage_Factory() { return new MaterialPackage; }
-static InterchangeObject* SourcePackage_Factory() { return new SourcePackage; }
-static InterchangeObject* StaticTrack_Factory() { return new StaticTrack; }
-static InterchangeObject* Track_Factory() { return new Track; }
-static InterchangeObject* Sequence_Factory() { return new Sequence; }
-static InterchangeObject* SourceClip_Factory() { return new SourceClip; }
-static InterchangeObject* TimecodeComponent_Factory() { return new TimecodeComponent; }
-static InterchangeObject* FileDescriptor_Factory() { return new FileDescriptor; }
-static InterchangeObject* GenericSoundEssenceDescriptor_Factory() { return new GenericSoundEssenceDescriptor; }
-static InterchangeObject* WaveAudioDescriptor_Factory() { return new WaveAudioDescriptor; }
-static InterchangeObject* GenericPictureEssenceDescriptor_Factory() { return new GenericPictureEssenceDescriptor; }
-static InterchangeObject* RGBAEssenceDescriptor_Factory() { return new RGBAEssenceDescriptor; }
-static InterchangeObject* JPEG2000PictureSubDescriptor_Factory() { return new JPEG2000PictureSubDescriptor; }
-static InterchangeObject* CDCIEssenceDescriptor_Factory() { return new CDCIEssenceDescriptor; }
-static InterchangeObject* MPEG2VideoDescriptor_Factory() { return new MPEG2VideoDescriptor; }
-static InterchangeObject* DMSegment_Factory() { return new DMSegment; }
-static InterchangeObject* CryptographicFramework_Factory() { return new CryptographicFramework; }
-static InterchangeObject* CryptographicContext_Factory() { return new CryptographicContext; }
-static InterchangeObject* GenericDataEssenceDescriptor_Factory() { return new GenericDataEssenceDescriptor; }
-static InterchangeObject* TimedTextDescriptor_Factory() { return new TimedTextDescriptor; }
-static InterchangeObject* TimedTextResourceSubDescriptor_Factory() { return new TimedTextResourceSubDescriptor; }
-static InterchangeObject* StereoscopicPictureSubDescriptor_Factory() { return new StereoscopicPictureSubDescriptor; }
+static InterchangeObject* Preface_Factory(const Dictionary& Dict) { return new Preface(Dict); }
+static InterchangeObject* IndexTableSegment_Factory(const Dictionary& Dict) { return new IndexTableSegment(Dict); }
+
+static InterchangeObject* Identification_Factory(const Dictionary& Dict) { return new Identification(Dict); }
+static InterchangeObject* ContentStorage_Factory(const Dictionary& Dict) { return new ContentStorage(Dict); }
+static InterchangeObject* EssenceContainerData_Factory(const Dictionary& Dict) { return new EssenceContainerData(Dict); }
+static InterchangeObject* MaterialPackage_Factory(const Dictionary& Dict) { return new MaterialPackage(Dict); }
+static InterchangeObject* SourcePackage_Factory(const Dictionary& Dict) { return new SourcePackage(Dict); }
+static InterchangeObject* StaticTrack_Factory(const Dictionary& Dict) { return new StaticTrack(Dict); }
+static InterchangeObject* Track_Factory(const Dictionary& Dict) { return new Track(Dict); }
+static InterchangeObject* Sequence_Factory(const Dictionary& Dict) { return new Sequence(Dict); }
+static InterchangeObject* SourceClip_Factory(const Dictionary& Dict) { return new SourceClip(Dict); }
+static InterchangeObject* TimecodeComponent_Factory(const Dictionary& Dict) { return new TimecodeComponent(Dict); }
+static InterchangeObject* FileDescriptor_Factory(const Dictionary& Dict) { return new FileDescriptor(Dict); }
+static InterchangeObject* GenericSoundEssenceDescriptor_Factory(const Dictionary& Dict) { return new GenericSoundEssenceDescriptor(Dict); }
+static InterchangeObject* WaveAudioDescriptor_Factory(const Dictionary& Dict) { return new WaveAudioDescriptor(Dict); }
+static InterchangeObject* GenericPictureEssenceDescriptor_Factory(const Dictionary& Dict) { return new GenericPictureEssenceDescriptor(Dict); }
+static InterchangeObject* RGBAEssenceDescriptor_Factory(const Dictionary& Dict) { return new RGBAEssenceDescriptor(Dict); }
+static InterchangeObject* JPEG2000PictureSubDescriptor_Factory(const Dictionary& Dict) { return new JPEG2000PictureSubDescriptor(Dict); }
+static InterchangeObject* CDCIEssenceDescriptor_Factory(const Dictionary& Dict) { return new CDCIEssenceDescriptor(Dict); }
+static InterchangeObject* MPEG2VideoDescriptor_Factory(const Dictionary& Dict) { return new MPEG2VideoDescriptor(Dict); }
+static InterchangeObject* DMSegment_Factory(const Dictionary& Dict) { return new DMSegment(Dict); }
+static InterchangeObject* CryptographicFramework_Factory(const Dictionary& Dict) { return new CryptographicFramework(Dict); }
+static InterchangeObject* CryptographicContext_Factory(const Dictionary& Dict) { return new CryptographicContext(Dict); }
+static InterchangeObject* GenericDataEssenceDescriptor_Factory(const Dictionary& Dict) { return new GenericDataEssenceDescriptor(Dict); }
+static InterchangeObject* TimedTextDescriptor_Factory(const Dictionary& Dict) { return new TimedTextDescriptor(Dict); }
+static InterchangeObject* TimedTextResourceSubDescriptor_Factory(const Dictionary& Dict) { return new TimedTextResourceSubDescriptor(Dict); }
+static InterchangeObject* StereoscopicPictureSubDescriptor_Factory(const Dictionary& Dict) { return new StereoscopicPictureSubDescriptor(Dict); }
void
-ASDCP::MXF::Metadata_InitTypes()
-{
- SetObjectFactory(Dict::ul(MDD_Preface), Preface_Factory);
- SetObjectFactory(Dict::ul(MDD_IndexTableSegment), IndexTableSegment_Factory);
-
- SetObjectFactory(Dict::ul(MDD_Identification), Identification_Factory);
- SetObjectFactory(Dict::ul(MDD_ContentStorage), ContentStorage_Factory);
- SetObjectFactory(Dict::ul(MDD_EssenceContainerData), EssenceContainerData_Factory);
- SetObjectFactory(Dict::ul(MDD_MaterialPackage), MaterialPackage_Factory);
- SetObjectFactory(Dict::ul(MDD_SourcePackage), SourcePackage_Factory);
- SetObjectFactory(Dict::ul(MDD_StaticTrack), StaticTrack_Factory);
- SetObjectFactory(Dict::ul(MDD_Track), Track_Factory);
- SetObjectFactory(Dict::ul(MDD_Sequence), Sequence_Factory);
- SetObjectFactory(Dict::ul(MDD_SourceClip), SourceClip_Factory);
- SetObjectFactory(Dict::ul(MDD_TimecodeComponent), TimecodeComponent_Factory);
- SetObjectFactory(Dict::ul(MDD_FileDescriptor), FileDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_GenericSoundEssenceDescriptor), GenericSoundEssenceDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_WaveAudioDescriptor), WaveAudioDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_GenericPictureEssenceDescriptor), GenericPictureEssenceDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_RGBAEssenceDescriptor), RGBAEssenceDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_JPEG2000PictureSubDescriptor), JPEG2000PictureSubDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_CDCIEssenceDescriptor), CDCIEssenceDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_MPEG2VideoDescriptor), MPEG2VideoDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_DMSegment), DMSegment_Factory);
- SetObjectFactory(Dict::ul(MDD_CryptographicFramework), CryptographicFramework_Factory);
- SetObjectFactory(Dict::ul(MDD_CryptographicContext), CryptographicContext_Factory);
- SetObjectFactory(Dict::ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory);
- SetObjectFactory(Dict::ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory);
+ASDCP::MXF::Metadata_InitTypes(const Dictionary& Dict)
+{
+ SetObjectFactory(Dict.ul(MDD_Preface), Preface_Factory);
+ SetObjectFactory(Dict.ul(MDD_IndexTableSegment), IndexTableSegment_Factory);
+
+ SetObjectFactory(Dict.ul(MDD_Identification), Identification_Factory);
+ SetObjectFactory(Dict.ul(MDD_ContentStorage), ContentStorage_Factory);
+ SetObjectFactory(Dict.ul(MDD_EssenceContainerData), EssenceContainerData_Factory);
+ SetObjectFactory(Dict.ul(MDD_MaterialPackage), MaterialPackage_Factory);
+ SetObjectFactory(Dict.ul(MDD_SourcePackage), SourcePackage_Factory);
+ SetObjectFactory(Dict.ul(MDD_StaticTrack), StaticTrack_Factory);
+ SetObjectFactory(Dict.ul(MDD_Track), Track_Factory);
+ SetObjectFactory(Dict.ul(MDD_Sequence), Sequence_Factory);
+ SetObjectFactory(Dict.ul(MDD_SourceClip), SourceClip_Factory);
+ SetObjectFactory(Dict.ul(MDD_TimecodeComponent), TimecodeComponent_Factory);
+ SetObjectFactory(Dict.ul(MDD_FileDescriptor), FileDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_GenericSoundEssenceDescriptor), GenericSoundEssenceDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_WaveAudioDescriptor), WaveAudioDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_GenericPictureEssenceDescriptor), GenericPictureEssenceDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_RGBAEssenceDescriptor), RGBAEssenceDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_JPEG2000PictureSubDescriptor), JPEG2000PictureSubDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_CDCIEssenceDescriptor), CDCIEssenceDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_MPEG2VideoDescriptor), MPEG2VideoDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_DMSegment), DMSegment_Factory);
+ SetObjectFactory(Dict.ul(MDD_CryptographicFramework), CryptographicFramework_Factory);
+ SetObjectFactory(Dict.ul(MDD_CryptographicContext), CryptographicContext_Factory);
+ SetObjectFactory(Dict.ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory);
+ SetObjectFactory(Dict.ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory);
}
//------------------------------------------------------------------------------------------
@@ -171,7 +171,7 @@ Identification::Dump(FILE* stream)
ASDCP::Result_t
Identification::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_Identification);
+ m_Typeinfo = &m_Dict.Type(MDD_Identification);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -179,7 +179,7 @@ Identification::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_Identification);
+ m_Typeinfo = &m_Dict.Type(MDD_Identification);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -227,7 +227,7 @@ ContentStorage::Dump(FILE* stream)
ASDCP::Result_t
ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_ContentStorage);
+ m_Typeinfo = &m_Dict.Type(MDD_ContentStorage);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -235,7 +235,7 @@ ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_ContentStorage);
+ m_Typeinfo = &m_Dict.Type(MDD_ContentStorage);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -284,7 +284,7 @@ EssenceContainerData::Dump(FILE* stream)
ASDCP::Result_t
EssenceContainerData::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_EssenceContainerData);
+ m_Typeinfo = &m_Dict.Type(MDD_EssenceContainerData);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -292,7 +292,7 @@ EssenceContainerData::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
EssenceContainerData::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_EssenceContainerData);
+ m_Typeinfo = &m_Dict.Type(MDD_EssenceContainerData);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -381,7 +381,7 @@ MaterialPackage::Dump(FILE* stream)
ASDCP::Result_t
MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_MaterialPackage);
+ m_Typeinfo = &m_Dict.Type(MDD_MaterialPackage);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -389,7 +389,7 @@ MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_MaterialPackage);
+ m_Typeinfo = &m_Dict.Type(MDD_MaterialPackage);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -432,7 +432,7 @@ SourcePackage::Dump(FILE* stream)
ASDCP::Result_t
SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_SourcePackage);
+ m_Typeinfo = &m_Dict.Type(MDD_SourcePackage);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -440,7 +440,7 @@ SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_SourcePackage);
+ m_Typeinfo = &m_Dict.Type(MDD_SourcePackage);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -525,7 +525,7 @@ StaticTrack::Dump(FILE* stream)
ASDCP::Result_t
StaticTrack::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_StaticTrack);
+ m_Typeinfo = &m_Dict.Type(MDD_StaticTrack);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -533,7 +533,7 @@ StaticTrack::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
StaticTrack::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_StaticTrack);
+ m_Typeinfo = &m_Dict.Type(MDD_StaticTrack);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -579,7 +579,7 @@ Track::Dump(FILE* stream)
ASDCP::Result_t
Track::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_Track);
+ m_Typeinfo = &m_Dict.Type(MDD_Track);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -587,7 +587,7 @@ Track::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_Track);
+ m_Typeinfo = &m_Dict.Type(MDD_Track);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -670,7 +670,7 @@ Sequence::Dump(FILE* stream)
ASDCP::Result_t
Sequence::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_Sequence);
+ m_Typeinfo = &m_Dict.Type(MDD_Sequence);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -678,7 +678,7 @@ Sequence::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_Sequence);
+ m_Typeinfo = &m_Dict.Type(MDD_Sequence);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -727,7 +727,7 @@ SourceClip::Dump(FILE* stream)
ASDCP::Result_t
SourceClip::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_SourceClip);
+ m_Typeinfo = &m_Dict.Type(MDD_SourceClip);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -735,7 +735,7 @@ SourceClip::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_SourceClip);
+ m_Typeinfo = &m_Dict.Type(MDD_SourceClip);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -784,7 +784,7 @@ TimecodeComponent::Dump(FILE* stream)
ASDCP::Result_t
TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_TimecodeComponent);
+ m_Typeinfo = &m_Dict.Type(MDD_TimecodeComponent);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -792,7 +792,7 @@ TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_TimecodeComponent);
+ m_Typeinfo = &m_Dict.Type(MDD_TimecodeComponent);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -888,7 +888,7 @@ FileDescriptor::Dump(FILE* stream)
ASDCP::Result_t
FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_FileDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_FileDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -896,7 +896,7 @@ FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_FileDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_FileDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -954,7 +954,7 @@ GenericSoundEssenceDescriptor::Dump(FILE* stream)
ASDCP::Result_t
GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_GenericSoundEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_GenericSoundEssenceDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -962,7 +962,7 @@ GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_GenericSoundEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_GenericSoundEssenceDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1014,7 +1014,7 @@ WaveAudioDescriptor::Dump(FILE* stream)
ASDCP::Result_t
WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_WaveAudioDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_WaveAudioDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1022,7 +1022,7 @@ WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_WaveAudioDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_WaveAudioDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1077,7 +1077,7 @@ GenericPictureEssenceDescriptor::Dump(FILE* stream)
ASDCP::Result_t
GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_GenericPictureEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_GenericPictureEssenceDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1085,7 +1085,7 @@ GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_GenericPictureEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_GenericPictureEssenceDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1131,7 +1131,7 @@ RGBAEssenceDescriptor::Dump(FILE* stream)
ASDCP::Result_t
RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_RGBAEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_RGBAEssenceDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1139,7 +1139,7 @@ RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_RGBAEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_RGBAEssenceDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1218,7 +1218,7 @@ JPEG2000PictureSubDescriptor::Dump(FILE* stream)
ASDCP::Result_t
JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_JPEG2000PictureSubDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_JPEG2000PictureSubDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1226,7 +1226,7 @@ JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_JPEG2000PictureSubDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_JPEG2000PictureSubDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1278,7 +1278,7 @@ CDCIEssenceDescriptor::Dump(FILE* stream)
ASDCP::Result_t
CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_CDCIEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_CDCIEssenceDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1286,7 +1286,7 @@ CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_CDCIEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_CDCIEssenceDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1338,7 +1338,7 @@ MPEG2VideoDescriptor::Dump(FILE* stream)
ASDCP::Result_t
MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_MPEG2VideoDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_MPEG2VideoDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1346,7 +1346,7 @@ MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_MPEG2VideoDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_MPEG2VideoDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1401,7 +1401,7 @@ DMSegment::Dump(FILE* stream)
ASDCP::Result_t
DMSegment::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_DMSegment);
+ m_Typeinfo = &m_Dict.Type(MDD_DMSegment);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1409,7 +1409,7 @@ DMSegment::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
DMSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_DMSegment);
+ m_Typeinfo = &m_Dict.Type(MDD_DMSegment);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1452,7 +1452,7 @@ CryptographicFramework::Dump(FILE* stream)
ASDCP::Result_t
CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_CryptographicFramework);
+ m_Typeinfo = &m_Dict.Type(MDD_CryptographicFramework);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1460,7 +1460,7 @@ CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_CryptographicFramework);
+ m_Typeinfo = &m_Dict.Type(MDD_CryptographicFramework);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1515,7 +1515,7 @@ CryptographicContext::Dump(FILE* stream)
ASDCP::Result_t
CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_CryptographicContext);
+ m_Typeinfo = &m_Dict.Type(MDD_CryptographicContext);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1523,7 +1523,7 @@ CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_CryptographicContext);
+ m_Typeinfo = &m_Dict.Type(MDD_CryptographicContext);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1566,7 +1566,7 @@ GenericDataEssenceDescriptor::Dump(FILE* stream)
ASDCP::Result_t
GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_GenericDataEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_GenericDataEssenceDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1574,7 +1574,7 @@ GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
GenericDataEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_GenericDataEssenceDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_GenericDataEssenceDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1623,7 +1623,7 @@ TimedTextDescriptor::Dump(FILE* stream)
ASDCP::Result_t
TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_TimedTextDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_TimedTextDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1631,7 +1631,7 @@ TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
TimedTextDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_TimedTextDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_TimedTextDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1680,7 +1680,7 @@ TimedTextResourceSubDescriptor::Dump(FILE* stream)
ASDCP::Result_t
TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_TimedTextResourceSubDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_TimedTextResourceSubDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1688,7 +1688,7 @@ TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
TimedTextResourceSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_TimedTextResourceSubDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_TimedTextResourceSubDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
@@ -1728,7 +1728,7 @@ StereoscopicPictureSubDescriptor::Dump(FILE* stream)
ASDCP::Result_t
StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
{
- m_Typeinfo = &Dict::Type(MDD_StereoscopicPictureSubDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_StereoscopicPictureSubDescriptor);
return InterchangeObject::InitFromBuffer(p, l);
}
@@ -1736,7 +1736,7 @@ StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
ASDCP::Result_t
StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
{
- m_Typeinfo = &Dict::Type(MDD_StereoscopicPictureSubDescriptor);
+ m_Typeinfo = &m_Dict.Type(MDD_StereoscopicPictureSubDescriptor);
return InterchangeObject::WriteToBuffer(Buffer);
}
diff --git a/src/Metadata.h b/src/Metadata.h
index 5117425..b5a255e 100755
--- a/src/Metadata.h
+++ b/src/Metadata.h
@@ -38,7 +38,7 @@ namespace ASDCP
{
namespace MXF
{
- void Metadata_InitTypes();
+ void Metadata_InitTypes(const Dictionary& Dict);
//
@@ -46,8 +46,10 @@ namespace ASDCP
class Identification : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(Identification);
+ Identification();
public:
+ const Dictionary& m_Dict;
UUID ThisGenerationUID;
UTF16String CompanyName;
UTF16String ProductName;
@@ -58,7 +60,7 @@ namespace ASDCP
VersionType ToolkitVersion;
UTF16String Platform;
- Identification() {}
+ Identification(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~Identification() {}
virtual const char* HasName() { return "Identification"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -72,12 +74,14 @@ namespace ASDCP
class ContentStorage : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
+ ContentStorage();
public:
+ const Dictionary& m_Dict;
Batch<UUID> Packages;
Batch<UUID> EssenceContainerData;
- ContentStorage() {}
+ ContentStorage(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~ContentStorage() {}
virtual const char* HasName() { return "ContentStorage"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -91,13 +95,15 @@ namespace ASDCP
class EssenceContainerData : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(EssenceContainerData);
+ EssenceContainerData();
public:
+ const Dictionary& m_Dict;
UMID LinkedPackageUID;
ui32_t IndexSID;
ui32_t BodySID;
- EssenceContainerData() : IndexSID(0), BodySID(0) {}
+ EssenceContainerData(const Dictionary& d) : InterchangeObject(d), m_Dict(d), IndexSID(0), BodySID(0) {}
virtual ~EssenceContainerData() {}
virtual const char* HasName() { return "EssenceContainerData"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -111,15 +117,17 @@ namespace ASDCP
class GenericPackage : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
+ GenericPackage();
public:
+ const Dictionary& m_Dict;
UMID PackageUID;
UTF16String Name;
Timestamp PackageCreationDate;
Timestamp PackageModifiedDate;
Batch<UUID> Tracks;
- GenericPackage() {}
+ GenericPackage(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~GenericPackage() {}
virtual const char* HasName() { return "GenericPackage"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -131,10 +139,12 @@ namespace ASDCP
class MaterialPackage : public GenericPackage
{
ASDCP_NO_COPY_CONSTRUCT(MaterialPackage);
+ MaterialPackage();
public:
+ const Dictionary& m_Dict;
- MaterialPackage() {}
+ MaterialPackage(const Dictionary& d) : GenericPackage(d), m_Dict(d) {}
virtual ~MaterialPackage() {}
virtual const char* HasName() { return "MaterialPackage"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -148,11 +158,13 @@ namespace ASDCP
class SourcePackage : public GenericPackage
{
ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
+ SourcePackage();
public:
+ const Dictionary& m_Dict;
UUID Descriptor;
- SourcePackage() {}
+ SourcePackage(const Dictionary& d) : GenericPackage(d), m_Dict(d) {}
virtual ~SourcePackage() {}
virtual const char* HasName() { return "SourcePackage"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -166,14 +178,16 @@ namespace ASDCP
class GenericTrack : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(GenericTrack);
+ GenericTrack();
public:
+ const Dictionary& m_Dict;
ui32_t TrackID;
ui32_t TrackNumber;
UTF16String TrackName;
UUID Sequence;
- GenericTrack() : TrackID(0), TrackNumber(0) {}
+ GenericTrack(const Dictionary& d) : InterchangeObject(d), m_Dict(d), TrackID(0), TrackNumber(0) {}
virtual ~GenericTrack() {}
virtual const char* HasName() { return "GenericTrack"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -185,10 +199,12 @@ namespace ASDCP
class StaticTrack : public GenericTrack
{
ASDCP_NO_COPY_CONSTRUCT(StaticTrack);
+ StaticTrack();
public:
+ const Dictionary& m_Dict;
- StaticTrack() {}
+ StaticTrack(const Dictionary& d) : GenericTrack(d), m_Dict(d) {}
virtual ~StaticTrack() {}
virtual const char* HasName() { return "StaticTrack"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -202,12 +218,14 @@ namespace ASDCP
class Track : public GenericTrack
{
ASDCP_NO_COPY_CONSTRUCT(Track);
+ Track();
public:
+ const Dictionary& m_Dict;
Rational EditRate;
ui64_t Origin;
- Track() : Origin(0) {}
+ Track(const Dictionary& d) : GenericTrack(d), m_Dict(d), Origin(0) {}
virtual ~Track() {}
virtual const char* HasName() { return "Track"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -221,12 +239,14 @@ namespace ASDCP
class StructuralComponent : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(StructuralComponent);
+ StructuralComponent();
public:
+ const Dictionary& m_Dict;
UL DataDefinition;
ui64_t Duration;
- StructuralComponent() : Duration(0) {}
+ StructuralComponent(const Dictionary& d) : InterchangeObject(d), m_Dict(d), Duration(0) {}
virtual ~StructuralComponent() {}
virtual const char* HasName() { return "StructuralComponent"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -238,11 +258,13 @@ namespace ASDCP
class Sequence : public StructuralComponent
{
ASDCP_NO_COPY_CONSTRUCT(Sequence);
+ Sequence();
public:
+ const Dictionary& m_Dict;
Batch<UUID> StructuralComponents;
- Sequence() {}
+ Sequence(const Dictionary& d) : StructuralComponent(d), m_Dict(d) {}
virtual ~Sequence() {}
virtual const char* HasName() { return "Sequence"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -256,13 +278,15 @@ namespace ASDCP
class SourceClip : public StructuralComponent
{
ASDCP_NO_COPY_CONSTRUCT(SourceClip);
+ SourceClip();
public:
+ const Dictionary& m_Dict;
ui64_t StartPosition;
UMID SourcePackageID;
ui32_t SourceTrackID;
- SourceClip() : StartPosition(0), SourceTrackID(0) {}
+ SourceClip(const Dictionary& d) : StructuralComponent(d), m_Dict(d), StartPosition(0), SourceTrackID(0) {}
virtual ~SourceClip() {}
virtual const char* HasName() { return "SourceClip"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -276,13 +300,15 @@ namespace ASDCP
class TimecodeComponent : public StructuralComponent
{
ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
+ TimecodeComponent();
public:
+ const Dictionary& m_Dict;
ui16_t RoundedTimecodeBase;
ui64_t StartTimecode;
ui8_t DropFrame;
- TimecodeComponent() : RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
+ TimecodeComponent(const Dictionary& d) : StructuralComponent(d), m_Dict(d), RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
virtual ~TimecodeComponent() {}
virtual const char* HasName() { return "TimecodeComponent"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -296,12 +322,14 @@ namespace ASDCP
class GenericDescriptor : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(GenericDescriptor);
+ GenericDescriptor();
public:
+ const Dictionary& m_Dict;
Batch<UUID> Locators;
Batch<UUID> SubDescriptors;
- GenericDescriptor() {}
+ GenericDescriptor(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~GenericDescriptor() {}
virtual const char* HasName() { return "GenericDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -313,15 +341,17 @@ namespace ASDCP
class FileDescriptor : public GenericDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
+ FileDescriptor();
public:
+ const Dictionary& m_Dict;
ui32_t LinkedTrackID;
Rational SampleRate;
ui64_t ContainerDuration;
UL EssenceContainer;
UL Codec;
- FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
+ FileDescriptor(const Dictionary& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0), ContainerDuration(0) {}
virtual ~FileDescriptor() {}
virtual const char* HasName() { return "FileDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -335,8 +365,10 @@ namespace ASDCP
class GenericSoundEssenceDescriptor : public FileDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(GenericSoundEssenceDescriptor);
+ GenericSoundEssenceDescriptor();
public:
+ const Dictionary& m_Dict;
Rational AudioSamplingRate;
ui8_t Locked;
ui8_t AudioRefLevel;
@@ -344,7 +376,7 @@ namespace ASDCP
ui32_t QuantizationBits;
ui8_t DialNorm;
- GenericSoundEssenceDescriptor() : Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
+ GenericSoundEssenceDescriptor(const Dictionary& d) : FileDescriptor(d), m_Dict(d), Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
virtual ~GenericSoundEssenceDescriptor() {}
virtual const char* HasName() { return "GenericSoundEssenceDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -358,14 +390,16 @@ namespace ASDCP
class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
+ WaveAudioDescriptor();
public:
+ const Dictionary& m_Dict;
ui16_t BlockAlign;
ui8_t SequenceOffset;
ui32_t AvgBps;
UL ChannelAssignment;
- WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
+ WaveAudioDescriptor(const Dictionary& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
virtual ~WaveAudioDescriptor() {}
virtual const char* HasName() { return "WaveAudioDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -379,15 +413,17 @@ namespace ASDCP
class GenericPictureEssenceDescriptor : public FileDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
+ GenericPictureEssenceDescriptor();
public:
+ const Dictionary& m_Dict;
ui8_t FrameLayout;
ui32_t StoredWidth;
ui32_t StoredHeight;
Rational AspectRatio;
UL PictureEssenceCoding;
- GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
+ GenericPictureEssenceDescriptor(const Dictionary& d) : FileDescriptor(d), m_Dict(d), FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
virtual ~GenericPictureEssenceDescriptor() {}
virtual const char* HasName() { return "GenericPictureEssenceDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -401,12 +437,14 @@ namespace ASDCP
class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
+ RGBAEssenceDescriptor();
public:
+ const Dictionary& m_Dict;
ui32_t ComponentMaxRef;
ui32_t ComponentMinRef;
- RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
+ RGBAEssenceDescriptor(const Dictionary& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), ComponentMinRef(0) {}
virtual ~RGBAEssenceDescriptor() {}
virtual const char* HasName() { return "RGBAEssenceDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -420,8 +458,10 @@ namespace ASDCP
class JPEG2000PictureSubDescriptor : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
+ JPEG2000PictureSubDescriptor();
public:
+ const Dictionary& m_Dict;
ui16_t Rsize;
ui32_t Xsize;
ui32_t Ysize;
@@ -436,7 +476,7 @@ namespace ASDCP
Raw CodingStyleDefault;
Raw QuantizationDefault;
- JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
+ JPEG2000PictureSubDescriptor(const Dictionary& d) : InterchangeObject(d), m_Dict(d), Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
virtual ~JPEG2000PictureSubDescriptor() {}
virtual const char* HasName() { return "JPEG2000PictureSubDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -450,14 +490,16 @@ namespace ASDCP
class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
+ CDCIEssenceDescriptor();
public:
+ const Dictionary& m_Dict;
ui32_t ComponentDepth;
ui32_t HorizontalSubsampling;
ui32_t VerticalSubsampling;
ui8_t ColorSiting;
- CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
+ CDCIEssenceDescriptor(const Dictionary& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
virtual ~CDCIEssenceDescriptor() {}
virtual const char* HasName() { return "CDCIEssenceDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -471,14 +513,16 @@ namespace ASDCP
class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
+ MPEG2VideoDescriptor();
public:
+ const Dictionary& m_Dict;
ui8_t CodedContentType;
ui8_t LowDelay;
ui32_t BitRate;
ui8_t ProfileAndLevel;
- MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
+ MPEG2VideoDescriptor(const Dictionary& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
virtual ~MPEG2VideoDescriptor() {}
virtual const char* HasName() { return "MPEG2VideoDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -492,15 +536,17 @@ namespace ASDCP
class DMSegment : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(DMSegment);
+ DMSegment();
public:
+ const Dictionary& m_Dict;
UL DataDefinition;
ui64_t EventStartPosition;
ui64_t Duration;
UTF16String EventComment;
UUID DMFramework;
- DMSegment() : EventStartPosition(0), Duration(0) {}
+ DMSegment(const Dictionary& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0) {}
virtual ~DMSegment() {}
virtual const char* HasName() { return "DMSegment"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -514,11 +560,13 @@ namespace ASDCP
class CryptographicFramework : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
+ CryptographicFramework();
public:
+ const Dictionary& m_Dict;
UUID ContextSR;
- CryptographicFramework() {}
+ CryptographicFramework(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~CryptographicFramework() {}
virtual const char* HasName() { return "CryptographicFramework"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -532,15 +580,17 @@ namespace ASDCP
class CryptographicContext : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
+ CryptographicContext();
public:
+ const Dictionary& m_Dict;
UUID ContextID;
UL SourceEssenceContainer;
UL CipherAlgorithm;
UL MICAlgorithm;
UUID CryptographicKeyID;
- CryptographicContext() {}
+ CryptographicContext(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~CryptographicContext() {}
virtual const char* HasName() { return "CryptographicContext"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -554,11 +604,13 @@ namespace ASDCP
class GenericDataEssenceDescriptor : public FileDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(GenericDataEssenceDescriptor);
+ GenericDataEssenceDescriptor();
public:
+ const Dictionary& m_Dict;
UL DataEssenceCoding;
- GenericDataEssenceDescriptor() {}
+ GenericDataEssenceDescriptor(const Dictionary& d) : FileDescriptor(d), m_Dict(d) {}
virtual ~GenericDataEssenceDescriptor() {}
virtual const char* HasName() { return "GenericDataEssenceDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -572,13 +624,15 @@ namespace ASDCP
class TimedTextDescriptor : public GenericDataEssenceDescriptor
{
ASDCP_NO_COPY_CONSTRUCT(TimedTextDescriptor);
+ TimedTextDescriptor();
public:
+ const Dictionary& m_Dict;
UUID ResourceID;
UTF16String UCSEncoding;
UTF16String NamespaceURI;
- TimedTextDescriptor() {}
+ TimedTextDescriptor(const Dictionary& d) : GenericDataEssenceDescriptor(d), m_Dict(d) {}
virtual ~TimedTextDescriptor() {}
virtual const char* HasName() { return "TimedTextDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -592,13 +646,15 @@ namespace ASDCP
class TimedTextResourceSubDescriptor : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(TimedTextResourceSubDescriptor);
+ TimedTextResourceSubDescriptor();
public:
+ const Dictionary& m_Dict;
UUID AncillaryResourceID;
UTF16String MIMEMediaType;
ui32_t EssenceStreamID;
- TimedTextResourceSubDescriptor() : EssenceStreamID(0) {}
+ TimedTextResourceSubDescriptor(const Dictionary& d) : InterchangeObject(d), m_Dict(d), EssenceStreamID(0) {}
virtual ~TimedTextResourceSubDescriptor() {}
virtual const char* HasName() { return "TimedTextResourceSubDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
@@ -612,10 +668,12 @@ namespace ASDCP
class StereoscopicPictureSubDescriptor : public InterchangeObject
{
ASDCP_NO_COPY_CONSTRUCT(StereoscopicPictureSubDescriptor);
+ StereoscopicPictureSubDescriptor();
public:
+ const Dictionary& m_Dict;
- StereoscopicPictureSubDescriptor() {}
+ StereoscopicPictureSubDescriptor(const Dictionary& d) : InterchangeObject(d), m_Dict(d) {}
virtual ~StereoscopicPictureSubDescriptor() {}
virtual const char* HasName() { return "StereoscopicPictureSubDescriptor"; }
virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp
index 2505ddd..5b1167c 100755
--- a/src/asdcp-test.cpp
+++ b/src/asdcp-test.cpp
@@ -1728,7 +1728,7 @@ show_file_info(CommandOptions& Options)
{
fprintf(stderr, "File is not AS-DCP: %s\n", Options.filenames[0]);
Kumu::FileReader Reader;
- MXF::OPAtomHeader TestHeader;
+ MXF::OPAtomHeader TestHeader(DefaultCompositeDict());
result = Reader.OpenRead(Options.filenames[0]);
@@ -1851,6 +1851,7 @@ 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;
@@ -1863,6 +1864,7 @@ main(int argc, const char** argv)
di = (MDD_t)(di + 1);
}
}
+#endif
else if ( Options.mode == MMT_EXTRACT )
{
EssenceType_t EssenceType;
diff --git a/src/h__Reader.cpp b/src/h__Reader.cpp
index 3b954fb..1f41d95 100755
--- a/src/h__Reader.cpp
+++ b/src/h__Reader.cpp
@@ -36,7 +36,8 @@ using namespace ASDCP;
using namespace ASDCP::MXF;
//
-ASDCP::h__Reader::h__Reader() : m_EssenceStart(0)
+ASDCP::h__Reader::h__Reader(const Dictionary& d) :
+ m_HeaderPart(d), m_BodyPart(d), m_FooterPart(d), m_Dict(d), m_EssenceStart(0)
{
}
@@ -61,8 +62,8 @@ ASDCP::h__Reader::InitInfo()
InterchangeObject* Object;
m_Info.LabelSetType = LS_MXF_UNKNOWN;
- UL OPAtomUL(Dict::ul(MDD_OPAtom));
- UL Interop_OPAtomUL(Dict::ul(MDD_MXFInterop_OPAtom));
+ UL OPAtomUL(m_Dict.ul(MDD_OPAtom));
+ UL Interop_OPAtomUL(m_Dict.ul(MDD_MXFInterop_OPAtom));
if ( m_HeaderPart.OperationalPattern == Interop_OPAtomUL )
m_Info.LabelSetType = LS_MXF_INTEROP;
@@ -91,7 +92,7 @@ ASDCP::h__Reader::InitInfo()
Result_t cr_result = m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(CryptographicContext), &Object);
if( ASDCP_SUCCESS(cr_result) )
- MD_to_CryptoInfo((CryptographicContext*)Object, m_Info);
+ MD_to_CryptoInfo((CryptographicContext*)Object, m_Info, m_Dict);
}
return result;
@@ -214,8 +215,8 @@ ASDCP::h__Reader::ReadEKLVPacket(ui32_t FrameNum, ui32_t SequenceNum, ASDCP::Fra
ui64_t PacketLength = Reader.Length();
m_LastPosition = m_LastPosition + Reader.KLLength() + PacketLength;
- if ( memcmp(Key.Value(), Dict::ul(MDD_CryptEssence), Key.Size() - 1) == 0 // ignore the stream numbers
- || memcmp(Key.Value(), Dict::ul(MDD_MXFInterop_CryptEssence), Key.Size() - 1) == 0 )
+ if ( memcmp(Key.Value(), m_Dict.ul(MDD_CryptEssence), Key.Size() - 1) == 0 // ignore the stream numbers
+ || memcmp(Key.Value(), m_Dict.ul(MDD_MXFInterop_CryptEssence), Key.Size() - 1) == 0 )
{
if ( ! m_Info.EncryptedEssence )
{
@@ -271,7 +272,7 @@ ASDCP::h__Reader::ReadEKLVPacket(ui32_t FrameNum, ui32_t SequenceNum, ASDCP::Fra
if ( memcmp(ess_p, EssenceUL, SMPTE_UL_LENGTH - 1) != 0 ) // ignore the stream number
{
char strbuf[IntBufferLen];
- const MDDEntry* Entry = Dict::FindUL(Key.Value());
+ const MDDEntry* Entry = m_Dict.FindUL(Key.Value());
if ( Entry == 0 )
DefaultLogSink().Warn("Unexpected Essence UL found: %s.\n", Key.EncodeString(strbuf, IntBufferLen));
else
@@ -382,7 +383,7 @@ ASDCP::h__Reader::ReadEKLVPacket(ui32_t FrameNum, ui32_t SequenceNum, ASDCP::Fra
else
{
char strbuf[IntBufferLen];
- const MDDEntry* Entry = Dict::FindUL(Key.Value());
+ const MDDEntry* Entry = m_Dict.FindUL(Key.Value());
if ( Entry == 0 )
DefaultLogSink().Warn("Unexpected Essence UL found: %s.\n", Key.EncodeString(strbuf, IntBufferLen));
else
diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp
index c088059..da17983 100755
--- a/src/h__Writer.cpp
+++ b/src/h__Writer.cpp
@@ -68,7 +68,8 @@ version_split(const char* str)
//
-ASDCP::h__Writer::h__Writer() :
+ASDCP::h__Writer::h__Writer(const Dictionary& d) :
+ m_HeaderPart(d), m_BodyPart(d), m_FooterPart(d), m_Dict(d),
m_HeaderSize(0), m_EssenceStart(0),
m_EssenceDescriptor(0), m_FramesWritten(0), m_StreamOffset(0)
{
@@ -81,37 +82,38 @@ ASDCP::h__Writer::~h__Writer()
//
// add DMS CryptographicFramework entry to source package
void
-AddDMScrypt(Partition& HeaderPart, SourcePackage& Package, WriterInfo& Descr, const UL& WrappingUL)
+AddDMScrypt(Partition& HeaderPart, SourcePackage& Package,
+ WriterInfo& Descr, const UL& WrappingUL, const Dictionary& Dict)
{
// Essence Track
- StaticTrack* NewTrack = new StaticTrack;
+ StaticTrack* NewTrack = new StaticTrack(Dict);
HeaderPart.AddChildObject(NewTrack);
Package.Tracks.push_back(NewTrack->InstanceUID);
NewTrack->TrackName = "Descriptive Track";
NewTrack->TrackID = 3;
- Sequence* Seq = new Sequence;
+ Sequence* Seq = new Sequence(Dict);
HeaderPart.AddChildObject(Seq);
NewTrack->Sequence = Seq->InstanceUID;
- Seq->DataDefinition = UL(Dict::ul(MDD_DescriptiveMetaDataDef));
+ Seq->DataDefinition = UL(Dict.ul(MDD_DescriptiveMetaDataDef));
- DMSegment* Segment = new DMSegment;
+ DMSegment* Segment = new DMSegment(Dict);
HeaderPart.AddChildObject(Segment);
Seq->StructuralComponents.push_back(Segment->InstanceUID);
Segment->EventComment = "AS-DCP KLV Encryption";
- CryptographicFramework* CFW = new CryptographicFramework;
+ CryptographicFramework* CFW = new CryptographicFramework(Dict);
HeaderPart.AddChildObject(CFW);
Segment->DMFramework = CFW->InstanceUID;
- CryptographicContext* Context = new CryptographicContext;
+ CryptographicContext* Context = new CryptographicContext(Dict);
HeaderPart.AddChildObject(Context);
CFW->ContextSR = Context->InstanceUID;
Context->ContextID.Set(Descr.ContextID);
Context->SourceEssenceContainer = WrappingUL; // ??????
- Context->CipherAlgorithm.Set(Dict::ul(MDD_CipherAlgorithm_AES));
- Context->MICAlgorithm.Set( Descr.UsesHMAC ? Dict::ul(MDD_MICAlgorithm_HMAC_SHA1) : Dict::ul(MDD_MICAlgorithm_NONE) );
+ Context->CipherAlgorithm.Set(Dict.ul(MDD_CipherAlgorithm_AES));
+ Context->MICAlgorithm.Set( Descr.UsesHMAC ? Dict.ul(MDD_MICAlgorithm_HMAC_SHA1) : Dict.ul(MDD_MICAlgorithm_NONE) );
Context->CryptographicKeyID.Set(Descr.CryptographicKeyID);
}
@@ -122,12 +124,12 @@ ASDCP::h__Writer::InitHeader()
assert(m_EssenceDescriptor);
m_HeaderPart.m_Primer.ClearTagList();
- m_HeaderPart.m_Preface = new Preface;
+ m_HeaderPart.m_Preface = new Preface(m_Dict);
m_HeaderPart.AddChildObject(m_HeaderPart.m_Preface);
// Set the Operational Pattern label -- we're just starting and have no RIP or index,
// so we tell the world by using OP1a
- m_HeaderPart.m_Preface->OperationalPattern = UL(Dict::ul(MDD_OP1a));
+ m_HeaderPart.m_Preface->OperationalPattern = UL(m_Dict.ul(MDD_OP1a));
m_HeaderPart.OperationalPattern = m_HeaderPart.m_Preface->OperationalPattern;
// First RIP Entry
@@ -139,7 +141,7 @@ ASDCP::h__Writer::InitHeader()
//
// Identification
//
- Identification* Ident = new Identification;
+ Identification* Ident = new Identification(m_Dict);
m_HeaderPart.AddChildObject(Ident);
m_HeaderPart.m_Preface->Identifications.push_back(Ident->InstanceUID);
@@ -174,18 +176,18 @@ struct TrackSet
template <class PackageT, class ClipT>
TrackSet<ClipT>
CreateTrackAndSequence(OPAtomHeader& Header, PackageT& Package, const std::string TrackName,
- const MXF::Rational& EditRate, const UL& Definition, ui32_t TrackID)
+ const MXF::Rational& EditRate, const UL& Definition, ui32_t TrackID, const Dictionary& Dict)
{
TrackSet<ClipT> NewTrack;
- NewTrack.Track = new Track;
+ NewTrack.Track = new Track(Dict);
Header.AddChildObject(NewTrack.Track);
NewTrack.Track->EditRate = EditRate;
Package.Tracks.push_back(NewTrack.Track->InstanceUID);
NewTrack.Track->TrackID = TrackID;
NewTrack.Track->TrackName = TrackName.c_str();
- NewTrack.Sequence = new Sequence;
+ NewTrack.Sequence = new Sequence(Dict);
Header.AddChildObject(NewTrack.Sequence);
NewTrack.Track->Sequence = NewTrack.Sequence->InstanceUID;
NewTrack.Sequence->DataDefinition = Definition;
@@ -197,13 +199,13 @@ CreateTrackAndSequence(OPAtomHeader& Header, PackageT& Package, const std::strin
template <class PackageT>
TrackSet<TimecodeComponent>
CreateTimecodeTrack(OPAtomHeader& Header, PackageT& Package,
- const MXF::Rational& EditRate, ui32_t TCFrameRate, ui64_t TCStart)
+ const MXF::Rational& EditRate, ui32_t TCFrameRate, ui64_t TCStart, const Dictionary& Dict)
{
- UL TCUL(Dict::ul(MDD_TimecodeDataDef));
+ UL TCUL(Dict.ul(MDD_TimecodeDataDef));
- TrackSet<TimecodeComponent> NewTrack = CreateTrackAndSequence<PackageT, TimecodeComponent>(Header, Package, "Timecode Track", EditRate, TCUL, 1);
+ TrackSet<TimecodeComponent> NewTrack = CreateTrackAndSequence<PackageT, TimecodeComponent>(Header, Package, "Timecode Track", EditRate, TCUL, 1, Dict);
- NewTrack.Clip = new TimecodeComponent;
+ NewTrack.Clip = new TimecodeComponent(Dict);
Header.AddChildObject(NewTrack.Clip);
NewTrack.Sequence->StructuralComponents.push_back(NewTrack.Clip->InstanceUID);
NewTrack.Clip->RoundedTimecodeBase = TCFrameRate;
@@ -221,11 +223,11 @@ ASDCP::h__Writer::AddSourceClip(const MXF::Rational& EditRate, ui32_t TCFrameRat
const std::string& PackageLabel)
{
//
- ContentStorage* Storage = new ContentStorage;
+ ContentStorage* Storage = new ContentStorage(m_Dict);
m_HeaderPart.AddChildObject(Storage);
m_HeaderPart.m_Preface->ContentStorage = Storage->InstanceUID;
- EssenceContainerData* ECD = new EssenceContainerData;
+ EssenceContainerData* ECD = new EssenceContainerData(m_Dict);
m_HeaderPart.AddChildObject(ECD);
Storage->EssenceContainerData.push_back(ECD->InstanceUID);
ECD->IndexSID = 129;
@@ -239,22 +241,23 @@ ASDCP::h__Writer::AddSourceClip(const MXF::Rational& EditRate, ui32_t TCFrameRat
//
// Material Package
//
- m_MaterialPackage = new MaterialPackage;
+ m_MaterialPackage = new MaterialPackage(m_Dict);
m_MaterialPackage->Name = "AS-DCP Material Package";
m_MaterialPackage->PackageUID = MaterialPackageUMID;
m_HeaderPart.AddChildObject(m_MaterialPackage);
Storage->Packages.push_back(m_MaterialPackage->InstanceUID);
TrackSet<TimecodeComponent> MPTCTrack = CreateTimecodeTrack<MaterialPackage>(m_HeaderPart, *m_MaterialPackage,
- EditRate, TCFrameRate, 0);
+ EditRate, TCFrameRate, 0, m_Dict);
m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration));
m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration));
TrackSet<SourceClip> MPTrack = CreateTrackAndSequence<MaterialPackage, SourceClip>(m_HeaderPart, *m_MaterialPackage,
- TrackName, EditRate, DataDefinition, 2);
+ TrackName, EditRate, DataDefinition,
+ 2, m_Dict);
m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration));
- MPTrack.Clip = new SourceClip;
+ MPTrack.Clip = new SourceClip(m_Dict);
m_HeaderPart.AddChildObject(MPTrack.Clip);
MPTrack.Sequence->StructuralComponents.push_back(MPTrack.Clip->InstanceUID);
MPTrack.Clip->DataDefinition = DataDefinition;
@@ -266,7 +269,7 @@ ASDCP::h__Writer::AddSourceClip(const MXF::Rational& EditRate, ui32_t TCFrameRat
//
// File (Source) Package
//
- m_FilePackage = new SourcePackage;
+ m_FilePackage = new SourcePackage(m_Dict);
m_FilePackage->Name = PackageLabel.c_str();
m_FilePackage->PackageUID = SourcePackageUMID;
ECD->LinkedPackageUID = SourcePackageUMID;
@@ -275,15 +278,17 @@ ASDCP::h__Writer::AddSourceClip(const MXF::Rational& EditRate, ui32_t TCFrameRat
Storage->Packages.push_back(m_FilePackage->InstanceUID);
TrackSet<TimecodeComponent> FPTCTrack = CreateTimecodeTrack<SourcePackage>(m_HeaderPart, *m_FilePackage,
- EditRate, TCFrameRate, ui64_C(3600) * TCFrameRate);
+ EditRate, TCFrameRate,
+ ui64_C(3600) * TCFrameRate, m_Dict);
m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration));
m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration));
TrackSet<SourceClip> FPTrack = CreateTrackAndSequence<SourcePackage, SourceClip>(m_HeaderPart, *m_FilePackage,
- TrackName, EditRate, DataDefinition, 2);
+ TrackName, EditRate, DataDefinition,
+ 2, m_Dict);
m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration));
- FPTrack.Clip = new SourceClip;
+ FPTrack.Clip = new SourceClip(m_Dict);
m_HeaderPart.AddChildObject(FPTrack.Clip);
FPTrack.Sequence->StructuralComponents.push_back(FPTrack.Clip->InstanceUID);
FPTrack.Clip->DataDefinition = DataDefinition;
@@ -303,11 +308,11 @@ ASDCP::h__Writer::AddDMSegment(const MXF::Rational& EditRate, ui32_t TCFrameRate
const std::string& PackageLabel)
{
//
- ContentStorage* Storage = new ContentStorage;
+ ContentStorage* Storage = new ContentStorage(m_Dict);
m_HeaderPart.AddChildObject(Storage);
m_HeaderPart.m_Preface->ContentStorage = Storage->InstanceUID;
- EssenceContainerData* ECD = new EssenceContainerData;
+ EssenceContainerData* ECD = new EssenceContainerData(m_Dict);
m_HeaderPart.AddChildObject(ECD);
Storage->EssenceContainerData.push_back(ECD->InstanceUID);
ECD->IndexSID = 129;
@@ -321,22 +326,23 @@ ASDCP::h__Writer::AddDMSegment(const MXF::Rational& EditRate, ui32_t TCFrameRate
//
// Material Package
//
- m_MaterialPackage = new MaterialPackage;
+ m_MaterialPackage = new MaterialPackage(m_Dict);
m_MaterialPackage->Name = "AS-DCP Material Package";
m_MaterialPackage->PackageUID = MaterialPackageUMID;
m_HeaderPart.AddChildObject(m_MaterialPackage);
Storage->Packages.push_back(m_MaterialPackage->InstanceUID);
TrackSet<TimecodeComponent> MPTCTrack = CreateTimecodeTrack<MaterialPackage>(m_HeaderPart, *m_MaterialPackage,
- EditRate, TCFrameRate, 0);
+ EditRate, TCFrameRate, 0, m_Dict);
m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration));
m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration));
TrackSet<DMSegment> MPTrack = CreateTrackAndSequence<MaterialPackage, DMSegment>(m_HeaderPart, *m_MaterialPackage,
- TrackName, EditRate, DataDefinition, 2);
+ TrackName, EditRate, DataDefinition,
+ 2, m_Dict);
m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration));
- MPTrack.Clip = new DMSegment;
+ MPTrack.Clip = new DMSegment(m_Dict);
m_HeaderPart.AddChildObject(MPTrack.Clip);
MPTrack.Sequence->StructuralComponents.push_back(MPTrack.Clip->InstanceUID);
MPTrack.Clip->DataDefinition = DataDefinition;
@@ -348,7 +354,7 @@ ASDCP::h__Writer::AddDMSegment(const MXF::Rational& EditRate, ui32_t TCFrameRate
//
// File (Source) Package
//
- m_FilePackage = new SourcePackage;
+ m_FilePackage = new SourcePackage(m_Dict);
m_FilePackage->Name = PackageLabel.c_str();
m_FilePackage->PackageUID = SourcePackageUMID;
ECD->LinkedPackageUID = SourcePackageUMID;
@@ -357,15 +363,17 @@ ASDCP::h__Writer::AddDMSegment(const MXF::Rational& EditRate, ui32_t TCFrameRate
Storage->Packages.push_back(m_FilePackage->InstanceUID);
TrackSet<TimecodeComponent> FPTCTrack = CreateTimecodeTrack<SourcePackage>(m_HeaderPart, *m_FilePackage,
- EditRate, TCFrameRate, ui64_C(3600) * TCFrameRate);
+ EditRate, TCFrameRate,
+ ui64_C(3600) * TCFrameRate, m_Dict);
m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration));
m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration));
TrackSet<DMSegment> FPTrack = CreateTrackAndSequence<SourcePackage, DMSegment>(m_HeaderPart, *m_FilePackage,
- TrackName, EditRate, DataDefinition, 2);
+ TrackName, EditRate, DataDefinition,
+ 2, m_Dict);
m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration));
- FPTrack.Clip = new DMSegment;
+ FPTrack.Clip = new DMSegment(m_Dict);
m_HeaderPart.AddChildObject(FPTrack.Clip);
FPTrack.Sequence->StructuralComponents.push_back(FPTrack.Clip->InstanceUID);
FPTrack.Clip->DataDefinition = DataDefinition;
@@ -388,15 +396,15 @@ ASDCP::h__Writer::AddEssenceDescriptor(const UL& WrappingUL)
//
// Essence Descriptors
//
- UL GenericContainerUL(Dict::ul(MDD_GCMulti));
+ UL GenericContainerUL(m_Dict.ul(MDD_GCMulti));
m_HeaderPart.EssenceContainers.push_back(GenericContainerUL);
if ( m_Info.EncryptedEssence )
{
- UL CryptEssenceUL(Dict::ul(MDD_EncryptedContainerLabel));
+ UL CryptEssenceUL(m_Dict.ul(MDD_EncryptedContainerLabel));
m_HeaderPart.EssenceContainers.push_back(CryptEssenceUL);
- m_HeaderPart.m_Preface->DMSchemes.push_back(UL(Dict::ul(MDD_CryptographicFrameworkLabel)));
- AddDMScrypt(m_HeaderPart, *m_FilePackage, m_Info, WrappingUL);
+ m_HeaderPart.m_Preface->DMSchemes.push_back(UL(m_Dict.ul(MDD_CryptographicFrameworkLabel)));
+ AddDMScrypt(m_HeaderPart, *m_FilePackage, m_Info, WrappingUL, m_Dict);
}
else
{
@@ -426,11 +434,11 @@ ASDCP::h__Writer::CreateBodyPart(const MXF::Rational& EditRate, ui32_t BytesPerE
m_BodyPart.EssenceContainers = m_HeaderPart.EssenceContainers;
m_BodyPart.ThisPartition = m_File.Tell();
m_BodyPart.BodySID = 1;
- UL OPAtomUL(Dict::ul(MDD_OPAtom));
+ UL OPAtomUL(m_Dict.ul(MDD_OPAtom));
m_BodyPart.OperationalPattern = OPAtomUL;
m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(1, m_BodyPart.ThisPartition)); // Second RIP Entry
- UL BodyUL(Dict::ul(MDD_ClosedCompleteBodyPartition));
+ UL BodyUL(m_Dict.ul(MDD_ClosedCompleteBodyPartition));
result = m_BodyPart.WriteToFile(m_File, BodyUL);
}
else
@@ -510,9 +518,9 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte
if ( ASDCP_SUCCESS(result) )
{ // write UL
if ( m_Info.LabelSetType == LS_MXF_INTEROP )
- Overhead.WriteRaw(Dict::ul(MDD_MXFInterop_CryptEssence), SMPTE_UL_LENGTH);
+ Overhead.WriteRaw(m_Dict.ul(MDD_MXFInterop_CryptEssence), SMPTE_UL_LENGTH);
else
- Overhead.WriteRaw(Dict::ul(MDD_CryptEssence), SMPTE_UL_LENGTH);
+ Overhead.WriteRaw(m_Dict.ul(MDD_CryptEssence), SMPTE_UL_LENGTH);
// construct encrypted triplet header
ui32_t ETLength = klv_cryptinfo_size + m_CtFrameBuf.Size();
@@ -609,10 +617,10 @@ ASDCP::h__Writer::WriteMXFFooter()
m_HeaderPart.FooterPartition = here;
// re-label the partition
- UL OPAtomUL(Dict::ul(MDD_OPAtom));
+ UL OPAtomUL(m_Dict.ul(MDD_OPAtom));
if ( m_Info.LabelSetType == LS_MXF_INTEROP )
- OPAtomUL.Set(Dict::ul(MDD_MXFInterop_OPAtom));
+ OPAtomUL.Set(m_Dict.ul(MDD_MXFInterop_OPAtom));
m_HeaderPart.OperationalPattern = OPAtomUL;
m_HeaderPart.m_Preface->OperationalPattern = m_HeaderPart.OperationalPattern;
diff --git a/src/klvwalk.cpp b/src/klvwalk.cpp
index aed05b1..276ff20 100755
--- a/src/klvwalk.cpp
+++ b/src/klvwalk.cpp
@@ -193,7 +193,7 @@ main(int argc, const char** argv)
if ( Options.read_mxf_flag ) // dump MXF
{
Kumu::FileReader Reader;
- ASDCP::MXF::OPAtomHeader Header;
+ ASDCP::MXF::OPAtomHeader Header(DefaultCompositeDict());
result = Reader.OpenRead((*fi).c_str());
@@ -213,7 +213,7 @@ main(int argc, const char** argv)
if ( ASDCP_SUCCESS(result) )
{
- MXF::Partition TmpPart;
+ MXF::Partition TmpPart(DefaultCompositeDict());
result = TmpPart.InitFromFile(Reader);
if ( ASDCP_SUCCESS(result) && TmpPart.BodySID > 0 )
@@ -224,7 +224,7 @@ main(int argc, const char** argv)
if ( ASDCP_SUCCESS(result) )
{
- ASDCP::MXF::OPAtomIndexFooter Index;
+ ASDCP::MXF::OPAtomIndexFooter Index(DefaultCompositeDict());
result = Reader.Seek(Header.FooterPartition);
if ( ASDCP_SUCCESS(result) )
@@ -252,7 +252,7 @@ main(int argc, const char** argv)
while ( ASDCP_SUCCESS(result) )
{
- KP.Dump(stdout, true);
+ KP.Dump(stdout, DefaultCompositeDict(), true);
result = KP.InitFromFile(Reader);
}