X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FMetadata.cpp;h=aeedbde87cde8bc1dc2ffb7b694558eda1e4a5b6;hb=cb3d6d3ded4b86b903fbf734b41cdee883b335d7;hp=b597303daec56cb42f047c51b7e5586451a8e1dd;hpb=6e23666cb6184999efc74577cfb1b524181ba5df;p=asdcplib.git diff --git a/src/Metadata.cpp b/src/Metadata.cpp index b597303..aeedbde 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2005-2006, John Hurst +Copyright (c) 2005-2009, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -30,133 +30,81 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include "Metadata.h" -#include "MDD.h" -#include "Mutex.h" -#include "hex_utils.h" +using namespace ASDCP; +using namespace ASDCP::MXF; + +const ui32_t kl_length = ASDCP::SMPTE_UL_LENGTH + ASDCP::MXF_BER_LENGTH; //------------------------------------------------------------------------------------------ -// -enum FLT_t - { - FLT_Preface, - FLT_IndexTableSegment, - FLT_Identification, - FLT_ContentStorage, - FLT_MaterialPackage, - FLT_SourcePackage, - FLT_Track, - FLT_Sequence, - FLT_SourceClip, - FLT_TimecodeComponent, - FLT_FileDescriptor, - FLT_GenericSoundEssenceDescriptor, - FLT_WaveAudioDescriptor, - FLT_GenericPictureEssenceDescriptor, - FLT_RGBAEssenceDescriptor, - FLT_JPEG2000PictureSubDescriptor, - FLT_CDCIEssenceDescriptor, - FLT_MPEG2VideoDescriptor, - FLT_CryptographicFramework, - FLT_CryptographicContext, - }; - -// -typedef std::map::iterator FLi_t; - -class FactoryList : public std::map -{ - ASDCP::Mutex m_Lock; - -public: - FactoryList() {} - ~FactoryList() {} - - bool Empty() { - ASDCP::AutoMutex BlockLock(m_Lock); - return empty(); - } - - FLi_t Find(const byte_t* label) { - ASDCP::AutoMutex BlockLock(m_Lock); - return find(label); - } - - FLi_t End() { - ASDCP::AutoMutex BlockLock(m_Lock); - return end(); - } - -}; - -// -static FactoryList s_FactoryList; - -// -ASDCP::MXF::InterchangeObject* -ASDCP::MXF::CreateObject(const byte_t* label) -{ - if ( label == 0 ) - return 0; - - if ( s_FactoryList.empty() ) - { - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_Preface].ul, FLT_Preface)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_IndexTableSegment].ul, FLT_IndexTableSegment)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_Identification].ul, FLT_Identification)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_ContentStorage].ul, FLT_ContentStorage)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_MaterialPackage].ul, FLT_MaterialPackage)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_SourcePackage].ul, FLT_SourcePackage)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_Track].ul, FLT_Track)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_Sequence].ul, FLT_Sequence)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_SourceClip].ul, FLT_SourceClip)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_TimecodeComponent].ul, FLT_TimecodeComponent)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_FileDescriptor].ul, FLT_FileDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_GenericSoundEssenceDescriptor].ul, FLT_GenericSoundEssenceDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_WaveAudioDescriptor].ul, FLT_WaveAudioDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_GenericPictureEssenceDescriptor].ul, FLT_GenericPictureEssenceDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_RGBAEssenceDescriptor].ul, FLT_RGBAEssenceDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_JPEG2000PictureSubDescriptor].ul, FLT_JPEG2000PictureSubDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_CDCIEssenceDescriptor].ul, FLT_CDCIEssenceDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_MPEG2VideoDescriptor].ul, FLT_MPEG2VideoDescriptor)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_CryptographicFramework].ul, FLT_CryptographicFramework)); - s_FactoryList.insert(FactoryList::value_type(s_MDD_Table[MDDindex_CryptographicContext].ul, FLT_CryptographicContext)); - } - - FLi_t i = s_FactoryList.find(label); - - if ( i == s_FactoryList.end() ) - return new InterchangeObject; - - switch ( i->second ) - { - case FLT_Preface: return new Preface; - case FLT_IndexTableSegment: return new IndexTableSegment; - case FLT_Identification: return new Identification; - case FLT_ContentStorage: return new ContentStorage; - case FLT_MaterialPackage: return new MaterialPackage; - case FLT_SourcePackage: return new SourcePackage; - case FLT_Track: return new Track; - case FLT_Sequence: return new Sequence; - case FLT_SourceClip: return new SourceClip; - case FLT_TimecodeComponent: return new TimecodeComponent; - case FLT_FileDescriptor: return new FileDescriptor; - case FLT_GenericSoundEssenceDescriptor: return new GenericSoundEssenceDescriptor; - case FLT_WaveAudioDescriptor: return new WaveAudioDescriptor; - case FLT_GenericPictureEssenceDescriptor: return new GenericPictureEssenceDescriptor; - case FLT_RGBAEssenceDescriptor: return new RGBAEssenceDescriptor; - case FLT_JPEG2000PictureSubDescriptor: return new JPEG2000PictureSubDescriptor; - case FLT_CDCIEssenceDescriptor: return new CDCIEssenceDescriptor; - case FLT_MPEG2VideoDescriptor: return new MPEG2VideoDescriptor; - case FLT_CryptographicFramework: return new CryptographicFramework; - case FLT_CryptographicContext: return new CryptographicContext; - } - - return new InterchangeObject; -} +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); } +static InterchangeObject* NetworkLocator_Factory(const Dictionary*& Dict) { return new NetworkLocator(Dict); } + +void +ASDCP::MXF::Metadata_InitTypes(const Dictionary*& Dict) +{ + assert(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); + SetObjectFactory(Dict->ul(MDD_NetworkLocator), NetworkLocator_Factory); +} //------------------------------------------------------------------------------------------ // KLV Sets @@ -168,24 +116,43 @@ ASDCP::MXF::CreateObject(const byte_t* label) // ASDCP::Result_t -ASDCP::MXF::Identification::InitFromTLVSet(TLVReader& TLVSet) +Identification::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ThisGenerationUID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, CompanyName)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductName)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(Identification, ProductVersion)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductVersion)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, VersionString)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductUID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ModificationDate)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(Identification, ToolkitVersion)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ToolkitVersion)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, Platform)); return result; } +// +ASDCP::Result_t +Identification::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ThisGenerationUID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, CompanyName)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductName)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductVersion)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, VersionString)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductUID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ModificationDate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ToolkitVersion)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, Platform)); + return result; +} + // void -ASDCP::MXF::Identification::Dump(FILE* stream) +Identification::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -194,39 +161,33 @@ ASDCP::MXF::Identification::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %22s = %s\n", "ThisGenerationUID", ThisGenerationUID.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "CompanyName", CompanyName.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "ProductName", ProductName.ToString(identbuf)); - fprintf(stream, " %22s = %d\n", "ProductVersion", ProductVersion); - fprintf(stream, " %22s = %s\n", "VersionString", VersionString.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "ProductUID", ProductUID.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "ModificationDate", ModificationDate.ToString(identbuf)); - fprintf(stream, " %22s = %d\n", "ToolkitVersion", ToolkitVersion); - fprintf(stream, " %22s = %s\n", "Platform", Platform.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "ThisGenerationUID", ThisGenerationUID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "CompanyName", CompanyName.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "ProductName", ProductName.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "ProductVersion", ProductVersion.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "VersionString", VersionString.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "ProductUID", ProductUID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "ModificationDate", ModificationDate.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "ToolkitVersion", ToolkitVersion.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "Platform", Platform.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::Identification::InitFromBuffer(const byte_t* p, ui32_t l) +Identification::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_Identification].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_Identification)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_Identification].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_Identification)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -234,17 +195,29 @@ ASDCP::MXF::Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::ContentStorage::InitFromTLVSet(TLVReader& TLVSet) +ContentStorage::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, Packages)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, EssenceContainerData)); return result; } +// +ASDCP::Result_t +ContentStorage::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, Packages)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, EssenceContainerData)); + return result; +} + // void -ASDCP::MXF::ContentStorage::Dump(FILE* stream) +ContentStorage::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -253,34 +226,89 @@ ASDCP::MXF::ContentStorage::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %s:\n", "Packages"); + fprintf(stream, " %22s:\n", "Packages"); Packages.Dump(stream); - fprintf(stream, " %s:\n", "EssenceContainerData"); + fprintf(stream, " %22s:\n", "EssenceContainerData"); EssenceContainerData.Dump(stream); } // ASDCP::Result_t -ASDCP::MXF::ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l) +ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_ContentStorage)); + return InterchangeObject::InitFromBuffer(p, l); +} - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_ContentStorage].ul); +// +ASDCP::Result_t +ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_ContentStorage)); + return InterchangeObject::WriteToBuffer(Buffer); +} - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } +//------------------------------------------------------------------------------------------ +// EssenceContainerData +// +ASDCP::Result_t +EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, IndexSID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID)); return result; } // ASDCP::Result_t -ASDCP::MXF::ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +EssenceContainerData::WriteToTLVSet(TLVWriter& TLVSet) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_ContentStorage].ul, 0); + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(EssenceContainerData, LinkedPackageUID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, IndexSID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID)); + return result; +} + +// +void +EssenceContainerData::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); + fprintf(stream, " %22s = %s\n", "LinkedPackageUID", LinkedPackageUID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID); + fprintf(stream, " %22s = %d\n", "BodySID", BodySID); +} + +// +ASDCP::Result_t +EssenceContainerData::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_EssenceContainerData)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +EssenceContainerData::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_EssenceContainerData)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -288,8 +316,9 @@ ASDCP::MXF::ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::GenericPackage::InitFromTLVSet(TLVReader& TLVSet) +GenericPackage::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageUID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Name)); @@ -299,9 +328,23 @@ ASDCP::MXF::GenericPackage::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +GenericPackage::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageUID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Name)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageCreationDate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageModifiedDate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Tracks)); + return result; +} + // void -ASDCP::MXF::GenericPackage::Dump(FILE* stream) +GenericPackage::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -310,11 +353,11 @@ ASDCP::MXF::GenericPackage::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "Name", Name.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "PackageCreationDate", PackageCreationDate.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "PackageModifiedDate", PackageModifiedDate.ToString(identbuf)); - fprintf(stream, " %s:\n", "Tracks"); + fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "Name", Name.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "PackageCreationDate", PackageCreationDate.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "PackageModifiedDate", PackageModifiedDate.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s:\n", "Tracks"); Tracks.Dump(stream); } @@ -324,15 +367,25 @@ ASDCP::MXF::GenericPackage::Dump(FILE* stream) // ASDCP::Result_t -ASDCP::MXF::MaterialPackage::InitFromTLVSet(TLVReader& TLVSet) +MaterialPackage::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericPackage::InitFromTLVSet(TLVSet); return result; } +// +ASDCP::Result_t +MaterialPackage::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericPackage::WriteToTLVSet(TLVSet); + return result; +} + // void -ASDCP::MXF::MaterialPackage::Dump(FILE* stream) +MaterialPackage::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -345,26 +398,20 @@ ASDCP::MXF::MaterialPackage::Dump(FILE* stream) // ASDCP::Result_t -ASDCP::MXF::MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l) +MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_MaterialPackage].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_MaterialPackage)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_MaterialPackage].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_MaterialPackage)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -372,15 +419,27 @@ ASDCP::MXF::MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::SourcePackage::InitFromTLVSet(TLVReader& TLVSet) +SourcePackage::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericPackage::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourcePackage, Descriptor)); + return result; +} + +// +ASDCP::Result_t +SourcePackage::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericPackage::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourcePackage, Descriptor)); return result; } // void -ASDCP::MXF::SourcePackage::Dump(FILE* stream) +SourcePackage::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -389,30 +448,25 @@ ASDCP::MXF::SourcePackage::Dump(FILE* stream) stream = stderr; GenericPackage::Dump(stream); + fprintf(stream, " %22s = %s\n", "Descriptor", Descriptor.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l) +SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_SourcePackage].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_SourcePackage)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_SourcePackage].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_SourcePackage)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -420,8 +474,9 @@ ASDCP::MXF::SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::GenericTrack::InitFromTLVSet(TLVReader& TLVSet) +GenericTrack::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackNumber)); @@ -430,9 +485,22 @@ ASDCP::MXF::GenericTrack::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +GenericTrack::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackNumber)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericTrack, TrackName)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericTrack, Sequence)); + return result; +} + // void -ASDCP::MXF::GenericTrack::Dump(FILE* stream) +GenericTrack::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -443,27 +511,35 @@ ASDCP::MXF::GenericTrack::Dump(FILE* stream) InterchangeObject::Dump(stream); fprintf(stream, " %22s = %d\n", "TrackID", TrackID); fprintf(stream, " %22s = %d\n", "TrackNumber", TrackNumber); - fprintf(stream, " %22s = %s\n", "TrackName", TrackName.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "Sequence", Sequence.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "TrackName", TrackName.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "Sequence", Sequence.EncodeString(identbuf, IdentBufferLen)); } //------------------------------------------------------------------------------------------ -// Track +// StaticTrack // ASDCP::Result_t -ASDCP::MXF::Track::InitFromTLVSet(TLVReader& TLVSet) +StaticTrack::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericTrack::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Track, EditRate)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(Track, Origin)); + return result; +} + +// +ASDCP::Result_t +StaticTrack::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericTrack::WriteToTLVSet(TLVSet); return result; } // void -ASDCP::MXF::Track::Dump(FILE* stream) +StaticTrack::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -472,32 +548,82 @@ ASDCP::MXF::Track::Dump(FILE* stream) stream = stderr; GenericTrack::Dump(stream); - fprintf(stream, " %22s = %s\n", "EditRate", EditRate.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "Origin", i64sz(Origin, identbuf)); } // ASDCP::Result_t -ASDCP::MXF::Track::InitFromBuffer(const byte_t* p, ui32_t l) +StaticTrack::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_StaticTrack)); + return InterchangeObject::InitFromBuffer(p, l); +} - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_Track].ul); +// +ASDCP::Result_t +StaticTrack::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_StaticTrack)); + return InterchangeObject::WriteToBuffer(Buffer); +} - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } +//------------------------------------------------------------------------------------------ +// Track +// +ASDCP::Result_t +Track::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericTrack::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Track, EditRate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(Track, Origin)); return result; } // ASDCP::Result_t -ASDCP::MXF::Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +Track::WriteToTLVSet(TLVWriter& TLVSet) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_Track].ul, 0); + assert(m_Dict); + Result_t result = GenericTrack::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Track, EditRate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(Track, Origin)); + return result; +} + +// +void +Track::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + GenericTrack::Dump(stream); + fprintf(stream, " %22s = %s\n", "EditRate", EditRate.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "Origin", i64sz(Origin, identbuf)); +} + +// +ASDCP::Result_t +Track::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_Track)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_Track)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -505,17 +631,29 @@ ASDCP::MXF::Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::StructuralComponent::InitFromTLVSet(TLVReader& TLVSet) +StructuralComponent::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(StructuralComponent, Duration)); return result; } +// +ASDCP::Result_t +StructuralComponent::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(StructuralComponent, DataDefinition)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(StructuralComponent, Duration)); + return result; +} + // void -ASDCP::MXF::StructuralComponent::Dump(FILE* stream) +StructuralComponent::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -524,7 +662,7 @@ ASDCP::MXF::StructuralComponent::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf)); } @@ -534,16 +672,27 @@ ASDCP::MXF::StructuralComponent::Dump(FILE* stream) // ASDCP::Result_t -ASDCP::MXF::Sequence::InitFromTLVSet(TLVReader& TLVSet) +Sequence::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = StructuralComponent::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Sequence, StructuralComponents)); return result; } +// +ASDCP::Result_t +Sequence::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = StructuralComponent::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Sequence, StructuralComponents)); + return result; +} + // void -ASDCP::MXF::Sequence::Dump(FILE* stream) +Sequence::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -552,32 +701,26 @@ ASDCP::MXF::Sequence::Dump(FILE* stream) stream = stderr; StructuralComponent::Dump(stream); - fprintf(stream, " %s:\n", "StructuralComponents"); + fprintf(stream, " %22s:\n", "StructuralComponents"); StructuralComponents.Dump(stream); } // ASDCP::Result_t -ASDCP::MXF::Sequence::InitFromBuffer(const byte_t* p, ui32_t l) +Sequence::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_Sequence].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_Sequence)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_Sequence].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_Sequence)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -585,8 +728,9 @@ ASDCP::MXF::Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::SourceClip::InitFromTLVSet(TLVReader& TLVSet) +SourceClip::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = StructuralComponent::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(SourceClip, StartPosition)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourceClip, SourcePackageID)); @@ -594,9 +738,21 @@ ASDCP::MXF::SourceClip::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +SourceClip::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = StructuralComponent::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(SourceClip, StartPosition)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourceClip, SourcePackageID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(SourceClip, SourceTrackID)); + return result; +} + // void -ASDCP::MXF::SourceClip::Dump(FILE* stream) +SourceClip::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -606,32 +762,26 @@ ASDCP::MXF::SourceClip::Dump(FILE* stream) StructuralComponent::Dump(stream); fprintf(stream, " %22s = %s\n", "StartPosition", i64sz(StartPosition, identbuf)); - fprintf(stream, " %22s = %s\n", "SourcePackageID", SourcePackageID.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "SourcePackageID", SourcePackageID.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID); } // ASDCP::Result_t -ASDCP::MXF::SourceClip::InitFromBuffer(const byte_t* p, ui32_t l) +SourceClip::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_SourceClip].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_SourceClip)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_SourceClip].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_SourceClip)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -639,8 +789,9 @@ ASDCP::MXF::SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::TimecodeComponent::InitFromTLVSet(TLVReader& TLVSet) +TimecodeComponent::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = StructuralComponent::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(TimecodeComponent, RoundedTimecodeBase)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(TimecodeComponent, StartTimecode)); @@ -648,9 +799,21 @@ ASDCP::MXF::TimecodeComponent::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +TimecodeComponent::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = StructuralComponent::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(TimecodeComponent, RoundedTimecodeBase)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(TimecodeComponent, StartTimecode)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(TimecodeComponent, DropFrame)); + return result; +} + // void -ASDCP::MXF::TimecodeComponent::Dump(FILE* stream) +TimecodeComponent::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -666,26 +829,20 @@ ASDCP::MXF::TimecodeComponent::Dump(FILE* stream) // ASDCP::Result_t -ASDCP::MXF::TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l) +TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_TimecodeComponent].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_TimecodeComponent)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_TimecodeComponent].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_TimecodeComponent)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -693,17 +850,29 @@ ASDCP::MXF::TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::GenericDescriptor::InitFromTLVSet(TLVReader& TLVSet) +GenericDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, Locators)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, SubDescriptors)); return result; } +// +ASDCP::Result_t +GenericDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, Locators)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, SubDescriptors)); + return result; +} + // void -ASDCP::MXF::GenericDescriptor::Dump(FILE* stream) +GenericDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -712,9 +881,9 @@ ASDCP::MXF::GenericDescriptor::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %s:\n", "Locators"); + fprintf(stream, " %22s:\n", "Locators"); Locators.Dump(stream); - fprintf(stream, " %s:\n", "SubDescriptors"); + fprintf(stream, " %22s:\n", "SubDescriptors"); SubDescriptors.Dump(stream); } @@ -724,8 +893,9 @@ ASDCP::MXF::GenericDescriptor::Dump(FILE* stream) // ASDCP::Result_t -ASDCP::MXF::FileDescriptor::InitFromTLVSet(TLVReader& TLVSet) +FileDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(FileDescriptor, LinkedTrackID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate)); @@ -735,9 +905,23 @@ ASDCP::MXF::FileDescriptor::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +FileDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(FileDescriptor, LinkedTrackID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, SampleRate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(FileDescriptor, ContainerDuration)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, EssenceContainer)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, Codec)); + return result; +} + // void -ASDCP::MXF::FileDescriptor::Dump(FILE* stream) +FileDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -747,34 +931,28 @@ ASDCP::MXF::FileDescriptor::Dump(FILE* stream) GenericDescriptor::Dump(stream); fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID); - fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration, identbuf)); - fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "Codec", Codec.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "Codec", Codec.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_FileDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_FileDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_FileDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_FileDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -782,23 +960,37 @@ ASDCP::MXF::FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) +GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = FileDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, Locked)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioRefLevel)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ElectroSpatialFormulation)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ChannelCount)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, QuantizationBits)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, DialNorm)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCompression)); + return result; +} + +// +ASDCP::Result_t +GenericSoundEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = FileDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, Locked)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioRefLevel)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, ChannelCount)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, QuantizationBits)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, DialNorm)); return result; } // void -ASDCP::MXF::GenericSoundEssenceDescriptor::Dump(FILE* stream) +GenericSoundEssenceDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -807,38 +999,30 @@ ASDCP::MXF::GenericSoundEssenceDescriptor::Dump(FILE* stream) stream = stderr; FileDescriptor::Dump(stream); - fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %d\n", "Locked", Locked); fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel); - fprintf(stream, " %22s = %d\n", "ElectroSpatialFormulation", ElectroSpatialFormulation); fprintf(stream, " %22s = %d\n", "ChannelCount", ChannelCount); fprintf(stream, " %22s = %d\n", "QuantizationBits", QuantizationBits); fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm); - fprintf(stream, " %22s = %s\n", "SoundEssenceCompression", SoundEssenceCompression.ToString(identbuf)); } // ASDCP::Result_t -ASDCP::MXF::GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_GenericSoundEssenceDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_GenericSoundEssenceDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_GenericSoundEssenceDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_GenericSoundEssenceDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -846,18 +1030,33 @@ ASDCP::MXF::GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buf // ASDCP::Result_t -ASDCP::MXF::WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet) +WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericSoundEssenceDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(WaveAudioDescriptor, BlockAlign)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(WaveAudioDescriptor, SequenceOffset)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(WaveAudioDescriptor, ChannelAssignment)); + return result; +} + +// +ASDCP::Result_t +WaveAudioDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericSoundEssenceDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(WaveAudioDescriptor, BlockAlign)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(WaveAudioDescriptor, SequenceOffset)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(WaveAudioDescriptor, AvgBps)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(WaveAudioDescriptor, ChannelAssignment)); return result; } // void -ASDCP::MXF::WaveAudioDescriptor::Dump(FILE* stream) +WaveAudioDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -869,30 +1068,25 @@ ASDCP::MXF::WaveAudioDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %d\n", "BlockAlign", BlockAlign); fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset); fprintf(stream, " %22s = %d\n", "AvgBps", AvgBps); + fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_WaveAudioDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_WaveAudioDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_WaveAudioDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_WaveAudioDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -900,23 +1094,35 @@ ASDCP::MXF::WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) +GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = FileDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, FrameLayout)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredWidth)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredHeight)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, DisplayWidth)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, DisplayHeight)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, Gamma)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding)); return result; } +// +ASDCP::Result_t +GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = FileDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, FrameLayout)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredWidth)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredHeight)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding)); + return result; +} + // void -ASDCP::MXF::GenericPictureEssenceDescriptor::Dump(FILE* stream) +GenericPictureEssenceDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -928,35 +1134,26 @@ ASDCP::MXF::GenericPictureEssenceDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout); fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth); fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight); - fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth); - fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight); - fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "Gamma", Gamma.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_GenericPictureEssenceDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_GenericPictureEssenceDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_GenericPictureEssenceDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_GenericPictureEssenceDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -964,18 +1161,29 @@ ASDCP::MXF::GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& B // ASDCP::Result_t -ASDCP::MXF::RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) +RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(RGBAEssenceDescriptor, ComponentMaxRef)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(RGBAEssenceDescriptor, ComponentMinRef)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(RGBAEssenceDescriptor, PixelLayout)); + return result; +} + +// +ASDCP::Result_t +RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, ComponentMaxRef)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, ComponentMinRef)); return result; } // void -ASDCP::MXF::RGBAEssenceDescriptor::Dump(FILE* stream) +RGBAEssenceDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -986,31 +1194,24 @@ ASDCP::MXF::RGBAEssenceDescriptor::Dump(FILE* stream) GenericPictureEssenceDescriptor::Dump(stream); fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef); fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef); - fprintf(stream, " %22s = %s\n", "PixelLayout", PixelLayout.ToString(identbuf)); } // ASDCP::Result_t -ASDCP::MXF::RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_RGBAEssenceDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_RGBAEssenceDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_RGBAEssenceDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_RGBAEssenceDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -1018,8 +1219,9 @@ ASDCP::MXF::RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) +JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Rsize)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Xsize)); @@ -1037,9 +1239,31 @@ ASDCP::MXF::JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Rsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Xsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Ysize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XOsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YOsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault)); + return result; +} + // void -ASDCP::MXF::JPEG2000PictureSubDescriptor::Dump(FILE* stream) +JPEG2000PictureSubDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -1058,33 +1282,27 @@ ASDCP::MXF::JPEG2000PictureSubDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %d\n", "XTOsize", XTOsize); fprintf(stream, " %22s = %d\n", "YTOsize", YTOsize); fprintf(stream, " %22s = %d\n", "Csize", Csize); - fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_JPEG2000PictureSubDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_JPEG2000PictureSubDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_JPEG2000PictureSubDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_JPEG2000PictureSubDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -1092,23 +1310,33 @@ ASDCP::MXF::JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buff // ASDCP::Result_t -ASDCP::MXF::CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) +CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, VerticalSubsampling)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(CDCIEssenceDescriptor, ColorSiting)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(CDCIEssenceDescriptor, ReversedByteOrder)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, BlackRefLevel)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, WhiteReflevel)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ColorRange)); + return result; +} + +// +ASDCP::Result_t +CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, VerticalSubsampling)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ColorSiting)); return result; } // void -ASDCP::MXF::CDCIEssenceDescriptor::Dump(FILE* stream) +CDCIEssenceDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -1121,34 +1349,24 @@ ASDCP::MXF::CDCIEssenceDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling); fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling); fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting); - fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder); - fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel); - fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel); - fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange); } // ASDCP::Result_t -ASDCP::MXF::CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_CDCIEssenceDescriptor].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_CDCIEssenceDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_CDCIEssenceDescriptor].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_CDCIEssenceDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -1156,8 +1374,9 @@ ASDCP::MXF::CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet) +MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, CodedContentType)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, LowDelay)); @@ -1166,9 +1385,22 @@ ASDCP::MXF::MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, CodedContentType)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, LowDelay)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, BitRate)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, ProfileAndLevel)); + return result; +} + // void -ASDCP::MXF::MPEG2VideoDescriptor::Dump(FILE* stream) +MPEG2VideoDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -1185,26 +1417,87 @@ ASDCP::MXF::MPEG2VideoDescriptor::Dump(FILE* stream) // ASDCP::Result_t -ASDCP::MXF::MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_MPEG2VideoDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); +} - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_MPEG2VideoDescriptor].ul); +// +ASDCP::Result_t +MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_MPEG2VideoDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); +} - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } +//------------------------------------------------------------------------------------------ +// DMSegment +// +ASDCP::Result_t +DMSegment::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, EventStartPosition)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, Duration)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, EventComment)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DMFramework)); return result; } // ASDCP::Result_t -ASDCP::MXF::MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +DMSegment::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DataDefinition)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, EventStartPosition)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, Duration)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, EventComment)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DMFramework)); + return result; +} + +// +void +DMSegment::Dump(FILE* stream) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_MPEG2VideoDescriptor].ul, 0); + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); + fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition, identbuf)); + fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf)); + fprintf(stream, " %22s = %s\n", "EventComment", EventComment.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "DMFramework", DMFramework.EncodeString(identbuf, IdentBufferLen)); +} + +// +ASDCP::Result_t +DMSegment::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_DMSegment)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +DMSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_DMSegment)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -1212,16 +1505,27 @@ ASDCP::MXF::MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::CryptographicFramework::InitFromTLVSet(TLVReader& TLVSet) +CryptographicFramework::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicFramework, ContextSR)); return result; } +// +ASDCP::Result_t +CryptographicFramework::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicFramework, ContextSR)); + return result; +} + // void -ASDCP::MXF::CryptographicFramework::Dump(FILE* stream) +CryptographicFramework::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -1230,31 +1534,25 @@ ASDCP::MXF::CryptographicFramework::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %22s = %s\n", "ContextSR", ContextSR.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "ContextSR", ContextSR.EncodeString(identbuf, IdentBufferLen)); } // ASDCP::Result_t -ASDCP::MXF::CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l) +CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); - - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_CryptographicFramework].ul); - - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } - - return result; + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_CryptographicFramework)); + return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ASDCP::MXF::CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_CryptographicFramework].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_CryptographicFramework)); + return InterchangeObject::WriteToBuffer(Buffer); } //------------------------------------------------------------------------------------------ @@ -1262,8 +1560,9 @@ ASDCP::MXF::CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // ASDCP::Result_t -ASDCP::MXF::CryptographicContext::InitFromTLVSet(TLVReader& TLVSet) +CryptographicContext::InitFromTLVSet(TLVReader& TLVSet) { + assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, ContextID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, SourceEssenceContainer)); @@ -1273,9 +1572,202 @@ ASDCP::MXF::CryptographicContext::InitFromTLVSet(TLVReader& TLVSet) return result; } +// +ASDCP::Result_t +CryptographicContext::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, ContextID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, SourceEssenceContainer)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CipherAlgorithm)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, MICAlgorithm)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CryptographicKeyID)); + return result; +} + +// +void +CryptographicContext::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); + fprintf(stream, " %22s = %s\n", "ContextID", ContextID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "SourceEssenceContainer", SourceEssenceContainer.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "CipherAlgorithm", CipherAlgorithm.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "MICAlgorithm", MICAlgorithm.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "CryptographicKeyID", CryptographicKeyID.EncodeString(identbuf, IdentBufferLen)); +} + +// +ASDCP::Result_t +CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_CryptographicContext)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_CryptographicContext)); + return InterchangeObject::WriteToBuffer(Buffer); +} + +//------------------------------------------------------------------------------------------ +// GenericDataEssenceDescriptor + +// +ASDCP::Result_t +GenericDataEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = FileDescriptor::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding)); + return result; +} + +// +ASDCP::Result_t +GenericDataEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = FileDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding)); + return result; +} + +// +void +GenericDataEssenceDescriptor::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + FileDescriptor::Dump(stream); + fprintf(stream, " %22s = %s\n", "DataEssenceCoding", DataEssenceCoding.EncodeString(identbuf, IdentBufferLen)); +} + +// +ASDCP::Result_t +GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_GenericDataEssenceDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +GenericDataEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_GenericDataEssenceDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); +} + +//------------------------------------------------------------------------------------------ +// TimedTextDescriptor + +// +ASDCP::Result_t +TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, ResourceID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, UCSEncoding)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, NamespaceURI)); + return result; +} + +// +ASDCP::Result_t +TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, ResourceID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI)); + return result; +} + // void -ASDCP::MXF::CryptographicContext::Dump(FILE* stream) +TimedTextDescriptor::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + GenericDataEssenceDescriptor::Dump(stream); + fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "UCSEncoding", UCSEncoding.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "NamespaceURI", NamespaceURI.EncodeString(identbuf, IdentBufferLen)); +} + +// +ASDCP::Result_t +TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_TimedTextDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +TimedTextDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_TimedTextDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); +} + +//------------------------------------------------------------------------------------------ +// TimedTextResourceSubDescriptor + +// +ASDCP::Result_t +TimedTextResourceSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID)); + return result; +} + +// +ASDCP::Result_t +TimedTextResourceSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID)); + return result; +} + +// +void +TimedTextResourceSubDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -1284,37 +1776,136 @@ ASDCP::MXF::CryptographicContext::Dump(FILE* stream) stream = stderr; InterchangeObject::Dump(stream); - fprintf(stream, " %22s = %s\n", "ContextID", ContextID.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "SourceEssenceContainer", SourceEssenceContainer.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "CipherAlgorithm", CipherAlgorithm.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "MICAlgorithm", MICAlgorithm.ToString(identbuf)); - fprintf(stream, " %22s = %s\n", "CryptographicKeyID", CryptographicKeyID.ToString(identbuf)); + fprintf(stream, " %22s = %s\n", "AncillaryResourceID", AncillaryResourceID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "MIMEMediaType", MIMEMediaType.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %d\n", "EssenceStreamID", EssenceStreamID); } // ASDCP::Result_t -ASDCP::MXF::CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l) +TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { - ASDCP_TEST_NULL(p); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_TimedTextResourceSubDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); +} - Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_CryptographicContext].ul); +// +ASDCP::Result_t +TimedTextResourceSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_TimedTextResourceSubDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); +} - if ( ASDCP_SUCCESS(result) ) - { - TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup); - result = InitFromTLVSet(MemRDR); - } +//------------------------------------------------------------------------------------------ +// StereoscopicPictureSubDescriptor +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); return result; } // ASDCP::Result_t -ASDCP::MXF::CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + return result; +} + +// +void +StereoscopicPictureSubDescriptor::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); +} + +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_StereoscopicPictureSubDescriptor)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_StereoscopicPictureSubDescriptor)); + return InterchangeObject::WriteToBuffer(Buffer); +} + +//------------------------------------------------------------------------------------------ +// NetworkLocator + +// +ASDCP::Result_t +NetworkLocator::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(NetworkLocator, URLString)); + return result; +} + +// +ASDCP::Result_t +NetworkLocator::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(NetworkLocator, URLString)); + return result; +} + +// +void +NetworkLocator::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); + fprintf(stream, " %22s = %s\n", "URLString", URLString.EncodeString(identbuf, IdentBufferLen)); +} + +// +ASDCP::Result_t +NetworkLocator::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_NetworkLocator)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_CryptographicContext].ul, 0); + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_NetworkLocator)); + return InterchangeObject::WriteToBuffer(Buffer); } // -// end MXF.cpp +// end Metadata.cpp //