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* PrivateDCDataDescriptor_Factory(const Dictionary*& Dict) { return new PrivateDCDataDescriptor(Dict); }
79 static InterchangeObject* DolbyAtmosSubDescriptor_Factory(const Dictionary*& Dict) { return new DolbyAtmosSubDescriptor(Dict); }
80 static InterchangeObject* PHDRMetadataTrackSubDescriptor_Factory(const Dictionary*& Dict) { return new PHDRMetadataTrackSubDescriptor(Dict); }
84 ASDCP::MXF::Metadata_InitTypes(const Dictionary*& Dict)
87 SetObjectFactory(Dict->ul(MDD_Preface), Preface_Factory);
88 SetObjectFactory(Dict->ul(MDD_IndexTableSegment), IndexTableSegment_Factory);
90 SetObjectFactory(Dict->ul(MDD_Identification), Identification_Factory);
91 SetObjectFactory(Dict->ul(MDD_ContentStorage), ContentStorage_Factory);
92 SetObjectFactory(Dict->ul(MDD_EssenceContainerData), EssenceContainerData_Factory);
93 SetObjectFactory(Dict->ul(MDD_MaterialPackage), MaterialPackage_Factory);
94 SetObjectFactory(Dict->ul(MDD_SourcePackage), SourcePackage_Factory);
95 SetObjectFactory(Dict->ul(MDD_StaticTrack), StaticTrack_Factory);
96 SetObjectFactory(Dict->ul(MDD_Track), Track_Factory);
97 SetObjectFactory(Dict->ul(MDD_Sequence), Sequence_Factory);
98 SetObjectFactory(Dict->ul(MDD_SourceClip), SourceClip_Factory);
99 SetObjectFactory(Dict->ul(MDD_TimecodeComponent), TimecodeComponent_Factory);
100 SetObjectFactory(Dict->ul(MDD_FileDescriptor), FileDescriptor_Factory);
101 SetObjectFactory(Dict->ul(MDD_GenericSoundEssenceDescriptor), GenericSoundEssenceDescriptor_Factory);
102 SetObjectFactory(Dict->ul(MDD_WaveAudioDescriptor), WaveAudioDescriptor_Factory);
103 SetObjectFactory(Dict->ul(MDD_GenericPictureEssenceDescriptor), GenericPictureEssenceDescriptor_Factory);
104 SetObjectFactory(Dict->ul(MDD_RGBAEssenceDescriptor), RGBAEssenceDescriptor_Factory);
105 SetObjectFactory(Dict->ul(MDD_JPEG2000PictureSubDescriptor), JPEG2000PictureSubDescriptor_Factory);
106 SetObjectFactory(Dict->ul(MDD_CDCIEssenceDescriptor), CDCIEssenceDescriptor_Factory);
107 SetObjectFactory(Dict->ul(MDD_MPEG2VideoDescriptor), MPEG2VideoDescriptor_Factory);
108 SetObjectFactory(Dict->ul(MDD_DMSegment), DMSegment_Factory);
109 SetObjectFactory(Dict->ul(MDD_CryptographicFramework), CryptographicFramework_Factory);
110 SetObjectFactory(Dict->ul(MDD_CryptographicContext), CryptographicContext_Factory);
111 SetObjectFactory(Dict->ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory);
112 SetObjectFactory(Dict->ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory);
113 SetObjectFactory(Dict->ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory);
114 SetObjectFactory(Dict->ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory);
115 SetObjectFactory(Dict->ul(MDD_ContainerConstraintSubDescriptor), ContainerConstraintSubDescriptor_Factory);
116 SetObjectFactory(Dict->ul(MDD_NetworkLocator), NetworkLocator_Factory);
117 SetObjectFactory(Dict->ul(MDD_MCALabelSubDescriptor), MCALabelSubDescriptor_Factory);
118 SetObjectFactory(Dict->ul(MDD_AudioChannelLabelSubDescriptor), AudioChannelLabelSubDescriptor_Factory);
119 SetObjectFactory(Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor), SoundfieldGroupLabelSubDescriptor_Factory);
120 SetObjectFactory(Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor), GroupOfSoundfieldGroupsLabelSubDescriptor_Factory);
121 SetObjectFactory(Dict->ul(MDD_DCDataDescriptor), DCDataDescriptor_Factory);
122 SetObjectFactory(Dict->ul(MDD_PrivateDCDataDescriptor), PrivateDCDataDescriptor_Factory);
123 SetObjectFactory(Dict->ul(MDD_DolbyAtmosSubDescriptor), DolbyAtmosSubDescriptor_Factory);
124 SetObjectFactory(Dict->ul(MDD_PHDRMetadataTrackSubDescriptor), PHDRMetadataTrackSubDescriptor_Factory);
127 //------------------------------------------------------------------------------------------
132 //------------------------------------------------------------------------------------------
137 Identification::Identification(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
140 m_UL = m_Dict->ul(MDD_Identification);
143 Identification::Identification(const Identification& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
146 m_UL = m_Dict->ul(MDD_Identification);
153 Identification::InitFromTLVSet(TLVReader& TLVSet)
156 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
157 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ThisGenerationUID));
158 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, CompanyName));
159 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductName));
160 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductVersion));
161 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, VersionString));
162 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductUID));
163 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ModificationDate));
164 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ToolkitVersion));
165 if ( ASDCP_SUCCESS(result) ) {
166 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Identification, Platform));
167 Platform.set_has_value( result == RESULT_OK );
174 Identification::WriteToTLVSet(TLVWriter& TLVSet)
177 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
178 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ThisGenerationUID));
179 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, CompanyName));
180 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductName));
181 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductVersion));
182 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, VersionString));
183 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductUID));
184 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ModificationDate));
185 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ToolkitVersion));
186 if ( ASDCP_SUCCESS(result) && ! Platform.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Identification, Platform));
192 Identification::Copy(const Identification& rhs)
194 InterchangeObject::Copy(rhs);
195 ThisGenerationUID = rhs.ThisGenerationUID;
196 CompanyName = rhs.CompanyName;
197 ProductName = rhs.ProductName;
198 ProductVersion = rhs.ProductVersion;
199 VersionString = rhs.VersionString;
200 ProductUID = rhs.ProductUID;
201 ModificationDate = rhs.ModificationDate;
202 ToolkitVersion = rhs.ToolkitVersion;
203 Platform = rhs.Platform;
208 Identification::Dump(FILE* stream)
210 char identbuf[IdentBufferLen];
216 InterchangeObject::Dump(stream);
217 fprintf(stream, " %22s = %s\n", "ThisGenerationUID", ThisGenerationUID.EncodeString(identbuf, IdentBufferLen));
218 fprintf(stream, " %22s = %s\n", "CompanyName", CompanyName.EncodeString(identbuf, IdentBufferLen));
219 fprintf(stream, " %22s = %s\n", "ProductName", ProductName.EncodeString(identbuf, IdentBufferLen));
220 fprintf(stream, " %22s = %s\n", "ProductVersion", ProductVersion.EncodeString(identbuf, IdentBufferLen));
221 fprintf(stream, " %22s = %s\n", "VersionString", VersionString.EncodeString(identbuf, IdentBufferLen));
222 fprintf(stream, " %22s = %s\n", "ProductUID", ProductUID.EncodeString(identbuf, IdentBufferLen));
223 fprintf(stream, " %22s = %s\n", "ModificationDate", ModificationDate.EncodeString(identbuf, IdentBufferLen));
224 fprintf(stream, " %22s = %s\n", "ToolkitVersion", ToolkitVersion.EncodeString(identbuf, IdentBufferLen));
225 if ( ! Platform.empty() ) {
226 fprintf(stream, " %22s = %s\n", "Platform", Platform.get().EncodeString(identbuf, IdentBufferLen));
232 Identification::InitFromBuffer(const byte_t* p, ui32_t l)
234 return InterchangeObject::InitFromBuffer(p, l);
239 Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
241 return InterchangeObject::WriteToBuffer(Buffer);
244 //------------------------------------------------------------------------------------------
249 ContentStorage::ContentStorage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
252 m_UL = m_Dict->ul(MDD_ContentStorage);
255 ContentStorage::ContentStorage(const ContentStorage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
258 m_UL = m_Dict->ul(MDD_ContentStorage);
265 ContentStorage::InitFromTLVSet(TLVReader& TLVSet)
268 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
269 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, Packages));
270 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, EssenceContainerData));
276 ContentStorage::WriteToTLVSet(TLVWriter& TLVSet)
279 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
280 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, Packages));
281 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, EssenceContainerData));
287 ContentStorage::Copy(const ContentStorage& rhs)
289 InterchangeObject::Copy(rhs);
290 Packages = rhs.Packages;
291 EssenceContainerData = rhs.EssenceContainerData;
296 ContentStorage::Dump(FILE* stream)
298 char identbuf[IdentBufferLen];
304 InterchangeObject::Dump(stream);
305 fprintf(stream, " %22s:\n", "Packages");
306 Packages.Dump(stream);
307 fprintf(stream, " %22s:\n", "EssenceContainerData");
308 EssenceContainerData.Dump(stream);
313 ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l)
315 return InterchangeObject::InitFromBuffer(p, l);
320 ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
322 return InterchangeObject::WriteToBuffer(Buffer);
325 //------------------------------------------------------------------------------------------
326 // EssenceContainerData
330 EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), BodySID(0)
333 m_UL = m_Dict->ul(MDD_EssenceContainerData);
336 EssenceContainerData::EssenceContainerData(const EssenceContainerData& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
339 m_UL = m_Dict->ul(MDD_EssenceContainerData);
346 EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet)
349 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
350 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID));
351 if ( ASDCP_SUCCESS(result) ) {
352 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(EssenceContainerData, IndexSID));
353 IndexSID.set_has_value( result == RESULT_OK );
355 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID));
361 EssenceContainerData::WriteToTLVSet(TLVWriter& TLVSet)
364 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
365 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(EssenceContainerData, LinkedPackageUID));
366 if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(EssenceContainerData, IndexSID));
367 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID));
373 EssenceContainerData::Copy(const EssenceContainerData& rhs)
375 InterchangeObject::Copy(rhs);
376 LinkedPackageUID = rhs.LinkedPackageUID;
377 IndexSID = rhs.IndexSID;
378 BodySID = rhs.BodySID;
383 EssenceContainerData::Dump(FILE* stream)
385 char identbuf[IdentBufferLen];
391 InterchangeObject::Dump(stream);
392 fprintf(stream, " %22s = %s\n", "LinkedPackageUID", LinkedPackageUID.EncodeString(identbuf, IdentBufferLen));
393 if ( ! IndexSID.empty() ) {
394 fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID.get());
396 fprintf(stream, " %22s = %d\n", "BodySID", BodySID);
401 EssenceContainerData::InitFromBuffer(const byte_t* p, ui32_t l)
403 return InterchangeObject::InitFromBuffer(p, l);
408 EssenceContainerData::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
410 return InterchangeObject::WriteToBuffer(Buffer);
413 //------------------------------------------------------------------------------------------
417 GenericPackage::GenericPackage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
419 GenericPackage::GenericPackage(const GenericPackage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
427 GenericPackage::InitFromTLVSet(TLVReader& TLVSet)
430 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
431 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageUID));
432 if ( ASDCP_SUCCESS(result) ) {
433 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPackage, Name));
434 Name.set_has_value( result == RESULT_OK );
436 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageCreationDate));
437 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageModifiedDate));
438 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Tracks));
444 GenericPackage::WriteToTLVSet(TLVWriter& TLVSet)
447 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
448 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageUID));
449 if ( ASDCP_SUCCESS(result) && ! Name.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPackage, Name));
450 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageCreationDate));
451 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageModifiedDate));
452 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Tracks));
458 GenericPackage::Copy(const GenericPackage& rhs)
460 InterchangeObject::Copy(rhs);
461 PackageUID = rhs.PackageUID;
463 PackageCreationDate = rhs.PackageCreationDate;
464 PackageModifiedDate = rhs.PackageModifiedDate;
470 GenericPackage::Dump(FILE* stream)
472 char identbuf[IdentBufferLen];
478 InterchangeObject::Dump(stream);
479 fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.EncodeString(identbuf, IdentBufferLen));
480 if ( ! Name.empty() ) {
481 fprintf(stream, " %22s = %s\n", "Name", Name.get().EncodeString(identbuf, IdentBufferLen));
483 fprintf(stream, " %22s = %s\n", "PackageCreationDate", PackageCreationDate.EncodeString(identbuf, IdentBufferLen));
484 fprintf(stream, " %22s = %s\n", "PackageModifiedDate", PackageModifiedDate.EncodeString(identbuf, IdentBufferLen));
485 fprintf(stream, " %22s:\n", "Tracks");
490 //------------------------------------------------------------------------------------------
495 MaterialPackage::MaterialPackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d)
498 m_UL = m_Dict->ul(MDD_MaterialPackage);
501 MaterialPackage::MaterialPackage(const MaterialPackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict)
504 m_UL = m_Dict->ul(MDD_MaterialPackage);
511 MaterialPackage::InitFromTLVSet(TLVReader& TLVSet)
514 Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
515 if ( ASDCP_SUCCESS(result) ) {
516 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MaterialPackage, PackageMarker));
517 PackageMarker.set_has_value( result == RESULT_OK );
524 MaterialPackage::WriteToTLVSet(TLVWriter& TLVSet)
527 Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
528 if ( ASDCP_SUCCESS(result) && ! PackageMarker.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MaterialPackage, PackageMarker));
534 MaterialPackage::Copy(const MaterialPackage& rhs)
536 GenericPackage::Copy(rhs);
537 PackageMarker = rhs.PackageMarker;
542 MaterialPackage::Dump(FILE* stream)
544 char identbuf[IdentBufferLen];
550 GenericPackage::Dump(stream);
551 if ( ! PackageMarker.empty() ) {
552 fprintf(stream, " %22s = %s\n", "PackageMarker", PackageMarker.get().EncodeString(identbuf, IdentBufferLen));
558 MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l)
560 return InterchangeObject::InitFromBuffer(p, l);
565 MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
567 return InterchangeObject::WriteToBuffer(Buffer);
570 //------------------------------------------------------------------------------------------
575 SourcePackage::SourcePackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d)
578 m_UL = m_Dict->ul(MDD_SourcePackage);
581 SourcePackage::SourcePackage(const SourcePackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict)
584 m_UL = m_Dict->ul(MDD_SourcePackage);
591 SourcePackage::InitFromTLVSet(TLVReader& TLVSet)
594 Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
595 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourcePackage, Descriptor));
601 SourcePackage::WriteToTLVSet(TLVWriter& TLVSet)
604 Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
605 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourcePackage, Descriptor));
611 SourcePackage::Copy(const SourcePackage& rhs)
613 GenericPackage::Copy(rhs);
614 Descriptor = rhs.Descriptor;
619 SourcePackage::Dump(FILE* stream)
621 char identbuf[IdentBufferLen];
627 GenericPackage::Dump(stream);
628 fprintf(stream, " %22s = %s\n", "Descriptor", Descriptor.EncodeString(identbuf, IdentBufferLen));
633 SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l)
635 return InterchangeObject::InitFromBuffer(p, l);
640 SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
642 return InterchangeObject::WriteToBuffer(Buffer);
645 //------------------------------------------------------------------------------------------
649 GenericTrack::GenericTrack(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), TrackID(0), TrackNumber(0) {}
651 GenericTrack::GenericTrack(const GenericTrack& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
659 GenericTrack::InitFromTLVSet(TLVReader& TLVSet)
662 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
663 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackID));
664 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackNumber));
665 if ( ASDCP_SUCCESS(result) ) {
666 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, TrackName));
667 TrackName.set_has_value( result == RESULT_OK );
669 if ( ASDCP_SUCCESS(result) ) {
670 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, Sequence));
671 Sequence.set_has_value( result == RESULT_OK );
678 GenericTrack::WriteToTLVSet(TLVWriter& TLVSet)
681 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
682 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackID));
683 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackNumber));
684 if ( ASDCP_SUCCESS(result) && ! TrackName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, TrackName));
685 if ( ASDCP_SUCCESS(result) && ! Sequence.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, Sequence));
691 GenericTrack::Copy(const GenericTrack& rhs)
693 InterchangeObject::Copy(rhs);
694 TrackID = rhs.TrackID;
695 TrackNumber = rhs.TrackNumber;
696 TrackName = rhs.TrackName;
697 Sequence = rhs.Sequence;
702 GenericTrack::Dump(FILE* stream)
704 char identbuf[IdentBufferLen];
710 InterchangeObject::Dump(stream);
711 fprintf(stream, " %22s = %d\n", "TrackID", TrackID);
712 fprintf(stream, " %22s = %d\n", "TrackNumber", TrackNumber);
713 if ( ! TrackName.empty() ) {
714 fprintf(stream, " %22s = %s\n", "TrackName", TrackName.get().EncodeString(identbuf, IdentBufferLen));
716 if ( ! Sequence.empty() ) {
717 fprintf(stream, " %22s = %s\n", "Sequence", Sequence.get().EncodeString(identbuf, IdentBufferLen));
722 //------------------------------------------------------------------------------------------
727 StaticTrack::StaticTrack(const Dictionary*& d) : GenericTrack(d), m_Dict(d)
730 m_UL = m_Dict->ul(MDD_StaticTrack);
733 StaticTrack::StaticTrack(const StaticTrack& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict)
736 m_UL = m_Dict->ul(MDD_StaticTrack);
743 StaticTrack::InitFromTLVSet(TLVReader& TLVSet)
746 Result_t result = GenericTrack::InitFromTLVSet(TLVSet);
752 StaticTrack::WriteToTLVSet(TLVWriter& TLVSet)
755 Result_t result = GenericTrack::WriteToTLVSet(TLVSet);
761 StaticTrack::Copy(const StaticTrack& rhs)
763 GenericTrack::Copy(rhs);
768 StaticTrack::Dump(FILE* stream)
770 char identbuf[IdentBufferLen];
776 GenericTrack::Dump(stream);
781 StaticTrack::InitFromBuffer(const byte_t* p, ui32_t l)
783 return InterchangeObject::InitFromBuffer(p, l);
788 StaticTrack::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
790 return InterchangeObject::WriteToBuffer(Buffer);
793 //------------------------------------------------------------------------------------------
798 Track::Track(const Dictionary*& d) : GenericTrack(d), m_Dict(d), Origin(0)
801 m_UL = m_Dict->ul(MDD_Track);
804 Track::Track(const Track& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict)
807 m_UL = m_Dict->ul(MDD_Track);
814 Track::InitFromTLVSet(TLVReader& TLVSet)
817 Result_t result = GenericTrack::InitFromTLVSet(TLVSet);
818 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Track, EditRate));
819 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(Track, Origin));
825 Track::WriteToTLVSet(TLVWriter& TLVSet)
828 Result_t result = GenericTrack::WriteToTLVSet(TLVSet);
829 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Track, EditRate));
830 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(Track, Origin));
836 Track::Copy(const Track& rhs)
838 GenericTrack::Copy(rhs);
839 EditRate = rhs.EditRate;
845 Track::Dump(FILE* stream)
847 char identbuf[IdentBufferLen];
853 GenericTrack::Dump(stream);
854 fprintf(stream, " %22s = %s\n", "EditRate", EditRate.EncodeString(identbuf, IdentBufferLen));
855 fprintf(stream, " %22s = %s\n", "Origin", i64sz(Origin, identbuf));
860 Track::InitFromBuffer(const byte_t* p, ui32_t l)
862 return InterchangeObject::InitFromBuffer(p, l);
867 Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
869 return InterchangeObject::WriteToBuffer(Buffer);
872 //------------------------------------------------------------------------------------------
873 // StructuralComponent
876 StructuralComponent::StructuralComponent(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
878 StructuralComponent::StructuralComponent(const StructuralComponent& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
886 StructuralComponent::InitFromTLVSet(TLVReader& TLVSet)
889 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
890 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
891 if ( ASDCP_SUCCESS(result) ) {
892 result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration));
893 Duration.set_has_value( result == RESULT_OK );
900 StructuralComponent::WriteToTLVSet(TLVWriter& TLVSet)
903 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
904 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(StructuralComponent, DataDefinition));
905 if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(StructuralComponent, Duration));
911 StructuralComponent::Copy(const StructuralComponent& rhs)
913 InterchangeObject::Copy(rhs);
914 DataDefinition = rhs.DataDefinition;
915 Duration = rhs.Duration;
920 StructuralComponent::Dump(FILE* stream)
922 char identbuf[IdentBufferLen];
928 InterchangeObject::Dump(stream);
929 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
930 if ( ! Duration.empty() ) {
931 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration.get(), identbuf));
936 //------------------------------------------------------------------------------------------
941 Sequence::Sequence(const Dictionary*& d) : StructuralComponent(d), m_Dict(d)
944 m_UL = m_Dict->ul(MDD_Sequence);
947 Sequence::Sequence(const Sequence& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
950 m_UL = m_Dict->ul(MDD_Sequence);
957 Sequence::InitFromTLVSet(TLVReader& TLVSet)
960 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
961 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Sequence, StructuralComponents));
967 Sequence::WriteToTLVSet(TLVWriter& TLVSet)
970 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
971 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Sequence, StructuralComponents));
977 Sequence::Copy(const Sequence& rhs)
979 StructuralComponent::Copy(rhs);
980 StructuralComponents = rhs.StructuralComponents;
985 Sequence::Dump(FILE* stream)
987 char identbuf[IdentBufferLen];
993 StructuralComponent::Dump(stream);
994 fprintf(stream, " %22s:\n", "StructuralComponents");
995 StructuralComponents.Dump(stream);
1000 Sequence::InitFromBuffer(const byte_t* p, ui32_t l)
1002 return InterchangeObject::InitFromBuffer(p, l);
1007 Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1009 return InterchangeObject::WriteToBuffer(Buffer);
1012 //------------------------------------------------------------------------------------------
1017 SourceClip::SourceClip(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), StartPosition(0), SourceTrackID(0)
1020 m_UL = m_Dict->ul(MDD_SourceClip);
1023 SourceClip::SourceClip(const SourceClip& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
1026 m_UL = m_Dict->ul(MDD_SourceClip);
1033 SourceClip::InitFromTLVSet(TLVReader& TLVSet)
1036 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
1037 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(SourceClip, StartPosition));
1038 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourceClip, SourcePackageID));
1039 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(SourceClip, SourceTrackID));
1045 SourceClip::WriteToTLVSet(TLVWriter& TLVSet)
1048 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
1049 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(SourceClip, StartPosition));
1050 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourceClip, SourcePackageID));
1051 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(SourceClip, SourceTrackID));
1057 SourceClip::Copy(const SourceClip& rhs)
1059 StructuralComponent::Copy(rhs);
1060 StartPosition = rhs.StartPosition;
1061 SourcePackageID = rhs.SourcePackageID;
1062 SourceTrackID = rhs.SourceTrackID;
1067 SourceClip::Dump(FILE* stream)
1069 char identbuf[IdentBufferLen];
1075 StructuralComponent::Dump(stream);
1076 fprintf(stream, " %22s = %s\n", "StartPosition", i64sz(StartPosition, identbuf));
1077 fprintf(stream, " %22s = %s\n", "SourcePackageID", SourcePackageID.EncodeString(identbuf, IdentBufferLen));
1078 fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID);
1083 SourceClip::InitFromBuffer(const byte_t* p, ui32_t l)
1085 return InterchangeObject::InitFromBuffer(p, l);
1090 SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1092 return InterchangeObject::WriteToBuffer(Buffer);
1095 //------------------------------------------------------------------------------------------
1096 // TimecodeComponent
1100 TimecodeComponent::TimecodeComponent(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0)
1103 m_UL = m_Dict->ul(MDD_TimecodeComponent);
1106 TimecodeComponent::TimecodeComponent(const TimecodeComponent& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
1109 m_UL = m_Dict->ul(MDD_TimecodeComponent);
1116 TimecodeComponent::InitFromTLVSet(TLVReader& TLVSet)
1119 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
1120 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(TimecodeComponent, RoundedTimecodeBase));
1121 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(TimecodeComponent, StartTimecode));
1122 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(TimecodeComponent, DropFrame));
1128 TimecodeComponent::WriteToTLVSet(TLVWriter& TLVSet)
1131 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
1132 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(TimecodeComponent, RoundedTimecodeBase));
1133 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(TimecodeComponent, StartTimecode));
1134 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(TimecodeComponent, DropFrame));
1140 TimecodeComponent::Copy(const TimecodeComponent& rhs)
1142 StructuralComponent::Copy(rhs);
1143 RoundedTimecodeBase = rhs.RoundedTimecodeBase;
1144 StartTimecode = rhs.StartTimecode;
1145 DropFrame = rhs.DropFrame;
1150 TimecodeComponent::Dump(FILE* stream)
1152 char identbuf[IdentBufferLen];
1158 StructuralComponent::Dump(stream);
1159 fprintf(stream, " %22s = %d\n", "RoundedTimecodeBase", RoundedTimecodeBase);
1160 fprintf(stream, " %22s = %s\n", "StartTimecode", i64sz(StartTimecode, identbuf));
1161 fprintf(stream, " %22s = %d\n", "DropFrame", DropFrame);
1166 TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l)
1168 return InterchangeObject::InitFromBuffer(p, l);
1173 TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1175 return InterchangeObject::WriteToBuffer(Buffer);
1178 //------------------------------------------------------------------------------------------
1179 // GenericDescriptor
1182 GenericDescriptor::GenericDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
1184 GenericDescriptor::GenericDescriptor(const GenericDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
1192 GenericDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1195 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
1196 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, Locators));
1197 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, SubDescriptors));
1203 GenericDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1206 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
1207 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, Locators));
1208 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, SubDescriptors));
1214 GenericDescriptor::Copy(const GenericDescriptor& rhs)
1216 InterchangeObject::Copy(rhs);
1217 Locators = rhs.Locators;
1218 SubDescriptors = rhs.SubDescriptors;
1223 GenericDescriptor::Dump(FILE* stream)
1225 char identbuf[IdentBufferLen];
1231 InterchangeObject::Dump(stream);
1232 fprintf(stream, " %22s:\n", "Locators");
1233 Locators.Dump(stream);
1234 fprintf(stream, " %22s:\n", "SubDescriptors");
1235 SubDescriptors.Dump(stream);
1239 //------------------------------------------------------------------------------------------
1244 FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d)
1247 m_UL = m_Dict->ul(MDD_FileDescriptor);
1250 FileDescriptor::FileDescriptor(const FileDescriptor& rhs) : GenericDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1253 m_UL = m_Dict->ul(MDD_FileDescriptor);
1260 FileDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1263 Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet);
1264 if ( ASDCP_SUCCESS(result) ) {
1265 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID));
1266 LinkedTrackID.set_has_value( result == RESULT_OK );
1268 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate));
1269 if ( ASDCP_SUCCESS(result) ) {
1270 result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(FileDescriptor, ContainerDuration));
1271 ContainerDuration.set_has_value( result == RESULT_OK );
1273 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
1274 if ( ASDCP_SUCCESS(result) ) {
1275 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(FileDescriptor, Codec));
1276 Codec.set_has_value( result == RESULT_OK );
1283 FileDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1286 Result_t result = GenericDescriptor::WriteToTLVSet(TLVSet);
1287 if ( ASDCP_SUCCESS(result) && ! LinkedTrackID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(FileDescriptor, LinkedTrackID));
1288 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, SampleRate));
1289 if ( ASDCP_SUCCESS(result) && ! ContainerDuration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(FileDescriptor, ContainerDuration));
1290 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, EssenceContainer));
1291 if ( ASDCP_SUCCESS(result) && ! Codec.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(FileDescriptor, Codec));
1297 FileDescriptor::Copy(const FileDescriptor& rhs)
1299 GenericDescriptor::Copy(rhs);
1300 LinkedTrackID = rhs.LinkedTrackID;
1301 SampleRate = rhs.SampleRate;
1302 ContainerDuration = rhs.ContainerDuration;
1303 EssenceContainer = rhs.EssenceContainer;
1309 FileDescriptor::Dump(FILE* stream)
1311 char identbuf[IdentBufferLen];
1317 GenericDescriptor::Dump(stream);
1318 if ( ! LinkedTrackID.empty() ) {
1319 fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID.get());
1321 fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.EncodeString(identbuf, IdentBufferLen));
1322 if ( ! ContainerDuration.empty() ) {
1323 fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration.get(), identbuf));
1325 fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.EncodeString(identbuf, IdentBufferLen));
1326 if ( ! Codec.empty() ) {
1327 fprintf(stream, " %22s = %s\n", "Codec", Codec.get().EncodeString(identbuf, IdentBufferLen));
1333 FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1335 return InterchangeObject::InitFromBuffer(p, l);
1340 FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1342 return InterchangeObject::WriteToBuffer(Buffer);
1345 //------------------------------------------------------------------------------------------
1346 // GenericSoundEssenceDescriptor
1350 GenericSoundEssenceDescriptor::GenericSoundEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), Locked(0), ChannelCount(0), QuantizationBits(0)
1353 m_UL = m_Dict->ul(MDD_GenericSoundEssenceDescriptor);
1356 GenericSoundEssenceDescriptor::GenericSoundEssenceDescriptor(const GenericSoundEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1359 m_UL = m_Dict->ul(MDD_GenericSoundEssenceDescriptor);
1366 GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1369 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
1370 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
1371 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, Locked));
1372 if ( ASDCP_SUCCESS(result) ) {
1373 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
1374 AudioRefLevel.set_has_value( result == RESULT_OK );
1376 if ( ASDCP_SUCCESS(result) ) {
1377 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
1378 ElectroSpatialFormulation.set_has_value( result == RESULT_OK );
1380 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
1381 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
1382 if ( ASDCP_SUCCESS(result) ) {
1383 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
1384 DialNorm.set_has_value( result == RESULT_OK );
1386 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
1392 GenericSoundEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1395 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1396 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
1397 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, Locked));
1398 if ( ASDCP_SUCCESS(result) && ! AudioRefLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
1399 if ( ASDCP_SUCCESS(result) && ! ElectroSpatialFormulation.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
1400 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
1401 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
1402 if ( ASDCP_SUCCESS(result) && ! DialNorm.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
1403 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
1409 GenericSoundEssenceDescriptor::Copy(const GenericSoundEssenceDescriptor& rhs)
1411 FileDescriptor::Copy(rhs);
1412 AudioSamplingRate = rhs.AudioSamplingRate;
1413 Locked = rhs.Locked;
1414 AudioRefLevel = rhs.AudioRefLevel;
1415 ElectroSpatialFormulation = rhs.ElectroSpatialFormulation;
1416 ChannelCount = rhs.ChannelCount;
1417 QuantizationBits = rhs.QuantizationBits;
1418 DialNorm = rhs.DialNorm;
1419 SoundEssenceCoding = rhs.SoundEssenceCoding;
1424 GenericSoundEssenceDescriptor::Dump(FILE* stream)
1426 char identbuf[IdentBufferLen];
1432 FileDescriptor::Dump(stream);
1433 fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.EncodeString(identbuf, IdentBufferLen));
1434 fprintf(stream, " %22s = %d\n", "Locked", Locked);
1435 if ( ! AudioRefLevel.empty() ) {
1436 fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel.get());
1438 if ( ! ElectroSpatialFormulation.empty() ) {
1439 fprintf(stream, " %22s = %d\n", "ElectroSpatialFormulation", ElectroSpatialFormulation.get());
1441 fprintf(stream, " %22s = %d\n", "ChannelCount", ChannelCount);
1442 fprintf(stream, " %22s = %d\n", "QuantizationBits", QuantizationBits);
1443 if ( ! DialNorm.empty() ) {
1444 fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm.get());
1446 fprintf(stream, " %22s = %s\n", "SoundEssenceCoding", SoundEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1451 GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1453 return InterchangeObject::InitFromBuffer(p, l);
1458 GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1460 return InterchangeObject::WriteToBuffer(Buffer);
1463 //------------------------------------------------------------------------------------------
1464 // WaveAudioDescriptor
1468 WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), AvgBps(0)
1471 m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
1474 WaveAudioDescriptor::WaveAudioDescriptor(const WaveAudioDescriptor& rhs) : GenericSoundEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1477 m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
1484 WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1487 Result_t result = GenericSoundEssenceDescriptor::InitFromTLVSet(TLVSet);
1488 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(WaveAudioDescriptor, BlockAlign));
1489 if ( ASDCP_SUCCESS(result) ) {
1490 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
1491 SequenceOffset.set_has_value( result == RESULT_OK );
1493 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps));
1494 if ( ASDCP_SUCCESS(result) ) {
1495 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
1496 ChannelAssignment.set_has_value( result == RESULT_OK );
1498 if ( ASDCP_SUCCESS(result) ) {
1499 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ReferenceImageEditRate));
1500 ReferenceImageEditRate.set_has_value( result == RESULT_OK );
1502 if ( ASDCP_SUCCESS(result) ) {
1503 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ReferenceAudioAlignmentLevel));
1504 ReferenceAudioAlignmentLevel.set_has_value( result == RESULT_OK );
1511 WaveAudioDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1514 Result_t result = GenericSoundEssenceDescriptor::WriteToTLVSet(TLVSet);
1515 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(WaveAudioDescriptor, BlockAlign));
1516 if ( ASDCP_SUCCESS(result) && ! SequenceOffset.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
1517 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(WaveAudioDescriptor, AvgBps));
1518 if ( ASDCP_SUCCESS(result) && ! ChannelAssignment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
1519 if ( ASDCP_SUCCESS(result) && ! ReferenceImageEditRate.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ReferenceImageEditRate));
1520 if ( ASDCP_SUCCESS(result) && ! ReferenceAudioAlignmentLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ReferenceAudioAlignmentLevel));
1526 WaveAudioDescriptor::Copy(const WaveAudioDescriptor& rhs)
1528 GenericSoundEssenceDescriptor::Copy(rhs);
1529 BlockAlign = rhs.BlockAlign;
1530 SequenceOffset = rhs.SequenceOffset;
1531 AvgBps = rhs.AvgBps;
1532 ChannelAssignment = rhs.ChannelAssignment;
1533 ReferenceImageEditRate = rhs.ReferenceImageEditRate;
1534 ReferenceAudioAlignmentLevel = rhs.ReferenceAudioAlignmentLevel;
1539 WaveAudioDescriptor::Dump(FILE* stream)
1541 char identbuf[IdentBufferLen];
1547 GenericSoundEssenceDescriptor::Dump(stream);
1548 fprintf(stream, " %22s = %d\n", "BlockAlign", BlockAlign);
1549 if ( ! SequenceOffset.empty() ) {
1550 fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset.get());
1552 fprintf(stream, " %22s = %d\n", "AvgBps", AvgBps);
1553 if ( ! ChannelAssignment.empty() ) {
1554 fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.get().EncodeString(identbuf, IdentBufferLen));
1556 if ( ! ReferenceImageEditRate.empty() ) {
1557 fprintf(stream, " %22s = %s\n", "ReferenceImageEditRate", ReferenceImageEditRate.get().EncodeString(identbuf, IdentBufferLen));
1559 if ( ! ReferenceAudioAlignmentLevel.empty() ) {
1560 fprintf(stream, " %22s = %d\n", "ReferenceAudioAlignmentLevel", ReferenceAudioAlignmentLevel.get());
1566 WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1568 return InterchangeObject::InitFromBuffer(p, l);
1573 WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1575 return InterchangeObject::WriteToBuffer(Buffer);
1578 //------------------------------------------------------------------------------------------
1579 // GenericPictureEssenceDescriptor
1583 GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), FrameLayout(0), StoredWidth(0), StoredHeight(0)
1586 m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
1589 GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const GenericPictureEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1592 m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
1599 GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1602 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
1603 if ( ASDCP_SUCCESS(result) ) {
1604 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1605 SignalStandard.set_has_value( result == RESULT_OK );
1607 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1608 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1609 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1610 if ( ASDCP_SUCCESS(result) ) {
1611 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1612 StoredF2Offset.set_has_value( result == RESULT_OK );
1614 if ( ASDCP_SUCCESS(result) ) {
1615 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1616 SampledWidth.set_has_value( result == RESULT_OK );
1618 if ( ASDCP_SUCCESS(result) ) {
1619 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1620 SampledHeight.set_has_value( result == RESULT_OK );
1622 if ( ASDCP_SUCCESS(result) ) {
1623 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1624 SampledXOffset.set_has_value( result == RESULT_OK );
1626 if ( ASDCP_SUCCESS(result) ) {
1627 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1628 SampledYOffset.set_has_value( result == RESULT_OK );
1630 if ( ASDCP_SUCCESS(result) ) {
1631 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1632 DisplayHeight.set_has_value( result == RESULT_OK );
1634 if ( ASDCP_SUCCESS(result) ) {
1635 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1636 DisplayWidth.set_has_value( result == RESULT_OK );
1638 if ( ASDCP_SUCCESS(result) ) {
1639 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1640 DisplayXOffset.set_has_value( result == RESULT_OK );
1642 if ( ASDCP_SUCCESS(result) ) {
1643 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1644 DisplayYOffset.set_has_value( result == RESULT_OK );
1646 if ( ASDCP_SUCCESS(result) ) {
1647 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1648 DisplayF2Offset.set_has_value( result == RESULT_OK );
1650 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1651 if ( ASDCP_SUCCESS(result) ) {
1652 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1653 ActiveFormatDescriptor.set_has_value( result == RESULT_OK );
1655 if ( ASDCP_SUCCESS(result) ) {
1656 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1657 AlphaTransparency.set_has_value( result == RESULT_OK );
1659 if ( ASDCP_SUCCESS(result) ) {
1660 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1661 TransferCharacteristic.set_has_value( result == RESULT_OK );
1663 if ( ASDCP_SUCCESS(result) ) {
1664 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1665 ImageAlignmentOffset.set_has_value( result == RESULT_OK );
1667 if ( ASDCP_SUCCESS(result) ) {
1668 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1669 ImageStartOffset.set_has_value( result == RESULT_OK );
1671 if ( ASDCP_SUCCESS(result) ) {
1672 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1673 ImageEndOffset.set_has_value( result == RESULT_OK );
1675 if ( ASDCP_SUCCESS(result) ) {
1676 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1677 FieldDominance.set_has_value( result == RESULT_OK );
1679 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1680 if ( ASDCP_SUCCESS(result) ) {
1681 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1682 CodingEquations.set_has_value( result == RESULT_OK );
1684 if ( ASDCP_SUCCESS(result) ) {
1685 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1686 ColorPrimaries.set_has_value( result == RESULT_OK );
1688 if ( ASDCP_SUCCESS(result) ) {
1689 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlternativeCenterCuts));
1691 if ( ASDCP_SUCCESS(result) ) {
1692 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth));
1693 ActiveWidth.set_has_value( result == RESULT_OK );
1695 if ( ASDCP_SUCCESS(result) ) {
1696 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight));
1697 ActiveHeight.set_has_value( result == RESULT_OK );
1699 if ( ASDCP_SUCCESS(result) ) {
1700 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset));
1701 ActiveXOffset.set_has_value( result == RESULT_OK );
1703 if ( ASDCP_SUCCESS(result) ) {
1704 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset));
1705 ActiveYOffset.set_has_value( result == RESULT_OK );
1712 GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1715 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1716 if ( ASDCP_SUCCESS(result) && ! SignalStandard.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1717 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1718 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1719 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1720 if ( ASDCP_SUCCESS(result) && ! StoredF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1721 if ( ASDCP_SUCCESS(result) && ! SampledWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1722 if ( ASDCP_SUCCESS(result) && ! SampledHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1723 if ( ASDCP_SUCCESS(result) && ! SampledXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1724 if ( ASDCP_SUCCESS(result) && ! SampledYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1725 if ( ASDCP_SUCCESS(result) && ! DisplayHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1726 if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1727 if ( ASDCP_SUCCESS(result) && ! DisplayXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1728 if ( ASDCP_SUCCESS(result) && ! DisplayYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1729 if ( ASDCP_SUCCESS(result) && ! DisplayF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1730 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1731 if ( ASDCP_SUCCESS(result) && ! ActiveFormatDescriptor.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1732 if ( ASDCP_SUCCESS(result) && ! AlphaTransparency.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1733 if ( ASDCP_SUCCESS(result) && ! TransferCharacteristic.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1734 if ( ASDCP_SUCCESS(result) && ! ImageAlignmentOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1735 if ( ASDCP_SUCCESS(result) && ! ImageStartOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1736 if ( ASDCP_SUCCESS(result) && ! ImageEndOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1737 if ( ASDCP_SUCCESS(result) && ! FieldDominance.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1738 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1739 if ( ASDCP_SUCCESS(result) && ! CodingEquations.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1740 if ( ASDCP_SUCCESS(result) && ! ColorPrimaries.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1741 if ( ASDCP_SUCCESS(result) && ! AlternativeCenterCuts.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlternativeCenterCuts));
1742 if ( ASDCP_SUCCESS(result) && ! ActiveWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth));
1743 if ( ASDCP_SUCCESS(result) && ! ActiveHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight));
1744 if ( ASDCP_SUCCESS(result) && ! ActiveXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset));
1745 if ( ASDCP_SUCCESS(result) && ! ActiveYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset));
1751 GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs)
1753 FileDescriptor::Copy(rhs);
1754 SignalStandard = rhs.SignalStandard;
1755 FrameLayout = rhs.FrameLayout;
1756 StoredWidth = rhs.StoredWidth;
1757 StoredHeight = rhs.StoredHeight;
1758 StoredF2Offset = rhs.StoredF2Offset;
1759 SampledWidth = rhs.SampledWidth;
1760 SampledHeight = rhs.SampledHeight;
1761 SampledXOffset = rhs.SampledXOffset;
1762 SampledYOffset = rhs.SampledYOffset;
1763 DisplayHeight = rhs.DisplayHeight;
1764 DisplayWidth = rhs.DisplayWidth;
1765 DisplayXOffset = rhs.DisplayXOffset;
1766 DisplayYOffset = rhs.DisplayYOffset;
1767 DisplayF2Offset = rhs.DisplayF2Offset;
1768 AspectRatio = rhs.AspectRatio;
1769 ActiveFormatDescriptor = rhs.ActiveFormatDescriptor;
1770 AlphaTransparency = rhs.AlphaTransparency;
1771 TransferCharacteristic = rhs.TransferCharacteristic;
1772 ImageAlignmentOffset = rhs.ImageAlignmentOffset;
1773 ImageStartOffset = rhs.ImageStartOffset;
1774 ImageEndOffset = rhs.ImageEndOffset;
1775 FieldDominance = rhs.FieldDominance;
1776 PictureEssenceCoding = rhs.PictureEssenceCoding;
1777 CodingEquations = rhs.CodingEquations;
1778 ColorPrimaries = rhs.ColorPrimaries;
1779 AlternativeCenterCuts = rhs.AlternativeCenterCuts;
1780 ActiveWidth = rhs.ActiveWidth;
1781 ActiveHeight = rhs.ActiveHeight;
1782 ActiveXOffset = rhs.ActiveXOffset;
1783 ActiveYOffset = rhs.ActiveYOffset;
1788 GenericPictureEssenceDescriptor::Dump(FILE* stream)
1790 char identbuf[IdentBufferLen];
1796 FileDescriptor::Dump(stream);
1797 if ( ! SignalStandard.empty() ) {
1798 fprintf(stream, " %22s = %d\n", "SignalStandard", SignalStandard.get());
1800 fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout);
1801 fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth);
1802 fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight);
1803 if ( ! StoredF2Offset.empty() ) {
1804 fprintf(stream, " %22s = %d\n", "StoredF2Offset", StoredF2Offset.get());
1806 if ( ! SampledWidth.empty() ) {
1807 fprintf(stream, " %22s = %d\n", "SampledWidth", SampledWidth.get());
1809 if ( ! SampledHeight.empty() ) {
1810 fprintf(stream, " %22s = %d\n", "SampledHeight", SampledHeight.get());
1812 if ( ! SampledXOffset.empty() ) {
1813 fprintf(stream, " %22s = %d\n", "SampledXOffset", SampledXOffset.get());
1815 if ( ! SampledYOffset.empty() ) {
1816 fprintf(stream, " %22s = %d\n", "SampledYOffset", SampledYOffset.get());
1818 if ( ! DisplayHeight.empty() ) {
1819 fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight.get());
1821 if ( ! DisplayWidth.empty() ) {
1822 fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get());
1824 if ( ! DisplayXOffset.empty() ) {
1825 fprintf(stream, " %22s = %d\n", "DisplayXOffset", DisplayXOffset.get());
1827 if ( ! DisplayYOffset.empty() ) {
1828 fprintf(stream, " %22s = %d\n", "DisplayYOffset", DisplayYOffset.get());
1830 if ( ! DisplayF2Offset.empty() ) {
1831 fprintf(stream, " %22s = %d\n", "DisplayF2Offset", DisplayF2Offset.get());
1833 fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen));
1834 if ( ! ActiveFormatDescriptor.empty() ) {
1835 fprintf(stream, " %22s = %d\n", "ActiveFormatDescriptor", ActiveFormatDescriptor.get());
1837 if ( ! AlphaTransparency.empty() ) {
1838 fprintf(stream, " %22s = %d\n", "AlphaTransparency", AlphaTransparency.get());
1840 if ( ! TransferCharacteristic.empty() ) {
1841 fprintf(stream, " %22s = %s\n", "TransferCharacteristic", TransferCharacteristic.get().EncodeString(identbuf, IdentBufferLen));
1843 if ( ! ImageAlignmentOffset.empty() ) {
1844 fprintf(stream, " %22s = %d\n", "ImageAlignmentOffset", ImageAlignmentOffset.get());
1846 if ( ! ImageStartOffset.empty() ) {
1847 fprintf(stream, " %22s = %d\n", "ImageStartOffset", ImageStartOffset.get());
1849 if ( ! ImageEndOffset.empty() ) {
1850 fprintf(stream, " %22s = %d\n", "ImageEndOffset", ImageEndOffset.get());
1852 if ( ! FieldDominance.empty() ) {
1853 fprintf(stream, " %22s = %d\n", "FieldDominance", FieldDominance.get());
1855 fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1856 if ( ! CodingEquations.empty() ) {
1857 fprintf(stream, " %22s = %s\n", "CodingEquations", CodingEquations.get().EncodeString(identbuf, IdentBufferLen));
1859 if ( ! ColorPrimaries.empty() ) {
1860 fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen));
1862 if ( ! AlternativeCenterCuts.empty() ) {
1863 fprintf(stream, " %22s:\n", "AlternativeCenterCuts");
1864 AlternativeCenterCuts.get().Dump(stream);
1866 if ( ! ActiveWidth.empty() ) {
1867 fprintf(stream, " %22s = %d\n", "ActiveWidth", ActiveWidth.get());
1869 if ( ! ActiveHeight.empty() ) {
1870 fprintf(stream, " %22s = %d\n", "ActiveHeight", ActiveHeight.get());
1872 if ( ! ActiveXOffset.empty() ) {
1873 fprintf(stream, " %22s = %d\n", "ActiveXOffset", ActiveXOffset.get());
1875 if ( ! ActiveYOffset.empty() ) {
1876 fprintf(stream, " %22s = %d\n", "ActiveYOffset", ActiveYOffset.get());
1882 GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1884 return InterchangeObject::InitFromBuffer(p, l);
1889 GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1891 return InterchangeObject::WriteToBuffer(Buffer);
1894 //------------------------------------------------------------------------------------------
1895 // RGBAEssenceDescriptor
1899 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d)
1902 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1905 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1908 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1915 RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1918 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
1919 if ( ASDCP_SUCCESS(result) ) {
1920 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1921 ComponentMaxRef.set_has_value( result == RESULT_OK );
1923 if ( ASDCP_SUCCESS(result) ) {
1924 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1925 ComponentMinRef.set_has_value( result == RESULT_OK );
1927 if ( ASDCP_SUCCESS(result) ) {
1928 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1929 AlphaMinRef.set_has_value( result == RESULT_OK );
1931 if ( ASDCP_SUCCESS(result) ) {
1932 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1933 AlphaMaxRef.set_has_value( result == RESULT_OK );
1935 if ( ASDCP_SUCCESS(result) ) {
1936 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1937 ScanningDirection.set_has_value( result == RESULT_OK );
1944 RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1947 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
1948 if ( ASDCP_SUCCESS(result) && ! ComponentMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1949 if ( ASDCP_SUCCESS(result) && ! ComponentMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1950 if ( ASDCP_SUCCESS(result) && ! AlphaMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1951 if ( ASDCP_SUCCESS(result) && ! AlphaMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1952 if ( ASDCP_SUCCESS(result) && ! ScanningDirection.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1958 RGBAEssenceDescriptor::Copy(const RGBAEssenceDescriptor& rhs)
1960 GenericPictureEssenceDescriptor::Copy(rhs);
1961 ComponentMaxRef = rhs.ComponentMaxRef;
1962 ComponentMinRef = rhs.ComponentMinRef;
1963 AlphaMinRef = rhs.AlphaMinRef;
1964 AlphaMaxRef = rhs.AlphaMaxRef;
1965 ScanningDirection = rhs.ScanningDirection;
1970 RGBAEssenceDescriptor::Dump(FILE* stream)
1972 char identbuf[IdentBufferLen];
1978 GenericPictureEssenceDescriptor::Dump(stream);
1979 if ( ! ComponentMaxRef.empty() ) {
1980 fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef.get());
1982 if ( ! ComponentMinRef.empty() ) {
1983 fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef.get());
1985 if ( ! AlphaMinRef.empty() ) {
1986 fprintf(stream, " %22s = %d\n", "AlphaMinRef", AlphaMinRef.get());
1988 if ( ! AlphaMaxRef.empty() ) {
1989 fprintf(stream, " %22s = %d\n", "AlphaMaxRef", AlphaMaxRef.get());
1991 if ( ! ScanningDirection.empty() ) {
1992 fprintf(stream, " %22s = %d\n", "ScanningDirection", ScanningDirection.get());
1998 RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2000 return InterchangeObject::InitFromBuffer(p, l);
2005 RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2007 return InterchangeObject::WriteToBuffer(Buffer);
2010 //------------------------------------------------------------------------------------------
2011 // JPEG2000PictureSubDescriptor
2015 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)
2018 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
2021 JPEG2000PictureSubDescriptor::JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2024 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
2031 JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2034 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2035 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Rsize));
2036 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Xsize));
2037 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Ysize));
2038 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XOsize));
2039 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YOsize));
2040 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTsize));
2041 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTsize));
2042 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
2043 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
2044 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Csize));
2045 if ( ASDCP_SUCCESS(result) ) {
2046 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
2047 PictureComponentSizing.set_has_value( result == RESULT_OK );
2049 if ( ASDCP_SUCCESS(result) ) {
2050 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2051 CodingStyleDefault.set_has_value( result == RESULT_OK );
2053 if ( ASDCP_SUCCESS(result) ) {
2054 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
2055 QuantizationDefault.set_has_value( result == RESULT_OK );
2057 if ( ASDCP_SUCCESS(result) ) {
2058 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, J2CLayout));
2059 J2CLayout.set_has_value( result == RESULT_OK );
2066 JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2069 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2070 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Rsize));
2071 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Xsize));
2072 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Ysize));
2073 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XOsize));
2074 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YOsize));
2075 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTsize));
2076 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTsize));
2077 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
2078 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
2079 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize));
2080 if ( ASDCP_SUCCESS(result) && ! PictureComponentSizing.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
2081 if ( ASDCP_SUCCESS(result) && ! CodingStyleDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2082 if ( ASDCP_SUCCESS(result) && ! QuantizationDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
2083 if ( ASDCP_SUCCESS(result) && ! J2CLayout.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, J2CLayout));
2089 JPEG2000PictureSubDescriptor::Copy(const JPEG2000PictureSubDescriptor& rhs)
2091 InterchangeObject::Copy(rhs);
2095 XOsize = rhs.XOsize;
2096 YOsize = rhs.YOsize;
2097 XTsize = rhs.XTsize;
2098 YTsize = rhs.YTsize;
2099 XTOsize = rhs.XTOsize;
2100 YTOsize = rhs.YTOsize;
2102 PictureComponentSizing = rhs.PictureComponentSizing;
2103 CodingStyleDefault = rhs.CodingStyleDefault;
2104 QuantizationDefault = rhs.QuantizationDefault;
2105 J2CLayout = rhs.J2CLayout;
2110 JPEG2000PictureSubDescriptor::Dump(FILE* stream)
2112 char identbuf[IdentBufferLen];
2118 InterchangeObject::Dump(stream);
2119 fprintf(stream, " %22s = %d\n", "Rsize", Rsize);
2120 fprintf(stream, " %22s = %d\n", "Xsize", Xsize);
2121 fprintf(stream, " %22s = %d\n", "Ysize", Ysize);
2122 fprintf(stream, " %22s = %d\n", "XOsize", XOsize);
2123 fprintf(stream, " %22s = %d\n", "YOsize", YOsize);
2124 fprintf(stream, " %22s = %d\n", "XTsize", XTsize);
2125 fprintf(stream, " %22s = %d\n", "YTsize", YTsize);
2126 fprintf(stream, " %22s = %d\n", "XTOsize", XTOsize);
2127 fprintf(stream, " %22s = %d\n", "YTOsize", YTOsize);
2128 fprintf(stream, " %22s = %d\n", "Csize", Csize);
2129 if ( ! PictureComponentSizing.empty() ) {
2130 fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.get().EncodeString(identbuf, IdentBufferLen));
2132 if ( ! CodingStyleDefault.empty() ) {
2133 fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.get().EncodeString(identbuf, IdentBufferLen));
2135 if ( ! QuantizationDefault.empty() ) {
2136 fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.get().EncodeString(identbuf, IdentBufferLen));
2138 if ( ! J2CLayout.empty() ) {
2139 fprintf(stream, " %22s = %s\n", "J2CLayout", J2CLayout.get().EncodeString(identbuf, IdentBufferLen));
2145 JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2147 return InterchangeObject::InitFromBuffer(p, l);
2152 JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2154 return InterchangeObject::WriteToBuffer(Buffer);
2157 //------------------------------------------------------------------------------------------
2158 // CDCIEssenceDescriptor
2162 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0)
2165 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2168 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2171 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2178 CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2181 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
2182 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth));
2183 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2184 if ( ASDCP_SUCCESS(result) ) {
2185 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2186 VerticalSubsampling.set_has_value( result == RESULT_OK );
2188 if ( ASDCP_SUCCESS(result) ) {
2189 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2190 ColorSiting.set_has_value( result == RESULT_OK );
2192 if ( ASDCP_SUCCESS(result) ) {
2193 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2194 ReversedByteOrder.set_has_value( result == RESULT_OK );
2196 if ( ASDCP_SUCCESS(result) ) {
2197 result = TLVSet.ReadUi16(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2198 PaddingBits.set_has_value( result == RESULT_OK );
2200 if ( ASDCP_SUCCESS(result) ) {
2201 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2202 AlphaSampleDepth.set_has_value( result == RESULT_OK );
2204 if ( ASDCP_SUCCESS(result) ) {
2205 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2206 BlackRefLevel.set_has_value( result == RESULT_OK );
2208 if ( ASDCP_SUCCESS(result) ) {
2209 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2210 WhiteReflevel.set_has_value( result == RESULT_OK );
2212 if ( ASDCP_SUCCESS(result) ) {
2213 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2214 ColorRange.set_has_value( result == RESULT_OK );
2221 CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2224 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
2225 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth));
2226 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2227 if ( ASDCP_SUCCESS(result) && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2228 if ( ASDCP_SUCCESS(result) && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2229 if ( ASDCP_SUCCESS(result) && ! ReversedByteOrder.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2230 if ( ASDCP_SUCCESS(result) && ! PaddingBits.empty() ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2231 if ( ASDCP_SUCCESS(result) && ! AlphaSampleDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2232 if ( ASDCP_SUCCESS(result) && ! BlackRefLevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2233 if ( ASDCP_SUCCESS(result) && ! WhiteReflevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2234 if ( ASDCP_SUCCESS(result) && ! ColorRange.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2240 CDCIEssenceDescriptor::Copy(const CDCIEssenceDescriptor& rhs)
2242 GenericPictureEssenceDescriptor::Copy(rhs);
2243 ComponentDepth = rhs.ComponentDepth;
2244 HorizontalSubsampling = rhs.HorizontalSubsampling;
2245 VerticalSubsampling = rhs.VerticalSubsampling;
2246 ColorSiting = rhs.ColorSiting;
2247 ReversedByteOrder = rhs.ReversedByteOrder;
2248 PaddingBits = rhs.PaddingBits;
2249 AlphaSampleDepth = rhs.AlphaSampleDepth;
2250 BlackRefLevel = rhs.BlackRefLevel;
2251 WhiteReflevel = rhs.WhiteReflevel;
2252 ColorRange = rhs.ColorRange;
2257 CDCIEssenceDescriptor::Dump(FILE* stream)
2259 char identbuf[IdentBufferLen];
2265 GenericPictureEssenceDescriptor::Dump(stream);
2266 fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth);
2267 fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling);
2268 if ( ! VerticalSubsampling.empty() ) {
2269 fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get());
2271 if ( ! ColorSiting.empty() ) {
2272 fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting.get());
2274 if ( ! ReversedByteOrder.empty() ) {
2275 fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder.get());
2277 if ( ! PaddingBits.empty() ) {
2278 fprintf(stream, " %22s = %d\n", "PaddingBits", PaddingBits.get());
2280 if ( ! AlphaSampleDepth.empty() ) {
2281 fprintf(stream, " %22s = %d\n", "AlphaSampleDepth", AlphaSampleDepth.get());
2283 if ( ! BlackRefLevel.empty() ) {
2284 fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel.get());
2286 if ( ! WhiteReflevel.empty() ) {
2287 fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel.get());
2289 if ( ! ColorRange.empty() ) {
2290 fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange.get());
2296 CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2298 return InterchangeObject::InitFromBuffer(p, l);
2303 CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2305 return InterchangeObject::WriteToBuffer(Buffer);
2308 //------------------------------------------------------------------------------------------
2309 // MPEG2VideoDescriptor
2313 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d)
2316 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2319 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs) : CDCIEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2322 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2329 MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2332 Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet);
2333 if ( ASDCP_SUCCESS(result) ) {
2334 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
2335 SingleSequence.set_has_value( result == RESULT_OK );
2337 if ( ASDCP_SUCCESS(result) ) {
2338 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
2339 ConstantBFrames.set_has_value( result == RESULT_OK );
2341 if ( ASDCP_SUCCESS(result) ) {
2342 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
2343 CodedContentType.set_has_value( result == RESULT_OK );
2345 if ( ASDCP_SUCCESS(result) ) {
2346 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2347 LowDelay.set_has_value( result == RESULT_OK );
2349 if ( ASDCP_SUCCESS(result) ) {
2350 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
2351 ClosedGOP.set_has_value( result == RESULT_OK );
2353 if ( ASDCP_SUCCESS(result) ) {
2354 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
2355 IdenticalGOP.set_has_value( result == RESULT_OK );
2357 if ( ASDCP_SUCCESS(result) ) {
2358 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
2359 MaxGOP.set_has_value( result == RESULT_OK );
2361 if ( ASDCP_SUCCESS(result) ) {
2362 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
2363 BPictureCount.set_has_value( result == RESULT_OK );
2365 if ( ASDCP_SUCCESS(result) ) {
2366 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2367 BitRate.set_has_value( result == RESULT_OK );
2369 if ( ASDCP_SUCCESS(result) ) {
2370 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2371 ProfileAndLevel.set_has_value( result == RESULT_OK );
2378 MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2381 Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet);
2382 if ( ASDCP_SUCCESS(result) && ! SingleSequence.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
2383 if ( ASDCP_SUCCESS(result) && ! ConstantBFrames.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
2384 if ( ASDCP_SUCCESS(result) && ! CodedContentType.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
2385 if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2386 if ( ASDCP_SUCCESS(result) && ! ClosedGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
2387 if ( ASDCP_SUCCESS(result) && ! IdenticalGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
2388 if ( ASDCP_SUCCESS(result) && ! MaxGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
2389 if ( ASDCP_SUCCESS(result) && ! BPictureCount.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
2390 if ( ASDCP_SUCCESS(result) && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2391 if ( ASDCP_SUCCESS(result) && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2397 MPEG2VideoDescriptor::Copy(const MPEG2VideoDescriptor& rhs)
2399 CDCIEssenceDescriptor::Copy(rhs);
2400 SingleSequence = rhs.SingleSequence;
2401 ConstantBFrames = rhs.ConstantBFrames;
2402 CodedContentType = rhs.CodedContentType;
2403 LowDelay = rhs.LowDelay;
2404 ClosedGOP = rhs.ClosedGOP;
2405 IdenticalGOP = rhs.IdenticalGOP;
2406 MaxGOP = rhs.MaxGOP;
2407 BPictureCount = rhs.BPictureCount;
2408 BitRate = rhs.BitRate;
2409 ProfileAndLevel = rhs.ProfileAndLevel;
2414 MPEG2VideoDescriptor::Dump(FILE* stream)
2416 char identbuf[IdentBufferLen];
2422 CDCIEssenceDescriptor::Dump(stream);
2423 if ( ! SingleSequence.empty() ) {
2424 fprintf(stream, " %22s = %d\n", "SingleSequence", SingleSequence.get());
2426 if ( ! ConstantBFrames.empty() ) {
2427 fprintf(stream, " %22s = %d\n", "ConstantBFrames", ConstantBFrames.get());
2429 if ( ! CodedContentType.empty() ) {
2430 fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType.get());
2432 if ( ! LowDelay.empty() ) {
2433 fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get());
2435 if ( ! ClosedGOP.empty() ) {
2436 fprintf(stream, " %22s = %d\n", "ClosedGOP", ClosedGOP.get());
2438 if ( ! IdenticalGOP.empty() ) {
2439 fprintf(stream, " %22s = %d\n", "IdenticalGOP", IdenticalGOP.get());
2441 if ( ! MaxGOP.empty() ) {
2442 fprintf(stream, " %22s = %d\n", "MaxGOP", MaxGOP.get());
2444 if ( ! BPictureCount.empty() ) {
2445 fprintf(stream, " %22s = %d\n", "BPictureCount", BPictureCount.get());
2447 if ( ! BitRate.empty() ) {
2448 fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get());
2450 if ( ! ProfileAndLevel.empty() ) {
2451 fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel.get());
2457 MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2459 return InterchangeObject::InitFromBuffer(p, l);
2464 MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2466 return InterchangeObject::WriteToBuffer(Buffer);
2469 //------------------------------------------------------------------------------------------
2474 DMSegment::DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0)
2477 m_UL = m_Dict->ul(MDD_DMSegment);
2480 DMSegment::DMSegment(const DMSegment& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2483 m_UL = m_Dict->ul(MDD_DMSegment);
2490 DMSegment::InitFromTLVSet(TLVReader& TLVSet)
2493 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2494 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition));
2495 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, EventStartPosition));
2496 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, Duration));
2497 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, EventComment));
2498 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DMFramework));
2504 DMSegment::WriteToTLVSet(TLVWriter& TLVSet)
2507 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2508 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DataDefinition));
2509 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, EventStartPosition));
2510 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, Duration));
2511 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, EventComment));
2512 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DMFramework));
2518 DMSegment::Copy(const DMSegment& rhs)
2520 InterchangeObject::Copy(rhs);
2521 DataDefinition = rhs.DataDefinition;
2522 EventStartPosition = rhs.EventStartPosition;
2523 Duration = rhs.Duration;
2524 EventComment = rhs.EventComment;
2525 DMFramework = rhs.DMFramework;
2530 DMSegment::Dump(FILE* stream)
2532 char identbuf[IdentBufferLen];
2538 InterchangeObject::Dump(stream);
2539 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
2540 fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition, identbuf));
2541 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf));
2542 fprintf(stream, " %22s = %s\n", "EventComment", EventComment.EncodeString(identbuf, IdentBufferLen));
2543 fprintf(stream, " %22s = %s\n", "DMFramework", DMFramework.EncodeString(identbuf, IdentBufferLen));
2548 DMSegment::InitFromBuffer(const byte_t* p, ui32_t l)
2550 return InterchangeObject::InitFromBuffer(p, l);
2555 DMSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2557 return InterchangeObject::WriteToBuffer(Buffer);
2560 //------------------------------------------------------------------------------------------
2561 // CryptographicFramework
2565 CryptographicFramework::CryptographicFramework(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2568 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2571 CryptographicFramework::CryptographicFramework(const CryptographicFramework& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2574 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2581 CryptographicFramework::InitFromTLVSet(TLVReader& TLVSet)
2584 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2585 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicFramework, ContextSR));
2591 CryptographicFramework::WriteToTLVSet(TLVWriter& TLVSet)
2594 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2595 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicFramework, ContextSR));
2601 CryptographicFramework::Copy(const CryptographicFramework& rhs)
2603 InterchangeObject::Copy(rhs);
2604 ContextSR = rhs.ContextSR;
2609 CryptographicFramework::Dump(FILE* stream)
2611 char identbuf[IdentBufferLen];
2617 InterchangeObject::Dump(stream);
2618 fprintf(stream, " %22s = %s\n", "ContextSR", ContextSR.EncodeString(identbuf, IdentBufferLen));
2623 CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
2625 return InterchangeObject::InitFromBuffer(p, l);
2630 CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2632 return InterchangeObject::WriteToBuffer(Buffer);
2635 //------------------------------------------------------------------------------------------
2636 // CryptographicContext
2640 CryptographicContext::CryptographicContext(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2643 m_UL = m_Dict->ul(MDD_CryptographicContext);
2646 CryptographicContext::CryptographicContext(const CryptographicContext& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2649 m_UL = m_Dict->ul(MDD_CryptographicContext);
2656 CryptographicContext::InitFromTLVSet(TLVReader& TLVSet)
2659 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2660 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, ContextID));
2661 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, SourceEssenceContainer));
2662 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CipherAlgorithm));
2663 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, MICAlgorithm));
2664 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CryptographicKeyID));
2670 CryptographicContext::WriteToTLVSet(TLVWriter& TLVSet)
2673 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2674 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, ContextID));
2675 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, SourceEssenceContainer));
2676 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CipherAlgorithm));
2677 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, MICAlgorithm));
2678 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CryptographicKeyID));
2684 CryptographicContext::Copy(const CryptographicContext& rhs)
2686 InterchangeObject::Copy(rhs);
2687 ContextID = rhs.ContextID;
2688 SourceEssenceContainer = rhs.SourceEssenceContainer;
2689 CipherAlgorithm = rhs.CipherAlgorithm;
2690 MICAlgorithm = rhs.MICAlgorithm;
2691 CryptographicKeyID = rhs.CryptographicKeyID;
2696 CryptographicContext::Dump(FILE* stream)
2698 char identbuf[IdentBufferLen];
2704 InterchangeObject::Dump(stream);
2705 fprintf(stream, " %22s = %s\n", "ContextID", ContextID.EncodeString(identbuf, IdentBufferLen));
2706 fprintf(stream, " %22s = %s\n", "SourceEssenceContainer", SourceEssenceContainer.EncodeString(identbuf, IdentBufferLen));
2707 fprintf(stream, " %22s = %s\n", "CipherAlgorithm", CipherAlgorithm.EncodeString(identbuf, IdentBufferLen));
2708 fprintf(stream, " %22s = %s\n", "MICAlgorithm", MICAlgorithm.EncodeString(identbuf, IdentBufferLen));
2709 fprintf(stream, " %22s = %s\n", "CryptographicKeyID", CryptographicKeyID.EncodeString(identbuf, IdentBufferLen));
2714 CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
2716 return InterchangeObject::InitFromBuffer(p, l);
2721 CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2723 return InterchangeObject::WriteToBuffer(Buffer);
2726 //------------------------------------------------------------------------------------------
2727 // GenericDataEssenceDescriptor
2731 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d)
2734 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2737 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const GenericDataEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2740 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2747 GenericDataEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2750 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
2751 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2757 GenericDataEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2760 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
2761 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2767 GenericDataEssenceDescriptor::Copy(const GenericDataEssenceDescriptor& rhs)
2769 FileDescriptor::Copy(rhs);
2770 DataEssenceCoding = rhs.DataEssenceCoding;
2775 GenericDataEssenceDescriptor::Dump(FILE* stream)
2777 char identbuf[IdentBufferLen];
2783 FileDescriptor::Dump(stream);
2784 fprintf(stream, " %22s = %s\n", "DataEssenceCoding", DataEssenceCoding.EncodeString(identbuf, IdentBufferLen));
2789 GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2791 return InterchangeObject::InitFromBuffer(p, l);
2796 GenericDataEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2798 return InterchangeObject::WriteToBuffer(Buffer);
2801 //------------------------------------------------------------------------------------------
2802 // TimedTextDescriptor
2806 TimedTextDescriptor::TimedTextDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
2809 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2812 TimedTextDescriptor::TimedTextDescriptor(const TimedTextDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2815 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2822 TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2825 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
2826 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, ResourceID));
2827 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, UCSEncoding));
2828 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, NamespaceURI));
2829 if ( ASDCP_SUCCESS(result) ) {
2830 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
2831 RFC5646LanguageTagList.set_has_value( result == RESULT_OK );
2838 TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2841 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
2842 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, ResourceID));
2843 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding));
2844 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI));
2845 if ( ASDCP_SUCCESS(result) && ! RFC5646LanguageTagList.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
2851 TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs)
2853 GenericDataEssenceDescriptor::Copy(rhs);
2854 ResourceID = rhs.ResourceID;
2855 UCSEncoding = rhs.UCSEncoding;
2856 NamespaceURI = rhs.NamespaceURI;
2857 RFC5646LanguageTagList = rhs.RFC5646LanguageTagList;
2862 TimedTextDescriptor::Dump(FILE* stream)
2864 char identbuf[IdentBufferLen];
2870 GenericDataEssenceDescriptor::Dump(stream);
2871 fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen));
2872 fprintf(stream, " %22s = %s\n", "UCSEncoding", UCSEncoding.EncodeString(identbuf, IdentBufferLen));
2873 fprintf(stream, " %22s = %s\n", "NamespaceURI", NamespaceURI.EncodeString(identbuf, IdentBufferLen));
2874 if ( ! RFC5646LanguageTagList.empty() ) {
2875 fprintf(stream, " %22s = %s\n", "RFC5646LanguageTagList", RFC5646LanguageTagList.get().EncodeString(identbuf, IdentBufferLen));
2881 TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2883 return InterchangeObject::InitFromBuffer(p, l);
2888 TimedTextDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2890 return InterchangeObject::WriteToBuffer(Buffer);
2893 //------------------------------------------------------------------------------------------
2894 // TimedTextResourceSubDescriptor
2898 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EssenceStreamID(0)
2901 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2904 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const TimedTextResourceSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2907 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2914 TimedTextResourceSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2917 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2918 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2919 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2920 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2926 TimedTextResourceSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2929 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2930 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2931 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2932 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2938 TimedTextResourceSubDescriptor::Copy(const TimedTextResourceSubDescriptor& rhs)
2940 InterchangeObject::Copy(rhs);
2941 AncillaryResourceID = rhs.AncillaryResourceID;
2942 MIMEMediaType = rhs.MIMEMediaType;
2943 EssenceStreamID = rhs.EssenceStreamID;
2948 TimedTextResourceSubDescriptor::Dump(FILE* stream)
2950 char identbuf[IdentBufferLen];
2956 InterchangeObject::Dump(stream);
2957 fprintf(stream, " %22s = %s\n", "AncillaryResourceID", AncillaryResourceID.EncodeString(identbuf, IdentBufferLen));
2958 fprintf(stream, " %22s = %s\n", "MIMEMediaType", MIMEMediaType.EncodeString(identbuf, IdentBufferLen));
2959 fprintf(stream, " %22s = %d\n", "EssenceStreamID", EssenceStreamID);
2964 TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2966 return InterchangeObject::InitFromBuffer(p, l);
2971 TimedTextResourceSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2973 return InterchangeObject::WriteToBuffer(Buffer);
2976 //------------------------------------------------------------------------------------------
2977 // StereoscopicPictureSubDescriptor
2981 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2984 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2987 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const StereoscopicPictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2990 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2997 StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3000 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3006 StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3009 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3015 StereoscopicPictureSubDescriptor::Copy(const StereoscopicPictureSubDescriptor& rhs)
3017 InterchangeObject::Copy(rhs);
3022 StereoscopicPictureSubDescriptor::Dump(FILE* stream)
3024 char identbuf[IdentBufferLen];
3030 InterchangeObject::Dump(stream);
3035 StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3037 return InterchangeObject::InitFromBuffer(p, l);
3042 StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3044 return InterchangeObject::WriteToBuffer(Buffer);
3047 //------------------------------------------------------------------------------------------
3048 // ContainerConstraintSubDescriptor
3052 ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3055 m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor);
3058 ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const ContainerConstraintSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3061 m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor);
3068 ContainerConstraintSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3071 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3077 ContainerConstraintSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3080 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3086 ContainerConstraintSubDescriptor::Copy(const ContainerConstraintSubDescriptor& rhs)
3088 InterchangeObject::Copy(rhs);
3093 ContainerConstraintSubDescriptor::Dump(FILE* stream)
3095 char identbuf[IdentBufferLen];
3101 InterchangeObject::Dump(stream);
3106 ContainerConstraintSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3108 return InterchangeObject::InitFromBuffer(p, l);
3113 ContainerConstraintSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3115 return InterchangeObject::WriteToBuffer(Buffer);
3118 //------------------------------------------------------------------------------------------
3123 NetworkLocator::NetworkLocator(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3126 m_UL = m_Dict->ul(MDD_NetworkLocator);
3129 NetworkLocator::NetworkLocator(const NetworkLocator& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3132 m_UL = m_Dict->ul(MDD_NetworkLocator);
3139 NetworkLocator::InitFromTLVSet(TLVReader& TLVSet)
3142 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3143 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(NetworkLocator, URLString));
3149 NetworkLocator::WriteToTLVSet(TLVWriter& TLVSet)
3152 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3153 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(NetworkLocator, URLString));
3159 NetworkLocator::Copy(const NetworkLocator& rhs)
3161 InterchangeObject::Copy(rhs);
3162 URLString = rhs.URLString;
3167 NetworkLocator::Dump(FILE* stream)
3169 char identbuf[IdentBufferLen];
3175 InterchangeObject::Dump(stream);
3176 fprintf(stream, " %22s = %s\n", "URLString", URLString.EncodeString(identbuf, IdentBufferLen));
3181 NetworkLocator::InitFromBuffer(const byte_t* p, ui32_t l)
3183 return InterchangeObject::InitFromBuffer(p, l);
3188 NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3190 return InterchangeObject::WriteToBuffer(Buffer);
3193 //------------------------------------------------------------------------------------------
3194 // MCALabelSubDescriptor
3198 MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
3201 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
3204 MCALabelSubDescriptor::MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3207 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
3214 MCALabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3217 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3218 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3219 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALinkID));
3220 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3221 if ( ASDCP_SUCCESS(result) ) {
3222 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3223 MCATagName.set_has_value( result == RESULT_OK );
3225 if ( ASDCP_SUCCESS(result) ) {
3226 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3227 MCAChannelID.set_has_value( result == RESULT_OK );
3229 if ( ASDCP_SUCCESS(result) ) {
3230 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3231 RFC5646SpokenLanguage.set_has_value( result == RESULT_OK );
3238 MCALabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3241 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3242 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3243 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALinkID));
3244 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3245 if ( ASDCP_SUCCESS(result) && ! MCATagName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3246 if ( ASDCP_SUCCESS(result) && ! MCAChannelID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3247 if ( ASDCP_SUCCESS(result) && ! RFC5646SpokenLanguage.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3253 MCALabelSubDescriptor::Copy(const MCALabelSubDescriptor& rhs)
3255 InterchangeObject::Copy(rhs);
3256 MCALabelDictionaryID = rhs.MCALabelDictionaryID;
3257 MCALinkID = rhs.MCALinkID;
3258 MCATagSymbol = rhs.MCATagSymbol;
3259 MCATagName = rhs.MCATagName;
3260 MCAChannelID = rhs.MCAChannelID;
3261 RFC5646SpokenLanguage = rhs.RFC5646SpokenLanguage;
3266 MCALabelSubDescriptor::Dump(FILE* stream)
3268 char identbuf[IdentBufferLen];
3274 InterchangeObject::Dump(stream);
3275 fprintf(stream, " %22s = %s\n", "MCALabelDictionaryID", MCALabelDictionaryID.EncodeString(identbuf, IdentBufferLen));
3276 fprintf(stream, " %22s = %s\n", "MCALinkID", MCALinkID.EncodeString(identbuf, IdentBufferLen));
3277 fprintf(stream, " %22s = %s\n", "MCATagSymbol", MCATagSymbol.EncodeString(identbuf, IdentBufferLen));
3278 if ( ! MCATagName.empty() ) {
3279 fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.get().EncodeString(identbuf, IdentBufferLen));
3281 if ( ! MCAChannelID.empty() ) {
3282 fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID.get());
3284 if ( ! RFC5646SpokenLanguage.empty() ) {
3285 fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.get().EncodeString(identbuf, IdentBufferLen));
3291 MCALabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3293 return InterchangeObject::InitFromBuffer(p, l);
3298 MCALabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3300 return InterchangeObject::WriteToBuffer(Buffer);
3303 //------------------------------------------------------------------------------------------
3304 // AudioChannelLabelSubDescriptor
3308 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3311 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3314 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const AudioChannelLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3317 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3324 AudioChannelLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3327 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3328 if ( ASDCP_SUCCESS(result) ) {
3329 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3330 SoundfieldGroupLinkID.set_has_value( result == RESULT_OK );
3337 AudioChannelLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3340 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3341 if ( ASDCP_SUCCESS(result) && ! SoundfieldGroupLinkID.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3347 AudioChannelLabelSubDescriptor::Copy(const AudioChannelLabelSubDescriptor& rhs)
3349 MCALabelSubDescriptor::Copy(rhs);
3350 SoundfieldGroupLinkID = rhs.SoundfieldGroupLinkID;
3355 AudioChannelLabelSubDescriptor::Dump(FILE* stream)
3357 char identbuf[IdentBufferLen];
3363 MCALabelSubDescriptor::Dump(stream);
3364 if ( ! SoundfieldGroupLinkID.empty() ) {
3365 fprintf(stream, " %22s = %s\n", "SoundfieldGroupLinkID", SoundfieldGroupLinkID.get().EncodeString(identbuf, IdentBufferLen));
3371 AudioChannelLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3373 return InterchangeObject::InitFromBuffer(p, l);
3378 AudioChannelLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3380 return InterchangeObject::WriteToBuffer(Buffer);
3383 //------------------------------------------------------------------------------------------
3384 // SoundfieldGroupLabelSubDescriptor
3388 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3391 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3394 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const SoundfieldGroupLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3397 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3404 SoundfieldGroupLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3407 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3408 if ( ASDCP_SUCCESS(result) ) {
3409 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3416 SoundfieldGroupLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3419 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3420 if ( ASDCP_SUCCESS(result) && ! GroupOfSoundfieldGroupsLinkID.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3426 SoundfieldGroupLabelSubDescriptor::Copy(const SoundfieldGroupLabelSubDescriptor& rhs)
3428 MCALabelSubDescriptor::Copy(rhs);
3429 GroupOfSoundfieldGroupsLinkID = rhs.GroupOfSoundfieldGroupsLinkID;
3434 SoundfieldGroupLabelSubDescriptor::Dump(FILE* stream)
3436 char identbuf[IdentBufferLen];
3442 MCALabelSubDescriptor::Dump(stream);
3443 if ( ! GroupOfSoundfieldGroupsLinkID.empty() ) {
3444 fprintf(stream, " %22s:\n", "GroupOfSoundfieldGroupsLinkID");
3445 GroupOfSoundfieldGroupsLinkID.get().Dump(stream);
3451 SoundfieldGroupLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3453 return InterchangeObject::InitFromBuffer(p, l);
3458 SoundfieldGroupLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3460 return InterchangeObject::WriteToBuffer(Buffer);
3463 //------------------------------------------------------------------------------------------
3464 // GroupOfSoundfieldGroupsLabelSubDescriptor
3468 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3471 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3474 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3477 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3484 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3487 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3493 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3496 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3502 GroupOfSoundfieldGroupsLabelSubDescriptor::Copy(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs)
3504 MCALabelSubDescriptor::Copy(rhs);
3509 GroupOfSoundfieldGroupsLabelSubDescriptor::Dump(FILE* stream)
3511 char identbuf[IdentBufferLen];
3517 MCALabelSubDescriptor::Dump(stream);
3522 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3524 return InterchangeObject::InitFromBuffer(p, l);
3529 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3531 return InterchangeObject::WriteToBuffer(Buffer);
3534 //------------------------------------------------------------------------------------------
3539 DCDataDescriptor::DCDataDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
3542 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3545 DCDataDescriptor::DCDataDescriptor(const DCDataDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3548 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3555 DCDataDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3558 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
3564 DCDataDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3567 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
3573 DCDataDescriptor::Copy(const DCDataDescriptor& rhs)
3575 GenericDataEssenceDescriptor::Copy(rhs);
3580 DCDataDescriptor::Dump(FILE* stream)
3582 char identbuf[IdentBufferLen];
3588 GenericDataEssenceDescriptor::Dump(stream);
3593 DCDataDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3595 return InterchangeObject::InitFromBuffer(p, l);
3600 DCDataDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3602 return InterchangeObject::WriteToBuffer(Buffer);
3605 //------------------------------------------------------------------------------------------
3606 // PrivateDCDataDescriptor
3610 PrivateDCDataDescriptor::PrivateDCDataDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
3613 m_UL = m_Dict->ul(MDD_PrivateDCDataDescriptor);
3616 PrivateDCDataDescriptor::PrivateDCDataDescriptor(const PrivateDCDataDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3619 m_UL = m_Dict->ul(MDD_PrivateDCDataDescriptor);
3626 PrivateDCDataDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3629 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
3635 PrivateDCDataDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3638 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
3644 PrivateDCDataDescriptor::Copy(const PrivateDCDataDescriptor& rhs)
3646 GenericDataEssenceDescriptor::Copy(rhs);
3651 PrivateDCDataDescriptor::Dump(FILE* stream)
3653 char identbuf[IdentBufferLen];
3659 GenericDataEssenceDescriptor::Dump(stream);
3664 PrivateDCDataDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3666 return InterchangeObject::InitFromBuffer(p, l);
3671 PrivateDCDataDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3673 return InterchangeObject::WriteToBuffer(Buffer);
3676 //------------------------------------------------------------------------------------------
3677 // DolbyAtmosSubDescriptor
3681 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), FirstFrame(0), MaxChannelCount(0), MaxObjectCount(0), AtmosVersion(0)
3684 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3687 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const DolbyAtmosSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3690 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3697 DolbyAtmosSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3700 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3701 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3702 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3703 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3704 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3705 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3711 DolbyAtmosSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3714 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3715 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3716 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3717 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3718 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3719 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3725 DolbyAtmosSubDescriptor::Copy(const DolbyAtmosSubDescriptor& rhs)
3727 InterchangeObject::Copy(rhs);
3728 AtmosID = rhs.AtmosID;
3729 FirstFrame = rhs.FirstFrame;
3730 MaxChannelCount = rhs.MaxChannelCount;
3731 MaxObjectCount = rhs.MaxObjectCount;
3732 AtmosVersion = rhs.AtmosVersion;
3737 DolbyAtmosSubDescriptor::Dump(FILE* stream)
3739 char identbuf[IdentBufferLen];
3745 InterchangeObject::Dump(stream);
3746 fprintf(stream, " %22s = %s\n", "AtmosID", AtmosID.EncodeString(identbuf, IdentBufferLen));
3747 fprintf(stream, " %22s = %d\n", "FirstFrame", FirstFrame);
3748 fprintf(stream, " %22s = %d\n", "MaxChannelCount", MaxChannelCount);
3749 fprintf(stream, " %22s = %d\n", "MaxObjectCount", MaxObjectCount);
3750 fprintf(stream, " %22s = %d\n", "AtmosVersion", AtmosVersion);
3755 DolbyAtmosSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3757 return InterchangeObject::InitFromBuffer(p, l);
3762 DolbyAtmosSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3764 return InterchangeObject::WriteToBuffer(Buffer);
3767 //------------------------------------------------------------------------------------------
3768 // PHDRMetadataTrackSubDescriptor
3772 PHDRMetadataTrackSubDescriptor::PHDRMetadataTrackSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), SourceTrackID(0), SimplePayloadSID(0)
3775 m_UL = m_Dict->ul(MDD_PHDRMetadataTrackSubDescriptor);
3778 PHDRMetadataTrackSubDescriptor::PHDRMetadataTrackSubDescriptor(const PHDRMetadataTrackSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3781 m_UL = m_Dict->ul(MDD_PHDRMetadataTrackSubDescriptor);
3788 PHDRMetadataTrackSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3791 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3792 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, DataDefinition));
3793 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, SourceTrackID));
3794 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(PHDRMetadataTrackSubDescriptor, SimplePayloadSID));
3800 PHDRMetadataTrackSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3803 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3804 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, DataDefinition));
3805 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, SourceTrackID));
3806 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(PHDRMetadataTrackSubDescriptor, SimplePayloadSID));
3812 PHDRMetadataTrackSubDescriptor::Copy(const PHDRMetadataTrackSubDescriptor& rhs)
3814 InterchangeObject::Copy(rhs);
3815 DataDefinition = rhs.DataDefinition;
3816 SourceTrackID = rhs.SourceTrackID;
3817 SimplePayloadSID = rhs.SimplePayloadSID;
3822 PHDRMetadataTrackSubDescriptor::Dump(FILE* stream)
3824 char identbuf[IdentBufferLen];
3830 InterchangeObject::Dump(stream);
3831 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
3832 fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID);
3833 fprintf(stream, " %22s = %d\n", "SimplePayloadSID", SimplePayloadSID);
3838 PHDRMetadataTrackSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3840 return InterchangeObject::InitFromBuffer(p, l);
3845 PHDRMetadataTrackSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3847 return InterchangeObject::WriteToBuffer(Buffer);