2 Copyright (c) 2005-2012, 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
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), ActiveWidth(0), ActiveXOffset(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) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AlternativeCenterCuts));
1687 if ( ASDCP_SUCCESS(result) ) {
1688 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth));
1689 ActiveWidth.set_has_value( result == RESULT_OK );
1691 if ( ASDCP_SUCCESS(result) ) {
1692 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight));
1693 ActiveHeight.set_has_value( result == RESULT_OK );
1695 if ( ASDCP_SUCCESS(result) ) {
1696 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset));
1697 ActiveXOffset.set_has_value( result == RESULT_OK );
1699 if ( ASDCP_SUCCESS(result) ) {
1700 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset));
1701 ActiveYOffset.set_has_value( result == RESULT_OK );
1708 GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1711 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1712 if ( ASDCP_SUCCESS(result) && ! SignalStandard.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1713 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1714 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1715 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1716 if ( ASDCP_SUCCESS(result) && ! StoredF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1717 if ( ASDCP_SUCCESS(result) && ! SampledWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1718 if ( ASDCP_SUCCESS(result) && ! SampledHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1719 if ( ASDCP_SUCCESS(result) && ! SampledXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1720 if ( ASDCP_SUCCESS(result) && ! SampledYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1721 if ( ASDCP_SUCCESS(result) && ! DisplayHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1722 if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1723 if ( ASDCP_SUCCESS(result) && ! DisplayXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1724 if ( ASDCP_SUCCESS(result) && ! DisplayYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1725 if ( ASDCP_SUCCESS(result) && ! DisplayF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1726 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1727 if ( ASDCP_SUCCESS(result) && ! ActiveFormatDescriptor.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1728 if ( ASDCP_SUCCESS(result) && ! AlphaTransparency.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1729 if ( ASDCP_SUCCESS(result) && ! TransferCharacteristic.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1730 if ( ASDCP_SUCCESS(result) && ! ImageAlignmentOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1731 if ( ASDCP_SUCCESS(result) && ! ImageStartOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1732 if ( ASDCP_SUCCESS(result) && ! ImageEndOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1733 if ( ASDCP_SUCCESS(result) && ! FieldDominance.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1734 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1735 if ( ASDCP_SUCCESS(result) && ! CodingEquations.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1736 if ( ASDCP_SUCCESS(result) && ! ColorPrimaries.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1737 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AlternativeCenterCuts));
1738 if ( ASDCP_SUCCESS(result) && ! ActiveWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth));
1739 if ( ASDCP_SUCCESS(result) && ! ActiveHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight));
1740 if ( ASDCP_SUCCESS(result) && ! ActiveXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset));
1741 if ( ASDCP_SUCCESS(result) && ! ActiveYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset));
1747 GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs)
1749 FileDescriptor::Copy(rhs);
1750 SignalStandard = rhs.SignalStandard;
1751 FrameLayout = rhs.FrameLayout;
1752 StoredWidth = rhs.StoredWidth;
1753 StoredHeight = rhs.StoredHeight;
1754 StoredF2Offset = rhs.StoredF2Offset;
1755 SampledWidth = rhs.SampledWidth;
1756 SampledHeight = rhs.SampledHeight;
1757 SampledXOffset = rhs.SampledXOffset;
1758 SampledYOffset = rhs.SampledYOffset;
1759 DisplayHeight = rhs.DisplayHeight;
1760 DisplayWidth = rhs.DisplayWidth;
1761 DisplayXOffset = rhs.DisplayXOffset;
1762 DisplayYOffset = rhs.DisplayYOffset;
1763 DisplayF2Offset = rhs.DisplayF2Offset;
1764 AspectRatio = rhs.AspectRatio;
1765 ActiveFormatDescriptor = rhs.ActiveFormatDescriptor;
1766 AlphaTransparency = rhs.AlphaTransparency;
1767 TransferCharacteristic = rhs.TransferCharacteristic;
1768 ImageAlignmentOffset = rhs.ImageAlignmentOffset;
1769 ImageStartOffset = rhs.ImageStartOffset;
1770 ImageEndOffset = rhs.ImageEndOffset;
1771 FieldDominance = rhs.FieldDominance;
1772 PictureEssenceCoding = rhs.PictureEssenceCoding;
1773 CodingEquations = rhs.CodingEquations;
1774 ColorPrimaries = rhs.ColorPrimaries;
1775 AlternativeCenterCuts = rhs.AlternativeCenterCuts;
1776 ActiveWidth = rhs.ActiveWidth;
1777 ActiveHeight = rhs.ActiveHeight;
1778 ActiveXOffset = rhs.ActiveXOffset;
1779 ActiveYOffset = rhs.ActiveYOffset;
1784 GenericPictureEssenceDescriptor::Dump(FILE* stream)
1786 char identbuf[IdentBufferLen];
1792 FileDescriptor::Dump(stream);
1793 if ( ! SignalStandard.empty() ) {
1794 fprintf(stream, " %22s = %d\n", "SignalStandard", SignalStandard.get());
1796 fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout);
1797 fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth);
1798 fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight);
1799 if ( ! StoredF2Offset.empty() ) {
1800 fprintf(stream, " %22s = %d\n", "StoredF2Offset", StoredF2Offset.get());
1802 if ( ! SampledWidth.empty() ) {
1803 fprintf(stream, " %22s = %d\n", "SampledWidth", SampledWidth.get());
1805 if ( ! SampledHeight.empty() ) {
1806 fprintf(stream, " %22s = %d\n", "SampledHeight", SampledHeight.get());
1808 if ( ! SampledXOffset.empty() ) {
1809 fprintf(stream, " %22s = %d\n", "SampledXOffset", SampledXOffset.get());
1811 if ( ! SampledYOffset.empty() ) {
1812 fprintf(stream, " %22s = %d\n", "SampledYOffset", SampledYOffset.get());
1814 if ( ! DisplayHeight.empty() ) {
1815 fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight.get());
1817 if ( ! DisplayWidth.empty() ) {
1818 fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get());
1820 if ( ! DisplayXOffset.empty() ) {
1821 fprintf(stream, " %22s = %d\n", "DisplayXOffset", DisplayXOffset.get());
1823 if ( ! DisplayYOffset.empty() ) {
1824 fprintf(stream, " %22s = %d\n", "DisplayYOffset", DisplayYOffset.get());
1826 if ( ! DisplayF2Offset.empty() ) {
1827 fprintf(stream, " %22s = %d\n", "DisplayF2Offset", DisplayF2Offset.get());
1829 fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen));
1830 if ( ! ActiveFormatDescriptor.empty() ) {
1831 fprintf(stream, " %22s = %d\n", "ActiveFormatDescriptor", ActiveFormatDescriptor.get());
1833 if ( ! AlphaTransparency.empty() ) {
1834 fprintf(stream, " %22s = %d\n", "AlphaTransparency", AlphaTransparency.get());
1836 if ( ! TransferCharacteristic.empty() ) {
1837 fprintf(stream, " %22s = %s\n", "TransferCharacteristic", TransferCharacteristic.get().EncodeString(identbuf, IdentBufferLen));
1839 if ( ! ImageAlignmentOffset.empty() ) {
1840 fprintf(stream, " %22s = %d\n", "ImageAlignmentOffset", ImageAlignmentOffset.get());
1842 if ( ! ImageStartOffset.empty() ) {
1843 fprintf(stream, " %22s = %d\n", "ImageStartOffset", ImageStartOffset.get());
1845 if ( ! ImageEndOffset.empty() ) {
1846 fprintf(stream, " %22s = %d\n", "ImageEndOffset", ImageEndOffset.get());
1848 if ( ! FieldDominance.empty() ) {
1849 fprintf(stream, " %22s = %d\n", "FieldDominance", FieldDominance.get());
1851 fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1852 if ( ! CodingEquations.empty() ) {
1853 fprintf(stream, " %22s = %s\n", "CodingEquations", CodingEquations.get().EncodeString(identbuf, IdentBufferLen));
1855 if ( ! ColorPrimaries.empty() ) {
1856 fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen));
1858 fprintf(stream, " %22s:\n", "AlternativeCenterCuts");
1859 AlternativeCenterCuts.Dump(stream);
1860 if ( ! ActiveWidth.empty() ) {
1861 fprintf(stream, " %22s = %d\n", "ActiveWidth", ActiveWidth.get());
1863 if ( ! ActiveHeight.empty() ) {
1864 fprintf(stream, " %22s = %d\n", "ActiveHeight", ActiveHeight.get());
1866 if ( ! ActiveXOffset.empty() ) {
1867 fprintf(stream, " %22s = %d\n", "ActiveXOffset", ActiveXOffset.get());
1869 if ( ! ActiveYOffset.empty() ) {
1870 fprintf(stream, " %22s = %d\n", "ActiveYOffset", ActiveYOffset.get());
1876 GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1878 return InterchangeObject::InitFromBuffer(p, l);
1883 GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1885 return InterchangeObject::WriteToBuffer(Buffer);
1888 //------------------------------------------------------------------------------------------
1889 // RGBAEssenceDescriptor
1893 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), AlphaMinRef(0), ScanningDirection(0)
1896 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1899 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1902 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1909 RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1912 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
1913 if ( ASDCP_SUCCESS(result) ) {
1914 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1915 ComponentMaxRef.set_has_value( result == RESULT_OK );
1917 if ( ASDCP_SUCCESS(result) ) {
1918 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1919 ComponentMinRef.set_has_value( result == RESULT_OK );
1921 if ( ASDCP_SUCCESS(result) ) {
1922 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1923 AlphaMinRef.set_has_value( result == RESULT_OK );
1925 if ( ASDCP_SUCCESS(result) ) {
1926 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1927 AlphaMaxRef.set_has_value( result == RESULT_OK );
1929 if ( ASDCP_SUCCESS(result) ) {
1930 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1931 ScanningDirection.set_has_value( result == RESULT_OK );
1938 RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1941 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
1942 if ( ASDCP_SUCCESS(result) && ! ComponentMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1943 if ( ASDCP_SUCCESS(result) && ! ComponentMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1944 if ( ASDCP_SUCCESS(result) && ! AlphaMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1945 if ( ASDCP_SUCCESS(result) && ! AlphaMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1946 if ( ASDCP_SUCCESS(result) && ! ScanningDirection.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1952 RGBAEssenceDescriptor::Copy(const RGBAEssenceDescriptor& rhs)
1954 GenericPictureEssenceDescriptor::Copy(rhs);
1955 ComponentMaxRef = rhs.ComponentMaxRef;
1956 ComponentMinRef = rhs.ComponentMinRef;
1957 AlphaMinRef = rhs.AlphaMinRef;
1958 AlphaMaxRef = rhs.AlphaMaxRef;
1959 ScanningDirection = rhs.ScanningDirection;
1964 RGBAEssenceDescriptor::Dump(FILE* stream)
1966 char identbuf[IdentBufferLen];
1972 GenericPictureEssenceDescriptor::Dump(stream);
1973 if ( ! ComponentMaxRef.empty() ) {
1974 fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef.get());
1976 if ( ! ComponentMinRef.empty() ) {
1977 fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef.get());
1979 if ( ! AlphaMinRef.empty() ) {
1980 fprintf(stream, " %22s = %d\n", "AlphaMinRef", AlphaMinRef.get());
1982 if ( ! AlphaMaxRef.empty() ) {
1983 fprintf(stream, " %22s = %d\n", "AlphaMaxRef", AlphaMaxRef.get());
1985 if ( ! ScanningDirection.empty() ) {
1986 fprintf(stream, " %22s = %d\n", "ScanningDirection", ScanningDirection.get());
1992 RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1994 return InterchangeObject::InitFromBuffer(p, l);
1999 RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2001 return InterchangeObject::WriteToBuffer(Buffer);
2004 //------------------------------------------------------------------------------------------
2005 // JPEG2000PictureSubDescriptor
2009 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)
2012 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
2015 JPEG2000PictureSubDescriptor::JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2018 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
2025 JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2028 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2029 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Rsize));
2030 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Xsize));
2031 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Ysize));
2032 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XOsize));
2033 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YOsize));
2034 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTsize));
2035 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTsize));
2036 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
2037 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
2038 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Csize));
2039 if ( ASDCP_SUCCESS(result) ) {
2040 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
2041 PictureComponentSizing.set_has_value( result == RESULT_OK );
2043 if ( ASDCP_SUCCESS(result) ) {
2044 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2045 CodingStyleDefault.set_has_value( result == RESULT_OK );
2047 if ( ASDCP_SUCCESS(result) ) {
2048 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
2049 QuantizationDefault.set_has_value( result == RESULT_OK );
2056 JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2059 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2060 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Rsize));
2061 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Xsize));
2062 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Ysize));
2063 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XOsize));
2064 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YOsize));
2065 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTsize));
2066 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTsize));
2067 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
2068 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
2069 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize));
2070 if ( ASDCP_SUCCESS(result) && ! PictureComponentSizing.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
2071 if ( ASDCP_SUCCESS(result) && ! CodingStyleDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2072 if ( ASDCP_SUCCESS(result) && ! QuantizationDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
2078 JPEG2000PictureSubDescriptor::Copy(const JPEG2000PictureSubDescriptor& rhs)
2080 InterchangeObject::Copy(rhs);
2084 XOsize = rhs.XOsize;
2085 YOsize = rhs.YOsize;
2086 XTsize = rhs.XTsize;
2087 YTsize = rhs.YTsize;
2088 XTOsize = rhs.XTOsize;
2089 YTOsize = rhs.YTOsize;
2091 PictureComponentSizing = rhs.PictureComponentSizing;
2092 CodingStyleDefault = rhs.CodingStyleDefault;
2093 QuantizationDefault = rhs.QuantizationDefault;
2098 JPEG2000PictureSubDescriptor::Dump(FILE* stream)
2100 char identbuf[IdentBufferLen];
2106 InterchangeObject::Dump(stream);
2107 fprintf(stream, " %22s = %d\n", "Rsize", Rsize);
2108 fprintf(stream, " %22s = %d\n", "Xsize", Xsize);
2109 fprintf(stream, " %22s = %d\n", "Ysize", Ysize);
2110 fprintf(stream, " %22s = %d\n", "XOsize", XOsize);
2111 fprintf(stream, " %22s = %d\n", "YOsize", YOsize);
2112 fprintf(stream, " %22s = %d\n", "XTsize", XTsize);
2113 fprintf(stream, " %22s = %d\n", "YTsize", YTsize);
2114 fprintf(stream, " %22s = %d\n", "XTOsize", XTOsize);
2115 fprintf(stream, " %22s = %d\n", "YTOsize", YTOsize);
2116 fprintf(stream, " %22s = %d\n", "Csize", Csize);
2117 if ( ! PictureComponentSizing.empty() ) {
2118 fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.get().EncodeString(identbuf, IdentBufferLen));
2120 if ( ! CodingStyleDefault.empty() ) {
2121 fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.get().EncodeString(identbuf, IdentBufferLen));
2123 if ( ! QuantizationDefault.empty() ) {
2124 fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.get().EncodeString(identbuf, IdentBufferLen));
2130 JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2132 return InterchangeObject::InitFromBuffer(p, l);
2137 JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2139 return InterchangeObject::WriteToBuffer(Buffer);
2142 //------------------------------------------------------------------------------------------
2143 // CDCIEssenceDescriptor
2147 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ReversedByteOrder(0), AlphaSampleDepth(0), WhiteReflevel(0)
2150 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2153 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2156 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2163 CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2166 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
2167 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth));
2168 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2169 if ( ASDCP_SUCCESS(result) ) {
2170 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2171 VerticalSubsampling.set_has_value( result == RESULT_OK );
2173 if ( ASDCP_SUCCESS(result) ) {
2174 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2175 ColorSiting.set_has_value( result == RESULT_OK );
2177 if ( ASDCP_SUCCESS(result) ) {
2178 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2179 ReversedByteOrder.set_has_value( result == RESULT_OK );
2181 if ( ASDCP_SUCCESS(result) ) {
2182 result = TLVSet.ReadUi16(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2183 PaddingBits.set_has_value( result == RESULT_OK );
2185 if ( ASDCP_SUCCESS(result) ) {
2186 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2187 AlphaSampleDepth.set_has_value( result == RESULT_OK );
2189 if ( ASDCP_SUCCESS(result) ) {
2190 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2191 BlackRefLevel.set_has_value( result == RESULT_OK );
2193 if ( ASDCP_SUCCESS(result) ) {
2194 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2195 WhiteReflevel.set_has_value( result == RESULT_OK );
2197 if ( ASDCP_SUCCESS(result) ) {
2198 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2199 ColorRange.set_has_value( result == RESULT_OK );
2206 CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2209 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
2210 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth));
2211 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2212 if ( ASDCP_SUCCESS(result) && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2213 if ( ASDCP_SUCCESS(result) && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2214 if ( ASDCP_SUCCESS(result) && ! ReversedByteOrder.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2215 if ( ASDCP_SUCCESS(result) && ! PaddingBits.empty() ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2216 if ( ASDCP_SUCCESS(result) && ! AlphaSampleDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2217 if ( ASDCP_SUCCESS(result) && ! BlackRefLevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2218 if ( ASDCP_SUCCESS(result) && ! WhiteReflevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2219 if ( ASDCP_SUCCESS(result) && ! ColorRange.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2225 CDCIEssenceDescriptor::Copy(const CDCIEssenceDescriptor& rhs)
2227 GenericPictureEssenceDescriptor::Copy(rhs);
2228 ComponentDepth = rhs.ComponentDepth;
2229 HorizontalSubsampling = rhs.HorizontalSubsampling;
2230 VerticalSubsampling = rhs.VerticalSubsampling;
2231 ColorSiting = rhs.ColorSiting;
2232 ReversedByteOrder = rhs.ReversedByteOrder;
2233 PaddingBits = rhs.PaddingBits;
2234 AlphaSampleDepth = rhs.AlphaSampleDepth;
2235 BlackRefLevel = rhs.BlackRefLevel;
2236 WhiteReflevel = rhs.WhiteReflevel;
2237 ColorRange = rhs.ColorRange;
2242 CDCIEssenceDescriptor::Dump(FILE* stream)
2244 char identbuf[IdentBufferLen];
2250 GenericPictureEssenceDescriptor::Dump(stream);
2251 fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth);
2252 fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling);
2253 if ( ! VerticalSubsampling.empty() ) {
2254 fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get());
2256 if ( ! ColorSiting.empty() ) {
2257 fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting.get());
2259 if ( ! ReversedByteOrder.empty() ) {
2260 fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder.get());
2262 if ( ! PaddingBits.empty() ) {
2263 fprintf(stream, " %22s = %d\n", "PaddingBits", PaddingBits.get());
2265 if ( ! AlphaSampleDepth.empty() ) {
2266 fprintf(stream, " %22s = %d\n", "AlphaSampleDepth", AlphaSampleDepth.get());
2268 if ( ! BlackRefLevel.empty() ) {
2269 fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel.get());
2271 if ( ! WhiteReflevel.empty() ) {
2272 fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel.get());
2274 if ( ! ColorRange.empty() ) {
2275 fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange.get());
2281 CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2283 return InterchangeObject::InitFromBuffer(p, l);
2288 CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2290 return InterchangeObject::WriteToBuffer(Buffer);
2293 //------------------------------------------------------------------------------------------
2294 // MPEG2VideoDescriptor
2298 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), SingleSequence(0), CodedContentType(0), ClosedGOP(0), MaxGOP(0), BitRate(0)
2301 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2304 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs) : CDCIEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2307 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2314 MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2317 Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet);
2318 if ( ASDCP_SUCCESS(result) ) {
2319 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
2320 SingleSequence.set_has_value( result == RESULT_OK );
2322 if ( ASDCP_SUCCESS(result) ) {
2323 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
2324 ConstantBFrames.set_has_value( result == RESULT_OK );
2326 if ( ASDCP_SUCCESS(result) ) {
2327 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
2328 CodedContentType.set_has_value( result == RESULT_OK );
2330 if ( ASDCP_SUCCESS(result) ) {
2331 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2332 LowDelay.set_has_value( result == RESULT_OK );
2334 if ( ASDCP_SUCCESS(result) ) {
2335 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
2336 ClosedGOP.set_has_value( result == RESULT_OK );
2338 if ( ASDCP_SUCCESS(result) ) {
2339 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
2340 IdenticalGOP.set_has_value( result == RESULT_OK );
2342 if ( ASDCP_SUCCESS(result) ) {
2343 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
2344 MaxGOP.set_has_value( result == RESULT_OK );
2346 if ( ASDCP_SUCCESS(result) ) {
2347 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
2348 BPictureCount.set_has_value( result == RESULT_OK );
2350 if ( ASDCP_SUCCESS(result) ) {
2351 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2352 BitRate.set_has_value( result == RESULT_OK );
2354 if ( ASDCP_SUCCESS(result) ) {
2355 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2356 ProfileAndLevel.set_has_value( result == RESULT_OK );
2363 MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2366 Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet);
2367 if ( ASDCP_SUCCESS(result) && ! SingleSequence.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
2368 if ( ASDCP_SUCCESS(result) && ! ConstantBFrames.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
2369 if ( ASDCP_SUCCESS(result) && ! CodedContentType.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
2370 if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2371 if ( ASDCP_SUCCESS(result) && ! ClosedGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
2372 if ( ASDCP_SUCCESS(result) && ! IdenticalGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
2373 if ( ASDCP_SUCCESS(result) && ! MaxGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
2374 if ( ASDCP_SUCCESS(result) && ! BPictureCount.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
2375 if ( ASDCP_SUCCESS(result) && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2376 if ( ASDCP_SUCCESS(result) && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2382 MPEG2VideoDescriptor::Copy(const MPEG2VideoDescriptor& rhs)
2384 CDCIEssenceDescriptor::Copy(rhs);
2385 SingleSequence = rhs.SingleSequence;
2386 ConstantBFrames = rhs.ConstantBFrames;
2387 CodedContentType = rhs.CodedContentType;
2388 LowDelay = rhs.LowDelay;
2389 ClosedGOP = rhs.ClosedGOP;
2390 IdenticalGOP = rhs.IdenticalGOP;
2391 MaxGOP = rhs.MaxGOP;
2392 BPictureCount = rhs.BPictureCount;
2393 BitRate = rhs.BitRate;
2394 ProfileAndLevel = rhs.ProfileAndLevel;
2399 MPEG2VideoDescriptor::Dump(FILE* stream)
2401 char identbuf[IdentBufferLen];
2407 CDCIEssenceDescriptor::Dump(stream);
2408 if ( ! SingleSequence.empty() ) {
2409 fprintf(stream, " %22s = %d\n", "SingleSequence", SingleSequence.get());
2411 if ( ! ConstantBFrames.empty() ) {
2412 fprintf(stream, " %22s = %d\n", "ConstantBFrames", ConstantBFrames.get());
2414 if ( ! CodedContentType.empty() ) {
2415 fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType.get());
2417 if ( ! LowDelay.empty() ) {
2418 fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get());
2420 if ( ! ClosedGOP.empty() ) {
2421 fprintf(stream, " %22s = %d\n", "ClosedGOP", ClosedGOP.get());
2423 if ( ! IdenticalGOP.empty() ) {
2424 fprintf(stream, " %22s = %d\n", "IdenticalGOP", IdenticalGOP.get());
2426 if ( ! MaxGOP.empty() ) {
2427 fprintf(stream, " %22s = %d\n", "MaxGOP", MaxGOP.get());
2429 if ( ! BPictureCount.empty() ) {
2430 fprintf(stream, " %22s = %d\n", "BPictureCount", BPictureCount.get());
2432 if ( ! BitRate.empty() ) {
2433 fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get());
2435 if ( ! ProfileAndLevel.empty() ) {
2436 fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel.get());
2442 MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2444 return InterchangeObject::InitFromBuffer(p, l);
2449 MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2451 return InterchangeObject::WriteToBuffer(Buffer);
2454 //------------------------------------------------------------------------------------------
2459 DMSegment::DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0)
2462 m_UL = m_Dict->ul(MDD_DMSegment);
2465 DMSegment::DMSegment(const DMSegment& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2468 m_UL = m_Dict->ul(MDD_DMSegment);
2475 DMSegment::InitFromTLVSet(TLVReader& TLVSet)
2478 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2479 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition));
2480 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, EventStartPosition));
2481 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, Duration));
2482 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, EventComment));
2483 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DMFramework));
2489 DMSegment::WriteToTLVSet(TLVWriter& TLVSet)
2492 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2493 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DataDefinition));
2494 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, EventStartPosition));
2495 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, Duration));
2496 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, EventComment));
2497 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DMFramework));
2503 DMSegment::Copy(const DMSegment& rhs)
2505 InterchangeObject::Copy(rhs);
2506 DataDefinition = rhs.DataDefinition;
2507 EventStartPosition = rhs.EventStartPosition;
2508 Duration = rhs.Duration;
2509 EventComment = rhs.EventComment;
2510 DMFramework = rhs.DMFramework;
2515 DMSegment::Dump(FILE* stream)
2517 char identbuf[IdentBufferLen];
2523 InterchangeObject::Dump(stream);
2524 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
2525 fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition, identbuf));
2526 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf));
2527 fprintf(stream, " %22s = %s\n", "EventComment", EventComment.EncodeString(identbuf, IdentBufferLen));
2528 fprintf(stream, " %22s = %s\n", "DMFramework", DMFramework.EncodeString(identbuf, IdentBufferLen));
2533 DMSegment::InitFromBuffer(const byte_t* p, ui32_t l)
2535 return InterchangeObject::InitFromBuffer(p, l);
2540 DMSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2542 return InterchangeObject::WriteToBuffer(Buffer);
2545 //------------------------------------------------------------------------------------------
2546 // CryptographicFramework
2550 CryptographicFramework::CryptographicFramework(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2553 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2556 CryptographicFramework::CryptographicFramework(const CryptographicFramework& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2559 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2566 CryptographicFramework::InitFromTLVSet(TLVReader& TLVSet)
2569 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2570 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicFramework, ContextSR));
2576 CryptographicFramework::WriteToTLVSet(TLVWriter& TLVSet)
2579 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2580 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicFramework, ContextSR));
2586 CryptographicFramework::Copy(const CryptographicFramework& rhs)
2588 InterchangeObject::Copy(rhs);
2589 ContextSR = rhs.ContextSR;
2594 CryptographicFramework::Dump(FILE* stream)
2596 char identbuf[IdentBufferLen];
2602 InterchangeObject::Dump(stream);
2603 fprintf(stream, " %22s = %s\n", "ContextSR", ContextSR.EncodeString(identbuf, IdentBufferLen));
2608 CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
2610 return InterchangeObject::InitFromBuffer(p, l);
2615 CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2617 return InterchangeObject::WriteToBuffer(Buffer);
2620 //------------------------------------------------------------------------------------------
2621 // CryptographicContext
2625 CryptographicContext::CryptographicContext(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2628 m_UL = m_Dict->ul(MDD_CryptographicContext);
2631 CryptographicContext::CryptographicContext(const CryptographicContext& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2634 m_UL = m_Dict->ul(MDD_CryptographicContext);
2641 CryptographicContext::InitFromTLVSet(TLVReader& TLVSet)
2644 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2645 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, ContextID));
2646 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, SourceEssenceContainer));
2647 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CipherAlgorithm));
2648 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, MICAlgorithm));
2649 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CryptographicKeyID));
2655 CryptographicContext::WriteToTLVSet(TLVWriter& TLVSet)
2658 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2659 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, ContextID));
2660 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, SourceEssenceContainer));
2661 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CipherAlgorithm));
2662 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, MICAlgorithm));
2663 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CryptographicKeyID));
2669 CryptographicContext::Copy(const CryptographicContext& rhs)
2671 InterchangeObject::Copy(rhs);
2672 ContextID = rhs.ContextID;
2673 SourceEssenceContainer = rhs.SourceEssenceContainer;
2674 CipherAlgorithm = rhs.CipherAlgorithm;
2675 MICAlgorithm = rhs.MICAlgorithm;
2676 CryptographicKeyID = rhs.CryptographicKeyID;
2681 CryptographicContext::Dump(FILE* stream)
2683 char identbuf[IdentBufferLen];
2689 InterchangeObject::Dump(stream);
2690 fprintf(stream, " %22s = %s\n", "ContextID", ContextID.EncodeString(identbuf, IdentBufferLen));
2691 fprintf(stream, " %22s = %s\n", "SourceEssenceContainer", SourceEssenceContainer.EncodeString(identbuf, IdentBufferLen));
2692 fprintf(stream, " %22s = %s\n", "CipherAlgorithm", CipherAlgorithm.EncodeString(identbuf, IdentBufferLen));
2693 fprintf(stream, " %22s = %s\n", "MICAlgorithm", MICAlgorithm.EncodeString(identbuf, IdentBufferLen));
2694 fprintf(stream, " %22s = %s\n", "CryptographicKeyID", CryptographicKeyID.EncodeString(identbuf, IdentBufferLen));
2699 CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
2701 return InterchangeObject::InitFromBuffer(p, l);
2706 CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2708 return InterchangeObject::WriteToBuffer(Buffer);
2711 //------------------------------------------------------------------------------------------
2712 // GenericDataEssenceDescriptor
2716 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d)
2719 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2722 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const GenericDataEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2725 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2732 GenericDataEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2735 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
2736 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2742 GenericDataEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2745 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
2746 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2752 GenericDataEssenceDescriptor::Copy(const GenericDataEssenceDescriptor& rhs)
2754 FileDescriptor::Copy(rhs);
2755 DataEssenceCoding = rhs.DataEssenceCoding;
2760 GenericDataEssenceDescriptor::Dump(FILE* stream)
2762 char identbuf[IdentBufferLen];
2768 FileDescriptor::Dump(stream);
2769 fprintf(stream, " %22s = %s\n", "DataEssenceCoding", DataEssenceCoding.EncodeString(identbuf, IdentBufferLen));
2774 GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2776 return InterchangeObject::InitFromBuffer(p, l);
2781 GenericDataEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2783 return InterchangeObject::WriteToBuffer(Buffer);
2786 //------------------------------------------------------------------------------------------
2787 // TimedTextDescriptor
2791 TimedTextDescriptor::TimedTextDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
2794 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2797 TimedTextDescriptor::TimedTextDescriptor(const TimedTextDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2800 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2807 TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2810 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
2811 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, ResourceID));
2812 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, UCSEncoding));
2813 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, NamespaceURI));
2814 if ( ASDCP_SUCCESS(result) ) {
2815 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
2816 RFC5646LanguageTagList.set_has_value( result == RESULT_OK );
2823 TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2826 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
2827 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, ResourceID));
2828 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding));
2829 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI));
2830 if ( ASDCP_SUCCESS(result) && ! RFC5646LanguageTagList.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
2836 TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs)
2838 GenericDataEssenceDescriptor::Copy(rhs);
2839 ResourceID = rhs.ResourceID;
2840 UCSEncoding = rhs.UCSEncoding;
2841 NamespaceURI = rhs.NamespaceURI;
2842 RFC5646LanguageTagList = rhs.RFC5646LanguageTagList;
2847 TimedTextDescriptor::Dump(FILE* stream)
2849 char identbuf[IdentBufferLen];
2855 GenericDataEssenceDescriptor::Dump(stream);
2856 fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen));
2857 fprintf(stream, " %22s = %s\n", "UCSEncoding", UCSEncoding.EncodeString(identbuf, IdentBufferLen));
2858 fprintf(stream, " %22s = %s\n", "NamespaceURI", NamespaceURI.EncodeString(identbuf, IdentBufferLen));
2859 if ( ! RFC5646LanguageTagList.empty() ) {
2860 fprintf(stream, " %22s = %s\n", "RFC5646LanguageTagList", RFC5646LanguageTagList.get().EncodeString(identbuf, IdentBufferLen));
2866 TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2868 return InterchangeObject::InitFromBuffer(p, l);
2873 TimedTextDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2875 return InterchangeObject::WriteToBuffer(Buffer);
2878 //------------------------------------------------------------------------------------------
2879 // TimedTextResourceSubDescriptor
2883 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EssenceStreamID(0)
2886 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2889 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const TimedTextResourceSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2892 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2899 TimedTextResourceSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2902 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2903 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2904 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2905 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2911 TimedTextResourceSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2914 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2915 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2916 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2917 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2923 TimedTextResourceSubDescriptor::Copy(const TimedTextResourceSubDescriptor& rhs)
2925 InterchangeObject::Copy(rhs);
2926 AncillaryResourceID = rhs.AncillaryResourceID;
2927 MIMEMediaType = rhs.MIMEMediaType;
2928 EssenceStreamID = rhs.EssenceStreamID;
2933 TimedTextResourceSubDescriptor::Dump(FILE* stream)
2935 char identbuf[IdentBufferLen];
2941 InterchangeObject::Dump(stream);
2942 fprintf(stream, " %22s = %s\n", "AncillaryResourceID", AncillaryResourceID.EncodeString(identbuf, IdentBufferLen));
2943 fprintf(stream, " %22s = %s\n", "MIMEMediaType", MIMEMediaType.EncodeString(identbuf, IdentBufferLen));
2944 fprintf(stream, " %22s = %d\n", "EssenceStreamID", EssenceStreamID);
2949 TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2951 return InterchangeObject::InitFromBuffer(p, l);
2956 TimedTextResourceSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2958 return InterchangeObject::WriteToBuffer(Buffer);
2961 //------------------------------------------------------------------------------------------
2962 // StereoscopicPictureSubDescriptor
2966 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2969 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2972 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const StereoscopicPictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2975 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2982 StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2985 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2991 StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2994 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3000 StereoscopicPictureSubDescriptor::Copy(const StereoscopicPictureSubDescriptor& rhs)
3002 InterchangeObject::Copy(rhs);
3007 StereoscopicPictureSubDescriptor::Dump(FILE* stream)
3009 char identbuf[IdentBufferLen];
3015 InterchangeObject::Dump(stream);
3020 StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3022 return InterchangeObject::InitFromBuffer(p, l);
3027 StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3029 return InterchangeObject::WriteToBuffer(Buffer);
3032 //------------------------------------------------------------------------------------------
3033 // ContainerConstraintSubDescriptor
3037 ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3040 m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor);
3043 ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const ContainerConstraintSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3046 m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor);
3053 ContainerConstraintSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3056 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3062 ContainerConstraintSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3065 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3071 ContainerConstraintSubDescriptor::Copy(const ContainerConstraintSubDescriptor& rhs)
3073 InterchangeObject::Copy(rhs);
3078 ContainerConstraintSubDescriptor::Dump(FILE* stream)
3080 char identbuf[IdentBufferLen];
3086 InterchangeObject::Dump(stream);
3091 ContainerConstraintSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3093 return InterchangeObject::InitFromBuffer(p, l);
3098 ContainerConstraintSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3100 return InterchangeObject::WriteToBuffer(Buffer);
3103 //------------------------------------------------------------------------------------------
3108 NetworkLocator::NetworkLocator(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3111 m_UL = m_Dict->ul(MDD_NetworkLocator);
3114 NetworkLocator::NetworkLocator(const NetworkLocator& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3117 m_UL = m_Dict->ul(MDD_NetworkLocator);
3124 NetworkLocator::InitFromTLVSet(TLVReader& TLVSet)
3127 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3128 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(NetworkLocator, URLString));
3134 NetworkLocator::WriteToTLVSet(TLVWriter& TLVSet)
3137 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3138 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(NetworkLocator, URLString));
3144 NetworkLocator::Copy(const NetworkLocator& rhs)
3146 InterchangeObject::Copy(rhs);
3147 URLString = rhs.URLString;
3152 NetworkLocator::Dump(FILE* stream)
3154 char identbuf[IdentBufferLen];
3160 InterchangeObject::Dump(stream);
3161 fprintf(stream, " %22s = %s\n", "URLString", URLString.EncodeString(identbuf, IdentBufferLen));
3166 NetworkLocator::InitFromBuffer(const byte_t* p, ui32_t l)
3168 return InterchangeObject::InitFromBuffer(p, l);
3173 NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3175 return InterchangeObject::WriteToBuffer(Buffer);
3178 //------------------------------------------------------------------------------------------
3179 // MCALabelSubDescriptor
3183 MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3186 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
3189 MCALabelSubDescriptor::MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3192 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
3199 MCALabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3202 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3203 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3204 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALinkID));
3205 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3206 if ( ASDCP_SUCCESS(result) ) {
3207 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3208 MCATagName.set_has_value( result == RESULT_OK );
3210 if ( ASDCP_SUCCESS(result) ) {
3211 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3212 MCAChannelID.set_has_value( result == RESULT_OK );
3214 if ( ASDCP_SUCCESS(result) ) {
3215 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3216 RFC5646SpokenLanguage.set_has_value( result == RESULT_OK );
3223 MCALabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3226 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3227 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3228 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALinkID));
3229 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3230 if ( ASDCP_SUCCESS(result) && ! MCATagName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3231 if ( ASDCP_SUCCESS(result) && ! MCAChannelID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3232 if ( ASDCP_SUCCESS(result) && ! RFC5646SpokenLanguage.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3238 MCALabelSubDescriptor::Copy(const MCALabelSubDescriptor& rhs)
3240 InterchangeObject::Copy(rhs);
3241 MCALabelDictionaryID = rhs.MCALabelDictionaryID;
3242 MCALinkID = rhs.MCALinkID;
3243 MCATagSymbol = rhs.MCATagSymbol;
3244 MCATagName = rhs.MCATagName;
3245 MCAChannelID = rhs.MCAChannelID;
3246 RFC5646SpokenLanguage = rhs.RFC5646SpokenLanguage;
3251 MCALabelSubDescriptor::Dump(FILE* stream)
3253 char identbuf[IdentBufferLen];
3259 InterchangeObject::Dump(stream);
3260 fprintf(stream, " %22s = %s\n", "MCALabelDictionaryID", MCALabelDictionaryID.EncodeString(identbuf, IdentBufferLen));
3261 fprintf(stream, " %22s = %s\n", "MCALinkID", MCALinkID.EncodeString(identbuf, IdentBufferLen));
3262 fprintf(stream, " %22s = %s\n", "MCATagSymbol", MCATagSymbol.EncodeString(identbuf, IdentBufferLen));
3263 if ( ! MCATagName.empty() ) {
3264 fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.get().EncodeString(identbuf, IdentBufferLen));
3266 if ( ! MCAChannelID.empty() ) {
3267 fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID.get());
3269 if ( ! RFC5646SpokenLanguage.empty() ) {
3270 fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.get().EncodeString(identbuf, IdentBufferLen));
3276 MCALabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3278 return InterchangeObject::InitFromBuffer(p, l);
3283 MCALabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3285 return InterchangeObject::WriteToBuffer(Buffer);
3288 //------------------------------------------------------------------------------------------
3289 // AudioChannelLabelSubDescriptor
3293 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3296 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3299 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const AudioChannelLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3302 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3309 AudioChannelLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3312 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3313 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3319 AudioChannelLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3322 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3323 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3329 AudioChannelLabelSubDescriptor::Copy(const AudioChannelLabelSubDescriptor& rhs)
3331 MCALabelSubDescriptor::Copy(rhs);
3332 SoundfieldGroupLinkID = rhs.SoundfieldGroupLinkID;
3337 AudioChannelLabelSubDescriptor::Dump(FILE* stream)
3339 char identbuf[IdentBufferLen];
3345 MCALabelSubDescriptor::Dump(stream);
3346 fprintf(stream, " %22s = %s\n", "SoundfieldGroupLinkID", SoundfieldGroupLinkID.EncodeString(identbuf, IdentBufferLen));
3351 AudioChannelLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3353 return InterchangeObject::InitFromBuffer(p, l);
3358 AudioChannelLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3360 return InterchangeObject::WriteToBuffer(Buffer);
3363 //------------------------------------------------------------------------------------------
3364 // SoundfieldGroupLabelSubDescriptor
3368 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3371 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3374 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const SoundfieldGroupLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3377 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3384 SoundfieldGroupLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3387 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3388 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3394 SoundfieldGroupLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3397 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3398 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3404 SoundfieldGroupLabelSubDescriptor::Copy(const SoundfieldGroupLabelSubDescriptor& rhs)
3406 MCALabelSubDescriptor::Copy(rhs);
3407 GroupOfSoundfieldGroupsLinkID = rhs.GroupOfSoundfieldGroupsLinkID;
3412 SoundfieldGroupLabelSubDescriptor::Dump(FILE* stream)
3414 char identbuf[IdentBufferLen];
3420 MCALabelSubDescriptor::Dump(stream);
3421 fprintf(stream, " %22s:\n", "GroupOfSoundfieldGroupsLinkID");
3422 GroupOfSoundfieldGroupsLinkID.Dump(stream);
3427 SoundfieldGroupLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3429 return InterchangeObject::InitFromBuffer(p, l);
3434 SoundfieldGroupLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3436 return InterchangeObject::WriteToBuffer(Buffer);
3439 //------------------------------------------------------------------------------------------
3440 // GroupOfSoundfieldGroupsLabelSubDescriptor
3444 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3447 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3450 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3453 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3460 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3463 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3469 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3472 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3478 GroupOfSoundfieldGroupsLabelSubDescriptor::Copy(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs)
3480 MCALabelSubDescriptor::Copy(rhs);
3485 GroupOfSoundfieldGroupsLabelSubDescriptor::Dump(FILE* stream)
3487 char identbuf[IdentBufferLen];
3493 MCALabelSubDescriptor::Dump(stream);
3498 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3500 return InterchangeObject::InitFromBuffer(p, l);
3505 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3507 return InterchangeObject::WriteToBuffer(Buffer);
3510 //------------------------------------------------------------------------------------------
3515 DCDataDescriptor::DCDataDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
3518 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3521 DCDataDescriptor::DCDataDescriptor(const DCDataDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3524 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3531 DCDataDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3534 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
3540 DCDataDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3543 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
3549 DCDataDescriptor::Copy(const DCDataDescriptor& rhs)
3551 GenericDataEssenceDescriptor::Copy(rhs);
3556 DCDataDescriptor::Dump(FILE* stream)
3558 char identbuf[IdentBufferLen];
3564 GenericDataEssenceDescriptor::Dump(stream);
3569 DCDataDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3571 return InterchangeObject::InitFromBuffer(p, l);
3576 DCDataDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3578 return InterchangeObject::WriteToBuffer(Buffer);
3581 //------------------------------------------------------------------------------------------
3582 // DolbyAtmosSubDescriptor
3586 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), FirstFrame(0), MaxChannelCount(0), MaxObjectCount(0), AtmosVersion(0)
3589 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3592 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const DolbyAtmosSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3595 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3602 DolbyAtmosSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3605 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3606 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3607 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3608 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3609 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3610 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3616 DolbyAtmosSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3619 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3620 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3621 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3622 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3623 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3624 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3630 DolbyAtmosSubDescriptor::Copy(const DolbyAtmosSubDescriptor& rhs)
3632 InterchangeObject::Copy(rhs);
3633 AtmosID = rhs.AtmosID;
3634 FirstFrame = rhs.FirstFrame;
3635 MaxChannelCount = rhs.MaxChannelCount;
3636 MaxObjectCount = rhs.MaxObjectCount;
3637 AtmosVersion = rhs.AtmosVersion;
3642 DolbyAtmosSubDescriptor::Dump(FILE* stream)
3644 char identbuf[IdentBufferLen];
3650 InterchangeObject::Dump(stream);
3651 fprintf(stream, " %22s = %s\n", "AtmosID", AtmosID.EncodeString(identbuf, IdentBufferLen));
3652 fprintf(stream, " %22s = %d\n", "FirstFrame", FirstFrame);
3653 fprintf(stream, " %22s = %d\n", "MaxChannelCount", MaxChannelCount);
3654 fprintf(stream, " %22s = %d\n", "MaxObjectCount", MaxObjectCount);
3655 fprintf(stream, " %22s = %d\n", "AtmosVersion", AtmosVersion);
3660 DolbyAtmosSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3662 return InterchangeObject::InitFromBuffer(p, l);
3667 DolbyAtmosSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3669 return InterchangeObject::WriteToBuffer(Buffer);
3672 //------------------------------------------------------------------------------------------
3673 // PHDRMetadataTrackSubDescriptor
3677 PHDRMetadataTrackSubDescriptor::PHDRMetadataTrackSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), SourceTrackID(0), SimplePayloadSID(0)
3680 m_UL = m_Dict->ul(MDD_PHDRMetadataTrackSubDescriptor);
3683 PHDRMetadataTrackSubDescriptor::PHDRMetadataTrackSubDescriptor(const PHDRMetadataTrackSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3686 m_UL = m_Dict->ul(MDD_PHDRMetadataTrackSubDescriptor);
3693 PHDRMetadataTrackSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3696 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3697 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, DataDefinition));
3698 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, SourceTrackID));
3699 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, SimplePayloadSID));
3705 PHDRMetadataTrackSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3708 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3709 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, DataDefinition));
3710 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, SourceTrackID));
3711 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, SimplePayloadSID));
3717 PHDRMetadataTrackSubDescriptor::Copy(const PHDRMetadataTrackSubDescriptor& rhs)
3719 InterchangeObject::Copy(rhs);
3720 DataDefinition = rhs.DataDefinition;
3721 SourceTrackID = rhs.SourceTrackID;
3722 SimplePayloadSID = rhs.SimplePayloadSID;
3727 PHDRMetadataTrackSubDescriptor::Dump(FILE* stream)
3729 char identbuf[IdentBufferLen];
3735 InterchangeObject::Dump(stream);
3736 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
3737 fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID);
3738 fprintf(stream, " %22s = %d\n", "SimplePayloadSID", SimplePayloadSID);
3743 PHDRMetadataTrackSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3745 return InterchangeObject::InitFromBuffer(p, l);
3750 PHDRMetadataTrackSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3752 return InterchangeObject::WriteToBuffer(Buffer);