2 Copyright (c) 2005-2015, John Hurst
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
8 1. Redistributions of source code must retain the above copyright
9 notice, this list of conditions and the following disclaimer.
10 2. Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in the
12 documentation and/or other materials provided with the distribution.
13 3. The name of the author may not be used to endorse or promote products
14 derived from this software without specific prior written permission.
16 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 /*! \file Metadata.cpp
28 \version $Id: Metadata.cpp,v 1.40 2015/10/10 20:26:29 jhurst Exp $
29 \brief AS-DCP library, MXF Metadata Sets implementation
36 using namespace ASDCP;
37 using namespace ASDCP::MXF;
39 const ui32_t kl_length = ASDCP::SMPTE_UL_LENGTH + ASDCP::MXF_BER_LENGTH;
41 //------------------------------------------------------------------------------------------
43 static InterchangeObject* Preface_Factory(const Dictionary*& Dict) { return new Preface(Dict); }
44 static InterchangeObject* IndexTableSegment_Factory(const Dictionary*& Dict) { return new IndexTableSegment(Dict); }
46 static InterchangeObject* Identification_Factory(const Dictionary*& Dict) { return new Identification(Dict); }
47 static InterchangeObject* ContentStorage_Factory(const Dictionary*& Dict) { return new ContentStorage(Dict); }
48 static InterchangeObject* EssenceContainerData_Factory(const Dictionary*& Dict) { return new EssenceContainerData(Dict); }
49 static InterchangeObject* MaterialPackage_Factory(const Dictionary*& Dict) { return new MaterialPackage(Dict); }
50 static InterchangeObject* SourcePackage_Factory(const Dictionary*& Dict) { return new SourcePackage(Dict); }
51 static InterchangeObject* StaticTrack_Factory(const Dictionary*& Dict) { return new StaticTrack(Dict); }
52 static InterchangeObject* Track_Factory(const Dictionary*& Dict) { return new Track(Dict); }
53 static InterchangeObject* Sequence_Factory(const Dictionary*& Dict) { return new Sequence(Dict); }
54 static InterchangeObject* SourceClip_Factory(const Dictionary*& Dict) { return new SourceClip(Dict); }
55 static InterchangeObject* TimecodeComponent_Factory(const Dictionary*& Dict) { return new TimecodeComponent(Dict); }
56 static InterchangeObject* FileDescriptor_Factory(const Dictionary*& Dict) { return new FileDescriptor(Dict); }
57 static InterchangeObject* GenericSoundEssenceDescriptor_Factory(const Dictionary*& Dict) { return new GenericSoundEssenceDescriptor(Dict); }
58 static InterchangeObject* WaveAudioDescriptor_Factory(const Dictionary*& Dict) { return new WaveAudioDescriptor(Dict); }
59 static InterchangeObject* GenericPictureEssenceDescriptor_Factory(const Dictionary*& Dict) { return new GenericPictureEssenceDescriptor(Dict); }
60 static InterchangeObject* RGBAEssenceDescriptor_Factory(const Dictionary*& Dict) { return new RGBAEssenceDescriptor(Dict); }
61 static InterchangeObject* JPEG2000PictureSubDescriptor_Factory(const Dictionary*& Dict) { return new JPEG2000PictureSubDescriptor(Dict); }
62 static InterchangeObject* CDCIEssenceDescriptor_Factory(const Dictionary*& Dict) { return new CDCIEssenceDescriptor(Dict); }
63 static InterchangeObject* MPEG2VideoDescriptor_Factory(const Dictionary*& Dict) { return new MPEG2VideoDescriptor(Dict); }
64 static InterchangeObject* DMSegment_Factory(const Dictionary*& Dict) { return new DMSegment(Dict); }
65 static InterchangeObject* CryptographicFramework_Factory(const Dictionary*& Dict) { return new CryptographicFramework(Dict); }
66 static InterchangeObject* CryptographicContext_Factory(const Dictionary*& Dict) { return new CryptographicContext(Dict); }
67 static InterchangeObject* GenericDataEssenceDescriptor_Factory(const Dictionary*& Dict) { return new GenericDataEssenceDescriptor(Dict); }
68 static InterchangeObject* TimedTextDescriptor_Factory(const Dictionary*& Dict) { return new TimedTextDescriptor(Dict); }
69 static InterchangeObject* TimedTextResourceSubDescriptor_Factory(const Dictionary*& Dict) { return new TimedTextResourceSubDescriptor(Dict); }
70 static InterchangeObject* StereoscopicPictureSubDescriptor_Factory(const Dictionary*& Dict) { return new StereoscopicPictureSubDescriptor(Dict); }
71 static InterchangeObject* ContainerConstraintSubDescriptor_Factory(const Dictionary*& Dict) { return new ContainerConstraintSubDescriptor(Dict); }
72 static InterchangeObject* NetworkLocator_Factory(const Dictionary*& Dict) { return new NetworkLocator(Dict); }
73 static InterchangeObject* MCALabelSubDescriptor_Factory(const Dictionary*& Dict) { return new MCALabelSubDescriptor(Dict); }
74 static InterchangeObject* AudioChannelLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new AudioChannelLabelSubDescriptor(Dict); }
75 static InterchangeObject* SoundfieldGroupLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new SoundfieldGroupLabelSubDescriptor(Dict); }
76 static InterchangeObject* GroupOfSoundfieldGroupsLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new GroupOfSoundfieldGroupsLabelSubDescriptor(Dict); }
77 static InterchangeObject* DCDataDescriptor_Factory(const Dictionary*& Dict) { return new DCDataDescriptor(Dict); }
78 static InterchangeObject* DolbyAtmosSubDescriptor_Factory(const Dictionary*& Dict) { return new DolbyAtmosSubDescriptor(Dict); }
79 static InterchangeObject* PHDRMetadataTrackSubDescriptor_Factory(const Dictionary*& Dict) { return new PHDRMetadataTrackSubDescriptor(Dict); }
83 ASDCP::MXF::Metadata_InitTypes(const Dictionary*& Dict)
86 SetObjectFactory(Dict->ul(MDD_Preface), Preface_Factory);
87 SetObjectFactory(Dict->ul(MDD_IndexTableSegment), IndexTableSegment_Factory);
89 SetObjectFactory(Dict->ul(MDD_Identification), Identification_Factory);
90 SetObjectFactory(Dict->ul(MDD_ContentStorage), ContentStorage_Factory);
91 SetObjectFactory(Dict->ul(MDD_EssenceContainerData), EssenceContainerData_Factory);
92 SetObjectFactory(Dict->ul(MDD_MaterialPackage), MaterialPackage_Factory);
93 SetObjectFactory(Dict->ul(MDD_SourcePackage), SourcePackage_Factory);
94 SetObjectFactory(Dict->ul(MDD_StaticTrack), StaticTrack_Factory);
95 SetObjectFactory(Dict->ul(MDD_Track), Track_Factory);
96 SetObjectFactory(Dict->ul(MDD_Sequence), Sequence_Factory);
97 SetObjectFactory(Dict->ul(MDD_SourceClip), SourceClip_Factory);
98 SetObjectFactory(Dict->ul(MDD_TimecodeComponent), TimecodeComponent_Factory);
99 SetObjectFactory(Dict->ul(MDD_FileDescriptor), FileDescriptor_Factory);
100 SetObjectFactory(Dict->ul(MDD_GenericSoundEssenceDescriptor), GenericSoundEssenceDescriptor_Factory);
101 SetObjectFactory(Dict->ul(MDD_WaveAudioDescriptor), WaveAudioDescriptor_Factory);
102 SetObjectFactory(Dict->ul(MDD_GenericPictureEssenceDescriptor), GenericPictureEssenceDescriptor_Factory);
103 SetObjectFactory(Dict->ul(MDD_RGBAEssenceDescriptor), RGBAEssenceDescriptor_Factory);
104 SetObjectFactory(Dict->ul(MDD_JPEG2000PictureSubDescriptor), JPEG2000PictureSubDescriptor_Factory);
105 SetObjectFactory(Dict->ul(MDD_CDCIEssenceDescriptor), CDCIEssenceDescriptor_Factory);
106 SetObjectFactory(Dict->ul(MDD_MPEG2VideoDescriptor), MPEG2VideoDescriptor_Factory);
107 SetObjectFactory(Dict->ul(MDD_DMSegment), DMSegment_Factory);
108 SetObjectFactory(Dict->ul(MDD_CryptographicFramework), CryptographicFramework_Factory);
109 SetObjectFactory(Dict->ul(MDD_CryptographicContext), CryptographicContext_Factory);
110 SetObjectFactory(Dict->ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory);
111 SetObjectFactory(Dict->ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory);
112 SetObjectFactory(Dict->ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory);
113 SetObjectFactory(Dict->ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory);
114 SetObjectFactory(Dict->ul(MDD_ContainerConstraintSubDescriptor), ContainerConstraintSubDescriptor_Factory);
115 SetObjectFactory(Dict->ul(MDD_NetworkLocator), NetworkLocator_Factory);
116 SetObjectFactory(Dict->ul(MDD_MCALabelSubDescriptor), MCALabelSubDescriptor_Factory);
117 SetObjectFactory(Dict->ul(MDD_AudioChannelLabelSubDescriptor), AudioChannelLabelSubDescriptor_Factory);
118 SetObjectFactory(Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor), SoundfieldGroupLabelSubDescriptor_Factory);
119 SetObjectFactory(Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor), GroupOfSoundfieldGroupsLabelSubDescriptor_Factory);
120 SetObjectFactory(Dict->ul(MDD_DCDataDescriptor), DCDataDescriptor_Factory);
121 SetObjectFactory(Dict->ul(MDD_DolbyAtmosSubDescriptor), DolbyAtmosSubDescriptor_Factory);
122 SetObjectFactory(Dict->ul(MDD_PHDRMetadataTrackSubDescriptor), PHDRMetadataTrackSubDescriptor_Factory);
125 //------------------------------------------------------------------------------------------
130 //------------------------------------------------------------------------------------------
135 Identification::Identification(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
138 m_UL = m_Dict->ul(MDD_Identification);
141 Identification::Identification(const Identification& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
144 m_UL = m_Dict->ul(MDD_Identification);
151 Identification::InitFromTLVSet(TLVReader& TLVSet)
154 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
155 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ThisGenerationUID));
156 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, CompanyName));
157 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductName));
158 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductVersion));
159 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, VersionString));
160 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductUID));
161 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ModificationDate));
162 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ToolkitVersion));
163 if ( ASDCP_SUCCESS(result) ) {
164 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Identification, Platform));
165 Platform.set_has_value( result == RESULT_OK );
172 Identification::WriteToTLVSet(TLVWriter& TLVSet)
175 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
176 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ThisGenerationUID));
177 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, CompanyName));
178 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductName));
179 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductVersion));
180 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, VersionString));
181 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductUID));
182 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ModificationDate));
183 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ToolkitVersion));
184 if ( ASDCP_SUCCESS(result) && ! Platform.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Identification, Platform));
190 Identification::Copy(const Identification& rhs)
192 InterchangeObject::Copy(rhs);
193 ThisGenerationUID = rhs.ThisGenerationUID;
194 CompanyName = rhs.CompanyName;
195 ProductName = rhs.ProductName;
196 ProductVersion = rhs.ProductVersion;
197 VersionString = rhs.VersionString;
198 ProductUID = rhs.ProductUID;
199 ModificationDate = rhs.ModificationDate;
200 ToolkitVersion = rhs.ToolkitVersion;
201 Platform = rhs.Platform;
206 Identification::Dump(FILE* stream)
208 char identbuf[IdentBufferLen];
214 InterchangeObject::Dump(stream);
215 fprintf(stream, " %22s = %s\n", "ThisGenerationUID", ThisGenerationUID.EncodeString(identbuf, IdentBufferLen));
216 fprintf(stream, " %22s = %s\n", "CompanyName", CompanyName.EncodeString(identbuf, IdentBufferLen));
217 fprintf(stream, " %22s = %s\n", "ProductName", ProductName.EncodeString(identbuf, IdentBufferLen));
218 fprintf(stream, " %22s = %s\n", "ProductVersion", ProductVersion.EncodeString(identbuf, IdentBufferLen));
219 fprintf(stream, " %22s = %s\n", "VersionString", VersionString.EncodeString(identbuf, IdentBufferLen));
220 fprintf(stream, " %22s = %s\n", "ProductUID", ProductUID.EncodeString(identbuf, IdentBufferLen));
221 fprintf(stream, " %22s = %s\n", "ModificationDate", ModificationDate.EncodeString(identbuf, IdentBufferLen));
222 fprintf(stream, " %22s = %s\n", "ToolkitVersion", ToolkitVersion.EncodeString(identbuf, IdentBufferLen));
223 if ( ! Platform.empty() ) {
224 fprintf(stream, " %22s = %s\n", "Platform", Platform.get().EncodeString(identbuf, IdentBufferLen));
230 Identification::InitFromBuffer(const byte_t* p, ui32_t l)
232 return InterchangeObject::InitFromBuffer(p, l);
237 Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
239 return InterchangeObject::WriteToBuffer(Buffer);
242 //------------------------------------------------------------------------------------------
247 ContentStorage::ContentStorage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
250 m_UL = m_Dict->ul(MDD_ContentStorage);
253 ContentStorage::ContentStorage(const ContentStorage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
256 m_UL = m_Dict->ul(MDD_ContentStorage);
263 ContentStorage::InitFromTLVSet(TLVReader& TLVSet)
266 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
267 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, Packages));
268 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, EssenceContainerData));
274 ContentStorage::WriteToTLVSet(TLVWriter& TLVSet)
277 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
278 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, Packages));
279 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, EssenceContainerData));
285 ContentStorage::Copy(const ContentStorage& rhs)
287 InterchangeObject::Copy(rhs);
288 Packages = rhs.Packages;
289 EssenceContainerData = rhs.EssenceContainerData;
294 ContentStorage::Dump(FILE* stream)
296 char identbuf[IdentBufferLen];
302 InterchangeObject::Dump(stream);
303 fprintf(stream, " %22s:\n", "Packages");
304 Packages.Dump(stream);
305 fprintf(stream, " %22s:\n", "EssenceContainerData");
306 EssenceContainerData.Dump(stream);
311 ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l)
313 return InterchangeObject::InitFromBuffer(p, l);
318 ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
320 return InterchangeObject::WriteToBuffer(Buffer);
323 //------------------------------------------------------------------------------------------
324 // EssenceContainerData
328 EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0)
331 m_UL = m_Dict->ul(MDD_EssenceContainerData);
334 EssenceContainerData::EssenceContainerData(const EssenceContainerData& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
337 m_UL = m_Dict->ul(MDD_EssenceContainerData);
344 EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet)
347 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
348 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID));
349 if ( ASDCP_SUCCESS(result) ) {
350 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(EssenceContainerData, IndexSID));
351 IndexSID.set_has_value( result == RESULT_OK );
353 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID));
359 EssenceContainerData::WriteToTLVSet(TLVWriter& TLVSet)
362 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
363 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(EssenceContainerData, LinkedPackageUID));
364 if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(EssenceContainerData, IndexSID));
365 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID));
371 EssenceContainerData::Copy(const EssenceContainerData& rhs)
373 InterchangeObject::Copy(rhs);
374 LinkedPackageUID = rhs.LinkedPackageUID;
375 IndexSID = rhs.IndexSID;
376 BodySID = rhs.BodySID;
381 EssenceContainerData::Dump(FILE* stream)
383 char identbuf[IdentBufferLen];
389 InterchangeObject::Dump(stream);
390 fprintf(stream, " %22s = %s\n", "LinkedPackageUID", LinkedPackageUID.EncodeString(identbuf, IdentBufferLen));
391 if ( ! IndexSID.empty() ) {
392 fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID.get());
394 fprintf(stream, " %22s = %d\n", "BodySID", BodySID);
399 EssenceContainerData::InitFromBuffer(const byte_t* p, ui32_t l)
401 return InterchangeObject::InitFromBuffer(p, l);
406 EssenceContainerData::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
408 return InterchangeObject::WriteToBuffer(Buffer);
411 //------------------------------------------------------------------------------------------
415 GenericPackage::GenericPackage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
417 GenericPackage::GenericPackage(const GenericPackage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
425 GenericPackage::InitFromTLVSet(TLVReader& TLVSet)
428 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
429 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageUID));
430 if ( ASDCP_SUCCESS(result) ) {
431 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPackage, Name));
432 Name.set_has_value( result == RESULT_OK );
434 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageCreationDate));
435 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageModifiedDate));
436 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Tracks));
442 GenericPackage::WriteToTLVSet(TLVWriter& TLVSet)
445 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
446 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageUID));
447 if ( ASDCP_SUCCESS(result) && ! Name.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPackage, Name));
448 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageCreationDate));
449 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageModifiedDate));
450 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Tracks));
456 GenericPackage::Copy(const GenericPackage& rhs)
458 InterchangeObject::Copy(rhs);
459 PackageUID = rhs.PackageUID;
461 PackageCreationDate = rhs.PackageCreationDate;
462 PackageModifiedDate = rhs.PackageModifiedDate;
468 GenericPackage::Dump(FILE* stream)
470 char identbuf[IdentBufferLen];
476 InterchangeObject::Dump(stream);
477 fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.EncodeString(identbuf, IdentBufferLen));
478 if ( ! Name.empty() ) {
479 fprintf(stream, " %22s = %s\n", "Name", Name.get().EncodeString(identbuf, IdentBufferLen));
481 fprintf(stream, " %22s = %s\n", "PackageCreationDate", PackageCreationDate.EncodeString(identbuf, IdentBufferLen));
482 fprintf(stream, " %22s = %s\n", "PackageModifiedDate", PackageModifiedDate.EncodeString(identbuf, IdentBufferLen));
483 fprintf(stream, " %22s:\n", "Tracks");
488 //------------------------------------------------------------------------------------------
493 MaterialPackage::MaterialPackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d)
496 m_UL = m_Dict->ul(MDD_MaterialPackage);
499 MaterialPackage::MaterialPackage(const MaterialPackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict)
502 m_UL = m_Dict->ul(MDD_MaterialPackage);
509 MaterialPackage::InitFromTLVSet(TLVReader& TLVSet)
512 Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
513 if ( ASDCP_SUCCESS(result) ) {
514 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MaterialPackage, PackageMarker));
515 PackageMarker.set_has_value( result == RESULT_OK );
522 MaterialPackage::WriteToTLVSet(TLVWriter& TLVSet)
525 Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
526 if ( ASDCP_SUCCESS(result) && ! PackageMarker.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MaterialPackage, PackageMarker));
532 MaterialPackage::Copy(const MaterialPackage& rhs)
534 GenericPackage::Copy(rhs);
535 PackageMarker = rhs.PackageMarker;
540 MaterialPackage::Dump(FILE* stream)
542 char identbuf[IdentBufferLen];
548 GenericPackage::Dump(stream);
549 if ( ! PackageMarker.empty() ) {
550 fprintf(stream, " %22s = %s\n", "PackageMarker", PackageMarker.get().EncodeString(identbuf, IdentBufferLen));
556 MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l)
558 return InterchangeObject::InitFromBuffer(p, l);
563 MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
565 return InterchangeObject::WriteToBuffer(Buffer);
568 //------------------------------------------------------------------------------------------
573 SourcePackage::SourcePackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d)
576 m_UL = m_Dict->ul(MDD_SourcePackage);
579 SourcePackage::SourcePackage(const SourcePackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict)
582 m_UL = m_Dict->ul(MDD_SourcePackage);
589 SourcePackage::InitFromTLVSet(TLVReader& TLVSet)
592 Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
593 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourcePackage, Descriptor));
599 SourcePackage::WriteToTLVSet(TLVWriter& TLVSet)
602 Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
603 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourcePackage, Descriptor));
609 SourcePackage::Copy(const SourcePackage& rhs)
611 GenericPackage::Copy(rhs);
612 Descriptor = rhs.Descriptor;
617 SourcePackage::Dump(FILE* stream)
619 char identbuf[IdentBufferLen];
625 GenericPackage::Dump(stream);
626 fprintf(stream, " %22s = %s\n", "Descriptor", Descriptor.EncodeString(identbuf, IdentBufferLen));
631 SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l)
633 return InterchangeObject::InitFromBuffer(p, l);
638 SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
640 return InterchangeObject::WriteToBuffer(Buffer);
643 //------------------------------------------------------------------------------------------
647 GenericTrack::GenericTrack(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), TrackID(0), TrackNumber(0) {}
649 GenericTrack::GenericTrack(const GenericTrack& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
657 GenericTrack::InitFromTLVSet(TLVReader& TLVSet)
660 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
661 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackID));
662 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackNumber));
663 if ( ASDCP_SUCCESS(result) ) {
664 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, TrackName));
665 TrackName.set_has_value( result == RESULT_OK );
667 if ( ASDCP_SUCCESS(result) ) {
668 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, Sequence));
669 Sequence.set_has_value( result == RESULT_OK );
676 GenericTrack::WriteToTLVSet(TLVWriter& TLVSet)
679 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
680 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackID));
681 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackNumber));
682 if ( ASDCP_SUCCESS(result) && ! TrackName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, TrackName));
683 if ( ASDCP_SUCCESS(result) && ! Sequence.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, Sequence));
689 GenericTrack::Copy(const GenericTrack& rhs)
691 InterchangeObject::Copy(rhs);
692 TrackID = rhs.TrackID;
693 TrackNumber = rhs.TrackNumber;
694 TrackName = rhs.TrackName;
695 Sequence = rhs.Sequence;
700 GenericTrack::Dump(FILE* stream)
702 char identbuf[IdentBufferLen];
708 InterchangeObject::Dump(stream);
709 fprintf(stream, " %22s = %d\n", "TrackID", TrackID);
710 fprintf(stream, " %22s = %d\n", "TrackNumber", TrackNumber);
711 if ( ! TrackName.empty() ) {
712 fprintf(stream, " %22s = %s\n", "TrackName", TrackName.get().EncodeString(identbuf, IdentBufferLen));
714 if ( ! Sequence.empty() ) {
715 fprintf(stream, " %22s = %s\n", "Sequence", Sequence.get().EncodeString(identbuf, IdentBufferLen));
720 //------------------------------------------------------------------------------------------
725 StaticTrack::StaticTrack(const Dictionary*& d) : GenericTrack(d), m_Dict(d)
728 m_UL = m_Dict->ul(MDD_StaticTrack);
731 StaticTrack::StaticTrack(const StaticTrack& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict)
734 m_UL = m_Dict->ul(MDD_StaticTrack);
741 StaticTrack::InitFromTLVSet(TLVReader& TLVSet)
744 Result_t result = GenericTrack::InitFromTLVSet(TLVSet);
750 StaticTrack::WriteToTLVSet(TLVWriter& TLVSet)
753 Result_t result = GenericTrack::WriteToTLVSet(TLVSet);
759 StaticTrack::Copy(const StaticTrack& rhs)
761 GenericTrack::Copy(rhs);
766 StaticTrack::Dump(FILE* stream)
768 char identbuf[IdentBufferLen];
774 GenericTrack::Dump(stream);
779 StaticTrack::InitFromBuffer(const byte_t* p, ui32_t l)
781 return InterchangeObject::InitFromBuffer(p, l);
786 StaticTrack::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
788 return InterchangeObject::WriteToBuffer(Buffer);
791 //------------------------------------------------------------------------------------------
796 Track::Track(const Dictionary*& d) : GenericTrack(d), m_Dict(d), Origin(0)
799 m_UL = m_Dict->ul(MDD_Track);
802 Track::Track(const Track& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict)
805 m_UL = m_Dict->ul(MDD_Track);
812 Track::InitFromTLVSet(TLVReader& TLVSet)
815 Result_t result = GenericTrack::InitFromTLVSet(TLVSet);
816 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Track, EditRate));
817 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(Track, Origin));
823 Track::WriteToTLVSet(TLVWriter& TLVSet)
826 Result_t result = GenericTrack::WriteToTLVSet(TLVSet);
827 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Track, EditRate));
828 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(Track, Origin));
834 Track::Copy(const Track& rhs)
836 GenericTrack::Copy(rhs);
837 EditRate = rhs.EditRate;
843 Track::Dump(FILE* stream)
845 char identbuf[IdentBufferLen];
851 GenericTrack::Dump(stream);
852 fprintf(stream, " %22s = %s\n", "EditRate", EditRate.EncodeString(identbuf, IdentBufferLen));
853 fprintf(stream, " %22s = %s\n", "Origin", i64sz(Origin, identbuf));
858 Track::InitFromBuffer(const byte_t* p, ui32_t l)
860 return InterchangeObject::InitFromBuffer(p, l);
865 Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
867 return InterchangeObject::WriteToBuffer(Buffer);
870 //------------------------------------------------------------------------------------------
871 // StructuralComponent
874 StructuralComponent::StructuralComponent(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), Duration(0) {}
876 StructuralComponent::StructuralComponent(const StructuralComponent& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
884 StructuralComponent::InitFromTLVSet(TLVReader& TLVSet)
887 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
888 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
889 if ( ASDCP_SUCCESS(result) ) {
890 result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration));
891 Duration.set_has_value( result == RESULT_OK );
898 StructuralComponent::WriteToTLVSet(TLVWriter& TLVSet)
901 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
902 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(StructuralComponent, DataDefinition));
903 if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(StructuralComponent, Duration));
909 StructuralComponent::Copy(const StructuralComponent& rhs)
911 InterchangeObject::Copy(rhs);
912 DataDefinition = rhs.DataDefinition;
913 Duration = rhs.Duration;
918 StructuralComponent::Dump(FILE* stream)
920 char identbuf[IdentBufferLen];
926 InterchangeObject::Dump(stream);
927 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
928 if ( ! Duration.empty() ) {
929 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration.get(), identbuf));
934 //------------------------------------------------------------------------------------------
939 Sequence::Sequence(const Dictionary*& d) : StructuralComponent(d), m_Dict(d)
942 m_UL = m_Dict->ul(MDD_Sequence);
945 Sequence::Sequence(const Sequence& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
948 m_UL = m_Dict->ul(MDD_Sequence);
955 Sequence::InitFromTLVSet(TLVReader& TLVSet)
958 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
959 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Sequence, StructuralComponents));
965 Sequence::WriteToTLVSet(TLVWriter& TLVSet)
968 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
969 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Sequence, StructuralComponents));
975 Sequence::Copy(const Sequence& rhs)
977 StructuralComponent::Copy(rhs);
978 StructuralComponents = rhs.StructuralComponents;
983 Sequence::Dump(FILE* stream)
985 char identbuf[IdentBufferLen];
991 StructuralComponent::Dump(stream);
992 fprintf(stream, " %22s:\n", "StructuralComponents");
993 StructuralComponents.Dump(stream);
998 Sequence::InitFromBuffer(const byte_t* p, ui32_t l)
1000 return InterchangeObject::InitFromBuffer(p, l);
1005 Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1007 return InterchangeObject::WriteToBuffer(Buffer);
1010 //------------------------------------------------------------------------------------------
1015 SourceClip::SourceClip(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), StartPosition(0), SourceTrackID(0)
1018 m_UL = m_Dict->ul(MDD_SourceClip);
1021 SourceClip::SourceClip(const SourceClip& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
1024 m_UL = m_Dict->ul(MDD_SourceClip);
1031 SourceClip::InitFromTLVSet(TLVReader& TLVSet)
1034 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
1035 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(SourceClip, StartPosition));
1036 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourceClip, SourcePackageID));
1037 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(SourceClip, SourceTrackID));
1043 SourceClip::WriteToTLVSet(TLVWriter& TLVSet)
1046 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
1047 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(SourceClip, StartPosition));
1048 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourceClip, SourcePackageID));
1049 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(SourceClip, SourceTrackID));
1055 SourceClip::Copy(const SourceClip& rhs)
1057 StructuralComponent::Copy(rhs);
1058 StartPosition = rhs.StartPosition;
1059 SourcePackageID = rhs.SourcePackageID;
1060 SourceTrackID = rhs.SourceTrackID;
1065 SourceClip::Dump(FILE* stream)
1067 char identbuf[IdentBufferLen];
1073 StructuralComponent::Dump(stream);
1074 fprintf(stream, " %22s = %s\n", "StartPosition", i64sz(StartPosition, identbuf));
1075 fprintf(stream, " %22s = %s\n", "SourcePackageID", SourcePackageID.EncodeString(identbuf, IdentBufferLen));
1076 fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID);
1081 SourceClip::InitFromBuffer(const byte_t* p, ui32_t l)
1083 return InterchangeObject::InitFromBuffer(p, l);
1088 SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1090 return InterchangeObject::WriteToBuffer(Buffer);
1093 //------------------------------------------------------------------------------------------
1094 // TimecodeComponent
1098 TimecodeComponent::TimecodeComponent(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0)
1101 m_UL = m_Dict->ul(MDD_TimecodeComponent);
1104 TimecodeComponent::TimecodeComponent(const TimecodeComponent& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
1107 m_UL = m_Dict->ul(MDD_TimecodeComponent);
1114 TimecodeComponent::InitFromTLVSet(TLVReader& TLVSet)
1117 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
1118 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(TimecodeComponent, RoundedTimecodeBase));
1119 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(TimecodeComponent, StartTimecode));
1120 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(TimecodeComponent, DropFrame));
1126 TimecodeComponent::WriteToTLVSet(TLVWriter& TLVSet)
1129 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
1130 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(TimecodeComponent, RoundedTimecodeBase));
1131 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(TimecodeComponent, StartTimecode));
1132 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(TimecodeComponent, DropFrame));
1138 TimecodeComponent::Copy(const TimecodeComponent& rhs)
1140 StructuralComponent::Copy(rhs);
1141 RoundedTimecodeBase = rhs.RoundedTimecodeBase;
1142 StartTimecode = rhs.StartTimecode;
1143 DropFrame = rhs.DropFrame;
1148 TimecodeComponent::Dump(FILE* stream)
1150 char identbuf[IdentBufferLen];
1156 StructuralComponent::Dump(stream);
1157 fprintf(stream, " %22s = %d\n", "RoundedTimecodeBase", RoundedTimecodeBase);
1158 fprintf(stream, " %22s = %s\n", "StartTimecode", i64sz(StartTimecode, identbuf));
1159 fprintf(stream, " %22s = %d\n", "DropFrame", DropFrame);
1164 TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l)
1166 return InterchangeObject::InitFromBuffer(p, l);
1171 TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1173 return InterchangeObject::WriteToBuffer(Buffer);
1176 //------------------------------------------------------------------------------------------
1177 // GenericDescriptor
1180 GenericDescriptor::GenericDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
1182 GenericDescriptor::GenericDescriptor(const GenericDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
1190 GenericDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1193 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
1194 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, Locators));
1195 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, SubDescriptors));
1201 GenericDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1204 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
1205 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, Locators));
1206 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, SubDescriptors));
1212 GenericDescriptor::Copy(const GenericDescriptor& rhs)
1214 InterchangeObject::Copy(rhs);
1215 Locators = rhs.Locators;
1216 SubDescriptors = rhs.SubDescriptors;
1221 GenericDescriptor::Dump(FILE* stream)
1223 char identbuf[IdentBufferLen];
1229 InterchangeObject::Dump(stream);
1230 fprintf(stream, " %22s:\n", "Locators");
1231 Locators.Dump(stream);
1232 fprintf(stream, " %22s:\n", "SubDescriptors");
1233 SubDescriptors.Dump(stream);
1237 //------------------------------------------------------------------------------------------
1242 FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0)
1245 m_UL = m_Dict->ul(MDD_FileDescriptor);
1248 FileDescriptor::FileDescriptor(const FileDescriptor& rhs) : GenericDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1251 m_UL = m_Dict->ul(MDD_FileDescriptor);
1258 FileDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1261 Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet);
1262 if ( ASDCP_SUCCESS(result) ) {
1263 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID));
1264 LinkedTrackID.set_has_value( result == RESULT_OK );
1266 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate));
1267 if ( ASDCP_SUCCESS(result) ) {
1268 result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(FileDescriptor, ContainerDuration));
1269 ContainerDuration.set_has_value( result == RESULT_OK );
1271 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
1272 if ( ASDCP_SUCCESS(result) ) {
1273 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(FileDescriptor, Codec));
1274 Codec.set_has_value( result == RESULT_OK );
1281 FileDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1284 Result_t result = GenericDescriptor::WriteToTLVSet(TLVSet);
1285 if ( ASDCP_SUCCESS(result) && ! LinkedTrackID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(FileDescriptor, LinkedTrackID));
1286 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, SampleRate));
1287 if ( ASDCP_SUCCESS(result) && ! ContainerDuration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(FileDescriptor, ContainerDuration));
1288 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, EssenceContainer));
1289 if ( ASDCP_SUCCESS(result) && ! Codec.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(FileDescriptor, Codec));
1295 FileDescriptor::Copy(const FileDescriptor& rhs)
1297 GenericDescriptor::Copy(rhs);
1298 LinkedTrackID = rhs.LinkedTrackID;
1299 SampleRate = rhs.SampleRate;
1300 ContainerDuration = rhs.ContainerDuration;
1301 EssenceContainer = rhs.EssenceContainer;
1307 FileDescriptor::Dump(FILE* stream)
1309 char identbuf[IdentBufferLen];
1315 GenericDescriptor::Dump(stream);
1316 if ( ! LinkedTrackID.empty() ) {
1317 fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID.get());
1319 fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.EncodeString(identbuf, IdentBufferLen));
1320 if ( ! ContainerDuration.empty() ) {
1321 fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration.get(), identbuf));
1323 fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.EncodeString(identbuf, IdentBufferLen));
1324 if ( ! Codec.empty() ) {
1325 fprintf(stream, " %22s = %s\n", "Codec", Codec.get().EncodeString(identbuf, IdentBufferLen));
1331 FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1333 return InterchangeObject::InitFromBuffer(p, l);
1338 FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1340 return InterchangeObject::WriteToBuffer(Buffer);
1343 //------------------------------------------------------------------------------------------
1344 // GenericSoundEssenceDescriptor
1348 GenericSoundEssenceDescriptor::GenericSoundEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0)
1351 m_UL = m_Dict->ul(MDD_GenericSoundEssenceDescriptor);
1354 GenericSoundEssenceDescriptor::GenericSoundEssenceDescriptor(const GenericSoundEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1357 m_UL = m_Dict->ul(MDD_GenericSoundEssenceDescriptor);
1364 GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1367 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
1368 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
1369 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, Locked));
1370 if ( ASDCP_SUCCESS(result) ) {
1371 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
1372 AudioRefLevel.set_has_value( result == RESULT_OK );
1374 if ( ASDCP_SUCCESS(result) ) {
1375 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
1376 ElectroSpatialFormulation.set_has_value( result == RESULT_OK );
1378 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
1379 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
1380 if ( ASDCP_SUCCESS(result) ) {
1381 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
1382 DialNorm.set_has_value( result == RESULT_OK );
1384 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
1390 GenericSoundEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1393 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1394 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
1395 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, Locked));
1396 if ( ASDCP_SUCCESS(result) && ! AudioRefLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
1397 if ( ASDCP_SUCCESS(result) && ! ElectroSpatialFormulation.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
1398 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
1399 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
1400 if ( ASDCP_SUCCESS(result) && ! DialNorm.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
1401 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
1407 GenericSoundEssenceDescriptor::Copy(const GenericSoundEssenceDescriptor& rhs)
1409 FileDescriptor::Copy(rhs);
1410 AudioSamplingRate = rhs.AudioSamplingRate;
1411 Locked = rhs.Locked;
1412 AudioRefLevel = rhs.AudioRefLevel;
1413 ElectroSpatialFormulation = rhs.ElectroSpatialFormulation;
1414 ChannelCount = rhs.ChannelCount;
1415 QuantizationBits = rhs.QuantizationBits;
1416 DialNorm = rhs.DialNorm;
1417 SoundEssenceCoding = rhs.SoundEssenceCoding;
1422 GenericSoundEssenceDescriptor::Dump(FILE* stream)
1424 char identbuf[IdentBufferLen];
1430 FileDescriptor::Dump(stream);
1431 fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.EncodeString(identbuf, IdentBufferLen));
1432 fprintf(stream, " %22s = %d\n", "Locked", Locked);
1433 if ( ! AudioRefLevel.empty() ) {
1434 fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel.get());
1436 if ( ! ElectroSpatialFormulation.empty() ) {
1437 fprintf(stream, " %22s = %d\n", "ElectroSpatialFormulation", ElectroSpatialFormulation.get());
1439 fprintf(stream, " %22s = %d\n", "ChannelCount", ChannelCount);
1440 fprintf(stream, " %22s = %d\n", "QuantizationBits", QuantizationBits);
1441 if ( ! DialNorm.empty() ) {
1442 fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm.get());
1444 fprintf(stream, " %22s = %s\n", "SoundEssenceCoding", SoundEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1449 GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1451 return InterchangeObject::InitFromBuffer(p, l);
1456 GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1458 return InterchangeObject::WriteToBuffer(Buffer);
1461 //------------------------------------------------------------------------------------------
1462 // WaveAudioDescriptor
1466 WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0)
1469 m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
1472 WaveAudioDescriptor::WaveAudioDescriptor(const WaveAudioDescriptor& rhs) : GenericSoundEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1475 m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
1482 WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1485 Result_t result = GenericSoundEssenceDescriptor::InitFromTLVSet(TLVSet);
1486 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(WaveAudioDescriptor, BlockAlign));
1487 if ( ASDCP_SUCCESS(result) ) {
1488 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
1489 SequenceOffset.set_has_value( result == RESULT_OK );
1491 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps));
1492 if ( ASDCP_SUCCESS(result) ) {
1493 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
1494 ChannelAssignment.set_has_value( result == RESULT_OK );
1496 if ( ASDCP_SUCCESS(result) ) {
1497 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ReferenceImageEditRate));
1498 ReferenceImageEditRate.set_has_value( result == RESULT_OK );
1500 if ( ASDCP_SUCCESS(result) ) {
1501 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ReferenceAudioAlignmentLevel));
1502 ReferenceAudioAlignmentLevel.set_has_value( result == RESULT_OK );
1509 WaveAudioDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1512 Result_t result = GenericSoundEssenceDescriptor::WriteToTLVSet(TLVSet);
1513 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(WaveAudioDescriptor, BlockAlign));
1514 if ( ASDCP_SUCCESS(result) && ! SequenceOffset.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
1515 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(WaveAudioDescriptor, AvgBps));
1516 if ( ASDCP_SUCCESS(result) && ! ChannelAssignment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
1517 if ( ASDCP_SUCCESS(result) && ! ReferenceImageEditRate.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ReferenceImageEditRate));
1518 if ( ASDCP_SUCCESS(result) && ! ReferenceAudioAlignmentLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ReferenceAudioAlignmentLevel));
1524 WaveAudioDescriptor::Copy(const WaveAudioDescriptor& rhs)
1526 GenericSoundEssenceDescriptor::Copy(rhs);
1527 BlockAlign = rhs.BlockAlign;
1528 SequenceOffset = rhs.SequenceOffset;
1529 AvgBps = rhs.AvgBps;
1530 ChannelAssignment = rhs.ChannelAssignment;
1531 ReferenceImageEditRate = rhs.ReferenceImageEditRate;
1532 ReferenceAudioAlignmentLevel = rhs.ReferenceAudioAlignmentLevel;
1537 WaveAudioDescriptor::Dump(FILE* stream)
1539 char identbuf[IdentBufferLen];
1545 GenericSoundEssenceDescriptor::Dump(stream);
1546 fprintf(stream, " %22s = %d\n", "BlockAlign", BlockAlign);
1547 if ( ! SequenceOffset.empty() ) {
1548 fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset.get());
1550 fprintf(stream, " %22s = %d\n", "AvgBps", AvgBps);
1551 if ( ! ChannelAssignment.empty() ) {
1552 fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.get().EncodeString(identbuf, IdentBufferLen));
1554 if ( ! ReferenceImageEditRate.empty() ) {
1555 fprintf(stream, " %22s = %s\n", "ReferenceImageEditRate", ReferenceImageEditRate.get().EncodeString(identbuf, IdentBufferLen));
1557 if ( ! ReferenceAudioAlignmentLevel.empty() ) {
1558 fprintf(stream, " %22s = %d\n", "ReferenceAudioAlignmentLevel", ReferenceAudioAlignmentLevel.get());
1564 WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1566 return InterchangeObject::InitFromBuffer(p, l);
1571 WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1573 return InterchangeObject::WriteToBuffer(Buffer);
1576 //------------------------------------------------------------------------------------------
1577 // GenericPictureEssenceDescriptor
1581 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), ActiveHeight(0), ActiveYOffset(0)
1584 m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
1587 GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const GenericPictureEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1590 m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
1597 GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1600 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
1601 if ( ASDCP_SUCCESS(result) ) {
1602 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1603 SignalStandard.set_has_value( result == RESULT_OK );
1605 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1606 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1607 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1608 if ( ASDCP_SUCCESS(result) ) {
1609 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1610 StoredF2Offset.set_has_value( result == RESULT_OK );
1612 if ( ASDCP_SUCCESS(result) ) {
1613 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1614 SampledWidth.set_has_value( result == RESULT_OK );
1616 if ( ASDCP_SUCCESS(result) ) {
1617 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1618 SampledHeight.set_has_value( result == RESULT_OK );
1620 if ( ASDCP_SUCCESS(result) ) {
1621 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1622 SampledXOffset.set_has_value( result == RESULT_OK );
1624 if ( ASDCP_SUCCESS(result) ) {
1625 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1626 SampledYOffset.set_has_value( result == RESULT_OK );
1628 if ( ASDCP_SUCCESS(result) ) {
1629 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1630 DisplayHeight.set_has_value( result == RESULT_OK );
1632 if ( ASDCP_SUCCESS(result) ) {
1633 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1634 DisplayWidth.set_has_value( result == RESULT_OK );
1636 if ( ASDCP_SUCCESS(result) ) {
1637 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1638 DisplayXOffset.set_has_value( result == RESULT_OK );
1640 if ( ASDCP_SUCCESS(result) ) {
1641 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1642 DisplayYOffset.set_has_value( result == RESULT_OK );
1644 if ( ASDCP_SUCCESS(result) ) {
1645 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1646 DisplayF2Offset.set_has_value( result == RESULT_OK );
1648 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1649 if ( ASDCP_SUCCESS(result) ) {
1650 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1651 ActiveFormatDescriptor.set_has_value( result == RESULT_OK );
1653 if ( ASDCP_SUCCESS(result) ) {
1654 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1655 AlphaTransparency.set_has_value( result == RESULT_OK );
1657 if ( ASDCP_SUCCESS(result) ) {
1658 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1659 TransferCharacteristic.set_has_value( result == RESULT_OK );
1661 if ( ASDCP_SUCCESS(result) ) {
1662 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1663 ImageAlignmentOffset.set_has_value( result == RESULT_OK );
1665 if ( ASDCP_SUCCESS(result) ) {
1666 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1667 ImageStartOffset.set_has_value( result == RESULT_OK );
1669 if ( ASDCP_SUCCESS(result) ) {
1670 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1671 ImageEndOffset.set_has_value( result == RESULT_OK );
1673 if ( ASDCP_SUCCESS(result) ) {
1674 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1675 FieldDominance.set_has_value( result == RESULT_OK );
1677 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1678 if ( ASDCP_SUCCESS(result) ) {
1679 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1680 CodingEquations.set_has_value( result == RESULT_OK );
1682 if ( ASDCP_SUCCESS(result) ) {
1683 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1684 ColorPrimaries.set_has_value( result == RESULT_OK );
1686 if ( ASDCP_SUCCESS(result) ) {
1687 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlternativeCenterCuts));
1689 if ( ASDCP_SUCCESS(result) ) {
1690 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth));
1691 ActiveWidth.set_has_value( result == RESULT_OK );
1693 if ( ASDCP_SUCCESS(result) ) {
1694 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight));
1695 ActiveHeight.set_has_value( result == RESULT_OK );
1697 if ( ASDCP_SUCCESS(result) ) {
1698 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset));
1699 ActiveXOffset.set_has_value( result == RESULT_OK );
1701 if ( ASDCP_SUCCESS(result) ) {
1702 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset));
1703 ActiveYOffset.set_has_value( result == RESULT_OK );
1710 GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1713 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1714 if ( ASDCP_SUCCESS(result) && ! SignalStandard.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1715 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1716 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1717 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1718 if ( ASDCP_SUCCESS(result) && ! StoredF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1719 if ( ASDCP_SUCCESS(result) && ! SampledWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1720 if ( ASDCP_SUCCESS(result) && ! SampledHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1721 if ( ASDCP_SUCCESS(result) && ! SampledXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1722 if ( ASDCP_SUCCESS(result) && ! SampledYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1723 if ( ASDCP_SUCCESS(result) && ! DisplayHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1724 if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1725 if ( ASDCP_SUCCESS(result) && ! DisplayXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1726 if ( ASDCP_SUCCESS(result) && ! DisplayYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1727 if ( ASDCP_SUCCESS(result) && ! DisplayF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1728 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1729 if ( ASDCP_SUCCESS(result) && ! ActiveFormatDescriptor.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1730 if ( ASDCP_SUCCESS(result) && ! AlphaTransparency.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1731 if ( ASDCP_SUCCESS(result) && ! TransferCharacteristic.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1732 if ( ASDCP_SUCCESS(result) && ! ImageAlignmentOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1733 if ( ASDCP_SUCCESS(result) && ! ImageStartOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1734 if ( ASDCP_SUCCESS(result) && ! ImageEndOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1735 if ( ASDCP_SUCCESS(result) && ! FieldDominance.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1736 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1737 if ( ASDCP_SUCCESS(result) && ! CodingEquations.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1738 if ( ASDCP_SUCCESS(result) && ! ColorPrimaries.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1739 if ( ASDCP_SUCCESS(result) && ! AlternativeCenterCuts.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlternativeCenterCuts));
1740 if ( ASDCP_SUCCESS(result) && ! ActiveWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth));
1741 if ( ASDCP_SUCCESS(result) && ! ActiveHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight));
1742 if ( ASDCP_SUCCESS(result) && ! ActiveXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset));
1743 if ( ASDCP_SUCCESS(result) && ! ActiveYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset));
1749 GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs)
1751 FileDescriptor::Copy(rhs);
1752 SignalStandard = rhs.SignalStandard;
1753 FrameLayout = rhs.FrameLayout;
1754 StoredWidth = rhs.StoredWidth;
1755 StoredHeight = rhs.StoredHeight;
1756 StoredF2Offset = rhs.StoredF2Offset;
1757 SampledWidth = rhs.SampledWidth;
1758 SampledHeight = rhs.SampledHeight;
1759 SampledXOffset = rhs.SampledXOffset;
1760 SampledYOffset = rhs.SampledYOffset;
1761 DisplayHeight = rhs.DisplayHeight;
1762 DisplayWidth = rhs.DisplayWidth;
1763 DisplayXOffset = rhs.DisplayXOffset;
1764 DisplayYOffset = rhs.DisplayYOffset;
1765 DisplayF2Offset = rhs.DisplayF2Offset;
1766 AspectRatio = rhs.AspectRatio;
1767 ActiveFormatDescriptor = rhs.ActiveFormatDescriptor;
1768 AlphaTransparency = rhs.AlphaTransparency;
1769 TransferCharacteristic = rhs.TransferCharacteristic;
1770 ImageAlignmentOffset = rhs.ImageAlignmentOffset;
1771 ImageStartOffset = rhs.ImageStartOffset;
1772 ImageEndOffset = rhs.ImageEndOffset;
1773 FieldDominance = rhs.FieldDominance;
1774 PictureEssenceCoding = rhs.PictureEssenceCoding;
1775 CodingEquations = rhs.CodingEquations;
1776 ColorPrimaries = rhs.ColorPrimaries;
1777 AlternativeCenterCuts = rhs.AlternativeCenterCuts;
1778 ActiveWidth = rhs.ActiveWidth;
1779 ActiveHeight = rhs.ActiveHeight;
1780 ActiveXOffset = rhs.ActiveXOffset;
1781 ActiveYOffset = rhs.ActiveYOffset;
1786 GenericPictureEssenceDescriptor::Dump(FILE* stream)
1788 char identbuf[IdentBufferLen];
1794 FileDescriptor::Dump(stream);
1795 if ( ! SignalStandard.empty() ) {
1796 fprintf(stream, " %22s = %d\n", "SignalStandard", SignalStandard.get());
1798 fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout);
1799 fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth);
1800 fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight);
1801 if ( ! StoredF2Offset.empty() ) {
1802 fprintf(stream, " %22s = %d\n", "StoredF2Offset", StoredF2Offset.get());
1804 if ( ! SampledWidth.empty() ) {
1805 fprintf(stream, " %22s = %d\n", "SampledWidth", SampledWidth.get());
1807 if ( ! SampledHeight.empty() ) {
1808 fprintf(stream, " %22s = %d\n", "SampledHeight", SampledHeight.get());
1810 if ( ! SampledXOffset.empty() ) {
1811 fprintf(stream, " %22s = %d\n", "SampledXOffset", SampledXOffset.get());
1813 if ( ! SampledYOffset.empty() ) {
1814 fprintf(stream, " %22s = %d\n", "SampledYOffset", SampledYOffset.get());
1816 if ( ! DisplayHeight.empty() ) {
1817 fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight.get());
1819 if ( ! DisplayWidth.empty() ) {
1820 fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get());
1822 if ( ! DisplayXOffset.empty() ) {
1823 fprintf(stream, " %22s = %d\n", "DisplayXOffset", DisplayXOffset.get());
1825 if ( ! DisplayYOffset.empty() ) {
1826 fprintf(stream, " %22s = %d\n", "DisplayYOffset", DisplayYOffset.get());
1828 if ( ! DisplayF2Offset.empty() ) {
1829 fprintf(stream, " %22s = %d\n", "DisplayF2Offset", DisplayF2Offset.get());
1831 fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen));
1832 if ( ! ActiveFormatDescriptor.empty() ) {
1833 fprintf(stream, " %22s = %d\n", "ActiveFormatDescriptor", ActiveFormatDescriptor.get());
1835 if ( ! AlphaTransparency.empty() ) {
1836 fprintf(stream, " %22s = %d\n", "AlphaTransparency", AlphaTransparency.get());
1838 if ( ! TransferCharacteristic.empty() ) {
1839 fprintf(stream, " %22s = %s\n", "TransferCharacteristic", TransferCharacteristic.get().EncodeString(identbuf, IdentBufferLen));
1841 if ( ! ImageAlignmentOffset.empty() ) {
1842 fprintf(stream, " %22s = %d\n", "ImageAlignmentOffset", ImageAlignmentOffset.get());
1844 if ( ! ImageStartOffset.empty() ) {
1845 fprintf(stream, " %22s = %d\n", "ImageStartOffset", ImageStartOffset.get());
1847 if ( ! ImageEndOffset.empty() ) {
1848 fprintf(stream, " %22s = %d\n", "ImageEndOffset", ImageEndOffset.get());
1850 if ( ! FieldDominance.empty() ) {
1851 fprintf(stream, " %22s = %d\n", "FieldDominance", FieldDominance.get());
1853 fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1854 if ( ! CodingEquations.empty() ) {
1855 fprintf(stream, " %22s = %s\n", "CodingEquations", CodingEquations.get().EncodeString(identbuf, IdentBufferLen));
1857 if ( ! ColorPrimaries.empty() ) {
1858 fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen));
1860 if ( ! AlternativeCenterCuts.empty() ) {
1861 fprintf(stream, " %22s:\n", "AlternativeCenterCuts");
1862 AlternativeCenterCuts.get().Dump(stream);
1864 if ( ! ActiveWidth.empty() ) {
1865 fprintf(stream, " %22s = %d\n", "ActiveWidth", ActiveWidth.get());
1867 if ( ! ActiveHeight.empty() ) {
1868 fprintf(stream, " %22s = %d\n", "ActiveHeight", ActiveHeight.get());
1870 if ( ! ActiveXOffset.empty() ) {
1871 fprintf(stream, " %22s = %d\n", "ActiveXOffset", ActiveXOffset.get());
1873 if ( ! ActiveYOffset.empty() ) {
1874 fprintf(stream, " %22s = %d\n", "ActiveYOffset", ActiveYOffset.get());
1880 GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1882 return InterchangeObject::InitFromBuffer(p, l);
1887 GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1889 return InterchangeObject::WriteToBuffer(Buffer);
1892 //------------------------------------------------------------------------------------------
1893 // RGBAEssenceDescriptor
1897 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), AlphaMinRef(0), ScanningDirection(0)
1900 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1903 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1906 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1913 RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1916 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
1917 if ( ASDCP_SUCCESS(result) ) {
1918 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1919 ComponentMaxRef.set_has_value( result == RESULT_OK );
1921 if ( ASDCP_SUCCESS(result) ) {
1922 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1923 ComponentMinRef.set_has_value( result == RESULT_OK );
1925 if ( ASDCP_SUCCESS(result) ) {
1926 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1927 AlphaMinRef.set_has_value( result == RESULT_OK );
1929 if ( ASDCP_SUCCESS(result) ) {
1930 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1931 AlphaMaxRef.set_has_value( result == RESULT_OK );
1933 if ( ASDCP_SUCCESS(result) ) {
1934 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1935 ScanningDirection.set_has_value( result == RESULT_OK );
1942 RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1945 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
1946 if ( ASDCP_SUCCESS(result) && ! ComponentMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1947 if ( ASDCP_SUCCESS(result) && ! ComponentMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1948 if ( ASDCP_SUCCESS(result) && ! AlphaMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1949 if ( ASDCP_SUCCESS(result) && ! AlphaMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1950 if ( ASDCP_SUCCESS(result) && ! ScanningDirection.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1956 RGBAEssenceDescriptor::Copy(const RGBAEssenceDescriptor& rhs)
1958 GenericPictureEssenceDescriptor::Copy(rhs);
1959 ComponentMaxRef = rhs.ComponentMaxRef;
1960 ComponentMinRef = rhs.ComponentMinRef;
1961 AlphaMinRef = rhs.AlphaMinRef;
1962 AlphaMaxRef = rhs.AlphaMaxRef;
1963 ScanningDirection = rhs.ScanningDirection;
1968 RGBAEssenceDescriptor::Dump(FILE* stream)
1970 char identbuf[IdentBufferLen];
1976 GenericPictureEssenceDescriptor::Dump(stream);
1977 if ( ! ComponentMaxRef.empty() ) {
1978 fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef.get());
1980 if ( ! ComponentMinRef.empty() ) {
1981 fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef.get());
1983 if ( ! AlphaMinRef.empty() ) {
1984 fprintf(stream, " %22s = %d\n", "AlphaMinRef", AlphaMinRef.get());
1986 if ( ! AlphaMaxRef.empty() ) {
1987 fprintf(stream, " %22s = %d\n", "AlphaMaxRef", AlphaMaxRef.get());
1989 if ( ! ScanningDirection.empty() ) {
1990 fprintf(stream, " %22s = %d\n", "ScanningDirection", ScanningDirection.get());
1996 RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1998 return InterchangeObject::InitFromBuffer(p, l);
2003 RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2005 return InterchangeObject::WriteToBuffer(Buffer);
2008 //------------------------------------------------------------------------------------------
2009 // JPEG2000PictureSubDescriptor
2013 JPEG2000PictureSubDescriptor::JPEG2000PictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0)
2016 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
2019 JPEG2000PictureSubDescriptor::JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2022 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
2029 JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2032 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2033 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Rsize));
2034 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Xsize));
2035 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Ysize));
2036 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XOsize));
2037 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YOsize));
2038 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTsize));
2039 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTsize));
2040 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
2041 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
2042 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Csize));
2043 if ( ASDCP_SUCCESS(result) ) {
2044 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
2045 PictureComponentSizing.set_has_value( result == RESULT_OK );
2047 if ( ASDCP_SUCCESS(result) ) {
2048 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2049 CodingStyleDefault.set_has_value( result == RESULT_OK );
2051 if ( ASDCP_SUCCESS(result) ) {
2052 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
2053 QuantizationDefault.set_has_value( result == RESULT_OK );
2055 if ( ASDCP_SUCCESS(result) ) {
2056 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, J2CLayout));
2057 J2CLayout.set_has_value( result == RESULT_OK );
2064 JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2067 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2068 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Rsize));
2069 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Xsize));
2070 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Ysize));
2071 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XOsize));
2072 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YOsize));
2073 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTsize));
2074 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTsize));
2075 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
2076 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
2077 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize));
2078 if ( ASDCP_SUCCESS(result) && ! PictureComponentSizing.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
2079 if ( ASDCP_SUCCESS(result) && ! CodingStyleDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2080 if ( ASDCP_SUCCESS(result) && ! QuantizationDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
2081 if ( ASDCP_SUCCESS(result) && ! J2CLayout.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, J2CLayout));
2087 JPEG2000PictureSubDescriptor::Copy(const JPEG2000PictureSubDescriptor& rhs)
2089 InterchangeObject::Copy(rhs);
2093 XOsize = rhs.XOsize;
2094 YOsize = rhs.YOsize;
2095 XTsize = rhs.XTsize;
2096 YTsize = rhs.YTsize;
2097 XTOsize = rhs.XTOsize;
2098 YTOsize = rhs.YTOsize;
2100 PictureComponentSizing = rhs.PictureComponentSizing;
2101 CodingStyleDefault = rhs.CodingStyleDefault;
2102 QuantizationDefault = rhs.QuantizationDefault;
2103 J2CLayout = rhs.J2CLayout;
2108 JPEG2000PictureSubDescriptor::Dump(FILE* stream)
2110 char identbuf[IdentBufferLen];
2116 InterchangeObject::Dump(stream);
2117 fprintf(stream, " %22s = %d\n", "Rsize", Rsize);
2118 fprintf(stream, " %22s = %d\n", "Xsize", Xsize);
2119 fprintf(stream, " %22s = %d\n", "Ysize", Ysize);
2120 fprintf(stream, " %22s = %d\n", "XOsize", XOsize);
2121 fprintf(stream, " %22s = %d\n", "YOsize", YOsize);
2122 fprintf(stream, " %22s = %d\n", "XTsize", XTsize);
2123 fprintf(stream, " %22s = %d\n", "YTsize", YTsize);
2124 fprintf(stream, " %22s = %d\n", "XTOsize", XTOsize);
2125 fprintf(stream, " %22s = %d\n", "YTOsize", YTOsize);
2126 fprintf(stream, " %22s = %d\n", "Csize", Csize);
2127 if ( ! PictureComponentSizing.empty() ) {
2128 fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.get().EncodeString(identbuf, IdentBufferLen));
2130 if ( ! CodingStyleDefault.empty() ) {
2131 fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.get().EncodeString(identbuf, IdentBufferLen));
2133 if ( ! QuantizationDefault.empty() ) {
2134 fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.get().EncodeString(identbuf, IdentBufferLen));
2136 if ( ! J2CLayout.empty() ) {
2137 fprintf(stream, " %22s = %s\n", "J2CLayout", J2CLayout.get().EncodeString(identbuf, IdentBufferLen));
2143 JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2145 return InterchangeObject::InitFromBuffer(p, l);
2150 JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2152 return InterchangeObject::WriteToBuffer(Buffer);
2155 //------------------------------------------------------------------------------------------
2156 // CDCIEssenceDescriptor
2160 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ReversedByteOrder(0), AlphaSampleDepth(0), WhiteReflevel(0)
2163 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2166 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2169 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2176 CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2179 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
2180 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth));
2181 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2182 if ( ASDCP_SUCCESS(result) ) {
2183 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2184 VerticalSubsampling.set_has_value( result == RESULT_OK );
2186 if ( ASDCP_SUCCESS(result) ) {
2187 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2188 ColorSiting.set_has_value( result == RESULT_OK );
2190 if ( ASDCP_SUCCESS(result) ) {
2191 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2192 ReversedByteOrder.set_has_value( result == RESULT_OK );
2194 if ( ASDCP_SUCCESS(result) ) {
2195 result = TLVSet.ReadUi16(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2196 PaddingBits.set_has_value( result == RESULT_OK );
2198 if ( ASDCP_SUCCESS(result) ) {
2199 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2200 AlphaSampleDepth.set_has_value( result == RESULT_OK );
2202 if ( ASDCP_SUCCESS(result) ) {
2203 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2204 BlackRefLevel.set_has_value( result == RESULT_OK );
2206 if ( ASDCP_SUCCESS(result) ) {
2207 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2208 WhiteReflevel.set_has_value( result == RESULT_OK );
2210 if ( ASDCP_SUCCESS(result) ) {
2211 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2212 ColorRange.set_has_value( result == RESULT_OK );
2219 CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2222 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
2223 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth));
2224 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2225 if ( ASDCP_SUCCESS(result) && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2226 if ( ASDCP_SUCCESS(result) && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2227 if ( ASDCP_SUCCESS(result) && ! ReversedByteOrder.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2228 if ( ASDCP_SUCCESS(result) && ! PaddingBits.empty() ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2229 if ( ASDCP_SUCCESS(result) && ! AlphaSampleDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2230 if ( ASDCP_SUCCESS(result) && ! BlackRefLevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2231 if ( ASDCP_SUCCESS(result) && ! WhiteReflevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2232 if ( ASDCP_SUCCESS(result) && ! ColorRange.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2238 CDCIEssenceDescriptor::Copy(const CDCIEssenceDescriptor& rhs)
2240 GenericPictureEssenceDescriptor::Copy(rhs);
2241 ComponentDepth = rhs.ComponentDepth;
2242 HorizontalSubsampling = rhs.HorizontalSubsampling;
2243 VerticalSubsampling = rhs.VerticalSubsampling;
2244 ColorSiting = rhs.ColorSiting;
2245 ReversedByteOrder = rhs.ReversedByteOrder;
2246 PaddingBits = rhs.PaddingBits;
2247 AlphaSampleDepth = rhs.AlphaSampleDepth;
2248 BlackRefLevel = rhs.BlackRefLevel;
2249 WhiteReflevel = rhs.WhiteReflevel;
2250 ColorRange = rhs.ColorRange;
2255 CDCIEssenceDescriptor::Dump(FILE* stream)
2257 char identbuf[IdentBufferLen];
2263 GenericPictureEssenceDescriptor::Dump(stream);
2264 fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth);
2265 fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling);
2266 if ( ! VerticalSubsampling.empty() ) {
2267 fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get());
2269 if ( ! ColorSiting.empty() ) {
2270 fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting.get());
2272 if ( ! ReversedByteOrder.empty() ) {
2273 fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder.get());
2275 if ( ! PaddingBits.empty() ) {
2276 fprintf(stream, " %22s = %d\n", "PaddingBits", PaddingBits.get());
2278 if ( ! AlphaSampleDepth.empty() ) {
2279 fprintf(stream, " %22s = %d\n", "AlphaSampleDepth", AlphaSampleDepth.get());
2281 if ( ! BlackRefLevel.empty() ) {
2282 fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel.get());
2284 if ( ! WhiteReflevel.empty() ) {
2285 fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel.get());
2287 if ( ! ColorRange.empty() ) {
2288 fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange.get());
2294 CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2296 return InterchangeObject::InitFromBuffer(p, l);
2301 CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2303 return InterchangeObject::WriteToBuffer(Buffer);
2306 //------------------------------------------------------------------------------------------
2307 // MPEG2VideoDescriptor
2311 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), SingleSequence(0), CodedContentType(0), ClosedGOP(0), MaxGOP(0), BitRate(0)
2314 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2317 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs) : CDCIEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2320 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2327 MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2330 Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet);
2331 if ( ASDCP_SUCCESS(result) ) {
2332 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
2333 SingleSequence.set_has_value( result == RESULT_OK );
2335 if ( ASDCP_SUCCESS(result) ) {
2336 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
2337 ConstantBFrames.set_has_value( result == RESULT_OK );
2339 if ( ASDCP_SUCCESS(result) ) {
2340 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
2341 CodedContentType.set_has_value( result == RESULT_OK );
2343 if ( ASDCP_SUCCESS(result) ) {
2344 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2345 LowDelay.set_has_value( result == RESULT_OK );
2347 if ( ASDCP_SUCCESS(result) ) {
2348 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
2349 ClosedGOP.set_has_value( result == RESULT_OK );
2351 if ( ASDCP_SUCCESS(result) ) {
2352 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
2353 IdenticalGOP.set_has_value( result == RESULT_OK );
2355 if ( ASDCP_SUCCESS(result) ) {
2356 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
2357 MaxGOP.set_has_value( result == RESULT_OK );
2359 if ( ASDCP_SUCCESS(result) ) {
2360 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
2361 BPictureCount.set_has_value( result == RESULT_OK );
2363 if ( ASDCP_SUCCESS(result) ) {
2364 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2365 BitRate.set_has_value( result == RESULT_OK );
2367 if ( ASDCP_SUCCESS(result) ) {
2368 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2369 ProfileAndLevel.set_has_value( result == RESULT_OK );
2376 MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2379 Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet);
2380 if ( ASDCP_SUCCESS(result) && ! SingleSequence.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
2381 if ( ASDCP_SUCCESS(result) && ! ConstantBFrames.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
2382 if ( ASDCP_SUCCESS(result) && ! CodedContentType.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
2383 if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2384 if ( ASDCP_SUCCESS(result) && ! ClosedGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
2385 if ( ASDCP_SUCCESS(result) && ! IdenticalGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
2386 if ( ASDCP_SUCCESS(result) && ! MaxGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
2387 if ( ASDCP_SUCCESS(result) && ! BPictureCount.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
2388 if ( ASDCP_SUCCESS(result) && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2389 if ( ASDCP_SUCCESS(result) && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2395 MPEG2VideoDescriptor::Copy(const MPEG2VideoDescriptor& rhs)
2397 CDCIEssenceDescriptor::Copy(rhs);
2398 SingleSequence = rhs.SingleSequence;
2399 ConstantBFrames = rhs.ConstantBFrames;
2400 CodedContentType = rhs.CodedContentType;
2401 LowDelay = rhs.LowDelay;
2402 ClosedGOP = rhs.ClosedGOP;
2403 IdenticalGOP = rhs.IdenticalGOP;
2404 MaxGOP = rhs.MaxGOP;
2405 BPictureCount = rhs.BPictureCount;
2406 BitRate = rhs.BitRate;
2407 ProfileAndLevel = rhs.ProfileAndLevel;
2412 MPEG2VideoDescriptor::Dump(FILE* stream)
2414 char identbuf[IdentBufferLen];
2420 CDCIEssenceDescriptor::Dump(stream);
2421 if ( ! SingleSequence.empty() ) {
2422 fprintf(stream, " %22s = %d\n", "SingleSequence", SingleSequence.get());
2424 if ( ! ConstantBFrames.empty() ) {
2425 fprintf(stream, " %22s = %d\n", "ConstantBFrames", ConstantBFrames.get());
2427 if ( ! CodedContentType.empty() ) {
2428 fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType.get());
2430 if ( ! LowDelay.empty() ) {
2431 fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get());
2433 if ( ! ClosedGOP.empty() ) {
2434 fprintf(stream, " %22s = %d\n", "ClosedGOP", ClosedGOP.get());
2436 if ( ! IdenticalGOP.empty() ) {
2437 fprintf(stream, " %22s = %d\n", "IdenticalGOP", IdenticalGOP.get());
2439 if ( ! MaxGOP.empty() ) {
2440 fprintf(stream, " %22s = %d\n", "MaxGOP", MaxGOP.get());
2442 if ( ! BPictureCount.empty() ) {
2443 fprintf(stream, " %22s = %d\n", "BPictureCount", BPictureCount.get());
2445 if ( ! BitRate.empty() ) {
2446 fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get());
2448 if ( ! ProfileAndLevel.empty() ) {
2449 fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel.get());
2455 MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2457 return InterchangeObject::InitFromBuffer(p, l);
2462 MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2464 return InterchangeObject::WriteToBuffer(Buffer);
2467 //------------------------------------------------------------------------------------------
2472 DMSegment::DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0)
2475 m_UL = m_Dict->ul(MDD_DMSegment);
2478 DMSegment::DMSegment(const DMSegment& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2481 m_UL = m_Dict->ul(MDD_DMSegment);
2488 DMSegment::InitFromTLVSet(TLVReader& TLVSet)
2491 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2492 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition));
2493 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, EventStartPosition));
2494 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, Duration));
2495 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, EventComment));
2496 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DMFramework));
2502 DMSegment::WriteToTLVSet(TLVWriter& TLVSet)
2505 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2506 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DataDefinition));
2507 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, EventStartPosition));
2508 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, Duration));
2509 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, EventComment));
2510 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DMFramework));
2516 DMSegment::Copy(const DMSegment& rhs)
2518 InterchangeObject::Copy(rhs);
2519 DataDefinition = rhs.DataDefinition;
2520 EventStartPosition = rhs.EventStartPosition;
2521 Duration = rhs.Duration;
2522 EventComment = rhs.EventComment;
2523 DMFramework = rhs.DMFramework;
2528 DMSegment::Dump(FILE* stream)
2530 char identbuf[IdentBufferLen];
2536 InterchangeObject::Dump(stream);
2537 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
2538 fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition, identbuf));
2539 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf));
2540 fprintf(stream, " %22s = %s\n", "EventComment", EventComment.EncodeString(identbuf, IdentBufferLen));
2541 fprintf(stream, " %22s = %s\n", "DMFramework", DMFramework.EncodeString(identbuf, IdentBufferLen));
2546 DMSegment::InitFromBuffer(const byte_t* p, ui32_t l)
2548 return InterchangeObject::InitFromBuffer(p, l);
2553 DMSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2555 return InterchangeObject::WriteToBuffer(Buffer);
2558 //------------------------------------------------------------------------------------------
2559 // CryptographicFramework
2563 CryptographicFramework::CryptographicFramework(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2566 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2569 CryptographicFramework::CryptographicFramework(const CryptographicFramework& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2572 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2579 CryptographicFramework::InitFromTLVSet(TLVReader& TLVSet)
2582 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2583 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicFramework, ContextSR));
2589 CryptographicFramework::WriteToTLVSet(TLVWriter& TLVSet)
2592 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2593 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicFramework, ContextSR));
2599 CryptographicFramework::Copy(const CryptographicFramework& rhs)
2601 InterchangeObject::Copy(rhs);
2602 ContextSR = rhs.ContextSR;
2607 CryptographicFramework::Dump(FILE* stream)
2609 char identbuf[IdentBufferLen];
2615 InterchangeObject::Dump(stream);
2616 fprintf(stream, " %22s = %s\n", "ContextSR", ContextSR.EncodeString(identbuf, IdentBufferLen));
2621 CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
2623 return InterchangeObject::InitFromBuffer(p, l);
2628 CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2630 return InterchangeObject::WriteToBuffer(Buffer);
2633 //------------------------------------------------------------------------------------------
2634 // CryptographicContext
2638 CryptographicContext::CryptographicContext(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2641 m_UL = m_Dict->ul(MDD_CryptographicContext);
2644 CryptographicContext::CryptographicContext(const CryptographicContext& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2647 m_UL = m_Dict->ul(MDD_CryptographicContext);
2654 CryptographicContext::InitFromTLVSet(TLVReader& TLVSet)
2657 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2658 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, ContextID));
2659 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, SourceEssenceContainer));
2660 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CipherAlgorithm));
2661 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, MICAlgorithm));
2662 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CryptographicKeyID));
2668 CryptographicContext::WriteToTLVSet(TLVWriter& TLVSet)
2671 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2672 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, ContextID));
2673 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, SourceEssenceContainer));
2674 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CipherAlgorithm));
2675 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, MICAlgorithm));
2676 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CryptographicKeyID));
2682 CryptographicContext::Copy(const CryptographicContext& rhs)
2684 InterchangeObject::Copy(rhs);
2685 ContextID = rhs.ContextID;
2686 SourceEssenceContainer = rhs.SourceEssenceContainer;
2687 CipherAlgorithm = rhs.CipherAlgorithm;
2688 MICAlgorithm = rhs.MICAlgorithm;
2689 CryptographicKeyID = rhs.CryptographicKeyID;
2694 CryptographicContext::Dump(FILE* stream)
2696 char identbuf[IdentBufferLen];
2702 InterchangeObject::Dump(stream);
2703 fprintf(stream, " %22s = %s\n", "ContextID", ContextID.EncodeString(identbuf, IdentBufferLen));
2704 fprintf(stream, " %22s = %s\n", "SourceEssenceContainer", SourceEssenceContainer.EncodeString(identbuf, IdentBufferLen));
2705 fprintf(stream, " %22s = %s\n", "CipherAlgorithm", CipherAlgorithm.EncodeString(identbuf, IdentBufferLen));
2706 fprintf(stream, " %22s = %s\n", "MICAlgorithm", MICAlgorithm.EncodeString(identbuf, IdentBufferLen));
2707 fprintf(stream, " %22s = %s\n", "CryptographicKeyID", CryptographicKeyID.EncodeString(identbuf, IdentBufferLen));
2712 CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
2714 return InterchangeObject::InitFromBuffer(p, l);
2719 CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2721 return InterchangeObject::WriteToBuffer(Buffer);
2724 //------------------------------------------------------------------------------------------
2725 // GenericDataEssenceDescriptor
2729 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d)
2732 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2735 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const GenericDataEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2738 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2745 GenericDataEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2748 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
2749 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2755 GenericDataEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2758 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
2759 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2765 GenericDataEssenceDescriptor::Copy(const GenericDataEssenceDescriptor& rhs)
2767 FileDescriptor::Copy(rhs);
2768 DataEssenceCoding = rhs.DataEssenceCoding;
2773 GenericDataEssenceDescriptor::Dump(FILE* stream)
2775 char identbuf[IdentBufferLen];
2781 FileDescriptor::Dump(stream);
2782 fprintf(stream, " %22s = %s\n", "DataEssenceCoding", DataEssenceCoding.EncodeString(identbuf, IdentBufferLen));
2787 GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2789 return InterchangeObject::InitFromBuffer(p, l);
2794 GenericDataEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2796 return InterchangeObject::WriteToBuffer(Buffer);
2799 //------------------------------------------------------------------------------------------
2800 // TimedTextDescriptor
2804 TimedTextDescriptor::TimedTextDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
2807 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2810 TimedTextDescriptor::TimedTextDescriptor(const TimedTextDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2813 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2820 TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2823 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
2824 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, ResourceID));
2825 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, UCSEncoding));
2826 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, NamespaceURI));
2827 if ( ASDCP_SUCCESS(result) ) {
2828 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
2829 RFC5646LanguageTagList.set_has_value( result == RESULT_OK );
2836 TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2839 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
2840 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, ResourceID));
2841 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding));
2842 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI));
2843 if ( ASDCP_SUCCESS(result) && ! RFC5646LanguageTagList.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
2849 TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs)
2851 GenericDataEssenceDescriptor::Copy(rhs);
2852 ResourceID = rhs.ResourceID;
2853 UCSEncoding = rhs.UCSEncoding;
2854 NamespaceURI = rhs.NamespaceURI;
2855 RFC5646LanguageTagList = rhs.RFC5646LanguageTagList;
2860 TimedTextDescriptor::Dump(FILE* stream)
2862 char identbuf[IdentBufferLen];
2868 GenericDataEssenceDescriptor::Dump(stream);
2869 fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen));
2870 fprintf(stream, " %22s = %s\n", "UCSEncoding", UCSEncoding.EncodeString(identbuf, IdentBufferLen));
2871 fprintf(stream, " %22s = %s\n", "NamespaceURI", NamespaceURI.EncodeString(identbuf, IdentBufferLen));
2872 if ( ! RFC5646LanguageTagList.empty() ) {
2873 fprintf(stream, " %22s = %s\n", "RFC5646LanguageTagList", RFC5646LanguageTagList.get().EncodeString(identbuf, IdentBufferLen));
2879 TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2881 return InterchangeObject::InitFromBuffer(p, l);
2886 TimedTextDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2888 return InterchangeObject::WriteToBuffer(Buffer);
2891 //------------------------------------------------------------------------------------------
2892 // TimedTextResourceSubDescriptor
2896 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EssenceStreamID(0)
2899 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2902 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const TimedTextResourceSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2905 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2912 TimedTextResourceSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2915 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2916 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2917 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2918 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2924 TimedTextResourceSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2927 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2928 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2929 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2930 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2936 TimedTextResourceSubDescriptor::Copy(const TimedTextResourceSubDescriptor& rhs)
2938 InterchangeObject::Copy(rhs);
2939 AncillaryResourceID = rhs.AncillaryResourceID;
2940 MIMEMediaType = rhs.MIMEMediaType;
2941 EssenceStreamID = rhs.EssenceStreamID;
2946 TimedTextResourceSubDescriptor::Dump(FILE* stream)
2948 char identbuf[IdentBufferLen];
2954 InterchangeObject::Dump(stream);
2955 fprintf(stream, " %22s = %s\n", "AncillaryResourceID", AncillaryResourceID.EncodeString(identbuf, IdentBufferLen));
2956 fprintf(stream, " %22s = %s\n", "MIMEMediaType", MIMEMediaType.EncodeString(identbuf, IdentBufferLen));
2957 fprintf(stream, " %22s = %d\n", "EssenceStreamID", EssenceStreamID);
2962 TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2964 return InterchangeObject::InitFromBuffer(p, l);
2969 TimedTextResourceSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2971 return InterchangeObject::WriteToBuffer(Buffer);
2974 //------------------------------------------------------------------------------------------
2975 // StereoscopicPictureSubDescriptor
2979 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2982 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2985 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const StereoscopicPictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2988 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2995 StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2998 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3004 StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3007 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3013 StereoscopicPictureSubDescriptor::Copy(const StereoscopicPictureSubDescriptor& rhs)
3015 InterchangeObject::Copy(rhs);
3020 StereoscopicPictureSubDescriptor::Dump(FILE* stream)
3022 char identbuf[IdentBufferLen];
3028 InterchangeObject::Dump(stream);
3033 StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3035 return InterchangeObject::InitFromBuffer(p, l);
3040 StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3042 return InterchangeObject::WriteToBuffer(Buffer);
3045 //------------------------------------------------------------------------------------------
3046 // ContainerConstraintSubDescriptor
3050 ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3053 m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor);
3056 ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const ContainerConstraintSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3059 m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor);
3066 ContainerConstraintSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3069 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3075 ContainerConstraintSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3078 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3084 ContainerConstraintSubDescriptor::Copy(const ContainerConstraintSubDescriptor& rhs)
3086 InterchangeObject::Copy(rhs);
3091 ContainerConstraintSubDescriptor::Dump(FILE* stream)
3093 char identbuf[IdentBufferLen];
3099 InterchangeObject::Dump(stream);
3104 ContainerConstraintSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3106 return InterchangeObject::InitFromBuffer(p, l);
3111 ContainerConstraintSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3113 return InterchangeObject::WriteToBuffer(Buffer);
3116 //------------------------------------------------------------------------------------------
3121 NetworkLocator::NetworkLocator(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3124 m_UL = m_Dict->ul(MDD_NetworkLocator);
3127 NetworkLocator::NetworkLocator(const NetworkLocator& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3130 m_UL = m_Dict->ul(MDD_NetworkLocator);
3137 NetworkLocator::InitFromTLVSet(TLVReader& TLVSet)
3140 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3141 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(NetworkLocator, URLString));
3147 NetworkLocator::WriteToTLVSet(TLVWriter& TLVSet)
3150 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3151 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(NetworkLocator, URLString));
3157 NetworkLocator::Copy(const NetworkLocator& rhs)
3159 InterchangeObject::Copy(rhs);
3160 URLString = rhs.URLString;
3165 NetworkLocator::Dump(FILE* stream)
3167 char identbuf[IdentBufferLen];
3173 InterchangeObject::Dump(stream);
3174 fprintf(stream, " %22s = %s\n", "URLString", URLString.EncodeString(identbuf, IdentBufferLen));
3179 NetworkLocator::InitFromBuffer(const byte_t* p, ui32_t l)
3181 return InterchangeObject::InitFromBuffer(p, l);
3186 NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3188 return InterchangeObject::WriteToBuffer(Buffer);
3191 //------------------------------------------------------------------------------------------
3192 // MCALabelSubDescriptor
3196 MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3199 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
3202 MCALabelSubDescriptor::MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3205 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
3212 MCALabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3215 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3216 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3217 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALinkID));
3218 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3219 if ( ASDCP_SUCCESS(result) ) {
3220 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3221 MCATagName.set_has_value( result == RESULT_OK );
3223 if ( ASDCP_SUCCESS(result) ) {
3224 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3225 MCAChannelID.set_has_value( result == RESULT_OK );
3227 if ( ASDCP_SUCCESS(result) ) {
3228 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3229 RFC5646SpokenLanguage.set_has_value( result == RESULT_OK );
3236 MCALabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3239 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3240 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3241 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALinkID));
3242 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3243 if ( ASDCP_SUCCESS(result) && ! MCATagName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3244 if ( ASDCP_SUCCESS(result) && ! MCAChannelID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3245 if ( ASDCP_SUCCESS(result) && ! RFC5646SpokenLanguage.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3251 MCALabelSubDescriptor::Copy(const MCALabelSubDescriptor& rhs)
3253 InterchangeObject::Copy(rhs);
3254 MCALabelDictionaryID = rhs.MCALabelDictionaryID;
3255 MCALinkID = rhs.MCALinkID;
3256 MCATagSymbol = rhs.MCATagSymbol;
3257 MCATagName = rhs.MCATagName;
3258 MCAChannelID = rhs.MCAChannelID;
3259 RFC5646SpokenLanguage = rhs.RFC5646SpokenLanguage;
3264 MCALabelSubDescriptor::Dump(FILE* stream)
3266 char identbuf[IdentBufferLen];
3272 InterchangeObject::Dump(stream);
3273 fprintf(stream, " %22s = %s\n", "MCALabelDictionaryID", MCALabelDictionaryID.EncodeString(identbuf, IdentBufferLen));
3274 fprintf(stream, " %22s = %s\n", "MCALinkID", MCALinkID.EncodeString(identbuf, IdentBufferLen));
3275 fprintf(stream, " %22s = %s\n", "MCATagSymbol", MCATagSymbol.EncodeString(identbuf, IdentBufferLen));
3276 if ( ! MCATagName.empty() ) {
3277 fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.get().EncodeString(identbuf, IdentBufferLen));
3279 if ( ! MCAChannelID.empty() ) {
3280 fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID.get());
3282 if ( ! RFC5646SpokenLanguage.empty() ) {
3283 fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.get().EncodeString(identbuf, IdentBufferLen));
3289 MCALabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3291 return InterchangeObject::InitFromBuffer(p, l);
3296 MCALabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3298 return InterchangeObject::WriteToBuffer(Buffer);
3301 //------------------------------------------------------------------------------------------
3302 // AudioChannelLabelSubDescriptor
3306 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3309 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3312 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const AudioChannelLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3315 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3322 AudioChannelLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3325 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3326 if ( ASDCP_SUCCESS(result) ) {
3327 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3328 SoundfieldGroupLinkID.set_has_value( result == RESULT_OK );
3335 AudioChannelLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3338 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3339 if ( ASDCP_SUCCESS(result) && ! SoundfieldGroupLinkID.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3345 AudioChannelLabelSubDescriptor::Copy(const AudioChannelLabelSubDescriptor& rhs)
3347 MCALabelSubDescriptor::Copy(rhs);
3348 SoundfieldGroupLinkID = rhs.SoundfieldGroupLinkID;
3353 AudioChannelLabelSubDescriptor::Dump(FILE* stream)
3355 char identbuf[IdentBufferLen];
3361 MCALabelSubDescriptor::Dump(stream);
3362 if ( ! SoundfieldGroupLinkID.empty() ) {
3363 fprintf(stream, " %22s = %s\n", "SoundfieldGroupLinkID", SoundfieldGroupLinkID.get().EncodeString(identbuf, IdentBufferLen));
3369 AudioChannelLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3371 return InterchangeObject::InitFromBuffer(p, l);
3376 AudioChannelLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3378 return InterchangeObject::WriteToBuffer(Buffer);
3381 //------------------------------------------------------------------------------------------
3382 // SoundfieldGroupLabelSubDescriptor
3386 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3389 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3392 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const SoundfieldGroupLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3395 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3402 SoundfieldGroupLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3405 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3406 if ( ASDCP_SUCCESS(result) ) {
3407 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3414 SoundfieldGroupLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3417 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3418 if ( ASDCP_SUCCESS(result) && ! GroupOfSoundfieldGroupsLinkID.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3424 SoundfieldGroupLabelSubDescriptor::Copy(const SoundfieldGroupLabelSubDescriptor& rhs)
3426 MCALabelSubDescriptor::Copy(rhs);
3427 GroupOfSoundfieldGroupsLinkID = rhs.GroupOfSoundfieldGroupsLinkID;
3432 SoundfieldGroupLabelSubDescriptor::Dump(FILE* stream)
3434 char identbuf[IdentBufferLen];
3440 MCALabelSubDescriptor::Dump(stream);
3441 if ( ! GroupOfSoundfieldGroupsLinkID.empty() ) {
3442 fprintf(stream, " %22s:\n", "GroupOfSoundfieldGroupsLinkID");
3443 GroupOfSoundfieldGroupsLinkID.get().Dump(stream);
3449 SoundfieldGroupLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3451 return InterchangeObject::InitFromBuffer(p, l);
3456 SoundfieldGroupLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3458 return InterchangeObject::WriteToBuffer(Buffer);
3461 //------------------------------------------------------------------------------------------
3462 // GroupOfSoundfieldGroupsLabelSubDescriptor
3466 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3469 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3472 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3475 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3482 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3485 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3491 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3494 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3500 GroupOfSoundfieldGroupsLabelSubDescriptor::Copy(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs)
3502 MCALabelSubDescriptor::Copy(rhs);
3507 GroupOfSoundfieldGroupsLabelSubDescriptor::Dump(FILE* stream)
3509 char identbuf[IdentBufferLen];
3515 MCALabelSubDescriptor::Dump(stream);
3520 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3522 return InterchangeObject::InitFromBuffer(p, l);
3527 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3529 return InterchangeObject::WriteToBuffer(Buffer);
3532 //------------------------------------------------------------------------------------------
3537 DCDataDescriptor::DCDataDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
3540 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3543 DCDataDescriptor::DCDataDescriptor(const DCDataDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3546 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3553 DCDataDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3556 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
3562 DCDataDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3565 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
3571 DCDataDescriptor::Copy(const DCDataDescriptor& rhs)
3573 GenericDataEssenceDescriptor::Copy(rhs);
3578 DCDataDescriptor::Dump(FILE* stream)
3580 char identbuf[IdentBufferLen];
3586 GenericDataEssenceDescriptor::Dump(stream);
3591 DCDataDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3593 return InterchangeObject::InitFromBuffer(p, l);
3598 DCDataDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3600 return InterchangeObject::WriteToBuffer(Buffer);
3603 //------------------------------------------------------------------------------------------
3604 // DolbyAtmosSubDescriptor
3608 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), FirstFrame(0), MaxChannelCount(0), MaxObjectCount(0), AtmosVersion(0)
3611 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3614 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const DolbyAtmosSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3617 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3624 DolbyAtmosSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3627 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3628 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3629 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3630 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3631 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3632 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3638 DolbyAtmosSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3641 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3642 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3643 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3644 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3645 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3646 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3652 DolbyAtmosSubDescriptor::Copy(const DolbyAtmosSubDescriptor& rhs)
3654 InterchangeObject::Copy(rhs);
3655 AtmosID = rhs.AtmosID;
3656 FirstFrame = rhs.FirstFrame;
3657 MaxChannelCount = rhs.MaxChannelCount;
3658 MaxObjectCount = rhs.MaxObjectCount;
3659 AtmosVersion = rhs.AtmosVersion;
3664 DolbyAtmosSubDescriptor::Dump(FILE* stream)
3666 char identbuf[IdentBufferLen];
3672 InterchangeObject::Dump(stream);
3673 fprintf(stream, " %22s = %s\n", "AtmosID", AtmosID.EncodeString(identbuf, IdentBufferLen));
3674 fprintf(stream, " %22s = %d\n", "FirstFrame", FirstFrame);
3675 fprintf(stream, " %22s = %d\n", "MaxChannelCount", MaxChannelCount);
3676 fprintf(stream, " %22s = %d\n", "MaxObjectCount", MaxObjectCount);
3677 fprintf(stream, " %22s = %d\n", "AtmosVersion", AtmosVersion);
3682 DolbyAtmosSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3684 return InterchangeObject::InitFromBuffer(p, l);
3689 DolbyAtmosSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3691 return InterchangeObject::WriteToBuffer(Buffer);
3694 //------------------------------------------------------------------------------------------
3695 // PHDRMetadataTrackSubDescriptor
3699 PHDRMetadataTrackSubDescriptor::PHDRMetadataTrackSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), SourceTrackID(0), SimplePayloadSID(0)
3702 m_UL = m_Dict->ul(MDD_PHDRMetadataTrackSubDescriptor);
3705 PHDRMetadataTrackSubDescriptor::PHDRMetadataTrackSubDescriptor(const PHDRMetadataTrackSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3708 m_UL = m_Dict->ul(MDD_PHDRMetadataTrackSubDescriptor);
3715 PHDRMetadataTrackSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3718 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3719 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, DataDefinition));
3720 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, SourceTrackID));
3721 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, SimplePayloadSID));
3727 PHDRMetadataTrackSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3730 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3731 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, DataDefinition));
3732 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, SourceTrackID));
3733 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, SimplePayloadSID));
3739 PHDRMetadataTrackSubDescriptor::Copy(const PHDRMetadataTrackSubDescriptor& rhs)
3741 InterchangeObject::Copy(rhs);
3742 DataDefinition = rhs.DataDefinition;
3743 SourceTrackID = rhs.SourceTrackID;
3744 SimplePayloadSID = rhs.SimplePayloadSID;
3749 PHDRMetadataTrackSubDescriptor::Dump(FILE* stream)
3751 char identbuf[IdentBufferLen];
3757 InterchangeObject::Dump(stream);
3758 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
3759 fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID);
3760 fprintf(stream, " %22s = %d\n", "SimplePayloadSID", SimplePayloadSID);
3765 PHDRMetadataTrackSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3767 return InterchangeObject::InitFromBuffer(p, l);
3772 PHDRMetadataTrackSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3774 return InterchangeObject::WriteToBuffer(Buffer);