2 Copyright (c) 2005-2006, 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
35 #include <hex_utils.h>
38 //------------------------------------------------------------------------------------------
43 ASDCP::MXF::Identification::InitFromBuffer(const byte_t* p, ui32_t l)
47 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_Identification].ul);
49 if ( ASDCP_SUCCESS(result) )
51 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
53 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
54 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, ThisGenerationUID));
55 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, CompanyName));
56 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, ProductName));
57 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi16(OBJ_READ_ARGS(Identification, ProductVersion));
58 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, VersionString));
59 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, ProductUID));
60 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, ModificationDate));
61 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi16(OBJ_READ_ARGS(Identification, ToolkitVersion));
62 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Identification, Platform));
70 ASDCP::MXF::Identification::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
72 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_Identification].ul, 0);
78 ASDCP::MXF::Identification::Dump(FILE* stream)
80 char identbuf[IdentBufferLen];
85 KLVPacket::Dump(stream, false);
86 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
87 fprintf(stream, " ThisGenerationUID = %s\n", ThisGenerationUID.ToString(identbuf));
88 fprintf(stream, " CompanyName = %s\n", CompanyName.ToString(identbuf));
89 fprintf(stream, " ProductName = %s\n", ProductName.ToString(identbuf));
90 fprintf(stream, " ProductVersion = %hu\n", ProductVersion);
91 fprintf(stream, " VersionString = %s\n", VersionString.ToString(identbuf));
92 fprintf(stream, " ProductUID = %s\n", ProductUID.ToString(identbuf));
93 fprintf(stream, " ModificationDate = %s\n", ModificationDate.ToString(identbuf));
94 fprintf(stream, " ToolkitVersion = %hu\n", ToolkitVersion);
95 fprintf(stream, " Platform = %s\n", Platform.ToString(identbuf));
97 fputs("==========================================================================\n", stream);
100 //------------------------------------------------------------------------------------------
105 ASDCP::MXF::ContentStorage::InitFromBuffer(const byte_t* p, ui32_t l)
107 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_ContentStorage].ul);
109 if ( ASDCP_SUCCESS(result) )
111 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
113 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
114 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
115 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(ContentStorage, Packages));
116 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(ContentStorage, EssenceContainerData));
124 ASDCP::MXF::ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
126 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_ContentStorage].ul, 0);
131 ASDCP::MXF::ContentStorage::Dump(FILE* stream)
133 char identbuf[IdentBufferLen];
138 KLVPacket::Dump(stream, false);
139 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
140 fprintf(stream, " GenerationUID = %s\n", GenerationUID.ToString(identbuf));
141 fprintf(stream, " Packages:\n"); Packages.Dump(stream);
142 fprintf(stream, " EssenceContainerData:\n"); EssenceContainerData.Dump(stream);
144 fputs("==========================================================================\n", stream);
147 //------------------------------------------------------------------------------------------
152 ASDCP::MXF::GenericPackage::InitFromBuffer(const byte_t* p, ui32_t l)
154 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
156 Result_t result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
157 // result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
158 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
159 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageUID));
160 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericPackage, Name));
161 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageCreationDate));
162 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageModifiedDate));
163 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericPackage, Tracks));
170 ASDCP::MXF::GenericPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
172 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_DefaultObject].ul, 0);
177 ASDCP::MXF::GenericPackage::Dump(FILE* stream)
179 char identbuf[IdentBufferLen];
184 KLVPacket::Dump(stream, false);
185 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
186 fprintf(stream, " GenerationUID = %s\n", GenerationUID.ToString(identbuf));
187 fprintf(stream, " PackageUID = %s\n", PackageUID.ToString(identbuf));
188 fprintf(stream, " Name = %s\n", Name.ToString(identbuf));
189 fprintf(stream, " PackageCreationDate= %s\n", PackageCreationDate.ToString(identbuf));
190 fprintf(stream, " PackageModifiedDate= %s\n", PackageModifiedDate.ToString(identbuf));
191 fprintf(stream, " Tracks:\n"); Tracks.Dump(stream);
193 fputs("==========================================================================\n", stream);
197 //------------------------------------------------------------------------------------------
202 ASDCP::MXF::MaterialPackage::InitFromBuffer(const byte_t* p, ui32_t l)
204 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_MaterialPackage].ul);
206 if ( ASDCP_SUCCESS(result) )
208 return GenericPackage::InitFromBuffer(p, l);
216 ASDCP::MXF::MaterialPackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
218 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_MaterialPackage].ul, 0);
223 ASDCP::MXF::MaterialPackage::Dump(FILE* stream)
225 GenericPackage::Dump(stream);
229 //------------------------------------------------------------------------------------------
234 ASDCP::MXF::SourcePackage::InitFromBuffer(const byte_t* p, ui32_t l)
236 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_SourcePackage].ul);
238 if ( ASDCP_SUCCESS(result) )
240 return GenericPackage::InitFromBuffer(p, l);
248 ASDCP::MXF::SourcePackage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
250 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_SourcePackage].ul, 0);
255 ASDCP::MXF::SourcePackage::Dump(FILE* stream)
257 GenericPackage::Dump(stream);
260 //------------------------------------------------------------------------------------------
265 ASDCP::MXF::Track::InitFromBuffer(const byte_t* p, ui32_t l)
269 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_Track].ul);
271 if ( ASDCP_SUCCESS(result) )
273 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
275 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
276 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
277 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackID));
278 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackNumber));
279 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericTrack, TrackName));
280 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericTrack, Sequence));
281 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Track, EditRate));
282 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(Track, Origin));
290 ASDCP::MXF::Track::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
292 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_Track].ul, 0);
297 ASDCP::MXF::Track::Dump(FILE* stream)
299 char identbuf[IdentBufferLen];
304 KLVPacket::Dump(stream, false);
305 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
306 fprintf(stream, " GenerationUID = %s\n", GenerationUID.ToString(identbuf));
307 fprintf(stream, " TrackID = %lu\n", TrackID);
308 fprintf(stream, " TrackNumber = %lu\n", TrackNumber);
309 fprintf(stream, " TrackName = %s\n", TrackName.ToString(identbuf));
310 fprintf(stream, " Sequence = %s\n", Sequence.ToString(identbuf));
311 fprintf(stream, " EditRate = %s\n", EditRate.ToString(identbuf));
312 fprintf(stream, " Origin = %s\n", i64sz(Origin, identbuf));
314 fputs("==========================================================================\n", stream);
317 //------------------------------------------------------------------------------------------
322 ASDCP::MXF::Sequence::InitFromBuffer(const byte_t* p, ui32_t l)
326 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_Sequence].ul);
328 if ( ASDCP_SUCCESS(result) )
330 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
332 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
333 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
334 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
335 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(StructuralComponent, Duration));
336 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(Sequence, StructuralComponents));
344 ASDCP::MXF::Sequence::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
346 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_Sequence].ul, 0);
351 ASDCP::MXF::Sequence::Dump(FILE* stream)
353 char identbuf[IdentBufferLen];
358 const MDDEntry* Entry = GetMDDEntry(DataDefinition.Data());
360 KLVPacket::Dump(stream, false);
361 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
362 fprintf(stream, " DataDefinition = %s (%s)\n", DataDefinition.ToString(identbuf), (Entry ? Entry->name : "Unknown"));
363 fprintf(stream, " Duration = %s\n", ui64sz(Duration, identbuf));
364 fprintf(stream, " StructuralComponents:\n"); StructuralComponents.Dump(stream);
366 fputs("==========================================================================\n", stream);
371 //------------------------------------------------------------------------------------------
376 ASDCP::MXF::SourceClip::InitFromBuffer(const byte_t* p, ui32_t l)
380 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_SourceClip].ul);
382 if ( ASDCP_SUCCESS(result) )
384 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
386 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
387 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
388 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
389 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(SourceClip, StartPosition));
390 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(StructuralComponent, Duration));
391 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(SourceClip, SourcePackageID));
392 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(SourceClip, SourceTrackID));
400 ASDCP::MXF::SourceClip::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
402 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_SourceClip].ul, 0);
407 ASDCP::MXF::SourceClip::Dump(FILE* stream)
409 char identbuf[IdentBufferLen];
414 KLVPacket::Dump(stream, false);
415 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
416 fprintf(stream, " DataDefinition = %s\n", DataDefinition.ToString(identbuf));
417 fprintf(stream, " StartPosition = %s\n", ui64sz(StartPosition, identbuf));
418 fprintf(stream, " SourcePackageID = %s\n", SourcePackageID.ToString(identbuf));
419 fprintf(stream, " SourcePackageID = %u\n", SourceTrackID);
421 fputs("==========================================================================\n", stream);
425 //------------------------------------------------------------------------------------------
430 ASDCP::MXF::TimecodeComponent::InitFromBuffer(const byte_t* p, ui32_t l)
434 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_TimecodeComponent].ul);
436 if ( ASDCP_SUCCESS(result) )
438 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
440 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
441 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
442 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
443 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(StructuralComponent, Duration));
444 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi16(OBJ_READ_ARGS(TimecodeComponent, RoundedTimecodeBase));
445 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(TimecodeComponent, StartTimecode));
446 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS(TimecodeComponent, DropFrame));
454 ASDCP::MXF::TimecodeComponent::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
456 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_TimecodeComponent].ul, 0);
461 ASDCP::MXF::TimecodeComponent::Dump(FILE* stream)
463 char identbuf[IdentBufferLen];
468 KLVPacket::Dump(stream, false);
469 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
470 fprintf(stream, " DataDefinition = %s\n", DataDefinition.ToString(identbuf));
471 fprintf(stream, " Duration = %s\n", ui64sz(Duration, identbuf));
472 fprintf(stream, " RoundedTimecodeBase= %u\n", RoundedTimecodeBase);
473 fprintf(stream, " StartTimecode = %s\n", ui64sz(StartTimecode, identbuf));
474 fprintf(stream, " DropFrame = %d\n", DropFrame);
476 fputs("==========================================================================\n", stream);
479 //------------------------------------------------------------------------------------------
484 ASDCP::MXF::WaveAudioDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
488 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_WaveAudioDescriptor].ul);
490 if ( ASDCP_SUCCESS(result) )
492 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
493 MXF::Rational TmpRat;
495 //InterchangeObject_InstanceUID
496 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
497 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
498 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate));
499 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(FileDescriptor, ContainerDuration));
500 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(FileDescriptor, LinkedTrackID));
501 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
502 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
503 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, Locked));
504 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
505 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
506 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi16(OBJ_READ_ARGS(WaveAudioDescriptor, BlockAlign));
507 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps));
515 ASDCP::MXF::WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
517 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_WaveAudioDescriptor].ul, 0);
522 ASDCP::MXF::WaveAudioDescriptor::Dump(FILE* stream)
524 char identbuf[IdentBufferLen];
529 KLVPacket::Dump(stream, false);
530 fprintf(stream, " InstanceUID: %s\n", InstanceUID.ToString(identbuf));
531 fprintf(stream, " LinkedTrackID: %lu\n", LinkedTrackID);
532 fprintf(stream, " EssenceContainer: %s\n", EssenceContainer.ToString(identbuf));
533 fprintf(stream, "...\n");
535 fputs("==========================================================================\n", stream);
539 //------------------------------------------------------------------------------------------
544 ASDCP::MXF::MPEG2VideoDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
548 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_MPEG2VideoDescriptor].ul);
550 if ( ASDCP_SUCCESS(result) )
552 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
553 MXF::Rational TmpRat;
556 //InterchangeObject_InstanceUID
557 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
558 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS_R(FileDescriptor, SampleRate, TmpRat));
560 ui64_t tmpDuration = 0;
561 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS_R(FileDescriptor, ContainerDuration, tmpDuration));
562 ContainerDuration = tmpDuration;
563 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(FileDescriptor, LinkedTrackID));
564 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
565 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS_R(GenericPictureEssenceDescriptor, AspectRatio, TmpRat));
566 AspectRatio = TmpRat;
567 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
568 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
569 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
570 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth));
571 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
572 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, VerticalSubsampling));
573 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS(CDCIEssenceDescriptor, ColorSiting));
574 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, CodedContentType));
575 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(MPEG2VideoDescriptor, BitRate));
576 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, ProfileAndLevel));
577 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi8(OBJ_READ_ARGS_R(MPEG2VideoDescriptor, LowDelay, tmp_delay));
578 LowDelay = (tmp_delay > 0);
586 ASDCP::MXF::MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
588 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_MPEG2VideoDescriptor].ul, 0);
593 ASDCP::MXF::MPEG2VideoDescriptor::Dump(FILE* stream)
595 char identbuf[IdentBufferLen];
600 KLVPacket::Dump(stream, false);
601 fprintf(stream, " InstanceUID: %s\n", InstanceUID.ToString(identbuf));
602 fprintf(stream, " LinkedTrackID: %lu\n", LinkedTrackID);
603 fprintf(stream, " EssenceContainer: %s\n", EssenceContainer.ToString(identbuf));
604 ASDCP::MPEG2::VideoDescriptorDump(*this, stream);
606 fputs("==========================================================================\n", stream);
609 //------------------------------------------------------------------------------------------
614 ASDCP::MXF::FileDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
618 Result_t result = KLVPacket::InitFromBuffer(p, l); // any of a variety of ULs, really
620 if ( ASDCP_SUCCESS(result) )
622 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
624 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
625 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenerationInterchangeObject, GenerationUID));
626 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericDescriptor, Locators));
627 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(GenericDescriptor, SubDescriptors));
628 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi32(OBJ_READ_ARGS(FileDescriptor, LinkedTrackID));
629 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate));
630 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadUi64(OBJ_READ_ARGS(FileDescriptor, ContainerDuration));
631 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
632 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(FileDescriptor, Codec));
640 ASDCP::MXF::FileDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
642 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_FileDescriptor].ul, 0);
647 ASDCP::MXF::FileDescriptor::Dump(FILE* stream)
649 char identbuf[IdentBufferLen];
654 KLVPacket::Dump(stream, false);
655 fprintf(stream, " InstanceUID: %s\n", InstanceUID.ToString(identbuf));
656 fprintf(stream, " GenerationUID: %lu\n", GenerationUID.ToString(identbuf));
657 fprintf(stream, " LinkedTrackID: %lu\n", LinkedTrackID);
658 fprintf(stream, " EssenceContainer: %s\n", EssenceContainer.ToString(identbuf));
659 fprintf(stream, "...\n");
661 fputs("==========================================================================\n", stream);
664 //------------------------------------------------------------------------------------------
669 ASDCP::MXF::GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
671 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_GenericPictureEssenceDescriptor].ul, 0);
674 //------------------------------------------------------------------------------------------
679 ASDCP::MXF::RGBAEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
681 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_RGBAEssenceDescriptor].ul, 0);
684 //------------------------------------------------------------------------------------------
689 ASDCP::MXF::JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
691 return WriteKLToBuffer(Buffer, s_MDD_Table[MDDindex_JPEG2000PictureSubDescriptor].ul, 0);
694 //------------------------------------------------------------------------------------------
699 ASDCP::MXF::CryptographicFramework::InitFromBuffer(const byte_t* p, ui32_t l)
703 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_CryptographicFramework].ul);
705 if ( ASDCP_SUCCESS(result) )
707 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
709 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
710 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(CryptographicFramework, ContextSR));
718 ASDCP::MXF::CryptographicFramework::Dump(FILE* stream)
720 char identbuf[IdentBufferLen];
725 KLVPacket::Dump(stream, false);
726 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
727 fprintf(stream, " ContextSR = %s\n", ContextSR.ToString(identbuf));
729 fputs("==========================================================================\n", stream);
733 //------------------------------------------------------------------------------------------
738 ASDCP::MXF::CryptographicContext::InitFromBuffer(const byte_t* p, ui32_t l)
742 Result_t result = KLVPacket::InitFromBuffer(p, l, s_MDD_Table[MDDindex_CryptographicContext].ul);
744 if ( ASDCP_SUCCESS(result) )
746 TLVReader MemRDR(m_ValueStart, m_ValueLength, m_Lookup);
748 result = MemRDR.ReadObject(OBJ_READ_ARGS(InterchangeObject, InstanceUID));
749 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(CryptographicContext, ContextID));
750 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(CryptographicContext, SourceEssenceContainer));
751 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(CryptographicContext, CipherAlgorithm));
752 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(CryptographicContext, MICAlgorithm));
753 if ( ASDCP_SUCCESS(result) ) result = MemRDR.ReadObject(OBJ_READ_ARGS(CryptographicContext, CryptographicKeyID));
761 ASDCP::MXF::CryptographicContext::Dump(FILE* stream)
763 char identbuf[IdentBufferLen];
768 KLVPacket::Dump(stream, false);
769 fprintf(stream, " InstanceUID = %s\n", InstanceUID.ToString(identbuf));
770 fprintf(stream, " ContextID = %s\n", ContextID.ToString(identbuf));
771 fprintf(stream, " SourceEssenceCnt = %s\n", SourceEssenceContainer.ToString(identbuf));
772 fprintf(stream, " CipherAlgorithm = %s\n", CipherAlgorithm.ToString(identbuf));
773 fprintf(stream, " MICAlgorithm = %s\n", MICAlgorithm.ToString(identbuf));
774 fprintf(stream, " CryptographicKeyID = %s\n", CryptographicKeyID.ToString(identbuf));
776 fputs("==========================================================================\n", stream);