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* NetworkLocator_Factory(const Dictionary*& Dict) { return new NetworkLocator(Dict); }
72 static InterchangeObject* MCALabelSubDescriptor_Factory(const Dictionary*& Dict) { return new MCALabelSubDescriptor(Dict); }
73 static InterchangeObject* AudioChannelLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new AudioChannelLabelSubDescriptor(Dict); }
74 static InterchangeObject* SoundfieldGroupLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new SoundfieldGroupLabelSubDescriptor(Dict); }
75 static InterchangeObject* GroupOfSoundfieldGroupsLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new GroupOfSoundfieldGroupsLabelSubDescriptor(Dict); }
76 static InterchangeObject* DCDataDescriptor_Factory(const Dictionary*& Dict) { return new DCDataDescriptor(Dict); }
77 static InterchangeObject* DolbyAtmosSubDescriptor_Factory(const Dictionary*& Dict) { return new DolbyAtmosSubDescriptor(Dict); }
81 ASDCP::MXF::Metadata_InitTypes(const Dictionary*& Dict)
84 SetObjectFactory(Dict->ul(MDD_Preface), Preface_Factory);
85 SetObjectFactory(Dict->ul(MDD_IndexTableSegment), IndexTableSegment_Factory);
87 SetObjectFactory(Dict->ul(MDD_Identification), Identification_Factory);
88 SetObjectFactory(Dict->ul(MDD_ContentStorage), ContentStorage_Factory);
89 SetObjectFactory(Dict->ul(MDD_EssenceContainerData), EssenceContainerData_Factory);
90 SetObjectFactory(Dict->ul(MDD_MaterialPackage), MaterialPackage_Factory);
91 SetObjectFactory(Dict->ul(MDD_SourcePackage), SourcePackage_Factory);
92 SetObjectFactory(Dict->ul(MDD_StaticTrack), StaticTrack_Factory);
93 SetObjectFactory(Dict->ul(MDD_Track), Track_Factory);
94 SetObjectFactory(Dict->ul(MDD_Sequence), Sequence_Factory);
95 SetObjectFactory(Dict->ul(MDD_SourceClip), SourceClip_Factory);
96 SetObjectFactory(Dict->ul(MDD_TimecodeComponent), TimecodeComponent_Factory);
97 SetObjectFactory(Dict->ul(MDD_FileDescriptor), FileDescriptor_Factory);
98 SetObjectFactory(Dict->ul(MDD_GenericSoundEssenceDescriptor), GenericSoundEssenceDescriptor_Factory);
99 SetObjectFactory(Dict->ul(MDD_WaveAudioDescriptor), WaveAudioDescriptor_Factory);
100 SetObjectFactory(Dict->ul(MDD_GenericPictureEssenceDescriptor), GenericPictureEssenceDescriptor_Factory);
101 SetObjectFactory(Dict->ul(MDD_RGBAEssenceDescriptor), RGBAEssenceDescriptor_Factory);
102 SetObjectFactory(Dict->ul(MDD_JPEG2000PictureSubDescriptor), JPEG2000PictureSubDescriptor_Factory);
103 SetObjectFactory(Dict->ul(MDD_CDCIEssenceDescriptor), CDCIEssenceDescriptor_Factory);
104 SetObjectFactory(Dict->ul(MDD_MPEG2VideoDescriptor), MPEG2VideoDescriptor_Factory);
105 SetObjectFactory(Dict->ul(MDD_DMSegment), DMSegment_Factory);
106 SetObjectFactory(Dict->ul(MDD_CryptographicFramework), CryptographicFramework_Factory);
107 SetObjectFactory(Dict->ul(MDD_CryptographicContext), CryptographicContext_Factory);
108 SetObjectFactory(Dict->ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory);
109 SetObjectFactory(Dict->ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory);
110 SetObjectFactory(Dict->ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory);
111 SetObjectFactory(Dict->ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory);
112 SetObjectFactory(Dict->ul(MDD_NetworkLocator), NetworkLocator_Factory);
113 SetObjectFactory(Dict->ul(MDD_MCALabelSubDescriptor), MCALabelSubDescriptor_Factory);
114 SetObjectFactory(Dict->ul(MDD_AudioChannelLabelSubDescriptor), AudioChannelLabelSubDescriptor_Factory);
115 SetObjectFactory(Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor), SoundfieldGroupLabelSubDescriptor_Factory);
116 SetObjectFactory(Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor), GroupOfSoundfieldGroupsLabelSubDescriptor_Factory);
117 SetObjectFactory(Dict->ul(MDD_DCDataDescriptor), DCDataDescriptor_Factory);
118 SetObjectFactory(Dict->ul(MDD_DolbyAtmosSubDescriptor), DolbyAtmosSubDescriptor_Factory);
121 //------------------------------------------------------------------------------------------
126 //------------------------------------------------------------------------------------------
131 Identification::Identification(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
134 m_UL = m_Dict->ul(MDD_Identification);
137 Identification::Identification(const Identification& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
140 m_UL = m_Dict->ul(MDD_Identification);
147 Identification::InitFromTLVSet(TLVReader& TLVSet)
150 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
151 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ThisGenerationUID));
152 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, CompanyName));
153 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductName));
154 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductVersion));
155 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, VersionString));
156 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductUID));
157 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ModificationDate));
158 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ToolkitVersion));
159 if ( ASDCP_SUCCESS(result) ) {
160 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Identification, Platform));
161 Platform.set_has_value( result == RESULT_OK );
168 Identification::WriteToTLVSet(TLVWriter& TLVSet)
171 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
172 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ThisGenerationUID));
173 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, CompanyName));
174 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductName));
175 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductVersion));
176 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, VersionString));
177 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductUID));
178 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ModificationDate));
179 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ToolkitVersion));
180 if ( ASDCP_SUCCESS(result) && ! Platform.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Identification, Platform));
186 Identification::Copy(const Identification& rhs)
188 InterchangeObject::Copy(rhs);
189 ThisGenerationUID = rhs.ThisGenerationUID;
190 CompanyName = rhs.CompanyName;
191 ProductName = rhs.ProductName;
192 ProductVersion = rhs.ProductVersion;
193 VersionString = rhs.VersionString;
194 ProductUID = rhs.ProductUID;
195 ModificationDate = rhs.ModificationDate;
196 ToolkitVersion = rhs.ToolkitVersion;
197 Platform = rhs.Platform;
202 Identification::Dump(FILE* stream)
204 char identbuf[IdentBufferLen];
210 InterchangeObject::Dump(stream);
211 fprintf(stream, " %22s = %s\n", "ThisGenerationUID", ThisGenerationUID.EncodeString(identbuf, IdentBufferLen));
212 fprintf(stream, " %22s = %s\n", "CompanyName", CompanyName.EncodeString(identbuf, IdentBufferLen));
213 fprintf(stream, " %22s = %s\n", "ProductName", ProductName.EncodeString(identbuf, IdentBufferLen));
214 fprintf(stream, " %22s = %s\n", "ProductVersion", ProductVersion.EncodeString(identbuf, IdentBufferLen));
215 fprintf(stream, " %22s = %s\n", "VersionString", VersionString.EncodeString(identbuf, IdentBufferLen));
216 fprintf(stream, " %22s = %s\n", "ProductUID", ProductUID.EncodeString(identbuf, IdentBufferLen));
217 fprintf(stream, " %22s = %s\n", "ModificationDate", ModificationDate.EncodeString(identbuf, IdentBufferLen));
218 fprintf(stream, " %22s = %s\n", "ToolkitVersion", ToolkitVersion.EncodeString(identbuf, IdentBufferLen));
219 if ( ! Platform.empty() ) {
220 fprintf(stream, " %22s = %s\n", "Platform", Platform.get().EncodeString(identbuf, IdentBufferLen));
226 Identification::InitFromBuffer(const byte_t* p, ui32_t l)
228 return InterchangeObject::InitFromBuffer(p, l);
233 Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
235 return InterchangeObject::WriteToBuffer(Buffer);
238 //------------------------------------------------------------------------------------------
243 ContentStorage::ContentStorage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
246 m_UL = m_Dict->ul(MDD_ContentStorage);
249 ContentStorage::ContentStorage(const ContentStorage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
252 m_UL = m_Dict->ul(MDD_ContentStorage);
259 ContentStorage::InitFromTLVSet(TLVReader& TLVSet)
262 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
263 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, Packages));
264 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(ContentStorage, EssenceContainerData));
270 ContentStorage::WriteToTLVSet(TLVWriter& TLVSet)
273 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
274 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, Packages));
275 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(ContentStorage, EssenceContainerData));
281 ContentStorage::Copy(const ContentStorage& rhs)
283 InterchangeObject::Copy(rhs);
284 Packages = rhs.Packages;
285 EssenceContainerData = rhs.EssenceContainerData;
290 ContentStorage::Dump(FILE* stream)
292 char identbuf[IdentBufferLen];
298 InterchangeObject::Dump(stream);
299 fprintf(stream, " %22s:\n", "Packages");
300 Packages.Dump(stream);
301 fprintf(stream, " %22s:\n", "EssenceContainerData");
302 EssenceContainerData.Dump(stream);
307 ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l)
309 return InterchangeObject::InitFromBuffer(p, l);
314 ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
316 return InterchangeObject::WriteToBuffer(Buffer);
319 //------------------------------------------------------------------------------------------
320 // EssenceContainerData
324 EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0)
327 m_UL = m_Dict->ul(MDD_EssenceContainerData);
330 EssenceContainerData::EssenceContainerData(const EssenceContainerData& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
333 m_UL = m_Dict->ul(MDD_EssenceContainerData);
340 EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet)
343 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
344 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID));
345 if ( ASDCP_SUCCESS(result) ) {
346 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(EssenceContainerData, IndexSID));
347 IndexSID.set_has_value( result == RESULT_OK );
349 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID));
355 EssenceContainerData::WriteToTLVSet(TLVWriter& TLVSet)
358 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
359 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(EssenceContainerData, LinkedPackageUID));
360 if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(EssenceContainerData, IndexSID));
361 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID));
367 EssenceContainerData::Copy(const EssenceContainerData& rhs)
369 InterchangeObject::Copy(rhs);
370 LinkedPackageUID = rhs.LinkedPackageUID;
371 IndexSID = rhs.IndexSID;
372 BodySID = rhs.BodySID;
377 EssenceContainerData::Dump(FILE* stream)
379 char identbuf[IdentBufferLen];
385 InterchangeObject::Dump(stream);
386 fprintf(stream, " %22s = %s\n", "LinkedPackageUID", LinkedPackageUID.EncodeString(identbuf, IdentBufferLen));
387 if ( ! IndexSID.empty() ) {
388 fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID.get());
390 fprintf(stream, " %22s = %d\n", "BodySID", BodySID);
395 EssenceContainerData::InitFromBuffer(const byte_t* p, ui32_t l)
397 return InterchangeObject::InitFromBuffer(p, l);
402 EssenceContainerData::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
404 return InterchangeObject::WriteToBuffer(Buffer);
407 //------------------------------------------------------------------------------------------
411 GenericPackage::GenericPackage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
413 GenericPackage::GenericPackage(const GenericPackage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
421 GenericPackage::InitFromTLVSet(TLVReader& TLVSet)
424 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
425 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageUID));
426 if ( ASDCP_SUCCESS(result) ) {
427 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPackage, Name));
428 Name.set_has_value( result == RESULT_OK );
430 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageCreationDate));
431 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageModifiedDate));
432 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Tracks));
438 GenericPackage::WriteToTLVSet(TLVWriter& TLVSet)
441 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
442 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageUID));
443 if ( ASDCP_SUCCESS(result) && ! Name.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPackage, Name));
444 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageCreationDate));
445 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageModifiedDate));
446 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Tracks));
452 GenericPackage::Copy(const GenericPackage& rhs)
454 InterchangeObject::Copy(rhs);
455 PackageUID = rhs.PackageUID;
457 PackageCreationDate = rhs.PackageCreationDate;
458 PackageModifiedDate = rhs.PackageModifiedDate;
464 GenericPackage::Dump(FILE* stream)
466 char identbuf[IdentBufferLen];
472 InterchangeObject::Dump(stream);
473 fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.EncodeString(identbuf, IdentBufferLen));
474 if ( ! Name.empty() ) {
475 fprintf(stream, " %22s = %s\n", "Name", Name.get().EncodeString(identbuf, IdentBufferLen));
477 fprintf(stream, " %22s = %s\n", "PackageCreationDate", PackageCreationDate.EncodeString(identbuf, IdentBufferLen));
478 fprintf(stream, " %22s = %s\n", "PackageModifiedDate", PackageModifiedDate.EncodeString(identbuf, IdentBufferLen));
479 fprintf(stream, " %22s:\n", "Tracks");
484 //------------------------------------------------------------------------------------------
489 MaterialPackage::MaterialPackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d)
492 m_UL = m_Dict->ul(MDD_MaterialPackage);
495 MaterialPackage::MaterialPackage(const MaterialPackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict)
498 m_UL = m_Dict->ul(MDD_MaterialPackage);
505 MaterialPackage::InitFromTLVSet(TLVReader& TLVSet)
508 Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
509 if ( ASDCP_SUCCESS(result) ) {
510 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MaterialPackage, PackageMarker));
511 PackageMarker.set_has_value( result == RESULT_OK );
518 MaterialPackage::WriteToTLVSet(TLVWriter& TLVSet)
521 Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
522 if ( ASDCP_SUCCESS(result) && ! PackageMarker.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MaterialPackage, PackageMarker));
528 MaterialPackage::Copy(const MaterialPackage& rhs)
530 GenericPackage::Copy(rhs);
531 PackageMarker = rhs.PackageMarker;
536 MaterialPackage::Dump(FILE* stream)
538 char identbuf[IdentBufferLen];
544 GenericPackage::Dump(stream);
545 if ( ! PackageMarker.empty() ) {
546 fprintf(stream, " %22s = %s\n", "PackageMarker", PackageMarker.get().EncodeString(identbuf, IdentBufferLen));
552 MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l)
554 return InterchangeObject::InitFromBuffer(p, l);
559 MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
561 return InterchangeObject::WriteToBuffer(Buffer);
564 //------------------------------------------------------------------------------------------
569 SourcePackage::SourcePackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d)
572 m_UL = m_Dict->ul(MDD_SourcePackage);
575 SourcePackage::SourcePackage(const SourcePackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict)
578 m_UL = m_Dict->ul(MDD_SourcePackage);
585 SourcePackage::InitFromTLVSet(TLVReader& TLVSet)
588 Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
589 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourcePackage, Descriptor));
595 SourcePackage::WriteToTLVSet(TLVWriter& TLVSet)
598 Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
599 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourcePackage, Descriptor));
605 SourcePackage::Copy(const SourcePackage& rhs)
607 GenericPackage::Copy(rhs);
608 Descriptor = rhs.Descriptor;
613 SourcePackage::Dump(FILE* stream)
615 char identbuf[IdentBufferLen];
621 GenericPackage::Dump(stream);
622 fprintf(stream, " %22s = %s\n", "Descriptor", Descriptor.EncodeString(identbuf, IdentBufferLen));
627 SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l)
629 return InterchangeObject::InitFromBuffer(p, l);
634 SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
636 return InterchangeObject::WriteToBuffer(Buffer);
639 //------------------------------------------------------------------------------------------
643 GenericTrack::GenericTrack(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), TrackID(0), TrackNumber(0) {}
645 GenericTrack::GenericTrack(const GenericTrack& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
653 GenericTrack::InitFromTLVSet(TLVReader& TLVSet)
656 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
657 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackID));
658 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackNumber));
659 if ( ASDCP_SUCCESS(result) ) {
660 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, TrackName));
661 TrackName.set_has_value( result == RESULT_OK );
663 if ( ASDCP_SUCCESS(result) ) {
664 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, Sequence));
665 Sequence.set_has_value( result == RESULT_OK );
672 GenericTrack::WriteToTLVSet(TLVWriter& TLVSet)
675 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
676 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackID));
677 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackNumber));
678 if ( ASDCP_SUCCESS(result) && ! TrackName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, TrackName));
679 if ( ASDCP_SUCCESS(result) && ! Sequence.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, Sequence));
685 GenericTrack::Copy(const GenericTrack& rhs)
687 InterchangeObject::Copy(rhs);
688 TrackID = rhs.TrackID;
689 TrackNumber = rhs.TrackNumber;
690 TrackName = rhs.TrackName;
691 Sequence = rhs.Sequence;
696 GenericTrack::Dump(FILE* stream)
698 char identbuf[IdentBufferLen];
704 InterchangeObject::Dump(stream);
705 fprintf(stream, " %22s = %d\n", "TrackID", TrackID);
706 fprintf(stream, " %22s = %d\n", "TrackNumber", TrackNumber);
707 if ( ! TrackName.empty() ) {
708 fprintf(stream, " %22s = %s\n", "TrackName", TrackName.get().EncodeString(identbuf, IdentBufferLen));
710 if ( ! Sequence.empty() ) {
711 fprintf(stream, " %22s = %s\n", "Sequence", Sequence.get().EncodeString(identbuf, IdentBufferLen));
716 //------------------------------------------------------------------------------------------
721 StaticTrack::StaticTrack(const Dictionary*& d) : GenericTrack(d), m_Dict(d)
724 m_UL = m_Dict->ul(MDD_StaticTrack);
727 StaticTrack::StaticTrack(const StaticTrack& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict)
730 m_UL = m_Dict->ul(MDD_StaticTrack);
737 StaticTrack::InitFromTLVSet(TLVReader& TLVSet)
740 Result_t result = GenericTrack::InitFromTLVSet(TLVSet);
746 StaticTrack::WriteToTLVSet(TLVWriter& TLVSet)
749 Result_t result = GenericTrack::WriteToTLVSet(TLVSet);
755 StaticTrack::Copy(const StaticTrack& rhs)
757 GenericTrack::Copy(rhs);
762 StaticTrack::Dump(FILE* stream)
764 char identbuf[IdentBufferLen];
770 GenericTrack::Dump(stream);
775 StaticTrack::InitFromBuffer(const byte_t* p, ui32_t l)
777 return InterchangeObject::InitFromBuffer(p, l);
782 StaticTrack::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
784 return InterchangeObject::WriteToBuffer(Buffer);
787 //------------------------------------------------------------------------------------------
792 Track::Track(const Dictionary*& d) : GenericTrack(d), m_Dict(d), Origin(0)
795 m_UL = m_Dict->ul(MDD_Track);
798 Track::Track(const Track& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict)
801 m_UL = m_Dict->ul(MDD_Track);
808 Track::InitFromTLVSet(TLVReader& TLVSet)
811 Result_t result = GenericTrack::InitFromTLVSet(TLVSet);
812 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Track, EditRate));
813 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(Track, Origin));
819 Track::WriteToTLVSet(TLVWriter& TLVSet)
822 Result_t result = GenericTrack::WriteToTLVSet(TLVSet);
823 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Track, EditRate));
824 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(Track, Origin));
830 Track::Copy(const Track& rhs)
832 GenericTrack::Copy(rhs);
833 EditRate = rhs.EditRate;
839 Track::Dump(FILE* stream)
841 char identbuf[IdentBufferLen];
847 GenericTrack::Dump(stream);
848 fprintf(stream, " %22s = %s\n", "EditRate", EditRate.EncodeString(identbuf, IdentBufferLen));
849 fprintf(stream, " %22s = %s\n", "Origin", i64sz(Origin, identbuf));
854 Track::InitFromBuffer(const byte_t* p, ui32_t l)
856 return InterchangeObject::InitFromBuffer(p, l);
861 Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
863 return InterchangeObject::WriteToBuffer(Buffer);
866 //------------------------------------------------------------------------------------------
867 // StructuralComponent
870 StructuralComponent::StructuralComponent(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), Duration(0) {}
872 StructuralComponent::StructuralComponent(const StructuralComponent& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
880 StructuralComponent::InitFromTLVSet(TLVReader& TLVSet)
883 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
884 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
885 if ( ASDCP_SUCCESS(result) ) {
886 result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration));
887 Duration.set_has_value( result == RESULT_OK );
894 StructuralComponent::WriteToTLVSet(TLVWriter& TLVSet)
897 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
898 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(StructuralComponent, DataDefinition));
899 if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(StructuralComponent, Duration));
905 StructuralComponent::Copy(const StructuralComponent& rhs)
907 InterchangeObject::Copy(rhs);
908 DataDefinition = rhs.DataDefinition;
909 Duration = rhs.Duration;
914 StructuralComponent::Dump(FILE* stream)
916 char identbuf[IdentBufferLen];
922 InterchangeObject::Dump(stream);
923 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
924 if ( ! Duration.empty() ) {
925 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration.get(), identbuf));
930 //------------------------------------------------------------------------------------------
935 Sequence::Sequence(const Dictionary*& d) : StructuralComponent(d), m_Dict(d)
938 m_UL = m_Dict->ul(MDD_Sequence);
941 Sequence::Sequence(const Sequence& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
944 m_UL = m_Dict->ul(MDD_Sequence);
951 Sequence::InitFromTLVSet(TLVReader& TLVSet)
954 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
955 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Sequence, StructuralComponents));
961 Sequence::WriteToTLVSet(TLVWriter& TLVSet)
964 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
965 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Sequence, StructuralComponents));
971 Sequence::Copy(const Sequence& rhs)
973 StructuralComponent::Copy(rhs);
974 StructuralComponents = rhs.StructuralComponents;
979 Sequence::Dump(FILE* stream)
981 char identbuf[IdentBufferLen];
987 StructuralComponent::Dump(stream);
988 fprintf(stream, " %22s:\n", "StructuralComponents");
989 StructuralComponents.Dump(stream);
994 Sequence::InitFromBuffer(const byte_t* p, ui32_t l)
996 return InterchangeObject::InitFromBuffer(p, l);
1001 Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1003 return InterchangeObject::WriteToBuffer(Buffer);
1006 //------------------------------------------------------------------------------------------
1011 SourceClip::SourceClip(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), StartPosition(0), SourceTrackID(0)
1014 m_UL = m_Dict->ul(MDD_SourceClip);
1017 SourceClip::SourceClip(const SourceClip& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
1020 m_UL = m_Dict->ul(MDD_SourceClip);
1027 SourceClip::InitFromTLVSet(TLVReader& TLVSet)
1030 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
1031 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(SourceClip, StartPosition));
1032 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SourceClip, SourcePackageID));
1033 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(SourceClip, SourceTrackID));
1039 SourceClip::WriteToTLVSet(TLVWriter& TLVSet)
1042 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
1043 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(SourceClip, StartPosition));
1044 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SourceClip, SourcePackageID));
1045 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(SourceClip, SourceTrackID));
1051 SourceClip::Copy(const SourceClip& rhs)
1053 StructuralComponent::Copy(rhs);
1054 StartPosition = rhs.StartPosition;
1055 SourcePackageID = rhs.SourcePackageID;
1056 SourceTrackID = rhs.SourceTrackID;
1061 SourceClip::Dump(FILE* stream)
1063 char identbuf[IdentBufferLen];
1069 StructuralComponent::Dump(stream);
1070 fprintf(stream, " %22s = %s\n", "StartPosition", i64sz(StartPosition, identbuf));
1071 fprintf(stream, " %22s = %s\n", "SourcePackageID", SourcePackageID.EncodeString(identbuf, IdentBufferLen));
1072 fprintf(stream, " %22s = %d\n", "SourceTrackID", SourceTrackID);
1077 SourceClip::InitFromBuffer(const byte_t* p, ui32_t l)
1079 return InterchangeObject::InitFromBuffer(p, l);
1084 SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1086 return InterchangeObject::WriteToBuffer(Buffer);
1089 //------------------------------------------------------------------------------------------
1090 // TimecodeComponent
1094 TimecodeComponent::TimecodeComponent(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0)
1097 m_UL = m_Dict->ul(MDD_TimecodeComponent);
1100 TimecodeComponent::TimecodeComponent(const TimecodeComponent& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict)
1103 m_UL = m_Dict->ul(MDD_TimecodeComponent);
1110 TimecodeComponent::InitFromTLVSet(TLVReader& TLVSet)
1113 Result_t result = StructuralComponent::InitFromTLVSet(TLVSet);
1114 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(TimecodeComponent, RoundedTimecodeBase));
1115 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(TimecodeComponent, StartTimecode));
1116 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(TimecodeComponent, DropFrame));
1122 TimecodeComponent::WriteToTLVSet(TLVWriter& TLVSet)
1125 Result_t result = StructuralComponent::WriteToTLVSet(TLVSet);
1126 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(TimecodeComponent, RoundedTimecodeBase));
1127 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(TimecodeComponent, StartTimecode));
1128 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(TimecodeComponent, DropFrame));
1134 TimecodeComponent::Copy(const TimecodeComponent& rhs)
1136 StructuralComponent::Copy(rhs);
1137 RoundedTimecodeBase = rhs.RoundedTimecodeBase;
1138 StartTimecode = rhs.StartTimecode;
1139 DropFrame = rhs.DropFrame;
1144 TimecodeComponent::Dump(FILE* stream)
1146 char identbuf[IdentBufferLen];
1152 StructuralComponent::Dump(stream);
1153 fprintf(stream, " %22s = %d\n", "RoundedTimecodeBase", RoundedTimecodeBase);
1154 fprintf(stream, " %22s = %s\n", "StartTimecode", i64sz(StartTimecode, identbuf));
1155 fprintf(stream, " %22s = %d\n", "DropFrame", DropFrame);
1160 TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l)
1162 return InterchangeObject::InitFromBuffer(p, l);
1167 TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1169 return InterchangeObject::WriteToBuffer(Buffer);
1172 //------------------------------------------------------------------------------------------
1173 // GenericDescriptor
1176 GenericDescriptor::GenericDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
1178 GenericDescriptor::GenericDescriptor(const GenericDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
1186 GenericDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1189 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
1190 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, Locators));
1191 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDescriptor, SubDescriptors));
1197 GenericDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1200 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
1201 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, Locators));
1202 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDescriptor, SubDescriptors));
1208 GenericDescriptor::Copy(const GenericDescriptor& rhs)
1210 InterchangeObject::Copy(rhs);
1211 Locators = rhs.Locators;
1212 SubDescriptors = rhs.SubDescriptors;
1217 GenericDescriptor::Dump(FILE* stream)
1219 char identbuf[IdentBufferLen];
1225 InterchangeObject::Dump(stream);
1226 fprintf(stream, " %22s:\n", "Locators");
1227 Locators.Dump(stream);
1228 fprintf(stream, " %22s:\n", "SubDescriptors");
1229 SubDescriptors.Dump(stream);
1233 //------------------------------------------------------------------------------------------
1238 FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0)
1241 m_UL = m_Dict->ul(MDD_FileDescriptor);
1244 FileDescriptor::FileDescriptor(const FileDescriptor& rhs) : GenericDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1247 m_UL = m_Dict->ul(MDD_FileDescriptor);
1254 FileDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1257 Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet);
1258 if ( ASDCP_SUCCESS(result) ) {
1259 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID));
1260 LinkedTrackID.set_has_value( result == RESULT_OK );
1262 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate));
1263 if ( ASDCP_SUCCESS(result) ) {
1264 result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(FileDescriptor, ContainerDuration));
1265 ContainerDuration.set_has_value( result == RESULT_OK );
1267 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
1268 if ( ASDCP_SUCCESS(result) ) {
1269 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(FileDescriptor, Codec));
1270 Codec.set_has_value( result == RESULT_OK );
1277 FileDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1280 Result_t result = GenericDescriptor::WriteToTLVSet(TLVSet);
1281 if ( ASDCP_SUCCESS(result) && ! LinkedTrackID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(FileDescriptor, LinkedTrackID));
1282 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, SampleRate));
1283 if ( ASDCP_SUCCESS(result) && ! ContainerDuration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(FileDescriptor, ContainerDuration));
1284 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, EssenceContainer));
1285 if ( ASDCP_SUCCESS(result) && ! Codec.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(FileDescriptor, Codec));
1291 FileDescriptor::Copy(const FileDescriptor& rhs)
1293 GenericDescriptor::Copy(rhs);
1294 LinkedTrackID = rhs.LinkedTrackID;
1295 SampleRate = rhs.SampleRate;
1296 ContainerDuration = rhs.ContainerDuration;
1297 EssenceContainer = rhs.EssenceContainer;
1303 FileDescriptor::Dump(FILE* stream)
1305 char identbuf[IdentBufferLen];
1311 GenericDescriptor::Dump(stream);
1312 if ( ! LinkedTrackID.empty() ) {
1313 fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID.get());
1315 fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.EncodeString(identbuf, IdentBufferLen));
1316 if ( ! ContainerDuration.empty() ) {
1317 fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration.get(), identbuf));
1319 fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.EncodeString(identbuf, IdentBufferLen));
1320 if ( ! Codec.empty() ) {
1321 fprintf(stream, " %22s = %s\n", "Codec", Codec.get().EncodeString(identbuf, IdentBufferLen));
1327 FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1329 return InterchangeObject::InitFromBuffer(p, l);
1334 FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1336 return InterchangeObject::WriteToBuffer(Buffer);
1339 //------------------------------------------------------------------------------------------
1340 // GenericSoundEssenceDescriptor
1344 GenericSoundEssenceDescriptor::GenericSoundEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0)
1347 m_UL = m_Dict->ul(MDD_GenericSoundEssenceDescriptor);
1350 GenericSoundEssenceDescriptor::GenericSoundEssenceDescriptor(const GenericSoundEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1353 m_UL = m_Dict->ul(MDD_GenericSoundEssenceDescriptor);
1360 GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1363 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
1364 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
1365 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, Locked));
1366 if ( ASDCP_SUCCESS(result) ) {
1367 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
1368 AudioRefLevel.set_has_value( result == RESULT_OK );
1370 if ( ASDCP_SUCCESS(result) ) {
1371 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
1372 ElectroSpatialFormulation.set_has_value( result == RESULT_OK );
1374 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
1375 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
1376 if ( ASDCP_SUCCESS(result) ) {
1377 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
1378 DialNorm.set_has_value( result == RESULT_OK );
1380 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
1386 GenericSoundEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1389 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1390 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
1391 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, Locked));
1392 if ( ASDCP_SUCCESS(result) && ! AudioRefLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
1393 if ( ASDCP_SUCCESS(result) && ! ElectroSpatialFormulation.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
1394 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
1395 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
1396 if ( ASDCP_SUCCESS(result) && ! DialNorm.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
1397 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
1403 GenericSoundEssenceDescriptor::Copy(const GenericSoundEssenceDescriptor& rhs)
1405 FileDescriptor::Copy(rhs);
1406 AudioSamplingRate = rhs.AudioSamplingRate;
1407 Locked = rhs.Locked;
1408 AudioRefLevel = rhs.AudioRefLevel;
1409 ElectroSpatialFormulation = rhs.ElectroSpatialFormulation;
1410 ChannelCount = rhs.ChannelCount;
1411 QuantizationBits = rhs.QuantizationBits;
1412 DialNorm = rhs.DialNorm;
1413 SoundEssenceCoding = rhs.SoundEssenceCoding;
1418 GenericSoundEssenceDescriptor::Dump(FILE* stream)
1420 char identbuf[IdentBufferLen];
1426 FileDescriptor::Dump(stream);
1427 fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.EncodeString(identbuf, IdentBufferLen));
1428 fprintf(stream, " %22s = %d\n", "Locked", Locked);
1429 if ( ! AudioRefLevel.empty() ) {
1430 fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel.get());
1432 if ( ! ElectroSpatialFormulation.empty() ) {
1433 fprintf(stream, " %22s = %d\n", "ElectroSpatialFormulation", ElectroSpatialFormulation.get());
1435 fprintf(stream, " %22s = %d\n", "ChannelCount", ChannelCount);
1436 fprintf(stream, " %22s = %d\n", "QuantizationBits", QuantizationBits);
1437 if ( ! DialNorm.empty() ) {
1438 fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm.get());
1440 fprintf(stream, " %22s = %s\n", "SoundEssenceCoding", SoundEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1445 GenericSoundEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1447 return InterchangeObject::InitFromBuffer(p, l);
1452 GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1454 return InterchangeObject::WriteToBuffer(Buffer);
1457 //------------------------------------------------------------------------------------------
1458 // WaveAudioDescriptor
1462 WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0)
1465 m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
1468 WaveAudioDescriptor::WaveAudioDescriptor(const WaveAudioDescriptor& rhs) : GenericSoundEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1471 m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
1478 WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1481 Result_t result = GenericSoundEssenceDescriptor::InitFromTLVSet(TLVSet);
1482 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(WaveAudioDescriptor, BlockAlign));
1483 if ( ASDCP_SUCCESS(result) ) {
1484 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
1485 SequenceOffset.set_has_value( result == RESULT_OK );
1487 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps));
1488 if ( ASDCP_SUCCESS(result) ) {
1489 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
1490 ChannelAssignment.set_has_value( result == RESULT_OK );
1497 WaveAudioDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1500 Result_t result = GenericSoundEssenceDescriptor::WriteToTLVSet(TLVSet);
1501 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(WaveAudioDescriptor, BlockAlign));
1502 if ( ASDCP_SUCCESS(result) && ! SequenceOffset.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
1503 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(WaveAudioDescriptor, AvgBps));
1504 if ( ASDCP_SUCCESS(result) && ! ChannelAssignment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
1510 WaveAudioDescriptor::Copy(const WaveAudioDescriptor& rhs)
1512 GenericSoundEssenceDescriptor::Copy(rhs);
1513 BlockAlign = rhs.BlockAlign;
1514 SequenceOffset = rhs.SequenceOffset;
1515 AvgBps = rhs.AvgBps;
1516 ChannelAssignment = rhs.ChannelAssignment;
1521 WaveAudioDescriptor::Dump(FILE* stream)
1523 char identbuf[IdentBufferLen];
1529 GenericSoundEssenceDescriptor::Dump(stream);
1530 fprintf(stream, " %22s = %d\n", "BlockAlign", BlockAlign);
1531 if ( ! SequenceOffset.empty() ) {
1532 fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset.get());
1534 fprintf(stream, " %22s = %d\n", "AvgBps", AvgBps);
1535 if ( ! ChannelAssignment.empty() ) {
1536 fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.get().EncodeString(identbuf, IdentBufferLen));
1542 WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1544 return InterchangeObject::InitFromBuffer(p, l);
1549 WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1551 return InterchangeObject::WriteToBuffer(Buffer);
1554 //------------------------------------------------------------------------------------------
1555 // GenericPictureEssenceDescriptor
1559 GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), SignalStandard(0), SampledWidth(0), SampledXOffset(0), DisplayHeight(0), DisplayXOffset(0), DisplayF2Offset(0), AlphaTransparency(0), ImageAlignmentOffset(0), ImageEndOffset(0)
1562 m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
1565 GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const GenericPictureEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1568 m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
1575 GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1578 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
1579 if ( ASDCP_SUCCESS(result) ) {
1580 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1581 SignalStandard.set_has_value( result == RESULT_OK );
1583 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1584 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1585 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1586 if ( ASDCP_SUCCESS(result) ) {
1587 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1588 StoredF2Offset.set_has_value( result == RESULT_OK );
1590 if ( ASDCP_SUCCESS(result) ) {
1591 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1592 SampledWidth.set_has_value( result == RESULT_OK );
1594 if ( ASDCP_SUCCESS(result) ) {
1595 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1596 SampledHeight.set_has_value( result == RESULT_OK );
1598 if ( ASDCP_SUCCESS(result) ) {
1599 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1600 SampledXOffset.set_has_value( result == RESULT_OK );
1602 if ( ASDCP_SUCCESS(result) ) {
1603 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1604 SampledYOffset.set_has_value( result == RESULT_OK );
1606 if ( ASDCP_SUCCESS(result) ) {
1607 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1608 DisplayHeight.set_has_value( result == RESULT_OK );
1610 if ( ASDCP_SUCCESS(result) ) {
1611 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1612 DisplayWidth.set_has_value( result == RESULT_OK );
1614 if ( ASDCP_SUCCESS(result) ) {
1615 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1616 DisplayXOffset.set_has_value( result == RESULT_OK );
1618 if ( ASDCP_SUCCESS(result) ) {
1619 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1620 DisplayYOffset.set_has_value( result == RESULT_OK );
1622 if ( ASDCP_SUCCESS(result) ) {
1623 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1624 DisplayF2Offset.set_has_value( result == RESULT_OK );
1626 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1627 if ( ASDCP_SUCCESS(result) ) {
1628 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1629 ActiveFormatDescriptor.set_has_value( result == RESULT_OK );
1631 if ( ASDCP_SUCCESS(result) ) {
1632 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1633 AlphaTransparency.set_has_value( result == RESULT_OK );
1635 if ( ASDCP_SUCCESS(result) ) {
1636 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1637 TransferCharacteristic.set_has_value( result == RESULT_OK );
1639 if ( ASDCP_SUCCESS(result) ) {
1640 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1641 ImageAlignmentOffset.set_has_value( result == RESULT_OK );
1643 if ( ASDCP_SUCCESS(result) ) {
1644 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1645 ImageStartOffset.set_has_value( result == RESULT_OK );
1647 if ( ASDCP_SUCCESS(result) ) {
1648 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1649 ImageEndOffset.set_has_value( result == RESULT_OK );
1651 if ( ASDCP_SUCCESS(result) ) {
1652 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1653 FieldDominance.set_has_value( result == RESULT_OK );
1655 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1656 if ( ASDCP_SUCCESS(result) ) {
1657 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1658 CodingEquations.set_has_value( result == RESULT_OK );
1660 if ( ASDCP_SUCCESS(result) ) {
1661 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1662 ColorPrimaries.set_has_value( result == RESULT_OK );
1669 GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1672 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
1673 if ( ASDCP_SUCCESS(result) && ! SignalStandard.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
1674 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
1675 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
1676 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
1677 if ( ASDCP_SUCCESS(result) && ! StoredF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
1678 if ( ASDCP_SUCCESS(result) && ! SampledWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
1679 if ( ASDCP_SUCCESS(result) && ! SampledHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
1680 if ( ASDCP_SUCCESS(result) && ! SampledXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
1681 if ( ASDCP_SUCCESS(result) && ! SampledYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
1682 if ( ASDCP_SUCCESS(result) && ! DisplayHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
1683 if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
1684 if ( ASDCP_SUCCESS(result) && ! DisplayXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
1685 if ( ASDCP_SUCCESS(result) && ! DisplayYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
1686 if ( ASDCP_SUCCESS(result) && ! DisplayF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
1687 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
1688 if ( ASDCP_SUCCESS(result) && ! ActiveFormatDescriptor.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
1689 if ( ASDCP_SUCCESS(result) && ! AlphaTransparency.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
1690 if ( ASDCP_SUCCESS(result) && ! TransferCharacteristic.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
1691 if ( ASDCP_SUCCESS(result) && ! ImageAlignmentOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
1692 if ( ASDCP_SUCCESS(result) && ! ImageStartOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
1693 if ( ASDCP_SUCCESS(result) && ! ImageEndOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
1694 if ( ASDCP_SUCCESS(result) && ! FieldDominance.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
1695 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
1696 if ( ASDCP_SUCCESS(result) && ! CodingEquations.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
1697 if ( ASDCP_SUCCESS(result) && ! ColorPrimaries.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
1703 GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs)
1705 FileDescriptor::Copy(rhs);
1706 SignalStandard = rhs.SignalStandard;
1707 FrameLayout = rhs.FrameLayout;
1708 StoredWidth = rhs.StoredWidth;
1709 StoredHeight = rhs.StoredHeight;
1710 StoredF2Offset = rhs.StoredF2Offset;
1711 SampledWidth = rhs.SampledWidth;
1712 SampledHeight = rhs.SampledHeight;
1713 SampledXOffset = rhs.SampledXOffset;
1714 SampledYOffset = rhs.SampledYOffset;
1715 DisplayHeight = rhs.DisplayHeight;
1716 DisplayWidth = rhs.DisplayWidth;
1717 DisplayXOffset = rhs.DisplayXOffset;
1718 DisplayYOffset = rhs.DisplayYOffset;
1719 DisplayF2Offset = rhs.DisplayF2Offset;
1720 AspectRatio = rhs.AspectRatio;
1721 ActiveFormatDescriptor = rhs.ActiveFormatDescriptor;
1722 AlphaTransparency = rhs.AlphaTransparency;
1723 TransferCharacteristic = rhs.TransferCharacteristic;
1724 ImageAlignmentOffset = rhs.ImageAlignmentOffset;
1725 ImageStartOffset = rhs.ImageStartOffset;
1726 ImageEndOffset = rhs.ImageEndOffset;
1727 FieldDominance = rhs.FieldDominance;
1728 PictureEssenceCoding = rhs.PictureEssenceCoding;
1729 CodingEquations = rhs.CodingEquations;
1730 ColorPrimaries = rhs.ColorPrimaries;
1735 GenericPictureEssenceDescriptor::Dump(FILE* stream)
1737 char identbuf[IdentBufferLen];
1743 FileDescriptor::Dump(stream);
1744 if ( ! SignalStandard.empty() ) {
1745 fprintf(stream, " %22s = %d\n", "SignalStandard", SignalStandard.get());
1747 fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout);
1748 fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth);
1749 fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight);
1750 if ( ! StoredF2Offset.empty() ) {
1751 fprintf(stream, " %22s = %d\n", "StoredF2Offset", StoredF2Offset.get());
1753 if ( ! SampledWidth.empty() ) {
1754 fprintf(stream, " %22s = %d\n", "SampledWidth", SampledWidth.get());
1756 if ( ! SampledHeight.empty() ) {
1757 fprintf(stream, " %22s = %d\n", "SampledHeight", SampledHeight.get());
1759 if ( ! SampledXOffset.empty() ) {
1760 fprintf(stream, " %22s = %d\n", "SampledXOffset", SampledXOffset.get());
1762 if ( ! SampledYOffset.empty() ) {
1763 fprintf(stream, " %22s = %d\n", "SampledYOffset", SampledYOffset.get());
1765 if ( ! DisplayHeight.empty() ) {
1766 fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight.get());
1768 if ( ! DisplayWidth.empty() ) {
1769 fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get());
1771 if ( ! DisplayXOffset.empty() ) {
1772 fprintf(stream, " %22s = %d\n", "DisplayXOffset", DisplayXOffset.get());
1774 if ( ! DisplayYOffset.empty() ) {
1775 fprintf(stream, " %22s = %d\n", "DisplayYOffset", DisplayYOffset.get());
1777 if ( ! DisplayF2Offset.empty() ) {
1778 fprintf(stream, " %22s = %d\n", "DisplayF2Offset", DisplayF2Offset.get());
1780 fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen));
1781 if ( ! ActiveFormatDescriptor.empty() ) {
1782 fprintf(stream, " %22s = %d\n", "ActiveFormatDescriptor", ActiveFormatDescriptor.get());
1784 if ( ! AlphaTransparency.empty() ) {
1785 fprintf(stream, " %22s = %d\n", "AlphaTransparency", AlphaTransparency.get());
1787 if ( ! TransferCharacteristic.empty() ) {
1788 fprintf(stream, " %22s = %s\n", "TransferCharacteristic", TransferCharacteristic.get().EncodeString(identbuf, IdentBufferLen));
1790 if ( ! ImageAlignmentOffset.empty() ) {
1791 fprintf(stream, " %22s = %d\n", "ImageAlignmentOffset", ImageAlignmentOffset.get());
1793 if ( ! ImageStartOffset.empty() ) {
1794 fprintf(stream, " %22s = %d\n", "ImageStartOffset", ImageStartOffset.get());
1796 if ( ! ImageEndOffset.empty() ) {
1797 fprintf(stream, " %22s = %d\n", "ImageEndOffset", ImageEndOffset.get());
1799 if ( ! FieldDominance.empty() ) {
1800 fprintf(stream, " %22s = %d\n", "FieldDominance", FieldDominance.get());
1802 fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen));
1803 if ( ! CodingEquations.empty() ) {
1804 fprintf(stream, " %22s = %s\n", "CodingEquations", CodingEquations.get().EncodeString(identbuf, IdentBufferLen));
1806 if ( ! ColorPrimaries.empty() ) {
1807 fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen));
1813 GenericPictureEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1815 return InterchangeObject::InitFromBuffer(p, l);
1820 GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1822 return InterchangeObject::WriteToBuffer(Buffer);
1825 //------------------------------------------------------------------------------------------
1826 // RGBAEssenceDescriptor
1830 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), AlphaMinRef(0), ScanningDirection(0)
1833 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1836 RGBAEssenceDescriptor::RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
1839 m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
1846 RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1849 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
1850 if ( ASDCP_SUCCESS(result) ) {
1851 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1852 ComponentMaxRef.set_has_value( result == RESULT_OK );
1854 if ( ASDCP_SUCCESS(result) ) {
1855 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1856 ComponentMinRef.set_has_value( result == RESULT_OK );
1858 if ( ASDCP_SUCCESS(result) ) {
1859 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1860 AlphaMinRef.set_has_value( result == RESULT_OK );
1862 if ( ASDCP_SUCCESS(result) ) {
1863 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1864 AlphaMaxRef.set_has_value( result == RESULT_OK );
1866 if ( ASDCP_SUCCESS(result) ) {
1867 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1868 ScanningDirection.set_has_value( result == RESULT_OK );
1875 RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1878 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
1879 if ( ASDCP_SUCCESS(result) && ! ComponentMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
1880 if ( ASDCP_SUCCESS(result) && ! ComponentMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
1881 if ( ASDCP_SUCCESS(result) && ! AlphaMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
1882 if ( ASDCP_SUCCESS(result) && ! AlphaMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
1883 if ( ASDCP_SUCCESS(result) && ! ScanningDirection.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
1889 RGBAEssenceDescriptor::Copy(const RGBAEssenceDescriptor& rhs)
1891 GenericPictureEssenceDescriptor::Copy(rhs);
1892 ComponentMaxRef = rhs.ComponentMaxRef;
1893 ComponentMinRef = rhs.ComponentMinRef;
1894 AlphaMinRef = rhs.AlphaMinRef;
1895 AlphaMaxRef = rhs.AlphaMaxRef;
1896 ScanningDirection = rhs.ScanningDirection;
1901 RGBAEssenceDescriptor::Dump(FILE* stream)
1903 char identbuf[IdentBufferLen];
1909 GenericPictureEssenceDescriptor::Dump(stream);
1910 if ( ! ComponentMaxRef.empty() ) {
1911 fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef.get());
1913 if ( ! ComponentMinRef.empty() ) {
1914 fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef.get());
1916 if ( ! AlphaMinRef.empty() ) {
1917 fprintf(stream, " %22s = %d\n", "AlphaMinRef", AlphaMinRef.get());
1919 if ( ! AlphaMaxRef.empty() ) {
1920 fprintf(stream, " %22s = %d\n", "AlphaMaxRef", AlphaMaxRef.get());
1922 if ( ! ScanningDirection.empty() ) {
1923 fprintf(stream, " %22s = %d\n", "ScanningDirection", ScanningDirection.get());
1929 RGBAEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
1931 return InterchangeObject::InitFromBuffer(p, l);
1936 RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
1938 return InterchangeObject::WriteToBuffer(Buffer);
1941 //------------------------------------------------------------------------------------------
1942 // JPEG2000PictureSubDescriptor
1946 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)
1949 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
1952 JPEG2000PictureSubDescriptor::JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
1955 m_UL = m_Dict->ul(MDD_JPEG2000PictureSubDescriptor);
1962 JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
1965 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
1966 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Rsize));
1967 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Xsize));
1968 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Ysize));
1969 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XOsize));
1970 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YOsize));
1971 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTsize));
1972 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTsize));
1973 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
1974 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
1975 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Csize));
1976 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing));
1977 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault));
1978 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault));
1984 JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
1987 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
1988 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Rsize));
1989 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Xsize));
1990 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Ysize));
1991 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XOsize));
1992 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YOsize));
1993 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTsize));
1994 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTsize));
1995 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
1996 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
1997 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize));
1998 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing));
1999 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault));
2000 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault));
2006 JPEG2000PictureSubDescriptor::Copy(const JPEG2000PictureSubDescriptor& rhs)
2008 InterchangeObject::Copy(rhs);
2012 XOsize = rhs.XOsize;
2013 YOsize = rhs.YOsize;
2014 XTsize = rhs.XTsize;
2015 YTsize = rhs.YTsize;
2016 XTOsize = rhs.XTOsize;
2017 YTOsize = rhs.YTOsize;
2019 PictureComponentSizing = rhs.PictureComponentSizing;
2020 CodingStyleDefault = rhs.CodingStyleDefault;
2021 QuantizationDefault = rhs.QuantizationDefault;
2026 JPEG2000PictureSubDescriptor::Dump(FILE* stream)
2028 char identbuf[IdentBufferLen];
2034 InterchangeObject::Dump(stream);
2035 fprintf(stream, " %22s = %d\n", "Rsize", Rsize);
2036 fprintf(stream, " %22s = %d\n", "Xsize", Xsize);
2037 fprintf(stream, " %22s = %d\n", "Ysize", Ysize);
2038 fprintf(stream, " %22s = %d\n", "XOsize", XOsize);
2039 fprintf(stream, " %22s = %d\n", "YOsize", YOsize);
2040 fprintf(stream, " %22s = %d\n", "XTsize", XTsize);
2041 fprintf(stream, " %22s = %d\n", "YTsize", YTsize);
2042 fprintf(stream, " %22s = %d\n", "XTOsize", XTOsize);
2043 fprintf(stream, " %22s = %d\n", "YTOsize", YTOsize);
2044 fprintf(stream, " %22s = %d\n", "Csize", Csize);
2045 fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.EncodeString(identbuf, IdentBufferLen));
2046 fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.EncodeString(identbuf, IdentBufferLen));
2047 fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.EncodeString(identbuf, IdentBufferLen));
2052 JPEG2000PictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2054 return InterchangeObject::InitFromBuffer(p, l);
2059 JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2061 return InterchangeObject::WriteToBuffer(Buffer);
2064 //------------------------------------------------------------------------------------------
2065 // CDCIEssenceDescriptor
2069 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), ColorSiting(0), PaddingBits(0), BlackRefLevel(0), ColorRange(0)
2072 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2075 CDCIEssenceDescriptor::CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2078 m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
2085 CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2088 Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
2089 if ( ASDCP_SUCCESS(result) ) {
2090 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ComponentDepth));
2091 ComponentDepth.set_has_value( result == RESULT_OK );
2093 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2094 if ( ASDCP_SUCCESS(result) ) {
2095 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2096 VerticalSubsampling.set_has_value( result == RESULT_OK );
2098 if ( ASDCP_SUCCESS(result) ) {
2099 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2100 ColorSiting.set_has_value( result == RESULT_OK );
2102 if ( ASDCP_SUCCESS(result) ) {
2103 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2104 ReversedByteOrder.set_has_value( result == RESULT_OK );
2106 if ( ASDCP_SUCCESS(result) ) {
2107 result = TLVSet.ReadUi16(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2108 PaddingBits.set_has_value( result == RESULT_OK );
2110 if ( ASDCP_SUCCESS(result) ) {
2111 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2112 AlphaSampleDepth.set_has_value( result == RESULT_OK );
2114 if ( ASDCP_SUCCESS(result) ) {
2115 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2116 BlackRefLevel.set_has_value( result == RESULT_OK );
2118 if ( ASDCP_SUCCESS(result) ) {
2119 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2120 WhiteReflevel.set_has_value( result == RESULT_OK );
2122 if ( ASDCP_SUCCESS(result) ) {
2123 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2124 ColorRange.set_has_value( result == RESULT_OK );
2131 CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2134 Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
2135 if ( ASDCP_SUCCESS(result) && ! ComponentDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ComponentDepth));
2136 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
2137 if ( ASDCP_SUCCESS(result) && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
2138 if ( ASDCP_SUCCESS(result) && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
2139 if ( ASDCP_SUCCESS(result) && ! ReversedByteOrder.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
2140 if ( ASDCP_SUCCESS(result) && ! PaddingBits.empty() ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
2141 if ( ASDCP_SUCCESS(result) && ! AlphaSampleDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
2142 if ( ASDCP_SUCCESS(result) && ! BlackRefLevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
2143 if ( ASDCP_SUCCESS(result) && ! WhiteReflevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
2144 if ( ASDCP_SUCCESS(result) && ! ColorRange.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
2150 CDCIEssenceDescriptor::Copy(const CDCIEssenceDescriptor& rhs)
2152 GenericPictureEssenceDescriptor::Copy(rhs);
2153 ComponentDepth = rhs.ComponentDepth;
2154 HorizontalSubsampling = rhs.HorizontalSubsampling;
2155 VerticalSubsampling = rhs.VerticalSubsampling;
2156 ColorSiting = rhs.ColorSiting;
2157 ReversedByteOrder = rhs.ReversedByteOrder;
2158 PaddingBits = rhs.PaddingBits;
2159 AlphaSampleDepth = rhs.AlphaSampleDepth;
2160 BlackRefLevel = rhs.BlackRefLevel;
2161 WhiteReflevel = rhs.WhiteReflevel;
2162 ColorRange = rhs.ColorRange;
2167 CDCIEssenceDescriptor::Dump(FILE* stream)
2169 char identbuf[IdentBufferLen];
2175 GenericPictureEssenceDescriptor::Dump(stream);
2176 if ( ! ComponentDepth.empty() ) {
2177 fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth.get());
2179 fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling);
2180 if ( ! VerticalSubsampling.empty() ) {
2181 fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get());
2183 if ( ! ColorSiting.empty() ) {
2184 fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting.get());
2186 if ( ! ReversedByteOrder.empty() ) {
2187 fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder.get());
2189 if ( ! PaddingBits.empty() ) {
2190 fprintf(stream, " %22s = %d\n", "PaddingBits", PaddingBits.get());
2192 if ( ! AlphaSampleDepth.empty() ) {
2193 fprintf(stream, " %22s = %d\n", "AlphaSampleDepth", AlphaSampleDepth.get());
2195 if ( ! BlackRefLevel.empty() ) {
2196 fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel.get());
2198 if ( ! WhiteReflevel.empty() ) {
2199 fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel.get());
2201 if ( ! ColorRange.empty() ) {
2202 fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange.get());
2208 CDCIEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2210 return InterchangeObject::InitFromBuffer(p, l);
2215 CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2217 return InterchangeObject::WriteToBuffer(Buffer);
2220 //------------------------------------------------------------------------------------------
2221 // MPEG2VideoDescriptor
2225 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), ProfileAndLevel(0)
2228 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2231 MPEG2VideoDescriptor::MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs) : CDCIEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2234 m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
2241 MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2244 Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet);
2245 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, CodedContentType));
2246 if ( ASDCP_SUCCESS(result) ) {
2247 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2248 LowDelay.set_has_value( result == RESULT_OK );
2250 if ( ASDCP_SUCCESS(result) ) {
2251 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2252 BitRate.set_has_value( result == RESULT_OK );
2254 if ( ASDCP_SUCCESS(result) ) {
2255 result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2256 ProfileAndLevel.set_has_value( result == RESULT_OK );
2263 MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2266 Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet);
2267 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, CodedContentType));
2268 if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
2269 if ( ASDCP_SUCCESS(result) && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
2270 if ( ASDCP_SUCCESS(result) && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
2276 MPEG2VideoDescriptor::Copy(const MPEG2VideoDescriptor& rhs)
2278 CDCIEssenceDescriptor::Copy(rhs);
2279 CodedContentType = rhs.CodedContentType;
2280 LowDelay = rhs.LowDelay;
2281 BitRate = rhs.BitRate;
2282 ProfileAndLevel = rhs.ProfileAndLevel;
2287 MPEG2VideoDescriptor::Dump(FILE* stream)
2289 char identbuf[IdentBufferLen];
2295 CDCIEssenceDescriptor::Dump(stream);
2296 fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType);
2297 if ( ! LowDelay.empty() ) {
2298 fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get());
2300 if ( ! BitRate.empty() ) {
2301 fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get());
2303 if ( ! ProfileAndLevel.empty() ) {
2304 fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel.get());
2310 MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2312 return InterchangeObject::InitFromBuffer(p, l);
2317 MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2319 return InterchangeObject::WriteToBuffer(Buffer);
2322 //------------------------------------------------------------------------------------------
2327 DMSegment::DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0)
2330 m_UL = m_Dict->ul(MDD_DMSegment);
2333 DMSegment::DMSegment(const DMSegment& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2336 m_UL = m_Dict->ul(MDD_DMSegment);
2343 DMSegment::InitFromTLVSet(TLVReader& TLVSet)
2346 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2347 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition));
2348 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, EventStartPosition));
2349 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, Duration));
2350 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, EventComment));
2351 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DMFramework));
2357 DMSegment::WriteToTLVSet(TLVWriter& TLVSet)
2360 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2361 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DataDefinition));
2362 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, EventStartPosition));
2363 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, Duration));
2364 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, EventComment));
2365 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DMFramework));
2371 DMSegment::Copy(const DMSegment& rhs)
2373 InterchangeObject::Copy(rhs);
2374 DataDefinition = rhs.DataDefinition;
2375 EventStartPosition = rhs.EventStartPosition;
2376 Duration = rhs.Duration;
2377 EventComment = rhs.EventComment;
2378 DMFramework = rhs.DMFramework;
2383 DMSegment::Dump(FILE* stream)
2385 char identbuf[IdentBufferLen];
2391 InterchangeObject::Dump(stream);
2392 fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
2393 fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition, identbuf));
2394 fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf));
2395 fprintf(stream, " %22s = %s\n", "EventComment", EventComment.EncodeString(identbuf, IdentBufferLen));
2396 fprintf(stream, " %22s = %s\n", "DMFramework", DMFramework.EncodeString(identbuf, IdentBufferLen));
2401 DMSegment::InitFromBuffer(const byte_t* p, ui32_t l)
2403 return InterchangeObject::InitFromBuffer(p, l);
2408 DMSegment::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2410 return InterchangeObject::WriteToBuffer(Buffer);
2413 //------------------------------------------------------------------------------------------
2414 // CryptographicFramework
2418 CryptographicFramework::CryptographicFramework(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2421 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2424 CryptographicFramework::CryptographicFramework(const CryptographicFramework& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2427 m_UL = m_Dict->ul(MDD_CryptographicFramework);
2434 CryptographicFramework::InitFromTLVSet(TLVReader& TLVSet)
2437 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2438 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicFramework, ContextSR));
2444 CryptographicFramework::WriteToTLVSet(TLVWriter& TLVSet)
2447 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2448 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicFramework, ContextSR));
2454 CryptographicFramework::Copy(const CryptographicFramework& rhs)
2456 InterchangeObject::Copy(rhs);
2457 ContextSR = rhs.ContextSR;
2462 CryptographicFramework::Dump(FILE* stream)
2464 char identbuf[IdentBufferLen];
2470 InterchangeObject::Dump(stream);
2471 fprintf(stream, " %22s = %s\n", "ContextSR", ContextSR.EncodeString(identbuf, IdentBufferLen));
2476 CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
2478 return InterchangeObject::InitFromBuffer(p, l);
2483 CryptographicFramework::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2485 return InterchangeObject::WriteToBuffer(Buffer);
2488 //------------------------------------------------------------------------------------------
2489 // CryptographicContext
2493 CryptographicContext::CryptographicContext(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2496 m_UL = m_Dict->ul(MDD_CryptographicContext);
2499 CryptographicContext::CryptographicContext(const CryptographicContext& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2502 m_UL = m_Dict->ul(MDD_CryptographicContext);
2509 CryptographicContext::InitFromTLVSet(TLVReader& TLVSet)
2512 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2513 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, ContextID));
2514 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, SourceEssenceContainer));
2515 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CipherAlgorithm));
2516 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, MICAlgorithm));
2517 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(CryptographicContext, CryptographicKeyID));
2523 CryptographicContext::WriteToTLVSet(TLVWriter& TLVSet)
2526 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2527 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, ContextID));
2528 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, SourceEssenceContainer));
2529 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CipherAlgorithm));
2530 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, MICAlgorithm));
2531 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(CryptographicContext, CryptographicKeyID));
2537 CryptographicContext::Copy(const CryptographicContext& rhs)
2539 InterchangeObject::Copy(rhs);
2540 ContextID = rhs.ContextID;
2541 SourceEssenceContainer = rhs.SourceEssenceContainer;
2542 CipherAlgorithm = rhs.CipherAlgorithm;
2543 MICAlgorithm = rhs.MICAlgorithm;
2544 CryptographicKeyID = rhs.CryptographicKeyID;
2549 CryptographicContext::Dump(FILE* stream)
2551 char identbuf[IdentBufferLen];
2557 InterchangeObject::Dump(stream);
2558 fprintf(stream, " %22s = %s\n", "ContextID", ContextID.EncodeString(identbuf, IdentBufferLen));
2559 fprintf(stream, " %22s = %s\n", "SourceEssenceContainer", SourceEssenceContainer.EncodeString(identbuf, IdentBufferLen));
2560 fprintf(stream, " %22s = %s\n", "CipherAlgorithm", CipherAlgorithm.EncodeString(identbuf, IdentBufferLen));
2561 fprintf(stream, " %22s = %s\n", "MICAlgorithm", MICAlgorithm.EncodeString(identbuf, IdentBufferLen));
2562 fprintf(stream, " %22s = %s\n", "CryptographicKeyID", CryptographicKeyID.EncodeString(identbuf, IdentBufferLen));
2567 CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
2569 return InterchangeObject::InitFromBuffer(p, l);
2574 CryptographicContext::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2576 return InterchangeObject::WriteToBuffer(Buffer);
2579 //------------------------------------------------------------------------------------------
2580 // GenericDataEssenceDescriptor
2584 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d)
2587 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2590 GenericDataEssenceDescriptor::GenericDataEssenceDescriptor(const GenericDataEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2593 m_UL = m_Dict->ul(MDD_GenericDataEssenceDescriptor);
2600 GenericDataEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2603 Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
2604 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2610 GenericDataEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2613 Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
2614 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericDataEssenceDescriptor, DataEssenceCoding));
2620 GenericDataEssenceDescriptor::Copy(const GenericDataEssenceDescriptor& rhs)
2622 FileDescriptor::Copy(rhs);
2623 DataEssenceCoding = rhs.DataEssenceCoding;
2628 GenericDataEssenceDescriptor::Dump(FILE* stream)
2630 char identbuf[IdentBufferLen];
2636 FileDescriptor::Dump(stream);
2637 fprintf(stream, " %22s = %s\n", "DataEssenceCoding", DataEssenceCoding.EncodeString(identbuf, IdentBufferLen));
2642 GenericDataEssenceDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2644 return InterchangeObject::InitFromBuffer(p, l);
2649 GenericDataEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2651 return InterchangeObject::WriteToBuffer(Buffer);
2654 //------------------------------------------------------------------------------------------
2655 // TimedTextDescriptor
2659 TimedTextDescriptor::TimedTextDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
2662 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2665 TimedTextDescriptor::TimedTextDescriptor(const TimedTextDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
2668 m_UL = m_Dict->ul(MDD_TimedTextDescriptor);
2675 TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2678 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
2679 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, ResourceID));
2680 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, UCSEncoding));
2681 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, NamespaceURI));
2687 TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2690 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
2691 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, ResourceID));
2692 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding));
2693 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI));
2699 TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs)
2701 GenericDataEssenceDescriptor::Copy(rhs);
2702 ResourceID = rhs.ResourceID;
2703 UCSEncoding = rhs.UCSEncoding;
2704 NamespaceURI = rhs.NamespaceURI;
2709 TimedTextDescriptor::Dump(FILE* stream)
2711 char identbuf[IdentBufferLen];
2717 GenericDataEssenceDescriptor::Dump(stream);
2718 fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen));
2719 fprintf(stream, " %22s = %s\n", "UCSEncoding", UCSEncoding.EncodeString(identbuf, IdentBufferLen));
2720 fprintf(stream, " %22s = %s\n", "NamespaceURI", NamespaceURI.EncodeString(identbuf, IdentBufferLen));
2725 TimedTextDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2727 return InterchangeObject::InitFromBuffer(p, l);
2732 TimedTextDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2734 return InterchangeObject::WriteToBuffer(Buffer);
2737 //------------------------------------------------------------------------------------------
2738 // TimedTextResourceSubDescriptor
2742 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EssenceStreamID(0)
2745 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2748 TimedTextResourceSubDescriptor::TimedTextResourceSubDescriptor(const TimedTextResourceSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2751 m_UL = m_Dict->ul(MDD_TimedTextResourceSubDescriptor);
2758 TimedTextResourceSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2761 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2762 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2763 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2764 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2770 TimedTextResourceSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2773 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2774 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, AncillaryResourceID));
2775 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, MIMEMediaType));
2776 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(TimedTextResourceSubDescriptor, EssenceStreamID));
2782 TimedTextResourceSubDescriptor::Copy(const TimedTextResourceSubDescriptor& rhs)
2784 InterchangeObject::Copy(rhs);
2785 AncillaryResourceID = rhs.AncillaryResourceID;
2786 MIMEMediaType = rhs.MIMEMediaType;
2787 EssenceStreamID = rhs.EssenceStreamID;
2792 TimedTextResourceSubDescriptor::Dump(FILE* stream)
2794 char identbuf[IdentBufferLen];
2800 InterchangeObject::Dump(stream);
2801 fprintf(stream, " %22s = %s\n", "AncillaryResourceID", AncillaryResourceID.EncodeString(identbuf, IdentBufferLen));
2802 fprintf(stream, " %22s = %s\n", "MIMEMediaType", MIMEMediaType.EncodeString(identbuf, IdentBufferLen));
2803 fprintf(stream, " %22s = %d\n", "EssenceStreamID", EssenceStreamID);
2808 TimedTextResourceSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2810 return InterchangeObject::InitFromBuffer(p, l);
2815 TimedTextResourceSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2817 return InterchangeObject::WriteToBuffer(Buffer);
2820 //------------------------------------------------------------------------------------------
2821 // StereoscopicPictureSubDescriptor
2825 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2828 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2831 StereoscopicPictureSubDescriptor::StereoscopicPictureSubDescriptor(const StereoscopicPictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2834 m_UL = m_Dict->ul(MDD_StereoscopicPictureSubDescriptor);
2841 StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2844 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2850 StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
2853 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2859 StereoscopicPictureSubDescriptor::Copy(const StereoscopicPictureSubDescriptor& rhs)
2861 InterchangeObject::Copy(rhs);
2866 StereoscopicPictureSubDescriptor::Dump(FILE* stream)
2868 char identbuf[IdentBufferLen];
2874 InterchangeObject::Dump(stream);
2879 StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
2881 return InterchangeObject::InitFromBuffer(p, l);
2886 StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2888 return InterchangeObject::WriteToBuffer(Buffer);
2891 //------------------------------------------------------------------------------------------
2896 NetworkLocator::NetworkLocator(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2899 m_UL = m_Dict->ul(MDD_NetworkLocator);
2902 NetworkLocator::NetworkLocator(const NetworkLocator& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2905 m_UL = m_Dict->ul(MDD_NetworkLocator);
2912 NetworkLocator::InitFromTLVSet(TLVReader& TLVSet)
2915 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2916 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(NetworkLocator, URLString));
2922 NetworkLocator::WriteToTLVSet(TLVWriter& TLVSet)
2925 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
2926 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(NetworkLocator, URLString));
2932 NetworkLocator::Copy(const NetworkLocator& rhs)
2934 InterchangeObject::Copy(rhs);
2935 URLString = rhs.URLString;
2940 NetworkLocator::Dump(FILE* stream)
2942 char identbuf[IdentBufferLen];
2948 InterchangeObject::Dump(stream);
2949 fprintf(stream, " %22s = %s\n", "URLString", URLString.EncodeString(identbuf, IdentBufferLen));
2954 NetworkLocator::InitFromBuffer(const byte_t* p, ui32_t l)
2956 return InterchangeObject::InitFromBuffer(p, l);
2961 NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
2963 return InterchangeObject::WriteToBuffer(Buffer);
2966 //------------------------------------------------------------------------------------------
2967 // MCALabelSubDescriptor
2971 MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
2974 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
2977 MCALabelSubDescriptor::MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
2980 m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
2987 MCALabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
2990 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
2991 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
2992 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALinkID));
2993 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagSymbol));
2994 if ( ASDCP_SUCCESS(result) ) {
2995 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
2996 MCATagName.set_has_value( result == RESULT_OK );
2998 if ( ASDCP_SUCCESS(result) ) {
2999 result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3000 MCAChannelID.set_has_value( result == RESULT_OK );
3002 if ( ASDCP_SUCCESS(result) ) {
3003 result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3004 RFC5646SpokenLanguage.set_has_value( result == RESULT_OK );
3011 MCALabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3014 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3015 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
3016 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALinkID));
3017 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagSymbol));
3018 if ( ASDCP_SUCCESS(result) && ! MCATagName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
3019 if ( ASDCP_SUCCESS(result) && ! MCAChannelID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
3020 if ( ASDCP_SUCCESS(result) && ! RFC5646SpokenLanguage.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
3026 MCALabelSubDescriptor::Copy(const MCALabelSubDescriptor& rhs)
3028 InterchangeObject::Copy(rhs);
3029 MCALabelDictionaryID = rhs.MCALabelDictionaryID;
3030 MCALinkID = rhs.MCALinkID;
3031 MCATagSymbol = rhs.MCATagSymbol;
3032 MCATagName = rhs.MCATagName;
3033 MCAChannelID = rhs.MCAChannelID;
3034 RFC5646SpokenLanguage = rhs.RFC5646SpokenLanguage;
3039 MCALabelSubDescriptor::Dump(FILE* stream)
3041 char identbuf[IdentBufferLen];
3047 InterchangeObject::Dump(stream);
3048 fprintf(stream, " %22s = %s\n", "MCALabelDictionaryID", MCALabelDictionaryID.EncodeString(identbuf, IdentBufferLen));
3049 fprintf(stream, " %22s = %s\n", "MCALinkID", MCALinkID.EncodeString(identbuf, IdentBufferLen));
3050 fprintf(stream, " %22s = %s\n", "MCATagSymbol", MCATagSymbol.EncodeString(identbuf, IdentBufferLen));
3051 if ( ! MCATagName.empty() ) {
3052 fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.get().EncodeString(identbuf, IdentBufferLen));
3054 if ( ! MCAChannelID.empty() ) {
3055 fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID.get());
3057 if ( ! RFC5646SpokenLanguage.empty() ) {
3058 fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.get().EncodeString(identbuf, IdentBufferLen));
3064 MCALabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3066 return InterchangeObject::InitFromBuffer(p, l);
3071 MCALabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3073 return InterchangeObject::WriteToBuffer(Buffer);
3076 //------------------------------------------------------------------------------------------
3077 // AudioChannelLabelSubDescriptor
3081 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3084 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3087 AudioChannelLabelSubDescriptor::AudioChannelLabelSubDescriptor(const AudioChannelLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3090 m_UL = m_Dict->ul(MDD_AudioChannelLabelSubDescriptor);
3097 AudioChannelLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3100 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3101 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3107 AudioChannelLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3110 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3111 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(AudioChannelLabelSubDescriptor, SoundfieldGroupLinkID));
3117 AudioChannelLabelSubDescriptor::Copy(const AudioChannelLabelSubDescriptor& rhs)
3119 MCALabelSubDescriptor::Copy(rhs);
3120 SoundfieldGroupLinkID = rhs.SoundfieldGroupLinkID;
3125 AudioChannelLabelSubDescriptor::Dump(FILE* stream)
3127 char identbuf[IdentBufferLen];
3133 MCALabelSubDescriptor::Dump(stream);
3134 fprintf(stream, " %22s = %s\n", "SoundfieldGroupLinkID", SoundfieldGroupLinkID.EncodeString(identbuf, IdentBufferLen));
3139 AudioChannelLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3141 return InterchangeObject::InitFromBuffer(p, l);
3146 AudioChannelLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3148 return InterchangeObject::WriteToBuffer(Buffer);
3151 //------------------------------------------------------------------------------------------
3152 // SoundfieldGroupLabelSubDescriptor
3156 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3159 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3162 SoundfieldGroupLabelSubDescriptor::SoundfieldGroupLabelSubDescriptor(const SoundfieldGroupLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3165 m_UL = m_Dict->ul(MDD_SoundfieldGroupLabelSubDescriptor);
3172 SoundfieldGroupLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3175 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3176 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3182 SoundfieldGroupLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3185 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3186 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(SoundfieldGroupLabelSubDescriptor, GroupOfSoundfieldGroupsLinkID));
3192 SoundfieldGroupLabelSubDescriptor::Copy(const SoundfieldGroupLabelSubDescriptor& rhs)
3194 MCALabelSubDescriptor::Copy(rhs);
3195 GroupOfSoundfieldGroupsLinkID = rhs.GroupOfSoundfieldGroupsLinkID;
3200 SoundfieldGroupLabelSubDescriptor::Dump(FILE* stream)
3202 char identbuf[IdentBufferLen];
3208 MCALabelSubDescriptor::Dump(stream);
3209 fprintf(stream, " %22s:\n", "GroupOfSoundfieldGroupsLinkID");
3210 GroupOfSoundfieldGroupsLinkID.Dump(stream);
3215 SoundfieldGroupLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3217 return InterchangeObject::InitFromBuffer(p, l);
3222 SoundfieldGroupLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3224 return InterchangeObject::WriteToBuffer(Buffer);
3227 //------------------------------------------------------------------------------------------
3228 // GroupOfSoundfieldGroupsLabelSubDescriptor
3232 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d)
3235 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3238 GroupOfSoundfieldGroupsLabelSubDescriptor::GroupOfSoundfieldGroupsLabelSubDescriptor(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3241 m_UL = m_Dict->ul(MDD_GroupOfSoundfieldGroupsLabelSubDescriptor);
3248 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3251 Result_t result = MCALabelSubDescriptor::InitFromTLVSet(TLVSet);
3257 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3260 Result_t result = MCALabelSubDescriptor::WriteToTLVSet(TLVSet);
3266 GroupOfSoundfieldGroupsLabelSubDescriptor::Copy(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs)
3268 MCALabelSubDescriptor::Copy(rhs);
3273 GroupOfSoundfieldGroupsLabelSubDescriptor::Dump(FILE* stream)
3275 char identbuf[IdentBufferLen];
3281 MCALabelSubDescriptor::Dump(stream);
3286 GroupOfSoundfieldGroupsLabelSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3288 return InterchangeObject::InitFromBuffer(p, l);
3293 GroupOfSoundfieldGroupsLabelSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3295 return InterchangeObject::WriteToBuffer(Buffer);
3298 //------------------------------------------------------------------------------------------
3303 DCDataDescriptor::DCDataDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d)
3306 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3309 DCDataDescriptor::DCDataDescriptor(const DCDataDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict)
3312 m_UL = m_Dict->ul(MDD_DCDataDescriptor);
3319 DCDataDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3322 Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
3328 DCDataDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3331 Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
3337 DCDataDescriptor::Copy(const DCDataDescriptor& rhs)
3339 GenericDataEssenceDescriptor::Copy(rhs);
3344 DCDataDescriptor::Dump(FILE* stream)
3346 char identbuf[IdentBufferLen];
3352 GenericDataEssenceDescriptor::Dump(stream);
3357 DCDataDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3359 return InterchangeObject::InitFromBuffer(p, l);
3364 DCDataDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3366 return InterchangeObject::WriteToBuffer(Buffer);
3369 //------------------------------------------------------------------------------------------
3370 // DolbyAtmosSubDescriptor
3374 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), FirstFrame(0), MaxChannelCount(0), MaxObjectCount(0), AtmosVersion(0)
3377 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3380 DolbyAtmosSubDescriptor::DolbyAtmosSubDescriptor(const DolbyAtmosSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict)
3383 m_UL = m_Dict->ul(MDD_DolbyAtmosSubDescriptor);
3390 DolbyAtmosSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
3393 Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
3394 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3395 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3396 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3397 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3398 if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3404 DolbyAtmosSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
3407 Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
3408 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosID));
3409 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, FirstFrame));
3410 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxChannelCount));
3411 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, MaxObjectCount));
3412 if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(DolbyAtmosSubDescriptor, AtmosVersion));
3418 DolbyAtmosSubDescriptor::Copy(const DolbyAtmosSubDescriptor& rhs)
3420 InterchangeObject::Copy(rhs);
3421 AtmosID = rhs.AtmosID;
3422 FirstFrame = rhs.FirstFrame;
3423 MaxChannelCount = rhs.MaxChannelCount;
3424 MaxObjectCount = rhs.MaxObjectCount;
3425 AtmosVersion = rhs.AtmosVersion;
3430 DolbyAtmosSubDescriptor::Dump(FILE* stream)
3432 char identbuf[IdentBufferLen];
3438 InterchangeObject::Dump(stream);
3439 fprintf(stream, " %22s = %s\n", "AtmosID", AtmosID.EncodeString(identbuf, IdentBufferLen));
3440 fprintf(stream, " %22s = %d\n", "FirstFrame", FirstFrame);
3441 fprintf(stream, " %22s = %d\n", "MaxChannelCount", MaxChannelCount);
3442 fprintf(stream, " %22s = %d\n", "MaxObjectCount", MaxObjectCount);
3443 fprintf(stream, " %22s = %d\n", "AtmosVersion", AtmosVersion);
3448 DolbyAtmosSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
3450 return InterchangeObject::InitFromBuffer(p, l);
3455 DolbyAtmosSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
3457 return InterchangeObject::WriteToBuffer(Buffer);