From: jhurst Date: Tue, 2 Jul 2013 05:51:18 +0000 (+0000) Subject: more optional stuff X-Git-Tag: rel_2_10_32~174 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=0cc43cc3765c003d60196ff45213c2835281a0c3;hp=f2ecb6822ff3db70b40adb19a37eab6456e28ed8;p=asdcplib.git more optional stuff --- diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index 956a867..b8400e1 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -290,8 +290,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor& EssenceDescrip PDesc.EditRate = EditRate; PDesc.SampleRate = SampleRate; - assert(EssenceDescriptor.ContainerDuration <= 0xFFFFFFFFL); - PDesc.ContainerDuration = (ui32_t) EssenceDescriptor.ContainerDuration; + assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL); + PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.cget()); PDesc.StoredWidth = EssenceDescriptor.StoredWidth; PDesc.StoredHeight = EssenceDescriptor.StoredHeight; PDesc.AspectRatio = EssenceDescriptor.AspectRatio; @@ -421,8 +421,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor& EssenceDescrip PDesc.EditRate = EditRate; PDesc.SampleRate = SampleRate; - assert(EssenceDescriptor.ContainerDuration <= 0xFFFFFFFFL); - PDesc.ContainerDuration = (ui32_t) EssenceDescriptor.ContainerDuration; + assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL); + PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.cget()); PDesc.StoredWidth = EssenceDescriptor.StoredWidth; PDesc.StoredHeight = EssenceDescriptor.StoredHeight; PDesc.AspectRatio = EssenceDescriptor.AspectRatio; diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index b10c8b5..d7cc935 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -62,7 +62,7 @@ MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& V VDesc.ColorSiting = VDescObj->ColorSiting; VDesc.CodedContentType = VDescObj->CodedContentType; - VDesc.LowDelay = VDescObj->LowDelay == 0 ? false : true; + VDesc.LowDelay = VDescObj->LowDelay.get() == 0 ? false : true; VDesc.BitRate = VDescObj->BitRate; VDesc.ProfileAndLevel = VDescObj->ProfileAndLevel; return RESULT_OK; diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index d683ed0..8cff9cf 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -54,7 +54,7 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD ADescObj->LinkedTrackID = ADesc.LinkedTrackID; ADescObj->ContainerDuration = ADesc.ContainerDuration; - ADescObj->ChannelAssignment.Reset(); + ADescObj->ChannelAssignment.get().Reset(); switch ( ADesc.ChannelFormat ) { @@ -100,7 +100,7 @@ ASDCP::MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor& ADesc.ChannelFormat = PCM::CF_NONE; - if ( ADescObj->ChannelAssignment.HasValue() ) + if ( ! ADescObj->ChannelAssignment.empty() ) { if ( ADescObj->ChannelAssignment == DefaultSMPTEDict().Type(MDD_DCAudioChannelCfg_1_5p1).ul ) ADesc.ChannelFormat = PCM::CF_CFG_1; diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index df342bf..8b05dc7 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -607,14 +607,14 @@ namespace ASDCP TrackSet MPTCTrack = CreateTimecodeTrack(m_HeaderPart, *m_MaterialPackage, tc_edit_rate, TCFrameRate, 0, m_Dict); - m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration)); - m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration)); + m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration.get())); + m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration.get())); TrackSet MPTrack = CreateTrackAndSequence(m_HeaderPart, *m_MaterialPackage, TrackName, clip_edit_rate, DataDefinition, 2, m_Dict); - m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration)); + m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration.get())); MPTrack.Clip = new SourceClip(m_Dict); m_HeaderPart.AddChildObject(MPTrack.Clip); @@ -622,7 +622,7 @@ namespace ASDCP MPTrack.Clip->DataDefinition = DataDefinition; MPTrack.Clip->SourcePackageID = SourcePackageUMID; MPTrack.Clip->SourceTrackID = 2; - m_DurationUpdateList.push_back(&(MPTrack.Clip->Duration)); + m_DurationUpdateList.push_back(&(MPTrack.Clip->Duration.get())); // @@ -640,13 +640,13 @@ namespace ASDCP CreateTimecodeTrack(m_HeaderPart, *m_FilePackage, tc_edit_rate, TCFrameRate, ui64_C(3600) * TCFrameRate, m_Dict); - m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration)); - m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration)); + m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration.get())); + m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration.get())); TrackSet FPTrack = CreateTrackAndSequence(m_HeaderPart, *m_FilePackage, TrackName, clip_edit_rate, DataDefinition, 2, m_Dict); - m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration)); + m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration.get())); // Consult ST 379:2004 Sec. 6.3, "Element to track relationship" to see where "12" comes from. FPTrack.Track->TrackNumber = KM_i32_BE(Kumu::cp2i((EssenceUL.Value() + 12))); @@ -659,7 +659,7 @@ namespace ASDCP // for now we do not allow setting this value, so all files will be 'original' FPTrack.Clip->SourceTrackID = 0; FPTrack.Clip->SourcePackageID = NilUMID; - m_DurationUpdateList.push_back(&(FPTrack.Clip->Duration)); + m_DurationUpdateList.push_back(&(FPTrack.Clip->Duration.get())); m_EssenceDescriptor->LinkedTrackID = FPTrack.Track->TrackID; } @@ -698,14 +698,14 @@ namespace ASDCP TrackSet MPTCTrack = CreateTimecodeTrack(m_HeaderPart, *m_MaterialPackage, tc_edit_rate, tc_frame_rate, 0, m_Dict); - m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration)); - m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration)); + m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration.get())); + m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration.get())); TrackSet MPTrack = CreateTrackAndSequence(m_HeaderPart, *m_MaterialPackage, TrackName, clip_edit_rate, DataDefinition, 2, m_Dict); - m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration)); + m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration.get())); MPTrack.Clip = new DMSegment(m_Dict); m_HeaderPart.AddChildObject(MPTrack.Clip); @@ -731,14 +731,14 @@ namespace ASDCP CreateTimecodeTrack(m_HeaderPart, *m_FilePackage, clip_edit_rate, tc_frame_rate, ui64_C(3600) * tc_frame_rate, m_Dict); - m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration)); - m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration)); + m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration.get())); + m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration.get())); TrackSet FPTrack = CreateTrackAndSequence(m_HeaderPart, *m_FilePackage, TrackName, clip_edit_rate, DataDefinition, 2, m_Dict); - m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration)); + m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration.get())); FPTrack.Clip = new DMSegment(m_Dict); m_HeaderPart.AddChildObject(FPTrack.Clip); diff --git a/src/MDD.cpp b/src/MDD.cpp index eba638f..069d07e 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -559,7 +559,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { {0x32, 0x0f}, true, "GenericPictureEssenceDescriptor_AlphaTransparency" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 174 0x04, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00 }, - {0x32, 0x10}, true, "GenericPictureEssenceDescriptor_Gamma" }, + {0x32, 0x10}, true, "GenericPictureEssenceDescriptor_TransferCharacteristic" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 175 0x04, 0x18, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x11}, true, "GenericPictureEssenceDescriptor_ImageAlignmentOffset" }, @@ -661,7 +661,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { {0x3d, 0x0c}, true, "GenericSoundEssenceDescriptor_DialNorm" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 208 0x04, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 }, - {0x3d, 0x06}, false, "GenericSoundEssenceDescriptor_SoundEssenceCompression" }, + {0x3d, 0x06}, false, "GenericSoundEssenceDescriptor_SoundEssenceCoding" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 209 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x43, 0x00 }, {0}, false, "GenericDataEssenceDescriptor" }, @@ -1085,6 +1085,20 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 349 0x03, 0x02, 0x03, 0x20, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "IMFAudioGroup_Dcm" }, + + + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0c, // 350 + 0x06, 0x01, 0x01, 0x04, 0x02, 0x0f, 0x00, 0x00 }, + {0}, false, "MaterialPackage_PackageMarker" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 351 + 0x04, 0x01, 0x02, 0x01, 0x01, 0x03, 0x01, 0x00 }, + {0}, false, "GenericPictureEssenceDescriptor_CodingEquations" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 352 + 0x04, 0x01, 0x02, 0x01, 0x01, 0x06, 0x01, 0x00 }, + {0}, false, "GenericPictureEssenceDescriptor_ColorPrimaries" }, + + + { {0}, {0}, false, 0 } }; diff --git a/src/MDD.h b/src/MDD.h index 4dcb228..81a1411 100755 --- a/src/MDD.h +++ b/src/MDD.h @@ -209,7 +209,7 @@ namespace ASDCP { MDD_GenericPictureEssenceDescriptor_ActiveFormatDescriptor, // 171 MDD_GenericPictureEssenceDescriptor_VideoLineMap, // 172 MDD_GenericPictureEssenceDescriptor_AlphaTransparency, // 173 - MDD_GenericPictureEssenceDescriptor_Gamma, // 174 + MDD_GenericPictureEssenceDescriptor_TransferCharacteristic, // 174 MDD_GenericPictureEssenceDescriptor_ImageAlignmentOffset, // 175 MDD_GenericPictureEssenceDescriptor_ImageStartOffset, // 176 MDD_GenericPictureEssenceDescriptor_ImageEndOffset, // 177 @@ -243,7 +243,7 @@ namespace ASDCP { MDD_GenericSoundEssenceDescriptor_ChannelCount, // 205 MDD_GenericSoundEssenceDescriptor_QuantizationBits, // 206 MDD_GenericSoundEssenceDescriptor_DialNorm, // 207 - MDD_GenericSoundEssenceDescriptor_SoundEssenceCompression, // 208 + MDD_GenericSoundEssenceDescriptor_SoundEssenceCoding, // 208 MDD_GenericDataEssenceDescriptor, // 209 MDD_GenericDataEssenceDescriptor_DataEssenceCoding, // 210 MDD_MultipleDescriptor, // 211 @@ -385,6 +385,9 @@ namespace ASDCP { MDD_IMFAudioGroup_MPg, // 347 MDD_IMFAudioGroup_DVS, // 348 MDD_IMFAudioGroup_Dcm, // 349 + MDD_MaterialPackage_PackageMarker, // 350 + MDD_GenericPictureEssenceDescriptor_CodingEquations, // 351 + MDD_GenericPictureEssenceDescriptor_ColorPrimaries, // 352 MDD_Max }; // enum MDD_t diff --git a/src/MXF.h b/src/MXF.h index cf28379..dc06c7f 100755 --- a/src/MXF.h +++ b/src/MXF.h @@ -229,12 +229,15 @@ namespace ASDCP optional_property() : m_has_value(false) {} optional_property(const PropertyType& value) : m_property(value), m_has_value(false) {} const optional_property& operator=(const PropertyType& rhs) { this->m_property = rhs; this->m_has_value = true; return *this; } + bool operator==(const PropertyType& rhs) const { return this->m_property == rhs; } + bool operator==(const optional_property& rhs) const { return this->m_property == rhs.m_property; } operator PropertyType&() { return this->m_property; } void set(const PropertyType& rhs) { this->m_property = rhs; this->m_has_value = true; } void set_has_value(bool has_value = true) { this->m_has_value = has_value; } void reset(const PropertyType& rhs) { this->m_has_value = false; } bool empty() const { return ! m_has_value; } PropertyType& get() { return m_property; } + const PropertyType& cget() const { return m_property; } }; // base class of all metadata objects diff --git a/src/MXFTypes.cpp b/src/MXFTypes.cpp index 098b728..58c6fb7 100755 --- a/src/MXFTypes.cpp +++ b/src/MXFTypes.cpp @@ -227,6 +227,20 @@ ASDCP::UMID::EncodeString(char* str_buf, ui32_t buf_len) const //------------------------------------------------------------------------------------------ // +// +ASDCP::MXF::UTF16String::UTF16String(const char* sz) +{ + if ( sz != 0 && *sz != 0 ) + { + this->assign(sz); + } +} + +ASDCP::MXF::UTF16String::UTF16String(const std::string& str) +{ + this->assign(str); +} + // const ASDCP::MXF::UTF16String& ASDCP::MXF::UTF16String::operator=(const char* sz) @@ -332,6 +346,21 @@ ASDCP::MXF::UTF16String::Archive(Kumu::MemIOWriter* Writer) const //------------------------------------------------------------------------------------------ // +// +ASDCP::MXF::ISO8String::ISO8String(const char* sz) +{ + if ( sz != 0 && *sz != 0 ) + { + this->assign(sz); + } +} + +ASDCP::MXF::ISO8String::ISO8String(const std::string& str) +{ + this->assign(str); +} + + // const ASDCP::MXF::ISO8String& ASDCP::MXF::ISO8String::operator=(const char* sz) diff --git a/src/MXFTypes.h b/src/MXFTypes.h index f76fbed..e98a2e9 100755 --- a/src/MXFTypes.h +++ b/src/MXFTypes.h @@ -243,6 +243,8 @@ namespace ASDCP { public: ISO8String() {} + ISO8String(const char*); + ISO8String(const std::string&); ~ISO8String() {} const ISO8String& operator=(const char*); @@ -260,6 +262,8 @@ namespace ASDCP { public: UTF16String() {} + UTF16String(const char*); + UTF16String(const std::string&); ~UTF16String() {} const UTF16String& operator=(const char*); diff --git a/src/Makefile.am b/src/Makefile.am index 98b0edd..fde8a25 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -93,22 +93,27 @@ libkumu_la_LDFLAGS = -release @VERSION@ nodist_libasdcp_la_SOURCES = Metadata_h.tt2 Metadata_cpp.tt2 \ mxfgen.pl MXF_def.pl ullist.pl ULList.xml dict.xml DMS_Crypto.xml # sources for asdcp library -libasdcp_la_SOURCES = MPEG2_Parser.cpp MPEG.cpp JP2K_Codestream_Parser.cpp \ +libasdcp_la_SOURCES = \ + Dict.cpp \ + MDD.cpp \ + KLV.cpp \ + MXFTypes.cpp \ + MXF.cpp \ + Metadata.cpp \ + Index.cpp \ + MPEG2_Parser.cpp MPEG.cpp JP2K_Codestream_Parser.cpp \ JP2K_Sequence_Parser.cpp JP2K.cpp PCM_Parser.cpp Wav.cpp \ - TimedText_Parser.cpp KLV.cpp Dict.cpp MXFTypes.cpp MXF.cpp \ - Index.cpp Metadata.cpp AS_DCP.cpp AS_DCP_MXF.cpp AS_DCP_AES.cpp \ + TimedText_Parser.cpp \ + AS_DCP.cpp AS_DCP_MXF.cpp AS_DCP_AES.cpp \ h__Reader.cpp h__Writer.cpp AS_DCP_MPEG2.cpp AS_DCP_JP2K.cpp \ AS_DCP_PCM.cpp AS_DCP_TimedText.cpp PCMParserList.cpp \ - Wav.h WavFileWriter.h MXF.h Metadata.h \ - JP2K.h AS_DCP.h AS_DCP_internal.h KLV.h MPEG.h MXFTypes.h MDD.h \ - PCMParserList.h S12MTimecode.h MDD.cpp \ - AS_DCP_ATMOS.cpp AS_DCP_DCData.cpp AS_DCP_DCData_internal.h \ + AS_DCP_ATMOS.cpp AS_DCP_DCData.cpp \ DCData_ByteStream_Parser.cpp DCData_Sequence_Parser.cpp \ - AtmosSyncChannel_Generator.cpp AtmosSyncChannel_Generator.h \ - AtmosSyncChannel_Mixer.cpp AtmosSyncChannel_Mixer.h \ - PCMDataProviders.cpp PCMDataProviders.h \ - SyncEncoder.c SyncEncoder.h SyncCommon.h CRC16.c CRC16.h \ - UUIDInformation.c UUIDInformation.h + AtmosSyncChannel_Generator.cpp \ + AtmosSyncChannel_Mixer.cpp \ + PCMDataProviders.cpp \ + SyncEncoder.c CRC16.c CRC16.h \ + UUIDInformation.c if DEV_HEADERS nodist_libasdcp_la_SOURCES += TimedText_Transform.h TimedText_Transform.cpp diff --git a/src/Metadata.cpp b/src/Metadata.cpp index bab0003..04d8392 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -156,7 +156,10 @@ Identification::InitFromTLVSet(TLVReader& TLVSet) 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.ReadObject(OBJ_READ_ARGS(Identification, ToolkitVersion)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, Platform)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Identification, Platform)); + Platform.set_has_value( result == RESULT_OK ); + } return result; } @@ -174,7 +177,7 @@ Identification::WriteToTLVSet(TLVWriter& TLVSet) 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)); + if ( ASDCP_SUCCESS(result) && ! Platform.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Identification, Platform)); return result; } @@ -213,7 +216,9 @@ Identification::Dump(FILE* stream) 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)); + if ( ! Platform.empty() ) { + fprintf(stream, " %22s = %s\n", "Platform", Platform.get().EncodeString(identbuf, IdentBufferLen)); + } } // @@ -316,7 +321,7 @@ ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0), BodySID(0) +EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_EssenceContainerData); @@ -337,7 +342,10 @@ 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_OPT(EssenceContainerData, IndexSID)); + IndexSID.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID)); return result; } @@ -349,7 +357,7 @@ EssenceContainerData::WriteToTLVSet(TLVWriter& TLVSet) 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) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(EssenceContainerData, IndexSID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID)); return result; } @@ -376,7 +384,9 @@ EssenceContainerData::Dump(FILE* stream) InterchangeObject::Dump(stream); fprintf(stream, " %22s = %s\n", "LinkedPackageUID", LinkedPackageUID.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID); + if ( ! IndexSID.empty() ) { + fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID.get()); + } fprintf(stream, " %22s = %d\n", "BodySID", BodySID); } @@ -413,7 +423,10 @@ 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)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPackage, Name)); + Name.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageCreationDate)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageModifiedDate)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Tracks)); @@ -427,7 +440,7 @@ 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) && ! Name.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(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)); @@ -458,7 +471,9 @@ GenericPackage::Dump(FILE* stream) InterchangeObject::Dump(stream); fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "Name", Name.EncodeString(identbuf, IdentBufferLen)); + if ( ! Name.empty() ) { + fprintf(stream, " %22s = %s\n", "Name", Name.get().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"); @@ -491,6 +506,10 @@ MaterialPackage::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = GenericPackage::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MaterialPackage, PackageMarker)); + PackageMarker.set_has_value( result == RESULT_OK ); + } return result; } @@ -500,6 +519,7 @@ MaterialPackage::WriteToTLVSet(TLVWriter& TLVSet) { assert(m_Dict); Result_t result = GenericPackage::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) && ! PackageMarker.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MaterialPackage, PackageMarker)); return result; } @@ -508,6 +528,7 @@ void MaterialPackage::Copy(const MaterialPackage& rhs) { GenericPackage::Copy(rhs); + PackageMarker = rhs.PackageMarker; } // @@ -521,6 +542,9 @@ MaterialPackage::Dump(FILE* stream) stream = stderr; GenericPackage::Dump(stream); + if ( ! PackageMarker.empty() ) { + fprintf(stream, " %22s = %s\n", "PackageMarker", PackageMarker.get().EncodeString(identbuf, IdentBufferLen)); + } } // @@ -632,8 +656,14 @@ GenericTrack::InitFromTLVSet(TLVReader& TLVSet) 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)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericTrack, TrackName)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericTrack, Sequence)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, TrackName)); + TrackName.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, Sequence)); + Sequence.set_has_value( result == RESULT_OK ); + } return result; } @@ -645,8 +675,8 @@ GenericTrack::WriteToTLVSet(TLVWriter& TLVSet) 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)); + if ( ASDCP_SUCCESS(result) && ! TrackName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, TrackName)); + if ( ASDCP_SUCCESS(result) && ! Sequence.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, Sequence)); return result; } @@ -674,8 +704,12 @@ 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.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "Sequence", Sequence.EncodeString(identbuf, IdentBufferLen)); + if ( ! TrackName.empty() ) { + fprintf(stream, " %22s = %s\n", "TrackName", TrackName.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! Sequence.empty() ) { + fprintf(stream, " %22s = %s\n", "Sequence", Sequence.get().EncodeString(identbuf, IdentBufferLen)); + } } @@ -848,7 +882,10 @@ 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)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration)); + Duration.set_has_value( result == RESULT_OK ); + } return result; } @@ -859,7 +896,7 @@ 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)); + if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(StructuralComponent, Duration)); return result; } @@ -884,7 +921,9 @@ StructuralComponent::Dump(FILE* stream) InterchangeObject::Dump(stream); fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf)); + if ( ! Duration.empty() ) { + fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration.get(), identbuf)); + } } @@ -1196,7 +1235,7 @@ GenericDescriptor::Dump(FILE* stream) // -FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0), ContainerDuration(0) +FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_FileDescriptor); @@ -1216,11 +1255,20 @@ 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.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID)); + LinkedTrackID.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(FileDescriptor, ContainerDuration)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(FileDescriptor, ContainerDuration)); + ContainerDuration.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, Codec)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(FileDescriptor, Codec)); + Codec.set_has_value( result == RESULT_OK ); + } return result; } @@ -1230,11 +1278,11 @@ 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) && ! LinkedTrackID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(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) && ! ContainerDuration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(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)); + if ( ASDCP_SUCCESS(result) && ! Codec.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(FileDescriptor, Codec)); return result; } @@ -1261,11 +1309,17 @@ FileDescriptor::Dump(FILE* stream) stream = stderr; GenericDescriptor::Dump(stream); - fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID); + if ( ! LinkedTrackID.empty() ) { + fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID.get()); + } fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration, identbuf)); + if ( ! ContainerDuration.empty() ) { + fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration.get(), identbuf)); + } fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "Codec", Codec.EncodeString(identbuf, IdentBufferLen)); + if ( ! Codec.empty() ) { + fprintf(stream, " %22s = %s\n", "Codec", Codec.get().EncodeString(identbuf, IdentBufferLen)); + } } // @@ -1309,10 +1363,21 @@ GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) 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_OPT(GenericSoundEssenceDescriptor, AudioRefLevel)); + AudioRefLevel.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation)); + ElectroSpatialFormulation.set_has_value( result == RESULT_OK ); + } 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.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm)); + DialNorm.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding)); return result; } @@ -1324,10 +1389,12 @@ GenericSoundEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) 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) && ! AudioRefLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel)); + if ( ASDCP_SUCCESS(result) && ! ElectroSpatialFormulation.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation)); 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)); + if ( ASDCP_SUCCESS(result) && ! DialNorm.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding)); return result; } @@ -1339,9 +1406,11 @@ GenericSoundEssenceDescriptor::Copy(const GenericSoundEssenceDescriptor& rhs) AudioSamplingRate = rhs.AudioSamplingRate; Locked = rhs.Locked; AudioRefLevel = rhs.AudioRefLevel; + ElectroSpatialFormulation = rhs.ElectroSpatialFormulation; ChannelCount = rhs.ChannelCount; QuantizationBits = rhs.QuantizationBits; DialNorm = rhs.DialNorm; + SoundEssenceCoding = rhs.SoundEssenceCoding; } // @@ -1357,10 +1426,18 @@ GenericSoundEssenceDescriptor::Dump(FILE* stream) FileDescriptor::Dump(stream); fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %d\n", "Locked", Locked); - fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel); + if ( ! AudioRefLevel.empty() ) { + fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel.get()); + } + if ( ! ElectroSpatialFormulation.empty() ) { + fprintf(stream, " %22s = %d\n", "ElectroSpatialFormulation", ElectroSpatialFormulation.get()); + } fprintf(stream, " %22s = %d\n", "ChannelCount", ChannelCount); fprintf(stream, " %22s = %d\n", "QuantizationBits", QuantizationBits); - fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm); + if ( ! DialNorm.empty() ) { + fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm.get()); + } + fprintf(stream, " %22s = %s\n", "SoundEssenceCoding", SoundEssenceCoding.EncodeString(identbuf, IdentBufferLen)); } // @@ -1382,7 +1459,7 @@ GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0), AvgBps(0) +WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_WaveAudioDescriptor); @@ -1403,9 +1480,15 @@ 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.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, SequenceOffset)); + SequenceOffset.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(WaveAudioDescriptor, ChannelAssignment)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment)); + ChannelAssignment.set_has_value( result == RESULT_OK ); + } return result; } @@ -1416,9 +1499,9 @@ 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) && ! SequenceOffset.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(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)); + if ( ASDCP_SUCCESS(result) && ! ChannelAssignment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment)); return result; } @@ -1445,9 +1528,13 @@ WaveAudioDescriptor::Dump(FILE* stream) GenericSoundEssenceDescriptor::Dump(stream); fprintf(stream, " %22s = %d\n", "BlockAlign", BlockAlign); - fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset); + if ( ! SequenceOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset.get()); + } fprintf(stream, " %22s = %d\n", "AvgBps", AvgBps); - fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.EncodeString(identbuf, IdentBufferLen)); + if ( ! ChannelAssignment.empty() ) { + fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.get().EncodeString(identbuf, IdentBufferLen)); + } } // @@ -1469,7 +1556,7 @@ WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), FrameLayout(0), StoredWidth(0), StoredHeight(0), DisplayWidth(0) +GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), SignalStandard(0), SampledWidth(0), SampledXOffset(0), DisplayHeight(0), DisplayXOffset(0), DisplayF2Offset(0), AlphaTransparency(0), ImageAlignmentOffset(0), ImageEndOffset(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor); @@ -1489,27 +1576,91 @@ GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = FileDescriptor::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard)); + SignalStandard.set_has_value( result == RESULT_OK ); + } 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.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding)); if ( ASDCP_SUCCESS(result) ) { - result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth)); - DisplayWidth.set_has_value( result == RESULT_OK ); + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset)); + StoredF2Offset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth)); + SampledWidth.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight)); + SampledHeight.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset)); + SampledXOffset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset)); + SampledYOffset.set_has_value( result == RESULT_OK ); } if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight)); DisplayHeight.set_has_value( result == RESULT_OK ); } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth)); + DisplayWidth.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset)); + DisplayXOffset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset)); + DisplayYOffset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset)); + DisplayF2Offset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor)); + ActiveFormatDescriptor.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency)); + AlphaTransparency.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) { - result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, Gamma)); - Gamma.set_has_value( result == RESULT_OK ); + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic)); + TransferCharacteristic.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset)); + ImageAlignmentOffset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset)); + ImageStartOffset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset)); + ImageEndOffset.set_has_value( result == RESULT_OK ); } if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance)); FieldDominance.set_has_value( result == RESULT_OK ); } + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations)); + CodingEquations.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries)); + ColorPrimaries.set_has_value( result == RESULT_OK ); + } return result; } @@ -1519,15 +1670,31 @@ GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) { assert(m_Dict); Result_t result = FileDescriptor::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) && ! SignalStandard.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard)); 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)); - if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth)); + if ( ASDCP_SUCCESS(result) && ! StoredF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset)); + if ( ASDCP_SUCCESS(result) && ! SampledWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth)); + if ( ASDCP_SUCCESS(result) && ! SampledHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight)); + if ( ASDCP_SUCCESS(result) && ! SampledXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset)); + if ( ASDCP_SUCCESS(result) && ! SampledYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset)); if ( ASDCP_SUCCESS(result) && ! DisplayHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight)); - if ( ASDCP_SUCCESS(result) && ! Gamma.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, Gamma)); + if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth)); + if ( ASDCP_SUCCESS(result) && ! DisplayXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset)); + if ( ASDCP_SUCCESS(result) && ! DisplayYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset)); + if ( ASDCP_SUCCESS(result) && ! DisplayF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio)); + if ( ASDCP_SUCCESS(result) && ! ActiveFormatDescriptor.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor)); + if ( ASDCP_SUCCESS(result) && ! AlphaTransparency.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency)); + if ( ASDCP_SUCCESS(result) && ! TransferCharacteristic.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic)); + if ( ASDCP_SUCCESS(result) && ! ImageAlignmentOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset)); + if ( ASDCP_SUCCESS(result) && ! ImageStartOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset)); + if ( ASDCP_SUCCESS(result) && ! ImageEndOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset)); if ( ASDCP_SUCCESS(result) && ! FieldDominance.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding)); + if ( ASDCP_SUCCESS(result) && ! CodingEquations.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations)); + if ( ASDCP_SUCCESS(result) && ! ColorPrimaries.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries)); return result; } @@ -1536,15 +1703,31 @@ void GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs) { FileDescriptor::Copy(rhs); + SignalStandard = rhs.SignalStandard; FrameLayout = rhs.FrameLayout; StoredWidth = rhs.StoredWidth; StoredHeight = rhs.StoredHeight; - AspectRatio = rhs.AspectRatio; - PictureEssenceCoding = rhs.PictureEssenceCoding; - DisplayWidth = rhs.DisplayWidth; + StoredF2Offset = rhs.StoredF2Offset; + SampledWidth = rhs.SampledWidth; + SampledHeight = rhs.SampledHeight; + SampledXOffset = rhs.SampledXOffset; + SampledYOffset = rhs.SampledYOffset; DisplayHeight = rhs.DisplayHeight; - Gamma = rhs.Gamma; + DisplayWidth = rhs.DisplayWidth; + DisplayXOffset = rhs.DisplayXOffset; + DisplayYOffset = rhs.DisplayYOffset; + DisplayF2Offset = rhs.DisplayF2Offset; + AspectRatio = rhs.AspectRatio; + ActiveFormatDescriptor = rhs.ActiveFormatDescriptor; + AlphaTransparency = rhs.AlphaTransparency; + TransferCharacteristic = rhs.TransferCharacteristic; + ImageAlignmentOffset = rhs.ImageAlignmentOffset; + ImageStartOffset = rhs.ImageStartOffset; + ImageEndOffset = rhs.ImageEndOffset; FieldDominance = rhs.FieldDominance; + PictureEssenceCoding = rhs.PictureEssenceCoding; + CodingEquations = rhs.CodingEquations; + ColorPrimaries = rhs.ColorPrimaries; } // @@ -1558,23 +1741,71 @@ GenericPictureEssenceDescriptor::Dump(FILE* stream) stream = stderr; FileDescriptor::Dump(stream); + if ( ! SignalStandard.empty() ) { + fprintf(stream, " %22s = %d\n", "SignalStandard", SignalStandard.get()); + } fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout); fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth); fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight); - fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen)); - if ( ! DisplayWidth.empty() ) { - fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get()); + if ( ! StoredF2Offset.empty() ) { + fprintf(stream, " %22s = %d\n", "StoredF2Offset", StoredF2Offset.get()); + } + if ( ! SampledWidth.empty() ) { + fprintf(stream, " %22s = %d\n", "SampledWidth", SampledWidth.get()); + } + if ( ! SampledHeight.empty() ) { + fprintf(stream, " %22s = %d\n", "SampledHeight", SampledHeight.get()); + } + if ( ! SampledXOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "SampledXOffset", SampledXOffset.get()); + } + if ( ! SampledYOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "SampledYOffset", SampledYOffset.get()); } if ( ! DisplayHeight.empty() ) { fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight.get()); } - if ( ! Gamma.empty() ) { - fprintf(stream, " %22s = %s\n", "Gamma", Gamma.get().EncodeString(identbuf, IdentBufferLen)); + if ( ! DisplayWidth.empty() ) { + fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get()); + } + if ( ! DisplayXOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "DisplayXOffset", DisplayXOffset.get()); + } + if ( ! DisplayYOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "DisplayYOffset", DisplayYOffset.get()); + } + if ( ! DisplayF2Offset.empty() ) { + fprintf(stream, " %22s = %d\n", "DisplayF2Offset", DisplayF2Offset.get()); + } + fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen)); + if ( ! ActiveFormatDescriptor.empty() ) { + fprintf(stream, " %22s = %d\n", "ActiveFormatDescriptor", ActiveFormatDescriptor.get()); + } + if ( ! AlphaTransparency.empty() ) { + fprintf(stream, " %22s = %d\n", "AlphaTransparency", AlphaTransparency.get()); + } + if ( ! TransferCharacteristic.empty() ) { + fprintf(stream, " %22s = %s\n", "TransferCharacteristic", TransferCharacteristic.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! ImageAlignmentOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "ImageAlignmentOffset", ImageAlignmentOffset.get()); + } + if ( ! ImageStartOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "ImageStartOffset", ImageStartOffset.get()); + } + if ( ! ImageEndOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "ImageEndOffset", ImageEndOffset.get()); } if ( ! FieldDominance.empty() ) { fprintf(stream, " %22s = %d\n", "FieldDominance", FieldDominance.get()); } + fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen)); + if ( ! CodingEquations.empty() ) { + fprintf(stream, " %22s = %s\n", "CodingEquations", CodingEquations.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! ColorPrimaries.empty() ) { + fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen)); + } } // @@ -1596,7 +1827,7 @@ GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), ComponentMinRef(0) +RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), AlphaMinRef(0), ScanningDirection(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor); @@ -1616,8 +1847,26 @@ 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.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef)); + ComponentMaxRef.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef)); + ComponentMinRef.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef)); + AlphaMinRef.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef)); + AlphaMaxRef.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection)); + ScanningDirection.set_has_value( result == RESULT_OK ); + } return result; } @@ -1627,8 +1876,11 @@ 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)); + if ( ASDCP_SUCCESS(result) && ! ComponentMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef)); + if ( ASDCP_SUCCESS(result) && ! ComponentMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef)); + if ( ASDCP_SUCCESS(result) && ! AlphaMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef)); + if ( ASDCP_SUCCESS(result) && ! AlphaMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef)); + if ( ASDCP_SUCCESS(result) && ! ScanningDirection.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection)); return result; } @@ -1639,6 +1891,9 @@ RGBAEssenceDescriptor::Copy(const RGBAEssenceDescriptor& rhs) GenericPictureEssenceDescriptor::Copy(rhs); ComponentMaxRef = rhs.ComponentMaxRef; ComponentMinRef = rhs.ComponentMinRef; + AlphaMinRef = rhs.AlphaMinRef; + AlphaMaxRef = rhs.AlphaMaxRef; + ScanningDirection = rhs.ScanningDirection; } // @@ -1652,8 +1907,21 @@ RGBAEssenceDescriptor::Dump(FILE* stream) stream = stderr; GenericPictureEssenceDescriptor::Dump(stream); - fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef); - fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef); + if ( ! ComponentMaxRef.empty() ) { + fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef.get()); + } + if ( ! ComponentMinRef.empty() ) { + fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef.get()); + } + if ( ! AlphaMinRef.empty() ) { + fprintf(stream, " %22s = %d\n", "AlphaMinRef", AlphaMinRef.get()); + } + if ( ! AlphaMaxRef.empty() ) { + fprintf(stream, " %22s = %d\n", "AlphaMaxRef", AlphaMaxRef.get()); + } + if ( ! ScanningDirection.empty() ) { + fprintf(stream, " %22s = %d\n", "ScanningDirection", ScanningDirection.get()); + } } // @@ -1798,7 +2066,7 @@ JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) +CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), ColorSiting(0), PaddingBits(0), BlackRefLevel(0), ColorRange(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor); @@ -1818,10 +2086,43 @@ 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_OPT(CDCIEssenceDescriptor, ComponentDepth)); + ComponentDepth.set_has_value( result == RESULT_OK ); + } 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.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling)); + VerticalSubsampling.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting)); + ColorSiting.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder)); + ReversedByteOrder.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi16(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits)); + PaddingBits.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth)); + AlphaSampleDepth.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel)); + BlackRefLevel.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel)); + WhiteReflevel.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorRange)); + ColorRange.set_has_value( result == RESULT_OK ); + } return result; } @@ -1831,10 +2132,16 @@ 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) && ! ComponentDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(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)); + if ( ASDCP_SUCCESS(result) && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling)); + if ( ASDCP_SUCCESS(result) && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting)); + if ( ASDCP_SUCCESS(result) && ! ReversedByteOrder.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder)); + if ( ASDCP_SUCCESS(result) && ! PaddingBits.empty() ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits)); + if ( ASDCP_SUCCESS(result) && ! AlphaSampleDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth)); + if ( ASDCP_SUCCESS(result) && ! BlackRefLevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel)); + if ( ASDCP_SUCCESS(result) && ! WhiteReflevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel)); + if ( ASDCP_SUCCESS(result) && ! ColorRange.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorRange)); return result; } @@ -1847,6 +2154,12 @@ CDCIEssenceDescriptor::Copy(const CDCIEssenceDescriptor& rhs) HorizontalSubsampling = rhs.HorizontalSubsampling; VerticalSubsampling = rhs.VerticalSubsampling; ColorSiting = rhs.ColorSiting; + ReversedByteOrder = rhs.ReversedByteOrder; + PaddingBits = rhs.PaddingBits; + AlphaSampleDepth = rhs.AlphaSampleDepth; + BlackRefLevel = rhs.BlackRefLevel; + WhiteReflevel = rhs.WhiteReflevel; + ColorRange = rhs.ColorRange; } // @@ -1860,10 +2173,34 @@ CDCIEssenceDescriptor::Dump(FILE* stream) stream = stderr; GenericPictureEssenceDescriptor::Dump(stream); - fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth); + if ( ! ComponentDepth.empty() ) { + fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth.get()); + } fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling); - fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling); - fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting); + if ( ! VerticalSubsampling.empty() ) { + fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get()); + } + if ( ! ColorSiting.empty() ) { + fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting.get()); + } + if ( ! ReversedByteOrder.empty() ) { + fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder.get()); + } + if ( ! PaddingBits.empty() ) { + fprintf(stream, " %22s = %d\n", "PaddingBits", PaddingBits.get()); + } + if ( ! AlphaSampleDepth.empty() ) { + fprintf(stream, " %22s = %d\n", "AlphaSampleDepth", AlphaSampleDepth.get()); + } + if ( ! BlackRefLevel.empty() ) { + fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel.get()); + } + if ( ! WhiteReflevel.empty() ) { + fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel.get()); + } + if ( ! ColorRange.empty() ) { + fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange.get()); + } } // @@ -1885,7 +2222,7 @@ CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) +MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), ProfileAndLevel(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor); @@ -1906,9 +2243,18 @@ 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)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(MPEG2VideoDescriptor, BitRate)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, ProfileAndLevel)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay)); + LowDelay.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate)); + BitRate.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel)); + ProfileAndLevel.set_has_value( result == RESULT_OK ); + } return result; } @@ -1919,9 +2265,9 @@ 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)); + if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay)); + if ( ASDCP_SUCCESS(result) && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate)); + if ( ASDCP_SUCCESS(result) && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel)); return result; } @@ -1948,9 +2294,15 @@ MPEG2VideoDescriptor::Dump(FILE* stream) CDCIEssenceDescriptor::Dump(stream); fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType); - fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay); - fprintf(stream, " %22s = %d\n", "BitRate", BitRate); - fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel); + if ( ! LowDelay.empty() ) { + fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get()); + } + if ( ! BitRate.empty() ) { + fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get()); + } + if ( ! ProfileAndLevel.empty() ) { + fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel.get()); + } } // @@ -2616,7 +2968,7 @@ NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), MCAChannelID(0) +MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) { assert(m_Dict); m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor); @@ -2639,9 +2991,18 @@ MCALabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALinkID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagSymbol)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagName)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(MCALabelSubDescriptor, MCAChannelID)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, RFC5646SpokenLanguage)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCATagName)); + MCATagName.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID)); + MCAChannelID.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage)); + RFC5646SpokenLanguage.set_has_value( result == RESULT_OK ); + } return result; } @@ -2654,9 +3015,9 @@ MCALabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALinkID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagSymbol)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagName)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCAChannelID)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, RFC5646SpokenLanguage)); + if ( ASDCP_SUCCESS(result) && ! MCATagName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCATagName)); + if ( ASDCP_SUCCESS(result) && ! MCAChannelID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID)); + if ( ASDCP_SUCCESS(result) && ! RFC5646SpokenLanguage.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage)); return result; } @@ -2687,9 +3048,15 @@ MCALabelSubDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %s\n", "MCALabelDictionaryID", MCALabelDictionaryID.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "MCALinkID", MCALinkID.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "MCATagSymbol", MCATagSymbol.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID); - fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.EncodeString(identbuf, IdentBufferLen)); + if ( ! MCATagName.empty() ) { + fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! MCAChannelID.empty() ) { + fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID.get()); + } + if ( ! RFC5646SpokenLanguage.empty() ) { + fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.get().EncodeString(identbuf, IdentBufferLen)); + } } // diff --git a/src/Metadata.h b/src/Metadata.h index 7ee0940..007f22b 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -57,7 +57,7 @@ namespace ASDCP UUID ProductUID; Kumu::Timestamp ModificationDate; VersionType ToolkitVersion; - UTF16String Platform; + optional_property Platform; Identification(const Dictionary*& d); Identification(const Identification& rhs); @@ -105,7 +105,7 @@ namespace ASDCP public: const Dictionary*& m_Dict; UMID LinkedPackageUID; - ui32_t IndexSID; + optional_property IndexSID; ui32_t BodySID; EssenceContainerData(const Dictionary*& d); @@ -130,7 +130,7 @@ namespace ASDCP public: const Dictionary*& m_Dict; UMID PackageUID; - UTF16String Name; + optional_property Name; Kumu::Timestamp PackageCreationDate; Kumu::Timestamp PackageModifiedDate; Batch Tracks; @@ -154,6 +154,7 @@ namespace ASDCP public: const Dictionary*& m_Dict; + optional_property PackageMarker; MaterialPackage(const Dictionary*& d); MaterialPackage(const MaterialPackage& rhs); @@ -201,8 +202,8 @@ namespace ASDCP const Dictionary*& m_Dict; ui32_t TrackID; ui32_t TrackNumber; - UTF16String TrackName; - UUID Sequence; + optional_property TrackName; + optional_property Sequence; GenericTrack(const Dictionary*& d); GenericTrack(const GenericTrack& rhs); @@ -270,7 +271,7 @@ namespace ASDCP public: const Dictionary*& m_Dict; UL DataDefinition; - ui64_t Duration; + optional_property Duration; StructuralComponent(const Dictionary*& d); StructuralComponent(const StructuralComponent& rhs); @@ -386,11 +387,11 @@ namespace ASDCP public: const Dictionary*& m_Dict; - ui32_t LinkedTrackID; + optional_property LinkedTrackID; Rational SampleRate; - ui64_t ContainerDuration; + optional_property ContainerDuration; UL EssenceContainer; - UL Codec; + optional_property
    Codec; FileDescriptor(const Dictionary*& d); FileDescriptor(const FileDescriptor& rhs); @@ -415,10 +416,12 @@ namespace ASDCP const Dictionary*& m_Dict; Rational AudioSamplingRate; ui8_t Locked; - ui8_t AudioRefLevel; + optional_property AudioRefLevel; + optional_property ElectroSpatialFormulation; ui32_t ChannelCount; ui32_t QuantizationBits; - ui8_t DialNorm; + optional_property DialNorm; + UL SoundEssenceCoding; GenericSoundEssenceDescriptor(const Dictionary*& d); GenericSoundEssenceDescriptor(const GenericSoundEssenceDescriptor& rhs); @@ -442,9 +445,9 @@ namespace ASDCP public: const Dictionary*& m_Dict; ui16_t BlockAlign; - ui8_t SequenceOffset; + optional_property SequenceOffset; ui32_t AvgBps; - UL ChannelAssignment; + optional_property
      ChannelAssignment; WaveAudioDescriptor(const Dictionary*& d); WaveAudioDescriptor(const WaveAudioDescriptor& rhs); @@ -467,15 +470,31 @@ namespace ASDCP public: const Dictionary*& m_Dict; + optional_property SignalStandard; ui8_t FrameLayout; ui32_t StoredWidth; ui32_t StoredHeight; - Rational AspectRatio; - UL PictureEssenceCoding; - optional_property DisplayWidth; + optional_property StoredF2Offset; + optional_property SampledWidth; + optional_property SampledHeight; + optional_property SampledXOffset; + optional_property SampledYOffset; optional_property DisplayHeight; - optional_property
        Gamma; + optional_property DisplayWidth; + optional_property DisplayXOffset; + optional_property DisplayYOffset; + optional_property DisplayF2Offset; + Rational AspectRatio; + optional_property ActiveFormatDescriptor; + optional_property AlphaTransparency; + optional_property
          TransferCharacteristic; + optional_property ImageAlignmentOffset; + optional_property ImageStartOffset; + optional_property ImageEndOffset; optional_property FieldDominance; + UL PictureEssenceCoding; + optional_property
            CodingEquations; + optional_property
              ColorPrimaries; GenericPictureEssenceDescriptor(const Dictionary*& d); GenericPictureEssenceDescriptor(const GenericPictureEssenceDescriptor& rhs); @@ -498,8 +517,11 @@ namespace ASDCP public: const Dictionary*& m_Dict; - ui32_t ComponentMaxRef; - ui32_t ComponentMinRef; + optional_property ComponentMaxRef; + optional_property ComponentMinRef; + optional_property AlphaMinRef; + optional_property AlphaMaxRef; + optional_property ScanningDirection; RGBAEssenceDescriptor(const Dictionary*& d); RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs); @@ -557,10 +579,16 @@ namespace ASDCP public: const Dictionary*& m_Dict; - ui32_t ComponentDepth; + optional_property ComponentDepth; ui32_t HorizontalSubsampling; - ui32_t VerticalSubsampling; - ui8_t ColorSiting; + optional_property VerticalSubsampling; + optional_property ColorSiting; + optional_property ReversedByteOrder; + optional_property PaddingBits; + optional_property AlphaSampleDepth; + optional_property BlackRefLevel; + optional_property WhiteReflevel; + optional_property ColorRange; CDCIEssenceDescriptor(const Dictionary*& d); CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs); @@ -584,9 +612,9 @@ namespace ASDCP public: const Dictionary*& m_Dict; ui8_t CodedContentType; - ui8_t LowDelay; - ui32_t BitRate; - ui8_t ProfileAndLevel; + optional_property LowDelay; + optional_property BitRate; + optional_property ProfileAndLevel; MPEG2VideoDescriptor(const Dictionary*& d); MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs); @@ -807,9 +835,9 @@ namespace ASDCP UL MCALabelDictionaryID; UUID MCALinkID; UTF16String MCATagSymbol; - UTF16String MCATagName; - ui32_t MCAChannelID; - ISO8String RFC5646SpokenLanguage; + optional_property MCATagName; + optional_property MCAChannelID; + optional_property RFC5646SpokenLanguage; MCALabelSubDescriptor(const Dictionary*& d); MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs);