diff options
| author | jhurst <jhurst@cinecert.com> | 2009-05-18 05:18:32 +0000 |
|---|---|---|
| committer | jhurst <> | 2009-05-18 05:18:32 +0000 |
| commit | 65a8ec13b66c700b74788d3fc7525e91cf62bab0 (patch) | |
| tree | 15f588026b93aae7e65a4bf37ed4cffe8e4bc4ad | |
| parent | 111e0170052b57fc128a37fa02736015edb8c60f (diff) | |
massive dictionary re-factoring
| -rw-r--r-- | configure.ac | 2 | ||||
| -rwxr-xr-x | src/AS_DCP.h | 19 | ||||
| -rwxr-xr-x | src/AS_DCP_JP2K.cpp | 65 | ||||
| -rwxr-xr-x | src/AS_DCP_MPEG2.cpp | 28 | ||||
| -rwxr-xr-x | src/AS_DCP_MXF.cpp | 11 | ||||
| -rwxr-xr-x | src/AS_DCP_PCM.cpp | 29 | ||||
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 37 | ||||
| -rwxr-xr-x | src/AS_DCP_internal.h | 10 | ||||
| -rwxr-xr-x | src/Dict.cpp | 19 | ||||
| -rwxr-xr-x | src/Index.cpp | 7 | ||||
| -rwxr-xr-x | src/KLV.cpp | 26 | ||||
| -rwxr-xr-x | src/KLV.h | 43 | ||||
| -rw-r--r-- | src/MDD.cpp | 5 | ||||
| -rwxr-xr-x | src/MDD.h | 1 | ||||
| -rwxr-xr-x | src/MXF.cpp | 72 | ||||
| -rwxr-xr-x | src/MXF.h | 37 | ||||
| -rwxr-xr-x | src/MXFTypes.h | 6 | ||||
| -rwxr-xr-x | src/Metadata.cpp | 216 | ||||
| -rwxr-xr-x | src/Metadata.h | 118 | ||||
| -rwxr-xr-x | src/asdcp-test.cpp | 4 | ||||
| -rwxr-xr-x | src/h__Reader.cpp | 17 | ||||
| -rwxr-xr-x | src/h__Writer.cpp | 108 | ||||
| -rwxr-xr-x | src/klvwalk.cpp | 8 |
23 files changed, 529 insertions, 359 deletions
diff --git a/configure.ac b/configure.ac index 5d1e491..304e49b 100644 --- a/configure.ac +++ b/configure.ac @@ -37,7 +37,7 @@ AC_PREREQ([2.59]) # For example, if asdcplib version 1.0.0 were modified to accomodate changes # in file format, and if no changes were made to AS_DCP.h, the new version would be # 1.0.1. If changes were also required in AS_DCP.h, the new version would be 1.1.1. -AC_INIT([asdcplib], [1.4.22], [asdcplib@cinecert.com]) +AC_INIT([asdcplib], [1.4.24], [asdcplib@cinecert.com]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_SRCDIR([src/KM_error.h]) 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; @@ -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 @@ -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 // @@ -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); } |
