summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2006-03-14 00:29:50 +0000
committerjhurst <>2006-03-14 00:29:50 +0000
commit30d642bd3b8474744dfbdcc2bdc46cdf827102c4 (patch)
treee31c3e1456494dec612f705e957ea8f9ba7979fc /src
parent9bfe9676115531eb76649e1ebd5e14b904b53ae2 (diff)
added aiff reader
Diffstat (limited to 'src')
-rwxr-xr-xsrc/AS_DCP.h2
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp174
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp21
-rwxr-xr-xsrc/AS_DCP_MXF.cpp32
-rwxr-xr-xsrc/AS_DCP_PCM.cpp27
-rwxr-xr-xsrc/AS_DCP_internal.h139
-rwxr-xr-xsrc/Dict.cpp4
-rwxr-xr-xsrc/Index.cpp4
-rwxr-xr-xsrc/KLV.cpp2
-rwxr-xr-xsrc/KLV.h6
-rw-r--r--src/MDD.cpp1831
-rwxr-xr-xsrc/MDD.h523
-rwxr-xr-xsrc/MXF.cpp147
-rwxr-xr-xsrc/MXF.h63
-rwxr-xr-xsrc/MXFTypes.cpp115
-rwxr-xr-xsrc/MXFTypes.h96
-rwxr-xr-xsrc/Metadata.cpp3
-rwxr-xr-xsrc/Metadata.h1
-rwxr-xr-xsrc/PCM_Parser.cpp38
-rwxr-xr-xsrc/Wav.cpp179
-rwxr-xr-xsrc/Wav.h90
-rwxr-xr-xsrc/h__Reader.cpp34
-rwxr-xr-xsrc/h__Writer.cpp139
23 files changed, 1792 insertions, 1878 deletions
diff --git a/src/AS_DCP.h b/src/AS_DCP.h
index b7dc94a..b64c3a5 100755
--- a/src/AS_DCP.h
+++ b/src/AS_DCP.h
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2003-2005, John Hurst
+Copyright (c) 2003-2006, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp
index 6558a06..3bb5484 100755
--- a/src/AS_DCP_JP2K.cpp
+++ b/src/AS_DCP_JP2K.cpp
@@ -34,12 +34,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------------------
-//
-const byte_t JP2KEssenceCompressionLabel[klv_key_size] =
-{
- 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x09,
- 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01 };
-
+static std::string JP2K_PACKAGE_LABEL = "File Package: SMPTE XXXM frame wrapping of JPEG 2000 codestreams";
+static std::string PICT_DEF_LABEL = "Picture Track";
//
void
@@ -101,7 +97,7 @@ ContainerDuration: %lu\n",
);
if ( PDesc.QuantDefaultLength )
- fprintf(stream, "Default Coding (%lu): %s\n",
+ fprintf(stream, "Quantization Default (%lu): %s\n",
PDesc.QuantDefaultLength,
bin2hex(PDesc.QuantDefault, PDesc.QuantDefaultLength,
tmp_buf, tmp_buf_len)
@@ -114,24 +110,27 @@ ContainerDuration: %lu\n",
class ASDCP::JP2K::MXFReader::h__Reader : public ASDCP::h__Reader
{
+ RGBAEssenceDescriptor* m_EssenceDescriptor;
+ JPEG2000PictureSubDescriptor* m_EssenceSubDescriptor;
+
ASDCP_NO_COPY_CONSTRUCT(h__Reader);
public:
PictureDescriptor m_PDesc; // codestream parameter list
- h__Reader() {}
+ h__Reader() : m_EssenceDescriptor(0), m_EssenceSubDescriptor(0) {}
Result_t OpenRead(const char*);
Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*);
Result_t ReadFrameGOPStart(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*);
- Result_t MD_to_JP2K_PDesc(MXF::RGBAEssenceDescriptor* PDescObj, JP2K::PictureDescriptor& PDesc);
+ Result_t MD_to_JP2K_PDesc(JP2K::PictureDescriptor& PDesc);
};
//
ASDCP::Result_t
-ASDCP::JP2K::MXFReader::h__Reader::MD_to_JP2K_PDesc(MXF::RGBAEssenceDescriptor* PDescObj, JP2K::PictureDescriptor& PDesc)
+ASDCP::JP2K::MXFReader::h__Reader::MD_to_JP2K_PDesc(JP2K::PictureDescriptor& PDesc)
{
- ASDCP_TEST_NULL(PDescObj);
memset(&PDesc, 0, sizeof(PDesc));
+ MXF::RGBAEssenceDescriptor* PDescObj = (MXF::RGBAEssenceDescriptor*)m_EssenceDescriptor;
PDesc.EditRate = PDescObj->SampleRate;
PDesc.ContainerDuration = PDescObj->ContainerDuration;
@@ -139,49 +138,36 @@ ASDCP::JP2K::MXFReader::h__Reader::MD_to_JP2K_PDesc(MXF::RGBAEssenceDescriptor*
PDesc.StoredHeight = PDescObj->StoredHeight;
PDesc.AspectRatio = PDescObj->AspectRatio;
- InterchangeObject* MDObject;
- if ( ASDCP_SUCCESS(m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(JPEG2000PictureSubDescriptor), &MDObject)) )
+ if ( m_EssenceSubDescriptor != 0 )
{
- if ( MDObject == 0 )
- {
- DefaultLogSink().Error("Unable to locate JPEG2000PictureSubDescriptor");
- return RESULT_FALSE;
- }
+ PDesc.Rsize = m_EssenceSubDescriptor->Rsize;
+ PDesc.Xsize = m_EssenceSubDescriptor->Xsize;
+ PDesc.Ysize = m_EssenceSubDescriptor->Ysize;
+ PDesc.XOsize = m_EssenceSubDescriptor->XOsize;
+ PDesc.YOsize = m_EssenceSubDescriptor->YOsize;
+ PDesc.XTsize = m_EssenceSubDescriptor->XTsize;
+ PDesc.YTsize = m_EssenceSubDescriptor->YTsize;
+ PDesc.XTOsize = m_EssenceSubDescriptor->XTOsize;
+ PDesc.YTOsize = m_EssenceSubDescriptor->YTOsize;
+ PDesc.Csize = m_EssenceSubDescriptor->Csize;
- JPEG2000PictureSubDescriptor* PSubDescObj = (JPEG2000PictureSubDescriptor*)MDObject;
-
- PDesc.Rsize = PSubDescObj->Rsize;
- PDesc.Xsize = PSubDescObj->Xsize;
- PDesc.Ysize = PSubDescObj->Ysize;
- PDesc.XOsize = PSubDescObj->XOsize;
- PDesc.YOsize = PSubDescObj->YOsize;
- PDesc.XTsize = PSubDescObj->XTsize;
- PDesc.YTsize = PSubDescObj->YTsize;
- PDesc.XTOsize = PSubDescObj->XTOsize;
- PDesc.YTOsize = PSubDescObj->YTOsize;
- PDesc.Csize = PSubDescObj->Csize;
- }
-
-#if 0
// PictureComponentSizing
+ ui32_t tmp_size = m_EssenceSubDescriptor->PictureComponentSizing.Size();
+
+ if ( tmp_size == 17 ) // ( 2 * sizeof(ui32_t) ) + 3 components * 3 byte each
+ memcpy(&PDesc.ImageComponents, m_EssenceSubDescriptor->PictureComponentSizing.RoData() + 8, tmp_size - 8);
- if ( DC3.Size == 17 ) // ( 2* sizeof(ui32_t) ) + 3 components * 3 byte each
- {
- memcpy(&PDesc.ImageComponents, DC3.Data + 8, DC3.Size - 8);
- }
else
- {
- DefaultLogSink().Error("Unexpected PictureComponentSizing size: %lu, should be 17\n", DC3.Size);
- }
-#endif
+ DefaultLogSink().Error("Unexpected PictureComponentSizing size: %lu, should be 17\n", tmp_size);
- // CodingStyleDefault
- // PDesc.CodingStyleLength = DC1.Size;
- // memcpy(PDesc.CodingStyle, DC1.Data, DC1.Size);
+ // CodingStyleDefault
+ if ( ( PDesc.CodingStyleLength = m_EssenceSubDescriptor->CodingStyleDefault.Size() ) != 0 )
+ memcpy(PDesc.CodingStyle, m_EssenceSubDescriptor->CodingStyleDefault.RoData(), PDesc.CodingStyleLength);
- // QuantizationDefault
- // PDesc.QuantDefaultLength = DC2.Size;
- // memcpy(PDesc.QuantDefault, DC2.Data, DC2.Size);
+ // QuantizationDefault
+ if ( ( PDesc.QuantDefaultLength = m_EssenceSubDescriptor->QuantizationDefault.Size() ) != 0 )
+ memcpy(PDesc.QuantDefault, m_EssenceSubDescriptor->QuantizationDefault.RoData(), PDesc.QuantDefaultLength);
+ }
return RESULT_OK;
}
@@ -195,12 +181,13 @@ ASDCP::JP2K::MXFReader::h__Reader::OpenRead(const char* filename)
if( ASDCP_SUCCESS(result) )
{
- InterchangeObject* Object;
- if ( ASDCP_SUCCESS(m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(RGBAEssenceDescriptor), &Object)) )
+ if ( m_EssenceDescriptor == 0 )
{
- assert(Object);
- result = MD_to_JP2K_PDesc((MXF::RGBAEssenceDescriptor*)Object, m_PDesc);
+ m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(RGBAEssenceDescriptor), (InterchangeObject**)&m_EssenceDescriptor);
+ m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(JPEG2000PictureSubDescriptor), (InterchangeObject**)&m_EssenceSubDescriptor);
}
+
+ result = MD_to_JP2K_PDesc(m_PDesc);
}
if( ASDCP_SUCCESS(result) )
@@ -221,7 +208,7 @@ ASDCP::JP2K::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& Frame
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- return ReadEKLVPacket(FrameNum, FrameBuf, JP2KEssenceUL_Data, Ctx, HMAC);
+ return ReadEKLVPacket(FrameNum, FrameBuf, Dict::ul(MDD_JPEG2000Essence), Ctx, HMAC);
}
//------------------------------------------------------------------------------------------
@@ -329,28 +316,33 @@ ASDCP::JP2K::MXFReader::DumpIndex(FILE* stream) const
//
class ASDCP::JP2K::MXFWriter::h__Writer : public ASDCP::h__Writer
{
+ JPEG2000PictureSubDescriptor* m_EssenceSubDescriptor;
+
public:
PictureDescriptor m_PDesc;
- ui32_t m_GOPOffset;
ASDCP_NO_COPY_CONSTRUCT(h__Writer);
- h__Writer() : m_GOPOffset(0) {}
+ h__Writer() : m_EssenceSubDescriptor(0) {}
~h__Writer(){}
Result_t OpenWrite(const char*, ui32_t HeaderSize);
Result_t SetSourceStream(const PictureDescriptor&);
Result_t WriteFrame(const FrameBuffer&, AESEncContext* = 0, HMACContext* = 0);
Result_t Finalize();
- Result_t JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc, MXF::RGBAEssenceDescriptor* PDescObj);
+ Result_t JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc);
};
//
ASDCP::Result_t
-ASDCP::JP2K::MXFWriter::h__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc, MXF::RGBAEssenceDescriptor* PDescObj)
+ASDCP::JP2K::MXFWriter::h__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc)
{
- // Codec
+ assert(m_EssenceDescriptor);
+ assert(m_EssenceSubDescriptor);
+ MXF::RGBAEssenceDescriptor* PDescObj = (MXF::RGBAEssenceDescriptor*)m_EssenceDescriptor;
+
+ PDescObj->Codec.Set(Dict::ul(MDD_JP2KEssenceCompression));
PDescObj->SampleRate = PDesc.EditRate;
PDescObj->ContainerDuration = PDesc.ContainerDuration;
PDescObj->StoredWidth = PDesc.StoredWidth;
@@ -358,24 +350,17 @@ ASDCP::JP2K::MXFWriter::h__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDe
PDescObj->AspectRatio = PDesc.AspectRatio;
PDescObj->FrameLayout = 0;
- InterchangeObject* MDObject;
- if ( ASDCP_SUCCESS(m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(JPEG2000PictureSubDescriptor), &MDObject)) )
- {
- assert(MDObject);
- JPEG2000PictureSubDescriptor* PSubDescObj = (JPEG2000PictureSubDescriptor*)MDObject;
-
- PSubDescObj->Rsize = PDesc.Rsize;
- PSubDescObj->Xsize = PDesc.Xsize;
- PSubDescObj->Ysize = PDesc.Ysize;
- PSubDescObj->XOsize = PDesc.XOsize;
- PSubDescObj->YOsize = PDesc.YOsize;
- PSubDescObj->XTsize = PDesc.XTsize;
- PSubDescObj->YTsize = PDesc.YTsize;
- PSubDescObj->XTOsize = PDesc.XTOsize;
- PSubDescObj->YTOsize = PDesc.YTOsize;
- PSubDescObj->Csize = PDesc.Csize;
- }
-#if 0
+ m_EssenceSubDescriptor->Rsize = PDesc.Rsize;
+ m_EssenceSubDescriptor->Xsize = PDesc.Xsize;
+ m_EssenceSubDescriptor->Ysize = PDesc.Ysize;
+ m_EssenceSubDescriptor->XOsize = PDesc.XOsize;
+ m_EssenceSubDescriptor->YOsize = PDesc.YOsize;
+ m_EssenceSubDescriptor->XTsize = PDesc.XTsize;
+ m_EssenceSubDescriptor->YTsize = PDesc.YTsize;
+ m_EssenceSubDescriptor->XTOsize = PDesc.XTOsize;
+ m_EssenceSubDescriptor->YTOsize = PDesc.YTOsize;
+ m_EssenceSubDescriptor->Csize = PDesc.Csize;
+
const ui32_t tmp_buffer_len = 64;
byte_t tmp_buffer[tmp_buffer_len];
@@ -383,10 +368,14 @@ ASDCP::JP2K::MXFWriter::h__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDe
*(ui32_t*)(tmp_buffer+4) = ASDCP_i32_BE(3L);
memcpy(tmp_buffer + 8, &PDesc.ImageComponents, sizeof(ASDCP::JP2K::ImageComponent) * 3L);
- PSubDescObj->SetValue("PictureComponentSizing", DataChunk(17, tmp_buffer));
- PSubDescObj->SetValue("CodingStyleDefault", DataChunk(PDesc.CodingStyleLength, PDesc.CodingStyle));
- PSubDescObj->SetValue("QuantizationDefault", DataChunk(PDesc.QuantDefaultLength, PDesc.QuantDefault));
-#endif
+ memcpy(m_EssenceSubDescriptor->PictureComponentSizing.Data(), tmp_buffer, 17);
+ m_EssenceSubDescriptor->PictureComponentSizing.Size(17);
+
+ memcpy(m_EssenceSubDescriptor->CodingStyleDefault.Data(), PDesc.CodingStyle, PDesc.CodingStyleLength);
+ m_EssenceSubDescriptor->CodingStyleDefault.Size(PDesc.CodingStyleLength);
+
+ memcpy(m_EssenceSubDescriptor->QuantizationDefault.Data(), PDesc.QuantDefault, PDesc.QuantDefaultLength);
+ m_EssenceSubDescriptor->QuantizationDefault.Size(PDesc.QuantDefaultLength);
return RESULT_OK;
}
@@ -404,13 +393,11 @@ ASDCP::JP2K::MXFWriter::h__Writer::OpenWrite(const char* filename, ui32_t Header
if ( ASDCP_SUCCESS(result) )
{
- RGBAEssenceDescriptor* rgbDesc = new RGBAEssenceDescriptor;
-
- JPEG2000PictureSubDescriptor* jp2kSubDesc = new JPEG2000PictureSubDescriptor;
- m_HeaderPart.AddChildObject(jp2kSubDesc);
- rgbDesc->SubDescriptors.push_back(jp2kSubDesc->InstanceUID);
-
- m_EssenceDescriptor = rgbDesc;
+ m_HeaderSize = HeaderSize;
+ m_EssenceDescriptor = new RGBAEssenceDescriptor;
+ m_EssenceSubDescriptor = new JPEG2000PictureSubDescriptor;
+ m_HeaderPart.AddChildObject(m_EssenceSubDescriptor);
+ m_EssenceDescriptor->SubDescriptors.push_back(m_EssenceSubDescriptor->InstanceUID);
result = m_State.Goto_INIT();
}
@@ -425,11 +412,11 @@ ASDCP::JP2K::MXFWriter::h__Writer::SetSourceStream(const PictureDescriptor& PDes
return RESULT_STATE;
m_PDesc = PDesc;
- Result_t result = JP2K_PDesc_to_MD(m_PDesc, (RGBAEssenceDescriptor*)m_EssenceDescriptor);
+ Result_t result = JP2K_PDesc_to_MD(m_PDesc);
if ( ASDCP_SUCCESS(result) )
- result = WriteMXFHeader(JP2K_PACKAGE_LABEL,
- UL(WrappingUL_Data_JPEG_2000),
+ result = WriteMXFHeader(JP2K_PACKAGE_LABEL, UL(Dict::ul(MDD_JPEG_2000Wrapping)),
+ PICT_DEF_LABEL, UL(Dict::ul(MDD_PictureDataDef)),
m_PDesc.EditRate, 24 /* TCFrameRate */);
if ( ASDCP_SUCCESS(result) )
@@ -451,16 +438,15 @@ ASDCP::JP2K::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESEn
if ( m_State.Test_READY() )
result = m_State.Goto_RUNNING(); // first time through
-
- fpos_t ThisOffset = m_StreamOffset;
+ IndexTableSegment::IndexEntry Entry;
+ Entry.StreamOffset = m_StreamOffset;
+
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, JP2KEssenceUL_Data, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, Dict::ul(MDD_JPEG2000Essence), Ctx, HMAC);
if ( ASDCP_SUCCESS(result) )
{
- IndexTableSegment::IndexEntry Entry;
- Entry.StreamOffset = ThisOffset - m_FooterPart.m_ECOffset;
m_FooterPart.PushIndexEntry(Entry);
m_FramesWritten++;
}
diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp
index db00c45..badc221 100755
--- a/src/AS_DCP_MPEG2.cpp
+++ b/src/AS_DCP_MPEG2.cpp
@@ -34,9 +34,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------------------
+static std::string MPEG_PACKAGE_LABEL = "File Package: SMPTE 381M frame wrapping of MPEG2 video elementary stream";
+static std::string PICT_DEF_LABEL = "Picture Track";
+
//
ASDCP::Result_t
-ASDCP::MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& VDesc)
+MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& VDesc)
{
ASDCP_TEST_NULL(VDescObj);
@@ -65,7 +68,7 @@ ASDCP::MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescri
//
ASDCP::Result_t
-ASDCP::MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor& VDesc, MXF::MPEG2VideoDescriptor* VDescObj)
+MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor& VDesc, MXF::MPEG2VideoDescriptor* VDescObj)
{
ASDCP_TEST_NULL(VDescObj);
@@ -228,7 +231,7 @@ ASDCP::MPEG2::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& Fram
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- Result_t result = ReadEKLVPacket(FrameNum, FrameBuf, MPEGEssenceUL_Data, Ctx, HMAC);
+ Result_t result = ReadEKLVPacket(FrameNum, FrameBuf, Dict::ul(MDD_MPEG2Essence), Ctx, HMAC);
if ( ASDCP_FAILURE(result) )
return result;
@@ -409,6 +412,7 @@ ASDCP::MPEG2::MXFWriter::h__Writer::OpenWrite(const char* filename, ui32_t Heade
if ( ASDCP_SUCCESS(result) )
{
+ m_HeaderSize = HeaderSize;
m_EssenceDescriptor = new MPEG2VideoDescriptor;
result = m_State.Goto_INIT();
}
@@ -427,8 +431,8 @@ ASDCP::MPEG2::MXFWriter::h__Writer::SetSourceStream(const VideoDescriptor& VDesc
Result_t result = MPEG2_VDesc_to_MD(m_VDesc, (MPEG2VideoDescriptor*)m_EssenceDescriptor);
if ( ASDCP_SUCCESS(result) )
- result = WriteMXFHeader(MPEG_PACKAGE_LABEL,
- UL(WrappingUL_Data_MPEG2_VES),
+ result = WriteMXFHeader(MPEG_PACKAGE_LABEL, UL(Dict::ul(MDD_MPEG2_VESWrapping)),
+ PICT_DEF_LABEL, UL(Dict::ul(MDD_PictureDataDef)),
m_VDesc.EditRate, 24 /* TCFrameRate */);
if ( ASDCP_SUCCESS(result) )
@@ -451,10 +455,11 @@ ASDCP::MPEG2::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESE
if ( m_State.Test_READY() )
result = m_State.Goto_RUNNING(); // first time through, get the body location
- ui64_t ThisOffset = m_File.Tell();
+ IndexTableSegment::IndexEntry Entry;
+ Entry.StreamOffset = m_StreamOffset;
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, MPEGEssenceUL_Data, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, Dict::ul(MDD_MPEG2Essence), Ctx, HMAC);
if ( ASDCP_FAILURE(result) )
return result;
@@ -479,11 +484,9 @@ ASDCP::MPEG2::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESE
}
// update the index manager
- IndexTableSegment::IndexEntry Entry;
Entry.TemporalOffset = - FrameBuf.TemporalOffset();
Entry.KeyFrameOffset = m_GOPOffset;
Entry.Flags = Flags;
- Entry.StreamOffset = ThisOffset - m_FooterPart.m_ECOffset;
m_FooterPart.PushIndexEntry(Entry);
m_FramesWritten++;
m_GOPOffset++;
diff --git a/src/AS_DCP_MXF.cpp b/src/AS_DCP_MXF.cpp
index 5bba537..9436273 100755
--- a/src/AS_DCP_MXF.cpp
+++ b/src/AS_DCP_MXF.cpp
@@ -108,8 +108,8 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
memcpy(Info.ContextID, InfoObj->ContextID.Value(), UUIDlen);
memcpy(Info.CryptographicKeyID, InfoObj->CryptographicKeyID.Value(), UUIDlen);
- UL MIC_SHA1(MICAlgorithm_HMAC_SHA1);
- UL MIC_NONE(MICAlgorithm_NONE);
+ UL MIC_SHA1(Dict::ul(MDD_MICAlgorithm_HMAC_SHA1));
+ UL MIC_NONE(Dict::ul(MDD_MICAlgorithm_NONE));
if ( InfoObj->MICAlgorithm == MIC_SHA1 )
Info.UsesHMAC = true;
@@ -185,6 +185,7 @@ ASDCP::RawEssenceType(const char* filename, EssenceType_t& type)
if ( ASDCP_SUCCESS(result) )
{
ASDCP::Wav::SimpleWaveHeader WavHeader;
+ ASDCP::AIFF::SimpleAIFFHeader AIFFHeader;
ui32_t data_offset;
const byte_t* p = FB.RoData();
@@ -193,6 +194,9 @@ ASDCP::RawEssenceType(const char* filename, EssenceType_t& type)
else if ( ASDCP_SUCCESS(WavHeader.ReadFromBuffer(p, read_count, &data_offset)) )
type = ESS_PCM_24b_48k;
+
+ else if ( ASDCP_SUCCESS(AIFFHeader.ReadFromBuffer(p, read_count, &data_offset)) )
+ type = ESS_PCM_24b_48k;
}
}
else if ( ASDCP::PathIsDirectory(filename) )
@@ -370,33 +374,33 @@ ASDCP::IntegrityPack::CalcValues(const ASDCP::FrameBuffer& FB, byte_t* AssetID,
byte_t* p = Data;
HMAC->Reset();
- static byte_t ber_4[klv_length_size] = {0x83, 0};
+ static byte_t ber_4[MXF_BER_LENGTH] = {0x83, 0};
// update HMAC with essence data
HMAC->Update(FB.RoData(), FB.Size());
// track file ID length
- memcpy(p, ber_4, klv_length_size);
+ memcpy(p, ber_4, MXF_BER_LENGTH);
*(p+3) = UUIDlen;;
- p += klv_length_size;
+ p += MXF_BER_LENGTH;
// track file ID
memcpy(p, AssetID, UUIDlen);
p += UUIDlen;
// sequence length
- memcpy(p, ber_4, klv_length_size);
+ memcpy(p, ber_4, MXF_BER_LENGTH);
*(p+3) = sizeof(ui64_t);
- p += klv_length_size;
+ p += MXF_BER_LENGTH;
// sequence number
i2p<ui64_t>(ASDCP_i64_BE(sequence), p);
p += sizeof(ui64_t);
// HMAC length
- memcpy(p, ber_4, klv_length_size);
+ memcpy(p, ber_4, MXF_BER_LENGTH);
*(p+3) = HMAC_SIZE;
- p += klv_length_size;
+ p += MXF_BER_LENGTH;
// update HMAC with intpack values
HMAC->Update(Data, klv_intpack_size - HMAC_SIZE);
@@ -469,23 +473,23 @@ ASDCP::Result_t
ASDCP::KLVReader::ReadKLFromFile(ASDCP::FileReader& Reader)
{
ui32_t read_count;
- m_HeaderLength = klv_key_size + klv_length_size;
+ m_HeaderLength = SMPTE_UL_LENGTH + MXF_BER_LENGTH;
Result_t result = Reader.Read(m_Key, m_HeaderLength, &read_count);
assert(read_count == m_HeaderLength);
if ( ASDCP_SUCCESS(result) )
{
- m_BERLength = BER_length(m_Key + klv_key_size);
+ m_BERLength = BER_length(m_Key + SMPTE_UL_LENGTH);
if ( m_BERLength == 0 )
{
char intbuf[IntBufferLen];
ASDCP::DefaultLogSink().Error("KLV format error, zero BER length not allowed at file position %s\n",
- i64szx((Reader.Tell() - (fpos_t)klv_key_size), 8, intbuf));
+ i64szx((Reader.Tell() - (fpos_t)SMPTE_UL_LENGTH), 8, intbuf));
return RESULT_FAIL;
}
- if ( m_BERLength != klv_length_size )
+ if ( m_BERLength != MXF_BER_LENGTH )
{
ASDCP::DefaultLogSink().Error("Found packet with BER length %lu; being less efficient...\n",
@@ -496,7 +500,7 @@ ASDCP::KLVReader::ReadKLFromFile(ASDCP::FileReader& Reader)
assert(0);
}
- if ( ! read_BER(m_Key + klv_key_size, &m_Length) )
+ if ( ! read_BER(m_Key + SMPTE_UL_LENGTH, &m_Length) )
return RESULT_FAIL;
}
diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp
index 0aa396f..ef16f2b 100755
--- a/src/AS_DCP_PCM.cpp
+++ b/src/AS_DCP_PCM.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2004-2005, John Hurst
+Copyright (c) 2004-2006, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -34,8 +34,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------------------
+static std::string PCM_PACKAGE_LABEL = "File Package: SMPTE 382M frame wrapping of wave audio";
+static std::string SOUND_DEF_LABEL = "Sound Track";
+
+//
Result_t
-ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* ADescObj)
+PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* ADescObj)
{
ASDCP_TEST_NULL(ADescObj);
ADescObj->SampleRate = ADesc.SampleRate;
@@ -52,7 +56,7 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD
//
ASDCP::Result_t
-ASDCP::MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor& ADesc)
+MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor& ADesc)
{
ASDCP_TEST_NULL(ADescObj);
ADesc.SampleRate = ADescObj->SampleRate;
@@ -106,15 +110,15 @@ calc_CBR_frame_size(ASDCP::WriterInfo& Info, const ASDCP::PCM::AudioDescriptor&
if ( Info.EncryptedEssence )
{
CBR_frame_size =
- klv_key_size
- + klv_length_size
+ SMPTE_UL_LENGTH
+ + MXF_BER_LENGTH
+ klv_cryptinfo_size
+ calc_esv_length(ASDCP::PCM::CalcFrameBufferSize(ADesc), 0)
- + ( Info.UsesHMAC ? klv_intpack_size : (klv_length_size * 3) );
+ + ( Info.UsesHMAC ? klv_intpack_size : (MXF_BER_LENGTH * 3) );
}
else
{
- CBR_frame_size = ASDCP::PCM::CalcFrameBufferSize(ADesc) + klv_key_size + klv_length_size;
+ CBR_frame_size = ASDCP::PCM::CalcFrameBufferSize(ADesc) + SMPTE_UL_LENGTH + MXF_BER_LENGTH;
}
return CBR_frame_size;
@@ -198,7 +202,7 @@ ASDCP::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameB
if ( ! m_File.IsOpen() )
return RESULT_INIT;
- return ReadEKLVPacket(FrameNum, FrameBuf, WAVEssenceUL_Data, Ctx, HMAC);
+ return ReadEKLVPacket(FrameNum, FrameBuf, Dict::ul(MDD_WAVEssence), Ctx, HMAC);
}
//------------------------------------------------------------------------------------------
@@ -334,6 +338,7 @@ ASDCP::PCM::MXFWriter::h__Writer::OpenWrite(const char* filename, ui32_t HeaderS
if ( ASDCP_SUCCESS(result) )
{
+ m_HeaderSize = HeaderSize;
m_EssenceDescriptor = new WaveAudioDescriptor;
result = m_State.Goto_INIT();
}
@@ -369,8 +374,8 @@ ASDCP::PCM::MXFWriter::h__Writer::SetSourceStream(const AudioDescriptor& ADesc)
Result_t result = PCM_ADesc_to_MD(m_ADesc, (WaveAudioDescriptor*)m_EssenceDescriptor);
if ( ASDCP_SUCCESS(result) )
- result = WriteMXFHeader(PCM_PACKAGE_LABEL,
- UL(WrappingUL_Data_PCM_24b_48k),
+ result = WriteMXFHeader(PCM_PACKAGE_LABEL, UL(Dict::ul(MDD_WAVWrapping)),
+ SOUND_DEF_LABEL, UL(Dict::ul(MDD_SoundDataDef)),
m_ADesc.SampleRate, 24 /* TCFrameRate */, calc_CBR_frame_size(m_Info, m_ADesc));
if ( ASDCP_SUCCESS(result) )
@@ -392,7 +397,7 @@ ASDCP::PCM::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESEnc
result = m_State.Goto_RUNNING(); // first time through
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, WAVEssenceUL_Data, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, Dict::ul(MDD_WAVEssence), Ctx, HMAC);
if ( ASDCP_SUCCESS(result) )
m_FramesWritten++;
diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h
index ca3d9bb..15890a7 100755
--- a/src/AS_DCP_internal.h
+++ b/src/AS_DCP_internal.h
@@ -45,106 +45,46 @@ using namespace ASDCP::MXF;
namespace ASDCP
{
// constant values used to calculate KLV and EKLV packet sizes
- static const ui32_t klv_key_size = 16;
- static const ui32_t klv_length_size = 4;
static const ui32_t klv_cryptinfo_size =
- klv_length_size
+ MXF_BER_LENGTH
+ UUIDlen /* ContextID */
- + klv_length_size
+ + MXF_BER_LENGTH
+ sizeof(ui64_t) /* PlaintextOffset */
- + klv_length_size
- + klv_key_size /* SourceKey */
- + klv_length_size
+ + MXF_BER_LENGTH
+ + SMPTE_UL_LENGTH /* SourceKey */
+ + MXF_BER_LENGTH
+ sizeof(ui64_t) /* SourceLength */
- + klv_length_size /* ESV length */ ;
+ + MXF_BER_LENGTH /* ESV length */ ;
static const ui32_t klv_intpack_size =
- klv_length_size
+ MXF_BER_LENGTH
+ UUIDlen /* TrackFileID */
- + klv_length_size
+ + MXF_BER_LENGTH
+ sizeof(ui64_t) /* SequenceNumber */
- + klv_length_size
+ + MXF_BER_LENGTH
+ 20; /* HMAC length*/
- // why this value? i dunno. it was peeled from mxflib.
- static const ui32_t HeaderPadding = 16384;
-
- const byte_t GCMulti_Data[16] =
- { 0x06, 0x0E, 0x2B, 0x34, 0x04, 0x01, 0x01, 0x03,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7F, 0x01, 0x00 };
-
- static const byte_t CipherAlgorithm_AES[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x02, 0x09, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 };
-
- static const byte_t MICAlgorithm_NONE[klv_key_size] = {0};
- static const byte_t MICAlgorithm_HMAC_SHA1[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x02, 0x09, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 };
-
-#ifdef SMPTE_LABELS
- static byte_t OPAtom_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x02,
- 0x0d, 0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00 };
- static UL OPAtomUL(OPAtom_Data);
-#else
- static byte_t OPAtom_Data[klv_key_size] =
+ // calculate size of encrypted essence with IV, CheckValue, and padding
+ inline ui32_t
+ calc_esv_length(ui32_t source_length, ui32_t plaintext_offset)
+ {
+ ui32_t ct_size = source_length - plaintext_offset;
+ ui32_t diff = ct_size % CBC_BLOCK_SIZE;
+ ui32_t block_size = ct_size - diff;
+ return plaintext_offset + block_size + (CBC_BLOCK_SIZE * 3);
+ }
+
+ // Interop labels
+
+ static byte_t OPAtom_Data[SMPTE_UL_LENGTH] =
{ 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
0x0d, 0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00 };
static UL OPAtomUL(OPAtom_Data);
-#endif
- static const byte_t OP1a_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00 };
- static UL OP1aUL(OP1a_Data);
-
- // Essence element labels
- static const byte_t WAVEssenceUL_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x16, 0x01, 0x01, 0x00 };
-
- static const byte_t MPEGEssenceUL_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x15, 0x01, 0x05, 0x00 };
-
- static const byte_t JP2KEssenceUL_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x15, 0x01, 0x08, 0x01 };
-
-#ifdef SMPTE_LABELS
- static const byte_t CryptEssenceUL_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x04, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7e, 0x01, 0x00 };
-#else
- static const byte_t CryptEssenceUL_Data[klv_key_size] =
+ static const byte_t CryptEssenceUL_Data[SMPTE_UL_LENGTH] =
{ 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x04, 0x01, 0x07,
0x0d, 0x01, 0x03, 0x01, 0x02, 0x7e, 0x01, 0x00 };
-#endif
-
- // Essence Container Labels
- static const byte_t WrappingUL_Data_PCM_24b_48k[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x06, 0x01, 0x00 };
-
- static const byte_t WrappingUL_Data_MPEG2_VES[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x02,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x04, 0x60, 0x01 };
-
- static const byte_t WrappingUL_Data_JPEG_2000[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x0c, 0x01, 0x00 };
-
- static const byte_t WrappingUL_Data_Crypt[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x0b, 0x01, 0x00 };
-
-
- // the label for the Cryptographic Framework DM scheme
- static const byte_t CryptoFrameworkUL_Data[klv_key_size] =
- { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x0d, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01, 0x00 };
// the check value for EKLV packets
// CHUKCHUKCHUKCHUK
@@ -152,39 +92,14 @@ namespace ASDCP
{ 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b,
0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b };
- // labels used for FilePackages
- static std::string MPEG_PACKAGE_LABEL = "File Package: SMPTE 381M frame wrapping of MPEG2 video elementary stream";
- static std::string JP2K_PACKAGE_LABEL = "File Package: SMPTE XXXM frame wrapping of JPEG 2000 codestreams";
- static std::string PCM_PACKAGE_LABEL = "File Package: SMPTE 382M frame wrapping of wave audio";
-
- // GetMDObjectByPath() allows searching for metadata object by pathname
- // This character separates the path elements.
- static const char OBJECT_PATH_SEPARATOR = '.';
-
//------------------------------------------------------------------------------------------
//
- Result_t MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor*, MPEG2::VideoDescriptor&);
- Result_t MD_to_JP2K_PDesc(MXF::RGBAEssenceDescriptor*, JP2K::PictureDescriptor&);
- Result_t MD_to_PCM_ADesc(MXF::WaveAudioDescriptor*, PCM::AudioDescriptor&);
Result_t MD_to_WriterInfo(MXF::Identification*, WriterInfo&);
Result_t MD_to_CryptoInfo(MXF::CryptographicContext*, WriterInfo&);
- Result_t MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor&, MXF::MPEG2VideoDescriptor*);
- Result_t JP2K_PDesc_to_MD(JP2K::PictureDescriptor&, MXF::RGBAEssenceDescriptor*);
- Result_t PCM_ADesc_to_MD(PCM::AudioDescriptor&, MXF::WaveAudioDescriptor*);
Result_t EncryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESEncContext*);
Result_t DecryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESDecContext*);
- // calculate size of encrypted essence with IV, CheckValue, and padding
- inline ui32_t
- calc_esv_length(ui32_t source_length, ui32_t plaintext_offset)
- {
- ui32_t ct_size = source_length - plaintext_offset;
- ui32_t diff = ct_size % CBC_BLOCK_SIZE;
- ui32_t block_size = ct_size - diff;
- return plaintext_offset + block_size + (CBC_BLOCK_SIZE * 3);
- }
-
//
class h__Reader
{
@@ -254,17 +169,22 @@ namespace ASDCP
public:
FileWriter m_File;
+ ui32_t m_HeaderSize;
OPAtomHeader m_HeaderPart;
Partition m_BodyPart;
OPAtomIndexFooter m_FooterPart;
ui64_t m_EssenceStart;
MaterialPackage* m_MaterialPackage;
+ Sequence* m_MPTCSequence;
TimecodeComponent* m_MPTimecode;
+ Sequence* m_MPClSequence;
SourceClip* m_MPClip; //! Material Package SourceClip for each essence stream
SourcePackage* m_FilePackage;
+ Sequence* m_FPTCSequence;
TimecodeComponent* m_FPTimecode;
+ Sequence* m_FPClSequence;
SourceClip* m_FPClip; //! File Package SourceClip for each essence stream
FileDescriptor* m_EssenceDescriptor;
@@ -279,6 +199,7 @@ namespace ASDCP
virtual ~h__Writer();
Result_t WriteMXFHeader(const std::string& PackageLabel, const UL& WrappingUL,
+ const std::string& TrackName, const UL& DataDefinition,
const MXF::Rational& EditRate,
ui32_t TCFrameRate, ui32_t BytesPerEditUnit = 0);
@@ -323,7 +244,7 @@ namespace ASDCP
inline const byte_t* Key() { return m_Key; }
inline const ui64_t Length() { return m_Length; }
- inline const ui64_t KLLength() { return m_BERLength + klv_key_size; }
+ inline const ui64_t KLLength() { return m_BERLength + SMPTE_UL_LENGTH; }
Result_t ReadKLFromFile(ASDCP::FileReader& Reader);
};
diff --git a/src/Dict.cpp b/src/Dict.cpp
index 384843e..0b71a8c 100755
--- a/src/Dict.cpp
+++ b/src/Dict.cpp
@@ -36,8 +36,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------------------
// singleton wrapper
-const byte_t mdd_key[] = { 0x06, 0x0e, 0x2b, 0x34 };
-
//
const ASDCP::MDDEntry&
ASDCP::Dict::Type(MDD_t type_id)
@@ -53,7 +51,7 @@ ASDCP::Dict::FindUL(const byte_t* ul_buf)
ui32_t k_idx = 8;
// must be a pointer to a SMPTE UL
- if ( ul_buf == 0 || memcmp(mdd_key, ul_buf, 4) != 0 )
+ if ( ul_buf == 0 || memcmp(SMPTE_UL_START, ul_buf, 4) != 0 )
return 0;
// advance to first matching element
diff --git a/src/Index.cpp b/src/Index.cpp
index 20db4da..0f243f8 100755
--- a/src/Index.cpp
+++ b/src/Index.cpp
@@ -168,7 +168,7 @@ ASDCP::MXF::IndexTableSegment::DeltaEntry::Unarchive(ASDCP::MemIOReader& Reader)
//
ASDCP::Result_t
-ASDCP::MXF::IndexTableSegment::DeltaEntry::Archive(ASDCP::MemIOWriter& Writer)
+ASDCP::MXF::IndexTableSegment::DeltaEntry::Archive(ASDCP::MemIOWriter& Writer) const
{
Result_t result = Writer.WriteUi8((ui8_t)PosTableIndex);
if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi8(Slice);
@@ -225,7 +225,7 @@ ASDCP::MXF::IndexTableSegment::IndexEntry::Unarchive(ASDCP::MemIOReader& Reader)
//
ASDCP::Result_t
-ASDCP::MXF::IndexTableSegment::IndexEntry::Archive(ASDCP::MemIOWriter& Writer)
+ASDCP::MXF::IndexTableSegment::IndexEntry::Archive(ASDCP::MemIOWriter& Writer) const
{
Result_t result = Writer.WriteUi8((ui8_t)TemporalOffset);
if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi8((ui8_t)KeyFrameOffset);
diff --git a/src/KLV.cpp b/src/KLV.cpp
index a0d2089..b31969e 100755
--- a/src/KLV.cpp
+++ b/src/KLV.cpp
@@ -131,7 +131,7 @@ ASDCP::KLVPacket::Dump(FILE* stream, bool show_hex)
}
else
{
- fprintf(stream, "*** Malformed packet ***\n");
+ fprintf(stream, "*** Malformed KLV packet ***\n");
}
}
diff --git a/src/KLV.h b/src/KLV.h
index 5fb0b3a..9eb230b 100755
--- a/src/KLV.h
+++ b/src/KLV.h
@@ -72,7 +72,8 @@ namespace ASDCP
public:
virtual ~IArchive() {}
virtual Result_t Unarchive(ASDCP::MemIOReader& Reader) = 0;
- virtual Result_t Archive(ASDCP::MemIOWriter& Writer) = 0;
+ virtual bool HasValue() const = 0;
+ virtual Result_t Archive(ASDCP::MemIOWriter& Writer) const = 0;
};
} // namespace ASDCP
@@ -87,7 +88,6 @@ namespace ASDCP
TagValue tag;
bool optional;
const char* name;
- const char* detail;
};
//
@@ -95,6 +95,7 @@ namespace ASDCP
{
public:
static const MDDEntry* FindUL(const byte_t*);
+ static const MDDEntry* FindName(const char*);
static const MDDEntry& Type(MDD_t type_id);
static bool Replace(const MDDEntry& Entry);
static void Restore(const byte_t* ul);
@@ -105,6 +106,7 @@ namespace ASDCP
}
private:
+ Dict* m_Dict;
ASDCP_NO_COPY_CONSTRUCT(Dict);
protected:
diff --git a/src/MDD.cpp b/src/MDD.cpp
index a365c1e..59e5f0b 100644
--- a/src/MDD.cpp
+++ b/src/MDD.cpp
@@ -33,1049 +33,800 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
static const ASDCP::MDDEntry s_MDD_Table[] = {
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x15, 0x01, 0x08, 0x01 }, {0}, true, "JPEG2000Essence", // 0
- "JPEG 2000 Compressed Picture Essence Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x15, 0x01, 0x05, 0x00 }, {0}, true, "MPEG2Essence", // 1
- "MPEG-2 Compressed Picture Essence Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
- 0x0d, 0x01, 0x03, 0x01, 0x16, 0x01, 0x01, 0x00 }, {0}, true, "WAVEssence", // 2
- "PCM Audio Essence Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x04, 0x01, 0x07,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7e, 0x01, 0x00 }, {0}, true, "EKLVPacket", // 3
- "Encrypted Essence Container Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x03, 0x01, 0x02, 0x10, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "KLVFill", // 4
- "KLV Filler packet" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x03, 0x01, 0x02, 0x01, 0x06, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_MajorVersion", // 5
- "Major Version number of MXF byte-level format (non-backwards compatible version number)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x03, 0x01, 0x02, 0x01, 0x07, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_MinorVersion", // 6
- "Minor Version number of MXF byte-level format (backwards compatible version number)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x03, 0x01, 0x02, 0x01, 0x09, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_KAGSize", // 7
- "Size of the KLV Alignment Grid (KAG) for this partition, in bytes" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x10, 0x10, 0x03, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_ThisPartition", // 8
- "Byte offset of the start of This Partition, relative to the start of the Header Partition" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x10, 0x10, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_PreviousPartition", // 9
- "Byte offset of the start of the Previous Partition, relative to the start of the Header Partition" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x10, 0x10, 0x05, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_FooterPartition", // 10
- "Byte offset of the start of the Footer Partition, relative to the start of the Header Partition" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x06, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_HeaderByteCount", // 11
- "Count of Bytes used for Header Metadata. This starts at the byte following the Partition pack and includes any trailing filler which is part of the Header Metadata." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x06, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_IndexByteCount", // 12
- "Count of Bytes used for Index Table Segments. This starts at the byte following the Header Metadata and includes any trailing filler which is part of the Index Table." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_IndexSID", // 13
- "Index Table Segment Identifier in this partition. The value 0 defines that there are no Index Table segments in this partition." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x08, 0x01, 0x02, 0x01, 0x03, 0x00, 0x00 }, {0}, false, "PartitionMetadata_BodyOffset", // 14
- "Byte offset of the first byte in the following Essence Container data relative to the start of the Essence Container identified by this BodySID" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_BodySID", // 15
- "Identifier of the Essence Container data found in this partition. The value 0 indicates there is no Essence Container data in this partition." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "PartitionMetadata_OperationalPattern", // 16
- "Universal Label of the Operational Pattern to which this file complies" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x02, 0x02, 0x10, 0x02, 0x01, 0x00, 0x00 }, {0}, false, "PartitionMetadata_EssenceContainers", // 17
- "The unordered batch of Universal Labels of Essence Containers used in or referenced by this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00 }, {0}, false, "OpenHeader", // 18
- "Open Header Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x03, 0x00 }, {0}, false, "OpenCompleteHeader", // 19
- "Open Complete Header Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00 }, {0}, false, "ClosedHeader", // 20
- "Closed Header Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x04, 0x00 }, {0}, false, "ClosedCompleteHeader", // 21
- "Closed Complete Header Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x01, 0x00 }, {0}, false, "OpenBodyPartition", // 22
- "Open Body Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00 }, {0}, false, "OpenCompleteBodyPartition", // 23
- "Open Complete Body Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00 }, {0}, false, "ClosedBodyPartition", // 24
- "Closed Body Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x04, 0x00 }, {0}, false, "ClosedCompleteBodyPartition", // 25
- "Closed Complete Body Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x00 }, {0}, false, "Footer", // 26
- "Footer Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x04, 0x04, 0x00 }, {0}, false, "CompleteFooter", // 27
- "Complete Footer Partition Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x05, 0x01, 0x00 }, {0}, false, "Primer", // 28
- "Primer Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x06, 0x01, 0x01, 0x07, 0x15, 0x00, 0x00, 0x00 }, {0}, false, "Primer_LocalTagEntryBatch", // 29
- "Local Tag Entry Batch" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "LocalTagEntryBatch_Primer_LocalTag", // 30
- "The value of the Local Tag" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x03, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "LocalTagEntryBatch_Primer_UID", // 31
- "The UID of which the local tag is an alias" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x3c, 0x0a}, false, "InterchangeObject_InstanceUID", // 32
- "Unique ID of this instance" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x08, 0x00, 0x00, 0x00 }, {0x01, 0x02}, true, "GenerationInterchangeObject_GenerationUID", // 33
- "Generation Instance" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "DefaultObject", // 34
- "" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x05, 0x30, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00 }, {0x3f, 0x0b}, false, "IndexTableSegmentBase_IndexEditRate", // 35
- "Edit Rate copied from the tracks of the Essence Container" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x07, 0x02, 0x01, 0x03, 0x01, 0x0a, 0x00, 0x00 }, {0x3f, 0x0c}, false, "IndexTableSegmentBase_IndexStartPosition", // 36
- "The first editable unit indexed by this Index Table segment measured in File Package Edit Units" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x07, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00 }, {0x3f, 0x0d}, false, "IndexTableSegmentBase_IndexDuration", // 37
- "Time duration of this table segment measured in Edit Unitsof the referenceg package" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x3f, 0x05}, false, "IndexTableSegmentBase_EditUnitByteCount", // 38
- "Byte count of each and every Edit Unit. A value of 0 defines the byte count of Edit Units is only given in the Index Entry Array" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 }, {0x3f, 0x06}, false, "IndexTableSegmentBase_IndexSID", // 39
- "Stream Identifier (SID) of Index Stream" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 }, {0x3f, 0x07}, false, "IndexTableSegmentBase_BodySID", // 40
- "Stream Identifier (SID) of Essence Container Stream" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0x3f, 0x08}, false, "IndexTableSegmentBase_SliceCount", // 41
- "Number of slices minus 1 (NSL)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x04, 0x04, 0x01, 0x07, 0x00, 0x00, 0x00 }, {0x3f, 0x0e}, true, "IndexTableSegmentBase_PosTableCount", // 42
- "Number of PosTable Entries minus 1 (NPE)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x10, 0x00, 0x00 }, {0}, false, "V10IndexTableSegment", // 43
- "A segment of an Index Table (v10)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x04, 0x04, 0x01, 0x06, 0x00, 0x00, 0x00 }, {0x3f, 0x09}, true, "V10IndexTableSegment_V10DeltaEntryArray", // 44
- "Map Elements onto Slices" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0}, false, "V10DeltaEntryArray_V10IndexTableSegment_Reorder", // 45
- "TRUE=Apply Temporal Reordering" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "V10DeltaEntryArray_V10IndexTableSegment_Slice", // 46
- "Slice number in IndexEntry" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "V10DeltaEntryArray_V10IndexTableSegment_ElementDelta", // 47
- "Delta from start of slice to this Element" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x04, 0x04, 0x02, 0x05, 0x00, 0x00, 0x00 }, {0x3f, 0x0a}, false, "V10IndexTableSegment_V10IndexEntryArray", // 48
- "Index from Edit Unit number to stream offset" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "V10IndexEntryArray_V10IndexTableSegment_TemporalOffset", // 49
- "Offset in edit units from Display Order to Coded Order" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00 }, {0}, false, "V10IndexEntryArray_V10IndexTableSegment_AnchorOffset", // 50
- "Offset in edit units to previous Anchor Frame. The value is zero if this is an anchor frame." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "V10IndexEntryArray_V10IndexTableSegment_Flags", // 51
- "Flags for this Edit Unit" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "V10IndexEntryArray_V10IndexTableSegment_StreamOffset", // 52
- "Offset in bytes from the first KLV element in this Edit Unit within the Essence Container" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x05, 0x00, 0x00, 0x00 }, {0}, false, "V10IndexEntryArray_V10IndexTableSegment_SliceOffsetArray", // 53
- "Array of offsets in bytes from the Stream Offset to the start of each slice." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x10, 0x01, 0x00 }, {0}, false, "IndexTableSegment", // 54
- "A segment of an Index Table" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x04, 0x04, 0x01, 0x06, 0x00, 0x00, 0x00 }, {0x3f, 0x09}, true, "IndexTableSegment_DeltaEntryArray", // 55
- "Map Elements onto Slices" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0}, false, "DeltaEntryArray_IndexTableSegment_PosTableIndex", // 56
- "Index into PosTable (or Apply Temporta Reordering if -1)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "DeltaEntryArray_IndexTableSegment_Slice", // 57
- "Slice number in IndexEntry" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "DeltaEntryArray_IndexTableSegment_ElementDelta", // 58
- "Delta from start of slice to this Element" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x04, 0x04, 0x02, 0x05, 0x00, 0x00, 0x00 }, {0x3f, 0x0a}, false, "IndexTableSegment_IndexEntryArray", // 59
- "Index from Edit Unit number to stream offset" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "IndexEntryArray_IndexTableSegment_TemporalOffset", // 60
- "Offset in edit units from Display Order to Coded Order" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00 }, {0}, false, "IndexEntryArray_IndexTableSegment_AnchorOffset", // 61
- "Offset in edit units to previous Anchor Frame. The value is zero if this is an anchor frame." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "IndexEntryArray_IndexTableSegment_Flags", // 62
- "Flags for this Edit Unit" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "IndexEntryArray_IndexTableSegment_StreamOffset", // 63
- "Offset in bytes from the first KLV element in this Edit Unit within the Essence Container" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x05, 0x00, 0x00, 0x00 }, {0}, false, "IndexEntryArray_IndexTableSegment_SliceOffsetArray", // 64
- "Array of offsets in bytes from the Stream Offset to the start of each slice." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x04, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00 }, {0}, false, "IndexEntryArray_IndexTableSegment_PosTableArray", // 65
- "Array of fractional position offsets from the start of the content package to the synchronized sample in the Content Package" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x11, 0x01, 0x00 }, {0}, false, "RandomIndexMetadata", // 66
- "Random Index Pack" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "PartitionArray_RandomIndexMetadata_BodySID", // 67
- "Stream ID of the Body in this partition" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x09, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "PartitionArray_RandomIndexMetadata_ByteOffset", // 68
- "Byte offset from file start (1st byte of the file which is numbered 0) to the 1st byte of the Partition Pack Key" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x06, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "RandomIndexMetadata_Length", // 69
- "Overall Length of this Pack including the Set Key and BER Length fields" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01,
- 0x0d, 0x01, 0x02, 0x01, 0x01, 0x11, 0x00, 0x00 }, {0}, false, "RandomIndexMetadataV10", // 70
- "Random Index Pack (v10)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2f, 0x00 }, {0}, false, "Preface", // 71
- "Preface Set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x10, 0x02, 0x04, 0x00, 0x00 }, {0x3b, 0x02}, false, "Preface_LastModifiedDate", // 72
- "Date &amp; time of the last modification of the file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x03, 0x01, 0x02, 0x01, 0x05, 0x00, 0x00, 0x00 }, {0x3b, 0x05}, false, "Preface_Version", // 73
- "The value shall be 258 (i.e. v1.2)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x03, 0x01, 0x02, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0x3b, 0x07}, true, "Preface_ObjectModelVersion", // 74
- "Simple integer version number of Object Model" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x01, 0x01, 0x04, 0x01, 0x08, 0x00, 0x00 }, {0x3b, 0x08}, true, "Preface_PrimaryPackage", // 75
- "The primary Package in this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x06, 0x04, 0x00, 0x00 }, {0x3b, 0x06}, false, "Preface_Identifications", // 76
- "Ordered array of strong references to Identification sets recording all modifications to the file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x02, 0x01, 0x00, 0x00 }, {0x3b, 0x03}, false, "Preface_ContentStorage", // 77
- "Strong reference to Content Storage object" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00 }, {0x3b, 0x09}, false, "Preface_OperationalPattern", // 78
- "Universal Label of the Operational Pattern which this file complies to (repeat of Partition Pack value)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x02, 0x02, 0x10, 0x02, 0x01, 0x00, 0x00 }, {0x3b, 0x0a}, false, "Preface_EssenceContainers", // 79
- "Unordered batch of ULs of Essence Containers used in or referenced by this file (repeat of Partition Pack value)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x02, 0x02, 0x10, 0x02, 0x02, 0x00, 0x00 }, {0x3b, 0x0b}, false, "Preface_DMSchemes", // 80
- "An unordered batch of Universal Labels of all the Descriptive Metadata schemes used in this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x30, 0x00 }, {0}, false, "Identification", // 81
- "Identification set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0x3c, 0x09}, false, "Identification_ThisGenerationUID", // 82
- "This Generation Identifier" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x02, 0x01, 0x00, 0x00 }, {0x3c, 0x01}, false, "Identification_CompanyName", // 83
- "Manufacturer of the equipment or application that created or modified the file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x03, 0x01, 0x00, 0x00 }, {0x3c, 0x02}, false, "Identification_ProductName", // 84
- "Name of the application which created or modified this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0x3c, 0x03}, true, "Identification_ProductVersion", // 85
- "Maj.min.tweak.build.rel version number of this application" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x05, 0x01, 0x00, 0x00 }, {0x3c, 0x04}, false, "Identification_VersionString", // 86
- "Human readable name of the application version" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x07, 0x00, 0x00, 0x00 }, {0x3c, 0x05}, false, "Identification_ProductUID", // 87
- "A unique identification for the product which created this file (defined by the manufacturer)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x10, 0x02, 0x03, 0x00, 0x00 }, {0x3c, 0x06}, false, "Identification_ModificationDate", // 88
- "Time &amp; date an application created or modified this file and created this Identification set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x0a, 0x00, 0x00, 0x00 }, {0x3c, 0x07}, true, "Identification_ToolkitVersion", // 89
- "Maj.min.tweak.build.rel version of software or hardware codec used" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x07, 0x01, 0x06, 0x01, 0x00, 0x00 }, {0x3c, 0x08}, true, "Identification_Platform", // 90
- "Human readable name of the operating system used." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00 }, {0}, false, "ContentStorage", // 91
- "Content Storage set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x05, 0x01, 0x00, 0x00 }, {0x19, 0x01}, false, "ContentStorage_Packages", // 92
- "Unordered batch of all packages used in this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x05, 0x02, 0x00, 0x00 }, {0x19, 0x02}, true, "ContentStorage_EssenceContainerData", // 93
- "Unordered batch of strong references to Essence Container Data sets used in this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x05, 0x00, 0x00, 0x00 }, {0x19, 0x01}, false, "ContentStorageKludge_V10Packages", // 94
- "Unordered batch of all packages used in this file" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x23, 0x00 }, {0}, false, "EssenceContainerData", // 95
- "Essence Container Data set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x06, 0x01, 0x00, 0x00, 0x00 }, {0x27, 0x01}, false, "EssenceContainerData_LinkedPackageUID", // 96
- "Identifier of the Package to which this set is linked as a UMID" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 }, {0x3f, 0x06}, true, "EssenceContainerData_IndexSID", // 97
- "ID of the Index Table for the Essence Container to which this set is linked" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 }, {0x3f, 0x07}, false, "EssenceContainerData_BodySID", // 98
- "ID of the Essence Container to which this set is linked" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00 }, {0x44, 0x01}, false, "GenericPackage_PackageUID", // 99
- "Unique Package Identifier as a UMID" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x03, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0x44, 0x02}, true, "GenericPackage_Name", // 100
- "Human readable package name" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x10, 0x01, 0x03, 0x00, 0x00 }, {0x44, 0x05}, false, "GenericPackage_PackageCreationDate", // 101
- "The date &amp; time of creation of this package" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x10, 0x02, 0x05, 0x00, 0x00 }, {0x44, 0x04}, false, "GenericPackage_PackageModifiedDate", // 102
- "The date &amp; time of last modification of this package" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x06, 0x05, 0x00, 0x00 }, {0x44, 0x03}, false, "GenericPackage_Tracks", // 103
- "Array of Unique IDs of Tracks" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x32, 0x00 }, {0}, false, "NetworkLocator", // 104
- "Network Locator set for location with a URL" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0x40, 0x01}, false, "NetworkLocator_URLString", // 105
- "A URL indicating where the essence may be found." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x33, 0x00 }, {0}, false, "TextLocator", // 106
- "Text Locator set for location with a human-readable text string" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x01, 0x04, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0x41, 0x01}, false, "TextLocator_LocatorName", // 107
- "Value of a human-readable locator text string for manual location of essence" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x01, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x48, 0x01}, false, "GenericTrack_TrackID", // 108
- "ID of the track in this package (for linking to a SourceTrackID in a segment)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00 }, {0x48, 0x04}, false, "GenericTrack_TrackNumber", // 109
- "Number used to link to the track in the Essence Container if it exists" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x01, 0x07, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0x48, 0x02}, true, "GenericTrack_TrackName", // 110
- "Human readable name of the track type" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x02, 0x04, 0x00, 0x00 }, {0x48, 0x03}, false, "GenericTrack_Sequence", // 111
- "Strong Reference to Sequence Set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3a, 0x00 }, {0}, false, "StaticTrack", // 112
- "" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3b, 0x00 }, {0}, false, "Track", // 113
- "Track" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x30, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 }, {0x4b, 0x01}, false, "Track_EditRate", // 114
- "Edit Rate of Track" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x03, 0x01, 0x03, 0x00, 0x00 }, {0x4b, 0x02}, false, "Track_Origin", // 115
- "An Offset used to resolved timeline references to this track. The start of the track has this timeline value measured in Edit Units." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x39, 0x00 }, {0}, false, "EventTrack", // 116
- "Event Track" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x30, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x49, 0x01}, false, "EventTrack_EventEditRate", // 117
- "Edit Rate of Event Track" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x07, 0x02, 0x01, 0x03, 0x01, 0x0b, 0x00, 0x00 }, {0x49, 0x02}, true, "EventTrack_EventOrigin", // 118
- "An Offset used to resolved timeline references to this event track. The start of the event track has this timeline value measured in Edit Units." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, {0x02, 0x01}, false, "StructuralComponent_DataDefinition", // 119
- "Data Definition - kind of data or metadata this structure refers to" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00 }, {0x02, 0x02}, false, "StructuralComponent_Duration", // 120
- "Duration (in units of edit rate)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x00 }, {0}, false, "Sequence", // 121
- "Sequence" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x06, 0x09, 0x00, 0x00 }, {0x10, 0x01}, false, "Sequence_StructuralComponents", // 122
- "Ordered array of strong references to Structural Components" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, 0x00 }, {0}, false, "TimecodeComponent", // 123
- "Timecode Component" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x04, 0x01, 0x01, 0x02, 0x06, 0x00, 0x00 }, {0x15, 0x02}, false, "TimecodeComponent_RoundedTimecodeBase", // 124
- "Integer frames per second" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x03, 0x01, 0x05, 0x00, 0x00 }, {0x15, 0x01}, false, "TimecodeComponent_StartTimecode", // 125
- "Starting timecode" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x04, 0x01, 0x01, 0x05, 0x00, 0x00, 0x00 }, {0x15, 0x03}, false, "TimecodeComponent_DropFrame", // 126
- "Drop frame flag" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0x00 }, {0}, false, "SourceClip", // 127
- "Source Clip" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x03, 0x01, 0x04, 0x00, 0x00 }, {0x12, 0x01}, false, "SourceClip_StartPosition", // 128
- "Offset into Essence measured in edit units of the track containing this segment" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00 }, {0x11, 0x01}, false, "SourceClip_SourcePackageID", // 129
- "ID of referenced Package as a UMID" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00 }, {0x11, 0x02}, false, "SourceClip_SourceTrackID", // 130
- "Track ID of the referenced Track within the referenced Package" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x41, 0x00 }, {0}, false, "DMSegment", // 131
- "Descriptive Metadata Segment" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x07, 0x02, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00 }, {0x06, 0x01}, false, "DMSegment_EventStartPosition", // 132
- "Offset into the descriptive metadata track in edit units" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x30, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00 }, {0x06, 0x02}, true, "DMSegment_EventComment", // 133
- "Description of the Descriptive Metadata Framework" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x07, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00 }, {0x61, 0x02}, false, "DMSegment_TrackIDs", // 134
- "An unordered list of track ID values that identify the tracks in this Package to which this DM Framework refers (if omitted, refers to all essence tracks)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x06, 0x01, 0x01, 0x04, 0x02, 0x0c, 0x00, 0x00 }, {0x61, 0x01}, false, "DMSegment_DMFramework", // 135
- "Strong Reference to the Descriptive Metadata Framework" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x45, 0x00 }, {0}, false, "DMSourceClip", // 136
- "Descriptive Metadata SourceClip" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x01, 0x07, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00 }, {0x61, 0x03}, true, "DMSourceClip_DMSourceClipTrackIDs", // 137
- "An unordered list of track ID values that identify the tracks in this Package to which the referenced Descriptive Metadata refers (if omitted, refers to all essence tracks)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x36, 0x00 }, {0}, false, "MaterialPackage", // 138
- "Material Package set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x37, 0x00 }, {0}, false, "SourcePackage", // 139
- "File Package set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x02, 0x03, 0x00, 0x00 }, {0x47, 0x01}, false, "SourcePackage_Descriptor", // 140
- "Strong Reference to the Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x06, 0x03, 0x00, 0x00 }, {0x2f, 0x01}, true, "GenericDescriptor_Locators", // 141
- "Ordered array of strong references to Locator sets" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x06, 0x10, 0x00, 0x00 }, {0}, true, "GenericDescriptor_SubDescriptors", // 142
- "Ordered array of strong references to sub descriptor sets" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x25, 0x00 }, {0}, false, "FileDescriptor", // 143
- "File Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x06, 0x01, 0x01, 0x03, 0x05, 0x00, 0x00, 0x00 }, {0x30, 0x06}, true, "FileDescriptor_LinkedTrackID", // 144
- "Link to (i.e. value of) the Track ID of the Track in this Package to which the Descriptor applies" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x06, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x30, 0x01}, false, "FileDescriptor_SampleRate", // 145
- "The field or frame rate of the Essence Container (not the essence sampling clock rate)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x06, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x30, 0x02}, true, "FileDescriptor_ContainerDuration", // 146
- "Duration of Essence Container (measured in Edit Units)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x01, 0x02, 0x00, 0x00 }, {0x30, 0x04}, false, "FileDescriptor_EssenceContainer", // 147
- "The UL identifying the Essence Container described by this Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x06, 0x01, 0x01, 0x04, 0x01, 0x03, 0x00, 0x00 }, {0x30, 0x05}, true, "FileDescriptor_Codec", // 148
- "UL to identify a codec compatible with this Essence Container" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x27, 0x00 }, {0}, false, "GenericPictureEssenceDescriptor", // 149
- "Defines the Picture Essence Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x05, 0x01, 0x13, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x15}, true, "GenericPictureEssenceDescriptor_SignalStandard", // 150
- "Underlying signal standard" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x03, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0x32, 0x0c}, false, "GenericPictureEssenceDescriptor_FrameLayout", // 151
- "Interlace or Progressive layout" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00 }, {0x32, 0x03}, false, "GenericPictureEssenceDescriptor_StoredWidth", // 152
- "Horizontal Size of active picture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0x32, 0x02}, false, "GenericPictureEssenceDescriptor_StoredHeight", // 153
- "Vertical Field Size of active picture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x03, 0x02, 0x08, 0x00, 0x00, 0x00 }, {0x32, 0x16}, true, "GenericPictureEssenceDescriptor_StoredF2Offset", // 154
- "Topness Adjustment for stored picture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x08, 0x00, 0x00, 0x00 }, {0x32, 0x05}, true, "GenericPictureEssenceDescriptor_SampledWidth", // 155
- "Sampled width supplied to codec" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x07, 0x00, 0x00, 0x00 }, {0x32, 0x04}, true, "GenericPictureEssenceDescriptor_SampledHeight", // 156
- "Sampled height supplied to codec" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x09, 0x00, 0x00, 0x00 }, {0x32, 0x06}, true, "GenericPictureEssenceDescriptor_SampledXOffset", // 157
- "Offset from sampled to stored width" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x0a, 0x00, 0x00, 0x00 }, {0x32, 0x07}, true, "GenericPictureEssenceDescriptor_SampledYOffset", // 158
- "Offset from sampled to stored" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x0b, 0x00, 0x00, 0x00 }, {0x32, 0x08}, true, "GenericPictureEssenceDescriptor_DisplayHeight", // 159
- "Displayed Height placed in Production Aperture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x0c, 0x00, 0x00, 0x00 }, {0x32, 0x09}, true, "GenericPictureEssenceDescriptor_DisplayWidth", // 160
- "Displayed Width placed in Production Aperture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x0d, 0x00, 0x00, 0x00 }, {0x32, 0x0a}, true, "GenericPictureEssenceDescriptor_DisplayXOffset", // 161
- "The horizontal offset from the (in pixels) of the picture as displayed" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x0e, 0x00, 0x00, 0x00 }, {0x32, 0x0b}, true, "GenericPictureEssenceDescriptor_DisplayYOffset", // 162
- "The vertical offset (in pixels) of the picture as displayed" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x03, 0x02, 0x07, 0x00, 0x00, 0x00 }, {0x32, 0x17}, true, "GenericPictureEssenceDescriptor_DisplayF2Offset", // 163
- "Topness Adjustment for Displayed Picture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0x32, 0x0e}, false, "GenericPictureEssenceDescriptor_AspectRatio", // 164
- "Specifies the horizontal to vertical aspect ratio of the whole image as it is to be presented to avoid geometric distortion (and hence including any black edges)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x03, 0x02, 0x09, 0x00, 0x00, 0x00 }, {0x32, 0x18}, true, "GenericPictureEssenceDescriptor_ActiveFormatDescriptor", // 165
- "Specifies the intended framing of the content within the displayed image" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00 }, {0x32, 0x0d}, false, "GenericPictureEssenceDescriptor_VideoLineMap", // 166
- "First active line in each field" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x05, 0x20, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x0f}, true, "GenericPictureEssenceDescriptor_AlphaTransparency", // 167
- "Is Alpha Inverted" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00 }, {0x32, 0x10}, true, "GenericPictureEssenceDescriptor_Gamma", // 168
- "Registered UL of known Gamma" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x18, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x11}, true, "GenericPictureEssenceDescriptor_ImageAlignmentOffset", // 169
- "Byte Boundary alignment required for Low Level Essence Storage" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x18, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x13}, true, "GenericPictureEssenceDescriptor_ImageStartOffset", // 170
- "Unused bytes before start of stored data" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x18, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x14}, true, "GenericPictureEssenceDescriptor_ImageEndOffset", // 171
- "Unused bytes before start of stored data" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x03, 0x01, 0x06, 0x00, 0x00, 0x00 }, {0x32, 0x12}, true, "GenericPictureEssenceDescriptor_FieldDominance", // 172
- "The number of the field which is considered temporally to come first" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x32, 0x01}, false, "GenericPictureEssenceDescriptor_PictureEssenceCoding", // 173
- "UL identifying the Picture Compression Scheme" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x28, 0x00 }, {0}, false, "CDCIEssenceDescriptor", // 174
- "Defines the CDCI Picture Essence Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x03, 0x0a, 0x00, 0x00, 0x00 }, {0x33, 0x01}, false, "CDCIEssenceDescriptor_ComponentDepth", // 175
- "Number of active bits per sample (e.g. 8, 10, 16)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x05, 0x00, 0x00, 0x00 }, {0x33, 0x02}, false, "CDCIEssenceDescriptor_HorizontalSubsampling", // 176
- "Specifies the H colour subsampling" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x01, 0x10, 0x00, 0x00, 0x00 }, {0x33, 0x08}, true, "CDCIEssenceDescriptor_VerticalSubsampling", // 177
- "Specifies the V colour subsampling" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x01, 0x06, 0x00, 0x00, 0x00 }, {0x33, 0x03}, true, "CDCIEssenceDescriptor_ColorSiting", // 178
- "Enumerated value describing the color siting" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x03, 0x01, 0x02, 0x01, 0x0a, 0x00, 0x00, 0x00 }, {0x33, 0x0b}, true, "CDCIEssenceDescriptor_ReversedByteOrder", // 179
- "a FALSE value denotes Chroma followed by Luma pexels according to ITU Rec. 601" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00 }, {0x33, 0x07}, true, "CDCIEssenceDescriptor_PaddingBits", // 180
- "Bits to round up each pixel to stored size" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x03, 0x07, 0x00, 0x00, 0x00 }, {0x33, 0x09}, true, "CDCIEssenceDescriptor_AlphaSampleDepth", // 181
- "Number of bits per alpha sample" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x03, 0x03, 0x00, 0x00, 0x00 }, {0x33, 0x04}, true, "CDCIEssenceDescriptor_BlackRefLevel", // 182
- "Black refernece level e.g. 16 or 64 (8 or 10-bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x05, 0x03, 0x04, 0x00, 0x00, 0x00 }, {0x33, 0x05}, true, "CDCIEssenceDescriptor_WhiteReflevel", // 183
- "White reference level e.g. 235 or 943 (8 or 10 bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x03, 0x05, 0x00, 0x00, 0x00 }, {0x33, 0x06}, true, "CDCIEssenceDescriptor_ColorRange", // 184
- "Color range e.g. 225 or 897 (8 or 10 bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x29, 0x00 }, {0}, false, "RGBAEssenceDescriptor", // 185
- "Defines the RGBA Picture Essence Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x05, 0x03, 0x0b, 0x00, 0x00, 0x00 }, {0x34, 0x06}, true, "RGBAEssenceDescriptor_ComponentMaxRef", // 186
- "Maximum value for RGB components, e.g. 235 or 940 (8 or 10 bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x05, 0x03, 0x0c, 0x00, 0x00, 0x00 }, {0x34, 0x07}, true, "RGBAEssenceDescriptor_ComponentMinRef", // 187
- "Minimum value for RGB components, e.g. 16 or 64 (8 or 10 bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x05, 0x03, 0x0d, 0x00, 0x00, 0x00 }, {0x34, 0x08}, true, "RGBAEssenceDescriptor_AlphaMaxRef", // 188
- "Maximum value for alpha component, e.g. 235 or 940 (8 or 10 bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x05, 0x03, 0x0e, 0x00, 0x00, 0x00 }, {0x34, 0x09}, true, "RGBAEssenceDescriptor_AlphaMinRef", // 189
- "Minimum value for alpha component, e.g. 16 or 64 (8 or 10 bits)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00 }, {0x34, 0x05}, true, "RGBAEssenceDescriptor_ScanningDirection", // 190
- "Enumerated Scanning Direction" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x03, 0x06, 0x00, 0x00, 0x00 }, {0x34, 0x01}, false, "RGBAEssenceDescriptor_PixelLayout", // 191
- "Pixel Layout" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x03, 0x08, 0x00, 0x00, 0x00 }, {0x34, 0x03}, true, "RGBAEssenceDescriptor_Palette", // 192
- "Palette" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x01, 0x05, 0x03, 0x09, 0x00, 0x00, 0x00 }, {0x34, 0x04}, true, "RGBAEssenceDescriptor_PaletteLayout", // 193
- "Palette Layout" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x42, 0x00 }, {0}, false, "GenericSoundEssenceDescriptor", // 194
- "Defines the Sound Essence Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00 }, {0x3d, 0x03}, false, "GenericSoundEssenceDescriptor_AudioSamplingRate", // 195
- "Sampling rate of the audio essence" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x02, 0x03, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0x3d, 0x02}, false, "GenericSoundEssenceDescriptor_Locked", // 196
- "Boolean indicating that the Number of samples per frame is locked or unlocked (non-0 = locked)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00 }, {0x3d, 0x04}, true, "GenericSoundEssenceDescriptor_AudioRefLevel", // 197
- "Audio reference level which gives the number of dBm for 0VU" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0x3d, 0x05}, true, "GenericSoundEssenceDescriptor_ElectroSpatialFormulation", // 198
- "E.g. mono, dual mono, stereo, A,B etc (enum)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00 }, {0x3d, 0x07}, false, "GenericSoundEssenceDescriptor_ChannelCount", // 199
- "Number of Sound Channels" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x04, 0x02, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00 }, {0x3d, 0x01}, false, "GenericSoundEssenceDescriptor_QuantizationBits", // 200
- "Number of quantization bits" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0x3d, 0x0c}, true, "GenericSoundEssenceDescriptor_DialNorm", // 201
- "Gain to be applied to normalise perceived loudness of the clip, defined by ATSC A/53 (1dB per step)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02,
- 0x04, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x3d, 0x06}, false, "GenericSoundEssenceDescriptor_SoundEssenceCompression", // 202
- "UL identifying the Sound Compression Scheme" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x43, 0x00 }, {0}, false, "GenericDataEssenceDescriptor", // 203
- "Defines the Data Essence Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0x3e, 0x01}, false, "GenericDataEssenceDescriptor_DataEssenceCoding", // 204
- "Specifies the data essence coding type" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x00 }, {0}, false, "MultipleDescriptor", // 205
- "Defines the Multiple Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04,
- 0x06, 0x01, 0x01, 0x04, 0x06, 0x0b, 0x00, 0x00 }, {0x3f, 0x01}, false, "MultipleDescriptor_SubDescriptorUIDs", // 206
- "Unordered array of strong references to File Descriptor sets (1 per interleaved item within the Essence Container)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x51, 0x00 }, {0}, false, "MPEG2VideoDescriptor", // 207
- "Defines the MPEG2 Picture Essence Descriptor set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x02, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_SingleSequence", // 208
- "TRUE if the essence consists of a single MPEG sequence. False if there are a number of sequences. This flag implies that the sequence header information is not varying in the essence stream." },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x03, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_ConstantBFrames", // 209
- "TRUE if the number of B frames is always constant" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x04, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_CodedContentType", // 210
- "0= &quot;Unknown&quot;,1= &quot;Progressive&quot;, 2= &quot;Interlaced&quot;, 3= &quot;Mixed&quot;: an enumerated value which tells if the underlying content which was MPEG coded was of a known type" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x05, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_LowDelay", // 211
- "TRUE if low delay mode was used in the sequence" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x06, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_ClosedGOP", // 212
- "TRUE if closed_gop is set in all GOP Headers, per 13818-1 IBP descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x07, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_IdenticalGOP", // 213
- "TRUE if every GOP in the sequence is constructed the same, per 13818-1 IBP descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x08, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_MaxGOP", // 214
- "Specifies the maximum occurring spacing between I frames, per 13818-1 IBP descriptor. A value of 0 or the absence of this property implies no limit to the maximum GOP" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x09, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_BPictureCount", // 215
- "Specifies the maximum number of B pictures between P or I frames, equivalent to 13818-2 annex D (M-1)" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x0b, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_BitRate", // 216
- "Maximum bit rate of MPEG video elementary stream in bit/s as defined in ISO-13818-2 bit_rate property" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x01, 0x06, 0x02, 0x01, 0x0a, 0x00, 0x00 }, {0}, true, "MPEG2VideoDescriptor_ProfileAndLevel", // 217
- "Specifies the MPEG-2 video profile and level. The value is taken directly from the profile_and_level_indication in the MPEG-2 sequence header extension. For main profile @ main level, the value is 0x48. For 4:2:2 profile @ main level, the value is 0x85" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x48, 0x00 }, {0}, false, "WaveAudioDescriptor", // 218
- "Defines the Wave Audio Essence Descriptor Set" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0x3d, 0x0a}, false, "WaveAudioDescriptor_BlockAlign", // 219
- "Sample Block alignment" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00 }, {0x3d, 0x0b}, true, "WaveAudioDescriptor_SequenceOffset", // 220
- "Zero-based ordinal frame number of first essence data within five-frame sequence" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x03, 0x03, 0x05, 0x00, 0x00, 0x00 }, {0x3d, 0x09}, false, "WaveAudioDescriptor_AvgBps", // 221
- "Average Bytes per second" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05,
- 0x04, 0x02, 0x03, 0x01, 0x0e, 0x00, 0x00, 0x00 }, {0x3d, 0x0e}, true, "WaveAudioDescriptor_PeakEnvelope", // 222
- "Peak Envelope from &lt;LEVL> Chunk" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x5a, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor", // 223
- "JPEG 2000 Picture Sub Descriptor" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_Rsize", // 224
- "An enumerated value that defines the decoder capabilities" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_Xsize", // 225
- "Width of the reference grid" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_Ysize", // 226
- "Height of the reference grid" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x04, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_XOsize", // 227
- "Horizontal offset from the origin of the reference grid to the left side of the image area" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x05, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_YOsize", // 228
- "Vertical offset from the origin of the reference grid to the top side of the image area" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x06, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_XTsize", // 229
- "Width of one reference tile with respect to the reference grid" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x07, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_YTsize", // 230
- "Height of one reference tile with respect to the reference grid" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x08, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_XTOsize", // 231
- "Horizontal offset from the origin of the reference grid to the left side of the first tile" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x09, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_YTOsize", // 232
- "Vertical offset from the origin of the reference grid to the top side of the first tile" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x0a, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_Csize", // 233
- "The number of components in the picture" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x0b, 0x00, 0x00, 0x00 }, {0}, false, "JPEG2000PictureSubDescriptor_PictureComponentSizing", // 234
- "Array of picture components" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x0c, 0x00, 0x00, 0x00 }, {0}, true, "JPEG2000PictureSubDescriptor_CodingStyleDefault", // 235
- "Default coding style for all components. Use this value only if static for all pictures in the Essence Container" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a,
- 0x04, 0x01, 0x06, 0x03, 0x0d, 0x00, 0x00, 0x00 }, {0}, true, "JPEG2000PictureSubDescriptor_QuantizationDefault", // 236
- "Default quantization style for all components. Use this value only if static for all pictures in the Essence Container" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "DM_Framework", // 237
- "Superclass for all concrete DM Frameworks" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "DM_Set", // 238
- "Superclass for all concrete DM Frameworks" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x0b, 0x01, 0x00 }, {0}, false, "EncryptedContainerLabel", // 239
- "DCP-Crypto Encrypted Essence Container, frame-wrapped" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x0d, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01, 0x00 }, {0}, false, "CryptographicFrameworkLabel", // 240
- "DCP-Crypto Framework" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x04, 0x01, 0x02, 0x01, 0x00, 0x00 }, {0}, false, "CryptographicFramework", // 241
- "DCP-Encryption Cryptographic Framework" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x01, 0x01, 0x04, 0x02, 0x0d, 0x00, 0x00 }, {0}, false, "CryptographicFramework_ContextSR", // 242
- "Strong Reference to the associated Cryptographic Context" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01,
- 0x0d, 0x01, 0x04, 0x01, 0x02, 0x02, 0x00, 0x00 }, {0}, false, "CryptographicContext", // 243
- "cryptographic information that applies to encrypted essence tracks as a whole" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x01, 0x01, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "CryptographicContext_ContextID", // 244
- "Persistent Unique identifier for the context" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "CryptographicContext_SourceEssenceContainer", // 245
- "Essence Container Label for the source essence, prior to encryption" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x02, 0x09, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "CryptographicContext_CipherAlgorithm", // 246
- "Algorithm used for Triplet encryption, if any" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x02, 0x09, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "CryptographicContext_MICAlgorithm", // 247
- "Algorithm used for Triplet integrity, if any" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x02, 0x09, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00 }, {0}, false, "CryptographicContext_CryptographicKeyID", // 248
- "Unique identifier for the cryptographic key" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x04, 0x01, 0x07,
- 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7e, 0x01, 0x00 }, {0}, false, "EncryptedTriplet", // 249
- "encrypted data and cryptographic information specific to the Triplet" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x01, 0x01, 0x06, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "EncryptedTriplet_ContextIDLink", // 250
- "Persistent Unique identifier for the context.associated with this Triplet" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x09, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "EncryptedTriplet_PlaintextOffset", // 251
- "Offset within the source at which encryption starts" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x01, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "EncryptedTriplet_SourceKey", // 252
- "Key of the source Triplet" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x04, 0x06, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00 }, {0}, false, "EncryptedTriplet_SourceLength", // 253
- "Length of the value of the source Triplet" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x02, 0x09, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "EncryptedTriplet_EncryptedSourceValue", // 254
- "Encrypted Source value starting at Plaintext Offset" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x01, 0x01, 0x06, 0x02, 0x00, 0x00, 0x00 }, {0}, true, "EncryptedTriplet_TrackFileID", // 255
- "The identifier of the AS-DCP Track File containing this Triplet" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x06, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00 }, {0}, true, "EncryptedTriplet_SequenceNumber", // 256
- "Sequence number of this Triplet within the Track File" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09,
- 0x02, 0x09, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00 }, {0}, true, "EncryptedTriplet_MIC", // 257
- "Keyed HMAC" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x02, 0x09, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "CipherAlgorithmAES128CBC", // 258
- "Identifes the use of AES128 CBC mode cipher algorithm" },
-
- { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07,
- 0x02, 0x09, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "HMACAlgorithmSHA1128", // 259
- "Identifes the use of SHA1 128 bit HMAC algorithm" },
-
+ { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "MICAlgorithm_NONE" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x02, // 1
+ 0x0d, 0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00 },
+ {0}, false, "OPAtom" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, // 2
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00 },
+ {0}, false, "OP1a" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x03, // 3
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7f, 0x01, 0x00 },
+ {0}, false, "GCMulti" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, // 4
+ 0x01, 0x03, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "PictureDataDef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, // 5
+ 0x01, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00 },
+ {0}, false, "SoundDataDef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, // 6
+ 0x01, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "TimecodeDataDef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, // 7
+ 0x01, 0x03, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00 },
+ {0}, false, "DescriptiveMetaDataDef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, // 8
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x06, 0x01, 0x00 },
+ {0}, false, "WAVWrapping" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x02, // 9
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x04, 0x60, 0x01 },
+ {0}, false, "MPEG2_VESWrapping" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 10
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x0c, 0x01, 0x00 },
+ {0}, false, "JPEG_2000Wrapping" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01, // 11
+ 0x0d, 0x01, 0x03, 0x01, 0x15, 0x01, 0x08, 0x01 },
+ {0}, false, "JPEG2000Essence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01, // 12
+ 0x0d, 0x01, 0x03, 0x01, 0x15, 0x01, 0x05, 0x00 },
+ {0}, false, "MPEG2Essence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x04, 0x01, 0x01, // 13
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7e, 0x01, 0x00 },
+ {0}, false, "CryptEssence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01, // 14
+ 0x0d, 0x01, 0x03, 0x01, 0x16, 0x01, 0x01, 0x00 },
+ {0}, false, "WAVEssence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x09, // 15
+ 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01 },
+ {0}, false, "JP2KEssenceCompression" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 16
+ 0x02, 0x09, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "CipherAlgorithm_AES" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 17
+ 0x02, 0x09, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "MICAlgorithm_HMAC_SHA1" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 18
+ 0x03, 0x01, 0x02, 0x10, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "KLVFill" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 19
+ 0x03, 0x01, 0x02, 0x01, 0x06, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_MajorVersion" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 20
+ 0x03, 0x01, 0x02, 0x01, 0x07, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_MinorVersion" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 21
+ 0x03, 0x01, 0x02, 0x01, 0x09, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_KAGSize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 22
+ 0x06, 0x10, 0x10, 0x03, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_ThisPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 23
+ 0x06, 0x10, 0x10, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_PreviousPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 24
+ 0x06, 0x10, 0x10, 0x05, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_FooterPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 25
+ 0x04, 0x06, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_HeaderByteCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 26
+ 0x04, 0x06, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_IndexByteCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 27
+ 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_IndexSID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 28
+ 0x06, 0x08, 0x01, 0x02, 0x01, 0x03, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_BodyOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 29
+ 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_BodySID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 30
+ 0x01, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_OperationalPattern" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 31
+ 0x01, 0x02, 0x02, 0x10, 0x02, 0x01, 0x00, 0x00 },
+ {0}, false, "PartitionMetadata_EssenceContainers" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 32
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00 },
+ {0}, false, "OpenHeader" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 33
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x03, 0x00 },
+ {0}, false, "OpenCompleteHeader" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 34
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00 },
+ {0}, false, "ClosedHeader" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 35
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x04, 0x00 },
+ {0}, false, "ClosedCompleteHeader" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 36
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x01, 0x00 },
+ {0}, false, "OpenBodyPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 37
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00 },
+ {0}, false, "OpenCompleteBodyPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 38
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00 },
+ {0}, false, "ClosedBodyPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 39
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x03, 0x04, 0x00 },
+ {0}, false, "ClosedCompleteBodyPartition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 40
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x00 },
+ {0}, false, "Footer" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 41
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x04, 0x04, 0x00 },
+ {0}, false, "CompleteFooter" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 42
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x05, 0x01, 0x00 },
+ {0}, false, "Primer" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 43
+ 0x06, 0x01, 0x01, 0x07, 0x15, 0x00, 0x00, 0x00 },
+ {0}, false, "Primer_LocalTagEntryBatch" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 44
+ 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "LocalTagEntryBatch_Primer_LocalTag" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 45
+ 0x01, 0x03, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "LocalTagEntryBatch_Primer_UID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 46
+ 0x01, 0x01, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x3c, 0x0a}, false, "InterchangeObject_InstanceUID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 47
+ 0x05, 0x20, 0x07, 0x01, 0x08, 0x00, 0x00, 0x00 },
+ {0x01, 0x02}, true, "GenerationInterchangeObject_GenerationUID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 48
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "DefaultObject" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 49
+ 0x05, 0x30, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ {0x3f, 0x0b}, false, "IndexTableSegmentBase_IndexEditRate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 50
+ 0x07, 0x02, 0x01, 0x03, 0x01, 0x0a, 0x00, 0x00 },
+ {0x3f, 0x0c}, false, "IndexTableSegmentBase_IndexStartPosition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 51
+ 0x07, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00 },
+ {0x3f, 0x0d}, false, "IndexTableSegmentBase_IndexDuration" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 52
+ 0x04, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0x3f, 0x05}, false, "IndexTableSegmentBase_EditUnitByteCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 53
+ 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 },
+ {0x3f, 0x06}, false, "IndexTableSegmentBase_IndexSID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 54
+ 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ {0x3f, 0x07}, false, "IndexTableSegmentBase_BodySID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 55
+ 0x04, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0x3f, 0x08}, false, "IndexTableSegmentBase_SliceCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 56
+ 0x04, 0x04, 0x04, 0x01, 0x07, 0x00, 0x00, 0x00 },
+ {0x3f, 0x0e}, true, "IndexTableSegmentBase_PosTableCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 57
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x10, 0x01, 0x00 },
+ {0}, false, "IndexTableSegment" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 58
+ 0x04, 0x04, 0x04, 0x01, 0x06, 0x00, 0x00, 0x00 },
+ {0x3f, 0x09}, true, "IndexTableSegment_DeltaEntryArray" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 59
+ 0x04, 0x04, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00 },
+ {0}, false, "DeltaEntryArray_IndexTableSegment_PosTableIndex" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 60
+ 0x04, 0x04, 0x04, 0x01, 0x02, 0x00, 0x00, 0x00 },
+ {0}, false, "DeltaEntryArray_IndexTableSegment_Slice" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 61
+ 0x04, 0x04, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "DeltaEntryArray_IndexTableSegment_ElementDelta" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 62
+ 0x04, 0x04, 0x04, 0x02, 0x05, 0x00, 0x00, 0x00 },
+ {0x3f, 0x0a}, false, "IndexTableSegment_IndexEntryArray" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 63
+ 0x04, 0x04, 0x04, 0x02, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "IndexEntryArray_IndexTableSegment_TemporalOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 64
+ 0x04, 0x04, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00 },
+ {0}, false, "IndexEntryArray_IndexTableSegment_AnchorOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 65
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00 },
+ {0}, false, "IndexEntryArray_IndexTableSegment_Flags" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 66
+ 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "IndexEntryArray_IndexTableSegment_StreamOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 67
+ 0x04, 0x04, 0x04, 0x01, 0x05, 0x00, 0x00, 0x00 },
+ {0}, false, "IndexEntryArray_IndexTableSegment_SliceOffsetArray" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 68
+ 0x04, 0x04, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00 },
+ {0}, false, "IndexEntryArray_IndexTableSegment_PosTableArray" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 69
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x11, 0x01, 0x00 },
+ {0}, false, "RandomIndexMetadata" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 70
+ 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionArray_RandomIndexMetadata_BodySID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 71
+ 0x06, 0x09, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "PartitionArray_RandomIndexMetadata_ByteOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 72
+ 0x04, 0x06, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "RandomIndexMetadata_Length" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, // 73
+ 0x0d, 0x01, 0x02, 0x01, 0x01, 0x11, 0x00, 0x00 },
+ {0}, false, "RandomIndexMetadataV10" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 74
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2f, 0x00 },
+ {0}, false, "Preface" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 75
+ 0x07, 0x02, 0x01, 0x10, 0x02, 0x04, 0x00, 0x00 },
+ {0x3b, 0x02}, false, "Preface_LastModifiedDate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 76
+ 0x03, 0x01, 0x02, 0x01, 0x05, 0x00, 0x00, 0x00 },
+ {0x3b, 0x05}, false, "Preface_Version" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 77
+ 0x03, 0x01, 0x02, 0x01, 0x04, 0x00, 0x00, 0x00 },
+ {0x3b, 0x07}, true, "Preface_ObjectModelVersion" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 78
+ 0x06, 0x01, 0x01, 0x04, 0x01, 0x08, 0x00, 0x00 },
+ {0x3b, 0x08}, true, "Preface_PrimaryPackage" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 79
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x04, 0x00, 0x00 },
+ {0x3b, 0x06}, false, "Preface_Identifications" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 80
+ 0x06, 0x01, 0x01, 0x04, 0x02, 0x01, 0x00, 0x00 },
+ {0x3b, 0x03}, false, "Preface_ContentStorage" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 81
+ 0x01, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00 },
+ {0x3b, 0x09}, false, "Preface_OperationalPattern" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 82
+ 0x01, 0x02, 0x02, 0x10, 0x02, 0x01, 0x00, 0x00 },
+ {0x3b, 0x0a}, false, "Preface_EssenceContainers" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 83
+ 0x01, 0x02, 0x02, 0x10, 0x02, 0x02, 0x00, 0x00 },
+ {0x3b, 0x0b}, false, "Preface_DMSchemes" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 84
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x30, 0x00 },
+ {0}, false, "Identification" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 85
+ 0x05, 0x20, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0x3c, 0x09}, false, "Identification_ThisGenerationUID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 86
+ 0x05, 0x20, 0x07, 0x01, 0x02, 0x01, 0x00, 0x00 },
+ {0x3c, 0x01}, false, "Identification_CompanyName" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 87
+ 0x05, 0x20, 0x07, 0x01, 0x03, 0x01, 0x00, 0x00 },
+ {0x3c, 0x02}, false, "Identification_ProductName" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 88
+ 0x05, 0x20, 0x07, 0x01, 0x04, 0x00, 0x00, 0x00 },
+ {0x3c, 0x03}, true, "Identification_ProductVersion" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 89
+ 0x05, 0x20, 0x07, 0x01, 0x05, 0x01, 0x00, 0x00 },
+ {0x3c, 0x04}, false, "Identification_VersionString" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 90
+ 0x05, 0x20, 0x07, 0x01, 0x07, 0x00, 0x00, 0x00 },
+ {0x3c, 0x05}, false, "Identification_ProductUID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 91
+ 0x07, 0x02, 0x01, 0x10, 0x02, 0x03, 0x00, 0x00 },
+ {0x3c, 0x06}, false, "Identification_ModificationDate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 92
+ 0x05, 0x20, 0x07, 0x01, 0x0a, 0x00, 0x00, 0x00 },
+ {0x3c, 0x07}, true, "Identification_ToolkitVersion" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 93
+ 0x05, 0x20, 0x07, 0x01, 0x06, 0x01, 0x00, 0x00 },
+ {0x3c, 0x08}, true, "Identification_Platform" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 94
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00 },
+ {0}, false, "ContentStorage" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 95
+ 0x06, 0x01, 0x01, 0x04, 0x05, 0x01, 0x00, 0x00 },
+ {0x19, 0x01}, false, "ContentStorage_Packages" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 96
+ 0x06, 0x01, 0x01, 0x04, 0x05, 0x02, 0x00, 0x00 },
+ {0x19, 0x02}, true, "ContentStorage_EssenceContainerData" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 97
+ 0x06, 0x01, 0x01, 0x04, 0x05, 0x00, 0x00, 0x00 },
+ {0x19, 0x01}, false, "ContentStorageKludge_V10Packages" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 98
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x23, 0x00 },
+ {0}, false, "EssenceContainerData" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 99
+ 0x06, 0x01, 0x01, 0x06, 0x01, 0x00, 0x00, 0x00 },
+ {0x27, 0x01}, false, "EssenceContainerData_LinkedPackageUID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 100
+ 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 },
+ {0x3f, 0x06}, true, "EssenceContainerData_IndexSID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 101
+ 0x01, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ {0x3f, 0x07}, false, "EssenceContainerData_BodySID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 102
+ 0x01, 0x01, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00 },
+ {0x44, 0x01}, false, "GenericPackage_PackageUID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 103
+ 0x01, 0x03, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0x44, 0x02}, true, "GenericPackage_Name" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 104
+ 0x07, 0x02, 0x01, 0x10, 0x01, 0x03, 0x00, 0x00 },
+ {0x44, 0x05}, false, "GenericPackage_PackageCreationDate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 105
+ 0x07, 0x02, 0x01, 0x10, 0x02, 0x05, 0x00, 0x00 },
+ {0x44, 0x04}, false, "GenericPackage_PackageModifiedDate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 106
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x05, 0x00, 0x00 },
+ {0x44, 0x03}, false, "GenericPackage_Tracks" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 107
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x32, 0x00 },
+ {0}, false, "NetworkLocator" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 108
+ 0x01, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0x40, 0x01}, false, "NetworkLocator_URLString" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 109
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x33, 0x00 },
+ {0}, false, "TextLocator" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 110
+ 0x01, 0x04, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0x41, 0x01}, false, "TextLocator_LocatorName" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 111
+ 0x01, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0x48, 0x01}, false, "GenericTrack_TrackID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 112
+ 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00 },
+ {0x48, 0x04}, false, "GenericTrack_TrackNumber" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 113
+ 0x01, 0x07, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0x48, 0x02}, true, "GenericTrack_TrackName" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 114
+ 0x06, 0x01, 0x01, 0x04, 0x02, 0x04, 0x00, 0x00 },
+ {0x48, 0x03}, false, "GenericTrack_Sequence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 115
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3a, 0x00 },
+ {0}, false, "StaticTrack" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 116
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3b, 0x00 },
+ {0}, false, "Track" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 117
+ 0x05, 0x30, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00 },
+ {0x4b, 0x01}, false, "Track_EditRate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 118
+ 0x07, 0x02, 0x01, 0x03, 0x01, 0x03, 0x00, 0x00 },
+ {0x4b, 0x02}, false, "Track_Origin" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 119
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x39, 0x00 },
+ {0}, false, "EventTrack" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 120
+ 0x05, 0x30, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x49, 0x01}, false, "EventTrack_EventEditRate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 121
+ 0x07, 0x02, 0x01, 0x03, 0x01, 0x0b, 0x00, 0x00 },
+ {0x49, 0x02}, true, "EventTrack_EventOrigin" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 122
+ 0x04, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ {0x02, 0x01}, false, "StructuralComponent_DataDefinition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 123
+ 0x07, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00 },
+ {0x02, 0x02}, false, "StructuralComponent_Duration" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 124
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x00 },
+ {0}, false, "Sequence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 125
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x09, 0x00, 0x00 },
+ {0x10, 0x01}, false, "Sequence_StructuralComponents" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 126
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, 0x00 },
+ {0}, false, "TimecodeComponent" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 127
+ 0x04, 0x04, 0x01, 0x01, 0x02, 0x06, 0x00, 0x00 },
+ {0x15, 0x02}, false, "TimecodeComponent_RoundedTimecodeBase" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 128
+ 0x07, 0x02, 0x01, 0x03, 0x01, 0x05, 0x00, 0x00 },
+ {0x15, 0x01}, false, "TimecodeComponent_StartTimecode" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 129
+ 0x04, 0x04, 0x01, 0x01, 0x05, 0x00, 0x00, 0x00 },
+ {0x15, 0x03}, false, "TimecodeComponent_DropFrame" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 130
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0x00 },
+ {0}, false, "SourceClip" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 131
+ 0x07, 0x02, 0x01, 0x03, 0x01, 0x04, 0x00, 0x00 },
+ {0x12, 0x01}, false, "SourceClip_StartPosition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 132
+ 0x06, 0x01, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00 },
+ {0x11, 0x01}, false, "SourceClip_SourcePackageID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 133
+ 0x06, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00 },
+ {0x11, 0x02}, false, "SourceClip_SourceTrackID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 134
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x41, 0x00 },
+ {0}, false, "DMSegment" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 135
+ 0x07, 0x02, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00 },
+ {0x06, 0x01}, false, "DMSegment_EventStartPosition" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 136
+ 0x05, 0x30, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00 },
+ {0x06, 0x02}, true, "DMSegment_EventComment" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 137
+ 0x01, 0x07, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00 },
+ {0x61, 0x02}, false, "DMSegment_TrackIDs" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 138
+ 0x06, 0x01, 0x01, 0x04, 0x02, 0x0c, 0x00, 0x00 },
+ {0x61, 0x01}, false, "DMSegment_DMFramework" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 139
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x45, 0x00 },
+ {0}, false, "DMSourceClip" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 140
+ 0x01, 0x07, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ {0x61, 0x03}, true, "DMSourceClip_DMSourceClipTrackIDs" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 141
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x36, 0x00 },
+ {0}, false, "MaterialPackage" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 142
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x37, 0x00 },
+ {0}, false, "SourcePackage" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 143
+ 0x06, 0x01, 0x01, 0x04, 0x02, 0x03, 0x00, 0x00 },
+ {0x47, 0x01}, false, "SourcePackage_Descriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 144
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x03, 0x00, 0x00 },
+ {0x2f, 0x01}, true, "GenericDescriptor_Locators" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 145
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x10, 0x00, 0x00 },
+ {0}, true, "GenericDescriptor_SubDescriptors" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 146
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x25, 0x00 },
+ {0}, false, "FileDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 147
+ 0x06, 0x01, 0x01, 0x03, 0x05, 0x00, 0x00, 0x00 },
+ {0x30, 0x06}, true, "FileDescriptor_LinkedTrackID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 148
+ 0x04, 0x06, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0x30, 0x01}, false, "FileDescriptor_SampleRate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 149
+ 0x04, 0x06, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x30, 0x02}, true, "FileDescriptor_ContainerDuration" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 150
+ 0x06, 0x01, 0x01, 0x04, 0x01, 0x02, 0x00, 0x00 },
+ {0x30, 0x04}, false, "FileDescriptor_EssenceContainer" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 151
+ 0x06, 0x01, 0x01, 0x04, 0x01, 0x03, 0x00, 0x00 },
+ {0x30, 0x05}, true, "FileDescriptor_Codec" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 152
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x27, 0x00 },
+ {0}, false, "GenericPictureEssenceDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 153
+ 0x04, 0x05, 0x01, 0x13, 0x00, 0x00, 0x00, 0x00 },
+ {0x32, 0x15}, true, "GenericPictureEssenceDescriptor_SignalStandard" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 154
+ 0x04, 0x01, 0x03, 0x01, 0x04, 0x00, 0x00, 0x00 },
+ {0x32, 0x0c}, false, "GenericPictureEssenceDescriptor_FrameLayout" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 155
+ 0x04, 0x01, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00 },
+ {0x32, 0x03}, false, "GenericPictureEssenceDescriptor_StoredWidth" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 156
+ 0x04, 0x01, 0x05, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0x32, 0x02}, false, "GenericPictureEssenceDescriptor_StoredHeight" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 157
+ 0x04, 0x01, 0x03, 0x02, 0x08, 0x00, 0x00, 0x00 },
+ {0x32, 0x16}, true, "GenericPictureEssenceDescriptor_StoredF2Offset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 158
+ 0x04, 0x01, 0x05, 0x01, 0x08, 0x00, 0x00, 0x00 },
+ {0x32, 0x05}, true, "GenericPictureEssenceDescriptor_SampledWidth" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 159
+ 0x04, 0x01, 0x05, 0x01, 0x07, 0x00, 0x00, 0x00 },
+ {0x32, 0x04}, true, "GenericPictureEssenceDescriptor_SampledHeight" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 160
+ 0x04, 0x01, 0x05, 0x01, 0x09, 0x00, 0x00, 0x00 },
+ {0x32, 0x06}, true, "GenericPictureEssenceDescriptor_SampledXOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 161
+ 0x04, 0x01, 0x05, 0x01, 0x0a, 0x00, 0x00, 0x00 },
+ {0x32, 0x07}, true, "GenericPictureEssenceDescriptor_SampledYOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 162
+ 0x04, 0x01, 0x05, 0x01, 0x0b, 0x00, 0x00, 0x00 },
+ {0x32, 0x08}, true, "GenericPictureEssenceDescriptor_DisplayHeight" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 163
+ 0x04, 0x01, 0x05, 0x01, 0x0c, 0x00, 0x00, 0x00 },
+ {0x32, 0x09}, true, "GenericPictureEssenceDescriptor_DisplayWidth" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 164
+ 0x04, 0x01, 0x05, 0x01, 0x0d, 0x00, 0x00, 0x00 },
+ {0x32, 0x0a}, true, "GenericPictureEssenceDescriptor_DisplayXOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 165
+ 0x04, 0x01, 0x05, 0x01, 0x0e, 0x00, 0x00, 0x00 },
+ {0x32, 0x0b}, true, "GenericPictureEssenceDescriptor_DisplayYOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 166
+ 0x04, 0x01, 0x03, 0x02, 0x07, 0x00, 0x00, 0x00 },
+ {0x32, 0x17}, true, "GenericPictureEssenceDescriptor_DisplayF2Offset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 167
+ 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0x32, 0x0e}, false, "GenericPictureEssenceDescriptor_AspectRatio" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 168
+ 0x04, 0x01, 0x03, 0x02, 0x09, 0x00, 0x00, 0x00 },
+ {0x32, 0x18}, true, "GenericPictureEssenceDescriptor_ActiveFormatDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 169
+ 0x04, 0x01, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00 },
+ {0x32, 0x0d}, false, "GenericPictureEssenceDescriptor_VideoLineMap" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 170
+ 0x05, 0x20, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x32, 0x0f}, true, "GenericPictureEssenceDescriptor_AlphaTransparency" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 171
+ 0x04, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00 },
+ {0x32, 0x10}, true, "GenericPictureEssenceDescriptor_Gamma" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 172
+ 0x04, 0x18, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0x32, 0x11}, true, "GenericPictureEssenceDescriptor_ImageAlignmentOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 173
+ 0x04, 0x18, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x32, 0x13}, true, "GenericPictureEssenceDescriptor_ImageStartOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 174
+ 0x04, 0x18, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00 },
+ {0x32, 0x14}, true, "GenericPictureEssenceDescriptor_ImageEndOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 175
+ 0x04, 0x01, 0x03, 0x01, 0x06, 0x00, 0x00, 0x00 },
+ {0x32, 0x12}, true, "GenericPictureEssenceDescriptor_FieldDominance" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 176
+ 0x04, 0x01, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0x32, 0x01}, false, "GenericPictureEssenceDescriptor_PictureEssenceCoding" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 177
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x28, 0x00 },
+ {0}, false, "CDCIEssenceDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 178
+ 0x04, 0x01, 0x05, 0x03, 0x0a, 0x00, 0x00, 0x00 },
+ {0x33, 0x01}, false, "CDCIEssenceDescriptor_ComponentDepth" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 179
+ 0x04, 0x01, 0x05, 0x01, 0x05, 0x00, 0x00, 0x00 },
+ {0x33, 0x02}, false, "CDCIEssenceDescriptor_HorizontalSubsampling" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 180
+ 0x04, 0x01, 0x05, 0x01, 0x10, 0x00, 0x00, 0x00 },
+ {0x33, 0x08}, true, "CDCIEssenceDescriptor_VerticalSubsampling" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 181
+ 0x04, 0x01, 0x05, 0x01, 0x06, 0x00, 0x00, 0x00 },
+ {0x33, 0x03}, true, "CDCIEssenceDescriptor_ColorSiting" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 182
+ 0x03, 0x01, 0x02, 0x01, 0x0a, 0x00, 0x00, 0x00 },
+ {0x33, 0x0b}, true, "CDCIEssenceDescriptor_ReversedByteOrder" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 183
+ 0x04, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ {0x33, 0x07}, true, "CDCIEssenceDescriptor_PaddingBits" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 184
+ 0x04, 0x01, 0x05, 0x03, 0x07, 0x00, 0x00, 0x00 },
+ {0x33, 0x09}, true, "CDCIEssenceDescriptor_AlphaSampleDepth" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 185
+ 0x04, 0x01, 0x05, 0x03, 0x03, 0x00, 0x00, 0x00 },
+ {0x33, 0x04}, true, "CDCIEssenceDescriptor_BlackRefLevel" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 186
+ 0x04, 0x01, 0x05, 0x03, 0x04, 0x00, 0x00, 0x00 },
+ {0x33, 0x05}, true, "CDCIEssenceDescriptor_WhiteReflevel" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 187
+ 0x04, 0x01, 0x05, 0x03, 0x05, 0x00, 0x00, 0x00 },
+ {0x33, 0x06}, true, "CDCIEssenceDescriptor_ColorRange" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 188
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x29, 0x00 },
+ {0}, false, "RGBAEssenceDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 189
+ 0x04, 0x01, 0x05, 0x03, 0x0b, 0x00, 0x00, 0x00 },
+ {0x34, 0x06}, true, "RGBAEssenceDescriptor_ComponentMaxRef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 190
+ 0x04, 0x01, 0x05, 0x03, 0x0c, 0x00, 0x00, 0x00 },
+ {0x34, 0x07}, true, "RGBAEssenceDescriptor_ComponentMinRef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 191
+ 0x04, 0x01, 0x05, 0x03, 0x0d, 0x00, 0x00, 0x00 },
+ {0x34, 0x08}, true, "RGBAEssenceDescriptor_AlphaMaxRef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 192
+ 0x04, 0x01, 0x05, 0x03, 0x0e, 0x00, 0x00, 0x00 },
+ {0x34, 0x09}, true, "RGBAEssenceDescriptor_AlphaMinRef" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 193
+ 0x04, 0x01, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00 },
+ {0x34, 0x05}, true, "RGBAEssenceDescriptor_ScanningDirection" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 194
+ 0x04, 0x01, 0x05, 0x03, 0x06, 0x00, 0x00, 0x00 },
+ {0x34, 0x01}, false, "RGBAEssenceDescriptor_PixelLayout" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 195
+ 0x04, 0x01, 0x05, 0x03, 0x08, 0x00, 0x00, 0x00 },
+ {0x34, 0x03}, true, "RGBAEssenceDescriptor_Palette" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 196
+ 0x04, 0x01, 0x05, 0x03, 0x09, 0x00, 0x00, 0x00 },
+ {0x34, 0x04}, true, "RGBAEssenceDescriptor_PaletteLayout" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 197
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x42, 0x00 },
+ {0}, false, "GenericSoundEssenceDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 198
+ 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00 },
+ {0x3d, 0x03}, false, "GenericSoundEssenceDescriptor_AudioSamplingRate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 199
+ 0x04, 0x02, 0x03, 0x01, 0x04, 0x00, 0x00, 0x00 },
+ {0x3d, 0x02}, false, "GenericSoundEssenceDescriptor_Locked" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 200
+ 0x04, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00 },
+ {0x3d, 0x04}, true, "GenericSoundEssenceDescriptor_AudioRefLevel" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 201
+ 0x04, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0x3d, 0x05}, true, "GenericSoundEssenceDescriptor_ElectroSpatialFormulation" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 202
+ 0x04, 0x02, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00 },
+ {0x3d, 0x07}, false, "GenericSoundEssenceDescriptor_ChannelCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 203
+ 0x04, 0x02, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00 },
+ {0x3d, 0x01}, false, "GenericSoundEssenceDescriptor_QuantizationBits" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 204
+ 0x04, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0x3d, 0x0c}, true, "GenericSoundEssenceDescriptor_DialNorm" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 205
+ 0x04, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x3d, 0x06}, false, "GenericSoundEssenceDescriptor_SoundEssenceCompression" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 206
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x43, 0x00 },
+ {0}, false, "GenericDataEssenceDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 207
+ 0x04, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0x3e, 0x01}, false, "GenericDataEssenceDescriptor_DataEssenceCoding" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 208
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x00 },
+ {0}, false, "MultipleDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 209
+ 0x06, 0x01, 0x01, 0x04, 0x06, 0x0b, 0x00, 0x00 },
+ {0x3f, 0x01}, false, "MultipleDescriptor_SubDescriptorUIDs" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 210
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x51, 0x00 },
+ {0}, false, "MPEG2VideoDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 211
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x02, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_SingleSequence" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 212
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x03, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_ConstantBFrames" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 213
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x04, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_CodedContentType" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 214
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x05, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_LowDelay" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 215
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x06, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_ClosedGOP" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 216
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x07, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_IdenticalGOP" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 217
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x08, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_MaxGOP" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 218
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x09, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_BPictureCount" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 219
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x0b, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_BitRate" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 220
+ 0x04, 0x01, 0x06, 0x02, 0x01, 0x0a, 0x00, 0x00 },
+ {0}, true, "MPEG2VideoDescriptor_ProfileAndLevel" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 221
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x48, 0x00 },
+ {0}, false, "WaveAudioDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 222
+ 0x04, 0x02, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0x3d, 0x0a}, false, "WaveAudioDescriptor_BlockAlign" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 223
+ 0x04, 0x02, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00 },
+ {0x3d, 0x0b}, true, "WaveAudioDescriptor_SequenceOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 224
+ 0x04, 0x02, 0x03, 0x03, 0x05, 0x00, 0x00, 0x00 },
+ {0x3d, 0x09}, false, "WaveAudioDescriptor_AvgBps" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, // 225
+ 0x04, 0x02, 0x03, 0x01, 0x0e, 0x00, 0x00, 0x00 },
+ {0x3d, 0x0e}, true, "WaveAudioDescriptor_PeakEnvelope" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 226
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x5a, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 227
+ 0x04, 0x01, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_Rsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 228
+ 0x04, 0x01, 0x06, 0x03, 0x02, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_Xsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 229
+ 0x04, 0x01, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_Ysize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 230
+ 0x04, 0x01, 0x06, 0x03, 0x04, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_XOsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 231
+ 0x04, 0x01, 0x06, 0x03, 0x05, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_YOsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 232
+ 0x04, 0x01, 0x06, 0x03, 0x06, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_XTsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 233
+ 0x04, 0x01, 0x06, 0x03, 0x07, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_YTsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 234
+ 0x04, 0x01, 0x06, 0x03, 0x08, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_XTOsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 235
+ 0x04, 0x01, 0x06, 0x03, 0x09, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_YTOsize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 236
+ 0x04, 0x01, 0x06, 0x03, 0x0a, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_Csize" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 237
+ 0x04, 0x01, 0x06, 0x03, 0x0b, 0x00, 0x00, 0x00 },
+ {0}, false, "JPEG2000PictureSubDescriptor_PictureComponentSizing" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 238
+ 0x04, 0x01, 0x06, 0x03, 0x0c, 0x00, 0x00, 0x00 },
+ {0}, true, "JPEG2000PictureSubDescriptor_CodingStyleDefault" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0a, // 239
+ 0x04, 0x01, 0x06, 0x03, 0x0d, 0x00, 0x00, 0x00 },
+ {0}, true, "JPEG2000PictureSubDescriptor_QuantizationDefault" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 240
+ 0x0d, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "DM_Framework" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 241
+ 0x0d, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "DM_Set" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 242
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x0b, 0x01, 0x00 },
+ {0}, false, "EncryptedContainerLabel" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 243
+ 0x0d, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01, 0x00 },
+ {0}, false, "CryptographicFrameworkLabel" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 244
+ 0x0d, 0x01, 0x04, 0x01, 0x02, 0x01, 0x00, 0x00 },
+ {0}, false, "CryptographicFramework" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 245
+ 0x06, 0x01, 0x01, 0x04, 0x02, 0x0d, 0x00, 0x00 },
+ {0}, false, "CryptographicFramework_ContextSR" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 246
+ 0x0d, 0x01, 0x04, 0x01, 0x02, 0x02, 0x00, 0x00 },
+ {0}, false, "CryptographicContext" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 247
+ 0x01, 0x01, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "CryptographicContext_ContextID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 248
+ 0x06, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00 },
+ {0}, false, "CryptographicContext_SourceEssenceContainer" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 249
+ 0x02, 0x09, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "CryptographicContext_CipherAlgorithm" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 250
+ 0x02, 0x09, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "CryptographicContext_MICAlgorithm" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 251
+ 0x02, 0x09, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00 },
+ {0}, false, "CryptographicContext_CryptographicKeyID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x04, 0x01, 0x07, // 252
+ 0x0d, 0x01, 0x03, 0x01, 0x02, 0x7e, 0x01, 0x00 },
+ {0}, false, "EncryptedTriplet" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 253
+ 0x06, 0x01, 0x01, 0x06, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "EncryptedTriplet_ContextIDLink" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 254
+ 0x06, 0x09, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "EncryptedTriplet_PlaintextOffset" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 255
+ 0x06, 0x01, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "EncryptedTriplet_SourceKey" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 256
+ 0x04, 0x06, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ {0}, false, "EncryptedTriplet_SourceLength" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 257
+ 0x02, 0x09, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00 },
+ {0}, false, "EncryptedTriplet_EncryptedSourceValue" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 258
+ 0x06, 0x01, 0x01, 0x06, 0x02, 0x00, 0x00, 0x00 },
+ {0}, true, "EncryptedTriplet_TrackFileID" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 259
+ 0x06, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ {0}, true, "EncryptedTriplet_SequenceNumber" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x09, // 260
+ 0x02, 0x09, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00 },
+ {0}, true, "EncryptedTriplet_MIC" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 261
+ 0x02, 0x09, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "CipherAlgorithmAES128CBC" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 262
+ 0x02, 0x09, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 },
+ {0}, false, "HMACAlgorithmSHA1128" },
{ 0, 0, 0 }
};
+const ui32_t s_MDD_Table_size = 263;
+
//
// end MDD.cpp
//
diff --git a/src/MDD.h b/src/MDD.h
index 413955c..ac65bf5 100755
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -35,266 +35,269 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
namespace ASDCP {
enum MDD_t {
- MDD_JPEG2000Essence,
- MDD_MPEG2Essence,
- MDD_WAVEssence,
- MDD_EKLVPacket,
- MDD_KLVFill,
- MDD_PartitionMetadata_MajorVersion,
- MDD_PartitionMetadata_MinorVersion,
- MDD_PartitionMetadata_KAGSize,
- MDD_PartitionMetadata_ThisPartition,
- MDD_PartitionMetadata_PreviousPartition,
- MDD_PartitionMetadata_FooterPartition,
- MDD_PartitionMetadata_HeaderByteCount,
- MDD_PartitionMetadata_IndexByteCount,
- MDD_PartitionMetadata_IndexSID,
- MDD_PartitionMetadata_BodyOffset,
- MDD_PartitionMetadata_BodySID,
- MDD_PartitionMetadata_OperationalPattern,
- MDD_PartitionMetadata_EssenceContainers,
- MDD_OpenHeader,
- MDD_OpenCompleteHeader,
- MDD_ClosedHeader,
- MDD_ClosedCompleteHeader,
- MDD_OpenBodyPartition,
- MDD_OpenCompleteBodyPartition,
- MDD_ClosedBodyPartition,
- MDD_ClosedCompleteBodyPartition,
- MDD_Footer,
- MDD_CompleteFooter,
- MDD_Primer,
- MDD_Primer_LocalTagEntryBatch,
- MDD_LocalTagEntryBatch_Primer_LocalTag,
- MDD_LocalTagEntryBatch_Primer_UID,
- MDD_InterchangeObject_InstanceUID,
- MDD_GenerationInterchangeObject_GenerationUID,
- MDD_DefaultObject,
- MDD_IndexTableSegmentBase_IndexEditRate,
- MDD_IndexTableSegmentBase_IndexStartPosition,
- MDD_IndexTableSegmentBase_IndexDuration,
- MDD_IndexTableSegmentBase_EditUnitByteCount,
- MDD_IndexTableSegmentBase_IndexSID,
- MDD_IndexTableSegmentBase_BodySID,
- MDD_IndexTableSegmentBase_SliceCount,
- MDD_IndexTableSegmentBase_PosTableCount,
- MDD_V10IndexTableSegment,
- MDD_V10IndexTableSegment_V10DeltaEntryArray,
- MDD_V10DeltaEntryArray_V10IndexTableSegment_Reorder,
- MDD_V10DeltaEntryArray_V10IndexTableSegment_Slice,
- MDD_V10DeltaEntryArray_V10IndexTableSegment_ElementDelta,
- MDD_V10IndexTableSegment_V10IndexEntryArray,
- MDD_V10IndexEntryArray_V10IndexTableSegment_TemporalOffset,
- MDD_V10IndexEntryArray_V10IndexTableSegment_AnchorOffset,
- MDD_V10IndexEntryArray_V10IndexTableSegment_Flags,
- MDD_V10IndexEntryArray_V10IndexTableSegment_StreamOffset,
- MDD_V10IndexEntryArray_V10IndexTableSegment_SliceOffsetArray,
- MDD_IndexTableSegment,
- MDD_IndexTableSegment_DeltaEntryArray,
- MDD_DeltaEntryArray_IndexTableSegment_PosTableIndex,
- MDD_DeltaEntryArray_IndexTableSegment_Slice,
- MDD_DeltaEntryArray_IndexTableSegment_ElementDelta,
- MDD_IndexTableSegment_IndexEntryArray,
- MDD_IndexEntryArray_IndexTableSegment_TemporalOffset,
- MDD_IndexEntryArray_IndexTableSegment_AnchorOffset,
- MDD_IndexEntryArray_IndexTableSegment_Flags,
- MDD_IndexEntryArray_IndexTableSegment_StreamOffset,
- MDD_IndexEntryArray_IndexTableSegment_SliceOffsetArray,
- MDD_IndexEntryArray_IndexTableSegment_PosTableArray,
- MDD_RandomIndexMetadata,
- MDD_PartitionArray_RandomIndexMetadata_BodySID,
- MDD_PartitionArray_RandomIndexMetadata_ByteOffset,
- MDD_RandomIndexMetadata_Length,
- MDD_RandomIndexMetadataV10,
- MDD_Preface,
- MDD_Preface_LastModifiedDate,
- MDD_Preface_Version,
- MDD_Preface_ObjectModelVersion,
- MDD_Preface_PrimaryPackage,
- MDD_Preface_Identifications,
- MDD_Preface_ContentStorage,
- MDD_Preface_OperationalPattern,
- MDD_Preface_EssenceContainers,
- MDD_Preface_DMSchemes,
- MDD_Identification,
- MDD_Identification_ThisGenerationUID,
- MDD_Identification_CompanyName,
- MDD_Identification_ProductName,
- MDD_Identification_ProductVersion,
- MDD_Identification_VersionString,
- MDD_Identification_ProductUID,
- MDD_Identification_ModificationDate,
- MDD_Identification_ToolkitVersion,
- MDD_Identification_Platform,
- MDD_ContentStorage,
- MDD_ContentStorage_Packages,
- MDD_ContentStorage_EssenceContainerData,
- MDD_ContentStorageKludge_V10Packages,
- MDD_EssenceContainerData,
- MDD_EssenceContainerData_LinkedPackageUID,
- MDD_EssenceContainerData_IndexSID,
- MDD_EssenceContainerData_BodySID,
- MDD_GenericPackage_PackageUID,
- MDD_GenericPackage_Name,
- MDD_GenericPackage_PackageCreationDate,
- MDD_GenericPackage_PackageModifiedDate,
- MDD_GenericPackage_Tracks,
- MDD_NetworkLocator,
- MDD_NetworkLocator_URLString,
- MDD_TextLocator,
- MDD_TextLocator_LocatorName,
- MDD_GenericTrack_TrackID,
- MDD_GenericTrack_TrackNumber,
- MDD_GenericTrack_TrackName,
- MDD_GenericTrack_Sequence,
- MDD_StaticTrack,
- MDD_Track,
- MDD_Track_EditRate,
- MDD_Track_Origin,
- MDD_EventTrack,
- MDD_EventTrack_EventEditRate,
- MDD_EventTrack_EventOrigin,
- MDD_StructuralComponent_DataDefinition,
- MDD_StructuralComponent_Duration,
- MDD_Sequence,
- MDD_Sequence_StructuralComponents,
- MDD_TimecodeComponent,
- MDD_TimecodeComponent_RoundedTimecodeBase,
- MDD_TimecodeComponent_StartTimecode,
- MDD_TimecodeComponent_DropFrame,
- MDD_SourceClip,
- MDD_SourceClip_StartPosition,
- MDD_SourceClip_SourcePackageID,
- MDD_SourceClip_SourceTrackID,
- MDD_DMSegment,
- MDD_DMSegment_EventStartPosition,
- MDD_DMSegment_EventComment,
- MDD_DMSegment_TrackIDs,
- MDD_DMSegment_DMFramework,
- MDD_DMSourceClip,
- MDD_DMSourceClip_DMSourceClipTrackIDs,
- MDD_MaterialPackage,
- MDD_SourcePackage,
- MDD_SourcePackage_Descriptor,
- MDD_GenericDescriptor_Locators,
- MDD_GenericDescriptor_SubDescriptors,
- MDD_FileDescriptor,
- MDD_FileDescriptor_LinkedTrackID,
- MDD_FileDescriptor_SampleRate,
- MDD_FileDescriptor_ContainerDuration,
- MDD_FileDescriptor_EssenceContainer,
- MDD_FileDescriptor_Codec,
- MDD_GenericPictureEssenceDescriptor,
- MDD_GenericPictureEssenceDescriptor_SignalStandard,
- MDD_GenericPictureEssenceDescriptor_FrameLayout,
- MDD_GenericPictureEssenceDescriptor_StoredWidth,
- MDD_GenericPictureEssenceDescriptor_StoredHeight,
- MDD_GenericPictureEssenceDescriptor_StoredF2Offset,
- MDD_GenericPictureEssenceDescriptor_SampledWidth,
- MDD_GenericPictureEssenceDescriptor_SampledHeight,
- MDD_GenericPictureEssenceDescriptor_SampledXOffset,
- MDD_GenericPictureEssenceDescriptor_SampledYOffset,
- MDD_GenericPictureEssenceDescriptor_DisplayHeight,
- MDD_GenericPictureEssenceDescriptor_DisplayWidth,
- MDD_GenericPictureEssenceDescriptor_DisplayXOffset,
- MDD_GenericPictureEssenceDescriptor_DisplayYOffset,
- MDD_GenericPictureEssenceDescriptor_DisplayF2Offset,
- MDD_GenericPictureEssenceDescriptor_AspectRatio,
- MDD_GenericPictureEssenceDescriptor_ActiveFormatDescriptor,
- MDD_GenericPictureEssenceDescriptor_VideoLineMap,
- MDD_GenericPictureEssenceDescriptor_AlphaTransparency,
- MDD_GenericPictureEssenceDescriptor_Gamma,
- MDD_GenericPictureEssenceDescriptor_ImageAlignmentOffset,
- MDD_GenericPictureEssenceDescriptor_ImageStartOffset,
- MDD_GenericPictureEssenceDescriptor_ImageEndOffset,
- MDD_GenericPictureEssenceDescriptor_FieldDominance,
- MDD_GenericPictureEssenceDescriptor_PictureEssenceCoding,
- MDD_CDCIEssenceDescriptor,
- MDD_CDCIEssenceDescriptor_ComponentDepth,
- MDD_CDCIEssenceDescriptor_HorizontalSubsampling,
- MDD_CDCIEssenceDescriptor_VerticalSubsampling,
- MDD_CDCIEssenceDescriptor_ColorSiting,
- MDD_CDCIEssenceDescriptor_ReversedByteOrder,
- MDD_CDCIEssenceDescriptor_PaddingBits,
- MDD_CDCIEssenceDescriptor_AlphaSampleDepth,
- MDD_CDCIEssenceDescriptor_BlackRefLevel,
- MDD_CDCIEssenceDescriptor_WhiteReflevel,
- MDD_CDCIEssenceDescriptor_ColorRange,
- MDD_RGBAEssenceDescriptor,
- MDD_RGBAEssenceDescriptor_ComponentMaxRef,
- MDD_RGBAEssenceDescriptor_ComponentMinRef,
- MDD_RGBAEssenceDescriptor_AlphaMaxRef,
- MDD_RGBAEssenceDescriptor_AlphaMinRef,
- MDD_RGBAEssenceDescriptor_ScanningDirection,
- MDD_RGBAEssenceDescriptor_PixelLayout,
- MDD_RGBAEssenceDescriptor_Palette,
- MDD_RGBAEssenceDescriptor_PaletteLayout,
- MDD_GenericSoundEssenceDescriptor,
- MDD_GenericSoundEssenceDescriptor_AudioSamplingRate,
- MDD_GenericSoundEssenceDescriptor_Locked,
- MDD_GenericSoundEssenceDescriptor_AudioRefLevel,
- MDD_GenericSoundEssenceDescriptor_ElectroSpatialFormulation,
- MDD_GenericSoundEssenceDescriptor_ChannelCount,
- MDD_GenericSoundEssenceDescriptor_QuantizationBits,
- MDD_GenericSoundEssenceDescriptor_DialNorm,
- MDD_GenericSoundEssenceDescriptor_SoundEssenceCompression,
- MDD_GenericDataEssenceDescriptor,
- MDD_GenericDataEssenceDescriptor_DataEssenceCoding,
- MDD_MultipleDescriptor,
- MDD_MultipleDescriptor_SubDescriptorUIDs,
- MDD_MPEG2VideoDescriptor,
- MDD_MPEG2VideoDescriptor_SingleSequence,
- MDD_MPEG2VideoDescriptor_ConstantBFrames,
- MDD_MPEG2VideoDescriptor_CodedContentType,
- MDD_MPEG2VideoDescriptor_LowDelay,
- MDD_MPEG2VideoDescriptor_ClosedGOP,
- MDD_MPEG2VideoDescriptor_IdenticalGOP,
- MDD_MPEG2VideoDescriptor_MaxGOP,
- MDD_MPEG2VideoDescriptor_BPictureCount,
- MDD_MPEG2VideoDescriptor_BitRate,
- MDD_MPEG2VideoDescriptor_ProfileAndLevel,
- MDD_WaveAudioDescriptor,
- MDD_WaveAudioDescriptor_BlockAlign,
- MDD_WaveAudioDescriptor_SequenceOffset,
- MDD_WaveAudioDescriptor_AvgBps,
- MDD_WaveAudioDescriptor_PeakEnvelope,
- MDD_JPEG2000PictureSubDescriptor,
- MDD_JPEG2000PictureSubDescriptor_Rsize,
- MDD_JPEG2000PictureSubDescriptor_Xsize,
- MDD_JPEG2000PictureSubDescriptor_Ysize,
- MDD_JPEG2000PictureSubDescriptor_XOsize,
- MDD_JPEG2000PictureSubDescriptor_YOsize,
- MDD_JPEG2000PictureSubDescriptor_XTsize,
- MDD_JPEG2000PictureSubDescriptor_YTsize,
- MDD_JPEG2000PictureSubDescriptor_XTOsize,
- MDD_JPEG2000PictureSubDescriptor_YTOsize,
- MDD_JPEG2000PictureSubDescriptor_Csize,
- MDD_JPEG2000PictureSubDescriptor_PictureComponentSizing,
- MDD_JPEG2000PictureSubDescriptor_CodingStyleDefault,
- MDD_JPEG2000PictureSubDescriptor_QuantizationDefault,
- MDD_DM_Framework,
- MDD_DM_Set,
- MDD_EncryptedContainerLabel,
- MDD_CryptographicFrameworkLabel,
- MDD_CryptographicFramework,
- MDD_CryptographicFramework_ContextSR,
- MDD_CryptographicContext,
- MDD_CryptographicContext_ContextID,
- MDD_CryptographicContext_SourceEssenceContainer,
- MDD_CryptographicContext_CipherAlgorithm,
- MDD_CryptographicContext_MICAlgorithm,
- MDD_CryptographicContext_CryptographicKeyID,
- MDD_EncryptedTriplet,
- MDD_EncryptedTriplet_ContextIDLink,
- MDD_EncryptedTriplet_PlaintextOffset,
- MDD_EncryptedTriplet_SourceKey,
- MDD_EncryptedTriplet_SourceLength,
- MDD_EncryptedTriplet_EncryptedSourceValue,
- MDD_EncryptedTriplet_TrackFileID,
- MDD_EncryptedTriplet_SequenceNumber,
- MDD_EncryptedTriplet_MIC,
- MDD_CipherAlgorithmAES128CBC,
- MDD_HMACAlgorithmSHA1128,
+ MDD_MICAlgorithm_NONE, // 0
+ MDD_OPAtom, // 1
+ MDD_OP1a, // 2
+ MDD_GCMulti, // 3
+ MDD_PictureDataDef, // 4
+ MDD_SoundDataDef, // 5
+ MDD_TimecodeDataDef, // 6
+ MDD_DescriptiveMetaDataDef, // 7
+ MDD_WAVWrapping, // 8
+ MDD_MPEG2_VESWrapping, // 9
+ MDD_JPEG_2000Wrapping, // 10
+ MDD_JPEG2000Essence, // 11
+ MDD_MPEG2Essence, // 12
+ MDD_CryptEssence, // 13
+ MDD_WAVEssence, // 14
+ MDD_JP2KEssenceCompression, // 15
+ MDD_CipherAlgorithm_AES, // 16
+ MDD_MICAlgorithm_HMAC_SHA1, // 17
+ MDD_KLVFill, // 18
+ MDD_PartitionMetadata_MajorVersion, // 19
+ MDD_PartitionMetadata_MinorVersion, // 20
+ MDD_PartitionMetadata_KAGSize, // 21
+ MDD_PartitionMetadata_ThisPartition, // 22
+ MDD_PartitionMetadata_PreviousPartition, // 23
+ MDD_PartitionMetadata_FooterPartition, // 24
+ MDD_PartitionMetadata_HeaderByteCount, // 25
+ MDD_PartitionMetadata_IndexByteCount, // 26
+ MDD_PartitionMetadata_IndexSID, // 27
+ MDD_PartitionMetadata_BodyOffset, // 28
+ MDD_PartitionMetadata_BodySID, // 29
+ MDD_PartitionMetadata_OperationalPattern, // 30
+ MDD_PartitionMetadata_EssenceContainers, // 31
+ MDD_OpenHeader, // 32
+ MDD_OpenCompleteHeader, // 33
+ MDD_ClosedHeader, // 34
+ MDD_ClosedCompleteHeader, // 35
+ MDD_OpenBodyPartition, // 36
+ MDD_OpenCompleteBodyPartition, // 37
+ MDD_ClosedBodyPartition, // 38
+ MDD_ClosedCompleteBodyPartition, // 39
+ MDD_Footer, // 40
+ MDD_CompleteFooter, // 41
+ MDD_Primer, // 42
+ MDD_Primer_LocalTagEntryBatch, // 43
+ MDD_LocalTagEntryBatch_Primer_LocalTag, // 44
+ MDD_LocalTagEntryBatch_Primer_UID, // 45
+ MDD_InterchangeObject_InstanceUID, // 46
+ MDD_GenerationInterchangeObject_GenerationUID, // 47
+ MDD_DefaultObject, // 48
+ MDD_IndexTableSegmentBase_IndexEditRate, // 49
+ MDD_IndexTableSegmentBase_IndexStartPosition, // 50
+ MDD_IndexTableSegmentBase_IndexDuration, // 51
+ MDD_IndexTableSegmentBase_EditUnitByteCount, // 52
+ MDD_IndexTableSegmentBase_IndexSID, // 53
+ MDD_IndexTableSegmentBase_BodySID, // 54
+ MDD_IndexTableSegmentBase_SliceCount, // 55
+ MDD_IndexTableSegmentBase_PosTableCount, // 56
+ MDD_IndexTableSegment, // 57
+ MDD_IndexTableSegment_DeltaEntryArray, // 58
+ MDD_DeltaEntryArray_IndexTableSegment_PosTableIndex, // 59
+ MDD_DeltaEntryArray_IndexTableSegment_Slice, // 60
+ MDD_DeltaEntryArray_IndexTableSegment_ElementDelta, // 61
+ MDD_IndexTableSegment_IndexEntryArray, // 62
+ MDD_IndexEntryArray_IndexTableSegment_TemporalOffset, // 63
+ MDD_IndexEntryArray_IndexTableSegment_AnchorOffset, // 64
+ MDD_IndexEntryArray_IndexTableSegment_Flags, // 65
+ MDD_IndexEntryArray_IndexTableSegment_StreamOffset, // 66
+ MDD_IndexEntryArray_IndexTableSegment_SliceOffsetArray, // 67
+ MDD_IndexEntryArray_IndexTableSegment_PosTableArray, // 68
+ MDD_RandomIndexMetadata, // 69
+ MDD_PartitionArray_RandomIndexMetadata_BodySID, // 70
+ MDD_PartitionArray_RandomIndexMetadata_ByteOffset, // 71
+ MDD_RandomIndexMetadata_Length, // 72
+ MDD_RandomIndexMetadataV10, // 73
+ MDD_Preface, // 74
+ MDD_Preface_LastModifiedDate, // 75
+ MDD_Preface_Version, // 76
+ MDD_Preface_ObjectModelVersion, // 77
+ MDD_Preface_PrimaryPackage, // 78
+ MDD_Preface_Identifications, // 79
+ MDD_Preface_ContentStorage, // 80
+ MDD_Preface_OperationalPattern, // 81
+ MDD_Preface_EssenceContainers, // 82
+ MDD_Preface_DMSchemes, // 83
+ MDD_Identification, // 84
+ MDD_Identification_ThisGenerationUID, // 85
+ MDD_Identification_CompanyName, // 86
+ MDD_Identification_ProductName, // 87
+ MDD_Identification_ProductVersion, // 88
+ MDD_Identification_VersionString, // 89
+ MDD_Identification_ProductUID, // 90
+ MDD_Identification_ModificationDate, // 91
+ MDD_Identification_ToolkitVersion, // 92
+ MDD_Identification_Platform, // 93
+ MDD_ContentStorage, // 94
+ MDD_ContentStorage_Packages, // 95
+ MDD_ContentStorage_EssenceContainerData, // 96
+ MDD_ContentStorageKludge_V10Packages, // 97
+ MDD_EssenceContainerData, // 98
+ MDD_EssenceContainerData_LinkedPackageUID, // 99
+ MDD_EssenceContainerData_IndexSID, // 100
+ MDD_EssenceContainerData_BodySID, // 101
+ MDD_GenericPackage_PackageUID, // 102
+ MDD_GenericPackage_Name, // 103
+ MDD_GenericPackage_PackageCreationDate, // 104
+ MDD_GenericPackage_PackageModifiedDate, // 105
+ MDD_GenericPackage_Tracks, // 106
+ MDD_NetworkLocator, // 107
+ MDD_NetworkLocator_URLString, // 108
+ MDD_TextLocator, // 109
+ MDD_TextLocator_LocatorName, // 110
+ MDD_GenericTrack_TrackID, // 111
+ MDD_GenericTrack_TrackNumber, // 112
+ MDD_GenericTrack_TrackName, // 113
+ MDD_GenericTrack_Sequence, // 114
+ MDD_StaticTrack, // 115
+ MDD_Track, // 116
+ MDD_Track_EditRate, // 117
+ MDD_Track_Origin, // 118
+ MDD_EventTrack, // 119
+ MDD_EventTrack_EventEditRate, // 120
+ MDD_EventTrack_EventOrigin, // 121
+ MDD_StructuralComponent_DataDefinition, // 122
+ MDD_StructuralComponent_Duration, // 123
+ MDD_Sequence, // 124
+ MDD_Sequence_StructuralComponents, // 125
+ MDD_TimecodeComponent, // 126
+ MDD_TimecodeComponent_RoundedTimecodeBase, // 127
+ MDD_TimecodeComponent_StartTimecode, // 128
+ MDD_TimecodeComponent_DropFrame, // 129
+ MDD_SourceClip, // 130
+ MDD_SourceClip_StartPosition, // 131
+ MDD_SourceClip_SourcePackageID, // 132
+ MDD_SourceClip_SourceTrackID, // 133
+ MDD_DMSegment, // 134
+ MDD_DMSegment_EventStartPosition, // 135
+ MDD_DMSegment_EventComment, // 136
+ MDD_DMSegment_TrackIDs, // 137
+ MDD_DMSegment_DMFramework, // 138
+ MDD_DMSourceClip, // 139
+ MDD_DMSourceClip_DMSourceClipTrackIDs, // 140
+ MDD_MaterialPackage, // 141
+ MDD_SourcePackage, // 142
+ MDD_SourcePackage_Descriptor, // 143
+ MDD_GenericDescriptor_Locators, // 144
+ MDD_GenericDescriptor_SubDescriptors, // 145
+ MDD_FileDescriptor, // 146
+ MDD_FileDescriptor_LinkedTrackID, // 147
+ MDD_FileDescriptor_SampleRate, // 148
+ MDD_FileDescriptor_ContainerDuration, // 149
+ MDD_FileDescriptor_EssenceContainer, // 150
+ MDD_FileDescriptor_Codec, // 151
+ MDD_GenericPictureEssenceDescriptor, // 152
+ MDD_GenericPictureEssenceDescriptor_SignalStandard, // 153
+ MDD_GenericPictureEssenceDescriptor_FrameLayout, // 154
+ MDD_GenericPictureEssenceDescriptor_StoredWidth, // 155
+ MDD_GenericPictureEssenceDescriptor_StoredHeight, // 156
+ MDD_GenericPictureEssenceDescriptor_StoredF2Offset, // 157
+ MDD_GenericPictureEssenceDescriptor_SampledWidth, // 158
+ MDD_GenericPictureEssenceDescriptor_SampledHeight, // 159
+ MDD_GenericPictureEssenceDescriptor_SampledXOffset, // 160
+ MDD_GenericPictureEssenceDescriptor_SampledYOffset, // 161
+ MDD_GenericPictureEssenceDescriptor_DisplayHeight, // 162
+ MDD_GenericPictureEssenceDescriptor_DisplayWidth, // 163
+ MDD_GenericPictureEssenceDescriptor_DisplayXOffset, // 164
+ MDD_GenericPictureEssenceDescriptor_DisplayYOffset, // 165
+ MDD_GenericPictureEssenceDescriptor_DisplayF2Offset, // 166
+ MDD_GenericPictureEssenceDescriptor_AspectRatio, // 167
+ MDD_GenericPictureEssenceDescriptor_ActiveFormatDescriptor, // 168
+ MDD_GenericPictureEssenceDescriptor_VideoLineMap, // 169
+ MDD_GenericPictureEssenceDescriptor_AlphaTransparency, // 170
+ MDD_GenericPictureEssenceDescriptor_Gamma, // 171
+ MDD_GenericPictureEssenceDescriptor_ImageAlignmentOffset, // 172
+ MDD_GenericPictureEssenceDescriptor_ImageStartOffset, // 173
+ MDD_GenericPictureEssenceDescriptor_ImageEndOffset, // 174
+ MDD_GenericPictureEssenceDescriptor_FieldDominance, // 175
+ MDD_GenericPictureEssenceDescriptor_PictureEssenceCoding, // 176
+ MDD_CDCIEssenceDescriptor, // 177
+ MDD_CDCIEssenceDescriptor_ComponentDepth, // 178
+ MDD_CDCIEssenceDescriptor_HorizontalSubsampling, // 179
+ MDD_CDCIEssenceDescriptor_VerticalSubsampling, // 180
+ MDD_CDCIEssenceDescriptor_ColorSiting, // 181
+ MDD_CDCIEssenceDescriptor_ReversedByteOrder, // 182
+ MDD_CDCIEssenceDescriptor_PaddingBits, // 183
+ MDD_CDCIEssenceDescriptor_AlphaSampleDepth, // 184
+ MDD_CDCIEssenceDescriptor_BlackRefLevel, // 185
+ MDD_CDCIEssenceDescriptor_WhiteReflevel, // 186
+ MDD_CDCIEssenceDescriptor_ColorRange, // 187
+ MDD_RGBAEssenceDescriptor, // 188
+ MDD_RGBAEssenceDescriptor_ComponentMaxRef, // 189
+ MDD_RGBAEssenceDescriptor_ComponentMinRef, // 190
+ MDD_RGBAEssenceDescriptor_AlphaMaxRef, // 191
+ MDD_RGBAEssenceDescriptor_AlphaMinRef, // 192
+ MDD_RGBAEssenceDescriptor_ScanningDirection, // 193
+ MDD_RGBAEssenceDescriptor_PixelLayout, // 194
+ MDD_RGBAEssenceDescriptor_Palette, // 195
+ MDD_RGBAEssenceDescriptor_PaletteLayout, // 196
+ MDD_GenericSoundEssenceDescriptor, // 197
+ MDD_GenericSoundEssenceDescriptor_AudioSamplingRate, // 198
+ MDD_GenericSoundEssenceDescriptor_Locked, // 199
+ MDD_GenericSoundEssenceDescriptor_AudioRefLevel, // 200
+ MDD_GenericSoundEssenceDescriptor_ElectroSpatialFormulation, // 201
+ MDD_GenericSoundEssenceDescriptor_ChannelCount, // 202
+ MDD_GenericSoundEssenceDescriptor_QuantizationBits, // 203
+ MDD_GenericSoundEssenceDescriptor_DialNorm, // 204
+ MDD_GenericSoundEssenceDescriptor_SoundEssenceCompression, // 205
+ MDD_GenericDataEssenceDescriptor, // 206
+ MDD_GenericDataEssenceDescriptor_DataEssenceCoding, // 207
+ MDD_MultipleDescriptor, // 208
+ MDD_MultipleDescriptor_SubDescriptorUIDs, // 209
+ MDD_MPEG2VideoDescriptor, // 210
+ MDD_MPEG2VideoDescriptor_SingleSequence, // 211
+ MDD_MPEG2VideoDescriptor_ConstantBFrames, // 212
+ MDD_MPEG2VideoDescriptor_CodedContentType, // 213
+ MDD_MPEG2VideoDescriptor_LowDelay, // 214
+ MDD_MPEG2VideoDescriptor_ClosedGOP, // 215
+ MDD_MPEG2VideoDescriptor_IdenticalGOP, // 216
+ MDD_MPEG2VideoDescriptor_MaxGOP, // 217
+ MDD_MPEG2VideoDescriptor_BPictureCount, // 218
+ MDD_MPEG2VideoDescriptor_BitRate, // 219
+ MDD_MPEG2VideoDescriptor_ProfileAndLevel, // 220
+ MDD_WaveAudioDescriptor, // 221
+ MDD_WaveAudioDescriptor_BlockAlign, // 222
+ MDD_WaveAudioDescriptor_SequenceOffset, // 223
+ MDD_WaveAudioDescriptor_AvgBps, // 224
+ MDD_WaveAudioDescriptor_PeakEnvelope, // 225
+ MDD_JPEG2000PictureSubDescriptor, // 226
+ MDD_JPEG2000PictureSubDescriptor_Rsize, // 227
+ MDD_JPEG2000PictureSubDescriptor_Xsize, // 228
+ MDD_JPEG2000PictureSubDescriptor_Ysize, // 229
+ MDD_JPEG2000PictureSubDescriptor_XOsize, // 230
+ MDD_JPEG2000PictureSubDescriptor_YOsize, // 231
+ MDD_JPEG2000PictureSubDescriptor_XTsize, // 232
+ MDD_JPEG2000PictureSubDescriptor_YTsize, // 233
+ MDD_JPEG2000PictureSubDescriptor_XTOsize, // 234
+ MDD_JPEG2000PictureSubDescriptor_YTOsize, // 235
+ MDD_JPEG2000PictureSubDescriptor_Csize, // 236
+ MDD_JPEG2000PictureSubDescriptor_PictureComponentSizing, // 237
+ MDD_JPEG2000PictureSubDescriptor_CodingStyleDefault, // 238
+ MDD_JPEG2000PictureSubDescriptor_QuantizationDefault, // 239
+ MDD_DM_Framework, // 240
+ MDD_DM_Set, // 241
+ MDD_EncryptedContainerLabel, // 242
+ MDD_CryptographicFrameworkLabel, // 243
+ MDD_CryptographicFramework, // 244
+ MDD_CryptographicFramework_ContextSR, // 245
+ MDD_CryptographicContext, // 246
+ MDD_CryptographicContext_ContextID, // 247
+ MDD_CryptographicContext_SourceEssenceContainer, // 248
+ MDD_CryptographicContext_CipherAlgorithm, // 249
+ MDD_CryptographicContext_MICAlgorithm, // 250
+ MDD_CryptographicContext_CryptographicKeyID, // 251
+ MDD_EncryptedTriplet, // 252
+ MDD_EncryptedTriplet_ContextIDLink, // 253
+ MDD_EncryptedTriplet_PlaintextOffset, // 254
+ MDD_EncryptedTriplet_SourceKey, // 255
+ MDD_EncryptedTriplet_SourceLength, // 256
+ MDD_EncryptedTriplet_EncryptedSourceValue, // 257
+ MDD_EncryptedTriplet_TrackFileID, // 258
+ MDD_EncryptedTriplet_SequenceNumber, // 259
+ MDD_EncryptedTriplet_MIC, // 260
+ MDD_CipherAlgorithmAES128CBC, // 261
+ MDD_HMACAlgorithmSHA1128, // 262
}; // enum MDD_t
} // namespaceASDCP
diff --git a/src/MXF.cpp b/src/MXF.cpp
index 2c41afc..d5585d3 100755
--- a/src/MXF.cpp
+++ b/src/MXF.cpp
@@ -32,59 +32,11 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "MXF.h"
#include "hex_utils.h"
+
//------------------------------------------------------------------------------------------
//
const ui32_t kl_length = ASDCP::SMPTE_UL_LENGTH + ASDCP::MXF_BER_LENGTH;
-#if 0
-const byte_t mdd_key[] = { 0x06, 0x0e, 0x2b, 0x34 };
-
-//
-const ASDCP::MDDEntry*
-ASDCP::GetMDDEntry(const byte_t* ul_buf)
-{
- ui32_t t_idx = 0;
- ui32_t k_idx = 8;
-
- // must be a pointer to a SMPTE UL
- if ( ul_buf == 0 || memcmp(mdd_key, ul_buf, 4) != 0 )
- return 0;
-
- // advance to first matching element
- // TODO: optimize using binary search
- while ( s_MDD_Table[t_idx].ul != 0
- && s_MDD_Table[t_idx].ul[k_idx] != ul_buf[k_idx] )
- t_idx++;
-
- if ( s_MDD_Table[t_idx].ul == 0 )
- return 0;
-
- // match successive elements
- while ( s_MDD_Table[t_idx].ul != 0
- && k_idx < SMPTE_UL_LENGTH - 1
- && s_MDD_Table[t_idx].ul[k_idx] == ul_buf[k_idx] )
- {
- if ( s_MDD_Table[t_idx].ul[k_idx+1] == ul_buf[k_idx+1] )
- {
- k_idx++;
- }
- else
- {
- while ( s_MDD_Table[t_idx].ul != 0
- && s_MDD_Table[t_idx].ul[k_idx] == ul_buf[k_idx]
- && s_MDD_Table[t_idx].ul[k_idx+1] != ul_buf[k_idx+1] )
- t_idx++;
-
- while ( s_MDD_Table[t_idx].ul[k_idx] != ul_buf[k_idx] )
- k_idx--;
- }
- }
-
- return (s_MDD_Table[t_idx].ul == 0 ? 0 : &s_MDD_Table[t_idx]);
-}
-#endif
-//------------------------------------------------------------------------------------------
-//
//
ASDCP::Result_t
@@ -328,7 +280,7 @@ ASDCP::MXF::Partition::WriteToFile(ASDCP::FileWriter& Writer, UL& PartitionLabel
if ( ASDCP_SUCCESS(result) )
{
- ui32_t write_count; // this is subclassed, so the UL is only right some of the time
+ ui32_t write_count;
result = WriteKLToFile(Writer, PartitionLabel.Value(), Buffer.Size());
if ( ASDCP_SUCCESS(result) )
@@ -339,6 +291,21 @@ ASDCP::MXF::Partition::WriteToFile(ASDCP::FileWriter& Writer, UL& PartitionLabel
}
//
+ui32_t
+ASDCP::MXF::Partition::ArchiveSize()
+{
+ return ( kl_length
+ + sizeof(ui16_t) + sizeof(ui16_t)
+ + sizeof(ui32_t)
+ + sizeof(ui64_t) + sizeof(ui64_t) + sizeof(ui64_t) + sizeof(ui64_t) + sizeof(ui64_t)
+ + sizeof(ui32_t)
+ + sizeof(ui64_t)
+ + sizeof(ui32_t)
+ + SMPTE_UL_LENGTH
+ + sizeof(ui32_t) + sizeof(ui32_t) + ( UUIDlen * EssenceContainers.size() ) );
+}
+
+//
void
ASDCP::MXF::Partition::Dump(FILE* stream)
{
@@ -524,8 +491,8 @@ ASDCP::MXF::Primer::Dump(FILE* stream)
KLVPacket::Dump(stream, false);
fprintf(stream, "Primer: %lu %s\n",
- LocalTagEntryBatch.ItemCount,
- ( LocalTagEntryBatch.ItemCount == 1 ? "entry" : "entries" ));
+ LocalTagEntryBatch.size(),
+ ( LocalTagEntryBatch.size() == 1 ? "entry" : "entries" ));
Batch<LocalTagEntry>::iterator i = LocalTagEntryBatch.begin();
for ( ; i != LocalTagEntryBatch.end(); i++ )
@@ -628,12 +595,25 @@ ASDCP::MXF::OPAtomHeader::InitFromFile(const ASDCP::FileReader& Reader)
if ( ASDCP_SUCCESS(result) )
{
result = m_RIP.InitFromFile(Reader);
+ ui32_t test_s = m_RIP.PairArray.size();
if ( ASDCP_FAILURE(result) )
{
DefaultLogSink().Error("File contains no RIP\n");
result = RESULT_OK;
}
+ else if ( test_s == 0 )
+ {
+ DefaultLogSink().Error("RIP contains no Pairs.\n");
+ result = RESULT_FORMAT;
+ }
+ else if ( test_s < 2 || test_s > 3 )
+ {
+ // OP-Atom states that there will be either two or three partitions,
+ // one closed header and one closed footer with an optional body
+ DefaultLogSink().Error("RIP count is not 2 or 3: %lu\n", test_s);
+ return RESULT_FORMAT;
+ }
else
{
m_HasRIP = true;
@@ -641,35 +621,55 @@ ASDCP::MXF::OPAtomHeader::InitFromFile(const ASDCP::FileReader& Reader)
}
if ( ASDCP_SUCCESS(result) )
+ {
+ Array<RIP::Pair>::iterator r_i = m_RIP.PairArray.begin();
+
+ if ( (*r_i).ByteOffset != 0 )
+ {
+ DefaultLogSink().Error("First Partition in RIP is not at offset 0.\n");
+ result = RESULT_FORMAT;
+ }
+ }
+
+ if ( ASDCP_SUCCESS(result) )
result = Reader.Seek(0);
if ( ASDCP_SUCCESS(result) )
result = Partition::InitFromFile(Reader); // test UL and OP
- // slurp up the remainder of the header
- ui32_t read_count;
+ // is it really OP-Atom?
+ UL OPAtomUL(Dict::ul(MDD_OPAtom));
- if ( ASDCP_SUCCESS(result) )
+ if ( ! ( OperationalPattern == OPAtomUL ) )
{
- ui32_t here = (ui32_t)Reader.Tell();
+ char strbuf[IntBufferLen];
+ const MDDEntry* Entry = Dict::FindUL(m_KeyStart);
+ if ( Entry == 0 )
+ DefaultLogSink().Warn("Operational pattern is not OP-Atom: %s.\n", OperationalPattern.ToString(strbuf));
+ else
+ DefaultLogSink().Warn("Operational pattern is not OP-Atom: %s.\n", Entry->name);
+ }
- if ( HeaderByteCount < here )
- {
- DefaultLogSink().Error("HeaderByteCount less than Partition size\n");
- return RESULT_FAIL;
- }
+ // slurp up the remainder of the header
+ if ( ASDCP_SUCCESS(result) )
+ {
+ if ( HeaderByteCount < 1024 )
+ DefaultLogSink().Warn("Improbably small HeaderByteCount value: %lu\n", HeaderByteCount);
- result = m_Buffer.Capacity(HeaderByteCount - here);
+ result = m_Buffer.Capacity(HeaderByteCount);
}
if ( ASDCP_SUCCESS(result) )
- result = Reader.Read(m_Buffer.Data(), m_Buffer.Capacity(), &read_count);
-
- if ( ASDCP_SUCCESS(result) && read_count != m_Buffer.Capacity() )
{
- DefaultLogSink().Error("Short read of OP-Atom header metadata; wanted %lu, got %lu\n",
- m_Buffer.Capacity(), read_count);
- return RESULT_FAIL;
+ ui32_t read_count;
+ result = Reader.Read(m_Buffer.Data(), m_Buffer.Capacity(), &read_count);
+
+ if ( ASDCP_SUCCESS(result) && read_count != m_Buffer.Capacity() )
+ {
+ DefaultLogSink().Error("Short read of OP-Atom header metadata; wanted %lu, got %lu\n",
+ m_Buffer.Capacity(), read_count);
+ return RESULT_FAIL;
+ }
}
const byte_t* p = m_Buffer.RoData();
@@ -754,6 +754,7 @@ ASDCP::MXF::OPAtomHeader::GetSourcePackage()
return 0;
}
+
//
ASDCP::Result_t
ASDCP::MXF::OPAtomHeader::WriteToFile(ASDCP::FileWriter& Writer, ui32_t HeaderSize)
@@ -768,8 +769,8 @@ ASDCP::MXF::OPAtomHeader::WriteToFile(ASDCP::FileWriter& Writer, ui32_t HeaderSi
}
ASDCP::FrameBuffer HeaderBuffer;
- HeaderByteCount = HeaderSize;
- Result_t result = HeaderBuffer.Capacity(HeaderSize);
+ HeaderByteCount = HeaderSize - ArchiveSize();
+ Result_t result = HeaderBuffer.Capacity(HeaderByteCount);
m_Preface->m_Lookup = &m_Primer;
std::list<InterchangeObject*>::iterator pl_i = m_PacketList->m_List.begin();
@@ -806,7 +807,7 @@ ASDCP::MXF::OPAtomHeader::WriteToFile(ASDCP::FileWriter& Writer, ui32_t HeaderSi
{
ASDCP::fpos_t pos = Writer.Tell();
- if ( pos > HeaderSize )
+ if ( pos > (ASDCP::fpos_t)HeaderByteCount )
{
char intbuf[IntBufferLen];
DefaultLogSink().Error("Header size %s exceeds specified value %lu\n",
@@ -1076,7 +1077,7 @@ ASDCP::MXF::OPAtomIndexFooter::PushIndexEntry(const IndexTableSegment::IndexEntr
// do we have an available segment?
if ( m_CurrentSegment == 0 )
- {
+ { // no, set up a new segment
m_CurrentSegment = new IndexTableSegment;
assert(m_CurrentSegment);
AddChildObject(m_CurrentSegment);
@@ -1085,7 +1086,7 @@ ASDCP::MXF::OPAtomIndexFooter::PushIndexEntry(const IndexTableSegment::IndexEntr
m_CurrentSegment->IndexStartPosition = 0;
}
else if ( m_CurrentSegment->IndexEntryArray.size() >= 1486 ) // 1486 gets us 16K packets
- {
+ { // no, this one is full, start another
m_CurrentSegment->IndexDuration = m_CurrentSegment->IndexEntryArray.size();
ui64_t StartPosition = m_CurrentSegment->IndexStartPosition + m_CurrentSegment->IndexDuration;
diff --git a/src/MXF.h b/src/MXF.h
index 649d4d9..27f3b3e 100755
--- a/src/MXF.h
+++ b/src/MXF.h
@@ -50,40 +50,43 @@ namespace ASDCP
public:
//
- class Pair {
- public:
- ui32_t BodySID;
- ui64_t ByteOffset;
-
- Pair() : BodySID(0), ByteOffset(0) {}
- Pair(ui32_t sid, ui64_t offset) : BodySID(sid), ByteOffset(offset) {}
+ class Pair : public IArchive
+ {
+ public:
+ ui32_t BodySID;
+ ui64_t ByteOffset;
- ui32_t Size() { return sizeof(ui32_t) + sizeof(ui64_t); }
+ Pair() : BodySID(0), ByteOffset(0) {}
+ Pair(ui32_t sid, ui64_t offset) : BodySID(sid), ByteOffset(offset) {}
- inline const char* ToString(char* str_buf) const {
- char intbuf[IntBufferLen];
- snprintf(str_buf, IdentBufferLen, "%-6lu: %s", BodySID, ui64sz(ByteOffset, intbuf));
- return str_buf;
- }
+ ui32_t Size() { return sizeof(ui32_t) + sizeof(ui64_t); }
- inline Result_t Unarchive(ASDCP::MemIOReader& Reader) {
- Result_t result = Reader.ReadUi32BE(&BodySID);
+ inline const char* ToString(char* str_buf) const {
+ char intbuf[IntBufferLen];
+ snprintf(str_buf, IdentBufferLen, "%-6lu: %s", BodySID, ui64sz(ByteOffset, intbuf));
+ return str_buf;
+ }
- if ( ASDCP_SUCCESS(result) )
- result = Reader.ReadUi64BE(&ByteOffset);
+ inline Result_t Unarchive(ASDCP::MemIOReader& Reader) {
+ Result_t result = Reader.ReadUi32BE(&BodySID);
- return result;
- }
+ if ( ASDCP_SUCCESS(result) )
+ result = Reader.ReadUi64BE(&ByteOffset);
- inline Result_t Archive(ASDCP::MemIOWriter& Writer) {
- Result_t result = Writer.WriteUi32BE(BodySID);
+ return result;
+ }
+
+ inline bool HasValue() const { return true; }
+
+ inline Result_t Archive(ASDCP::MemIOWriter& Writer) const {
+ Result_t result = Writer.WriteUi32BE(BodySID);
- if ( ASDCP_SUCCESS(result) )
- result = Writer.WriteUi64BE(ByteOffset);
+ if ( ASDCP_SUCCESS(result) )
+ result = Writer.WriteUi64BE(ByteOffset);
- return result;
- }
- };
+ return result;
+ }
+ };
Array<Pair> PairArray;
@@ -124,6 +127,7 @@ namespace ASDCP
virtual void AddChildObject(InterchangeObject*);
virtual Result_t InitFromFile(const ASDCP::FileReader& Reader);
virtual Result_t WriteToFile(ASDCP::FileWriter& Writer, UL& PartitionLabel);
+ virtual ui32_t ArchiveSize(); // returns the size of the archived structure
virtual void Dump(FILE* = 0);
};
@@ -157,7 +161,7 @@ namespace ASDCP
return result;
}
- inline Result_t Archive(ASDCP::MemIOWriter& Writer) {
+ inline Result_t Archive(ASDCP::MemIOWriter& Writer) const {
Result_t result = Writer.WriteUi8(Tag.a);
if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi8(Tag.b);
if ( ASDCP_SUCCESS(result) ) result = UL.Archive(Writer);
@@ -250,7 +254,7 @@ namespace ASDCP
DeltaEntry() : PosTableIndex(-1), Slice(0), ElementData(0) {}
Result_t Unarchive(ASDCP::MemIOReader& Reader);
- Result_t Archive(ASDCP::MemIOWriter& Writer);
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const;
const char* ToString(char* str_buf) const;
};
@@ -265,8 +269,9 @@ namespace ASDCP
// std::list<ui32_t> SliceOffset;
// Array<Rational> PosTable;
+ IndexEntry() : TemporalOffset(0), KeyFrameOffset(0), Flags(0), StreamOffset() {}
Result_t Unarchive(ASDCP::MemIOReader& Reader);
- Result_t Archive(ASDCP::MemIOWriter& Writer);
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const;
const char* ToString(char* str_buf) const;
};
diff --git a/src/MXFTypes.cpp b/src/MXFTypes.cpp
index 6001cf3..ec4f2d7 100755
--- a/src/MXFTypes.cpp
+++ b/src/MXFTypes.cpp
@@ -35,12 +35,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------------------
//
-const ASDCP::UID&
-ASDCP::UID::operator=(const UMID& rhs)
-{
- // TODO
- return *this;
-}
//
void
@@ -58,21 +52,14 @@ ASDCP::UMID::MakeUMID(int Type, const UUID& AssetID)
// Set the non-varying base of the UMID
static const byte_t UMIDBase[10] = { 0x06, 0x0a, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
memcpy(m_Value, UMIDBase, 10);
+ m_Value[10] = Type; // Material Type
+ m_Value[12] = 0x13; // length
- // Correct to v5 dictionary for new (330M-2003) types
- if( Type > 4 )
- m_Value[7] = 5;
-
- // Set the type
- m_Value[10] = Type;
-
- // We are using a GUID for material number, and no defined instance method
- m_Value[11] = 0x20;
-
- // Length of UMID "Value" is 19 bytes
- m_Value[12] = 0x13;
+ // preserved for compatibility with mfxlib
+ if( Type > 4 ) m_Value[7] = 5;
+ m_Value[11] = 0x20; // UUID/UL method, number gen undefined
- // Set instance number to zero as this is the first instance of this material
+ // Instance Number
m_Value[13] = m_Value[14] = m_Value[15] = 0;
memcpy(&m_Value[16], AssetID.Value(), AssetID.Size());
@@ -87,8 +74,10 @@ ASDCP::UMID::ToString(char* str_buf) const
assert(str_buf);
snprintf(str_buf, IdentBufferLen, "[%02x%02x%02x%02x.%02x%02x.%02x%02x.%02x%02x%02x%02x],%02x,%02x,%02x,%02x,",
- m_Value[0], m_Value[1], m_Value[2], m_Value[3], m_Value[4], m_Value[5], m_Value[6], m_Value[7],
- m_Value[8], m_Value[9], m_Value[10], m_Value[11], m_Value[12], m_Value[13], m_Value[14], m_Value[15]
+ m_Value[0], m_Value[1], m_Value[2], m_Value[3],
+ m_Value[4], m_Value[5], m_Value[6], m_Value[7],
+ m_Value[8], m_Value[9], m_Value[10], m_Value[11],
+ m_Value[12], m_Value[13], m_Value[14], m_Value[15]
);
ui32_t offset = strlen(str_buf);
@@ -98,8 +87,10 @@ ASDCP::UMID::ToString(char* str_buf) const
// half-swapped UL, use [bbaa9988.ddcc.ffee.00010203.04050607]
snprintf(str_buf + offset, IdentBufferLen - offset,
"[%02x%02x%02x%02x.%02x%02x.%02x%02x.%02x%02x%02x%02x.%02x%02x%02x%02x]",
- m_Value[24], m_Value[25], m_Value[26], m_Value[27], m_Value[28], m_Value[29], m_Value[30], m_Value[31],
- m_Value[16], m_Value[17], m_Value[18], m_Value[19], m_Value[20], m_Value[21], m_Value[22], m_Value[23]
+ m_Value[24], m_Value[25], m_Value[26], m_Value[27],
+ m_Value[28], m_Value[29], m_Value[30], m_Value[31],
+ m_Value[16], m_Value[17], m_Value[18], m_Value[19],
+ m_Value[20], m_Value[21], m_Value[22], m_Value[23]
);
}
else
@@ -107,8 +98,10 @@ ASDCP::UMID::ToString(char* str_buf) const
// UUID, use {00112233-4455-6677-8899-aabbccddeeff}
snprintf(str_buf + offset, IdentBufferLen - offset,
"{%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- m_Value[16], m_Value[17], m_Value[18], m_Value[19], m_Value[20], m_Value[21], m_Value[22], m_Value[23],
- m_Value[24], m_Value[25], m_Value[26], m_Value[27], m_Value[28], m_Value[29], m_Value[30], m_Value[31]
+ m_Value[16], m_Value[17], m_Value[18], m_Value[19],
+ m_Value[20], m_Value[21], m_Value[22], m_Value[23],
+ m_Value[24], m_Value[25], m_Value[26], m_Value[27],
+ m_Value[28], m_Value[29], m_Value[30], m_Value[31]
);
}
@@ -125,6 +118,7 @@ ASDCP::UUID::GenRandomValue()
m_Value[6] |= 0x40; // set UUID version
m_Value[8] &= 0x3f; // clear bits 6&7
m_Value[8] |= 0x80; // set bit 7
+ // m_HasValue = true;
}
@@ -155,9 +149,8 @@ ASDCP::MXF::UTF16String::operator=(const char* sz)
ASDCP::Result_t
ASDCP::MXF::UTF16String::Unarchive(ASDCP::MemIOReader& Reader)
{
- const byte_t* p = Reader.Data() + Reader.Offset();
- /// cheating - for all use cases, we know the previous two bytes are the length
- m_length = ASDCP_i16_BE(cp2i<ui16_t>(p-2));
+ const byte_t* p = Reader.CurrentData();
+ m_length = Reader.Remainder();
assert(m_length % 2 == 0);
m_length /= 2;
assert(IdentBufferLen >= m_length);
@@ -174,17 +167,16 @@ ASDCP::MXF::UTF16String::Unarchive(ASDCP::MemIOReader& Reader)
//
ASDCP::Result_t
-ASDCP::MXF::UTF16String::Archive(ASDCP::MemIOWriter& Writer)
+ASDCP::MXF::UTF16String::Archive(ASDCP::MemIOWriter& Writer) const
{
byte_t* p = Writer.Data() + Writer.Size();
ui32_t i = 0;
- m_length = strlen(m_buffer);
- memset(p, 0, m_length*2);
+ memset(p, 0, (m_length*2)+2);
for ( i = 0; i < m_length; i++ )
p[(i*2)+1] = m_buffer[i];
- Writer.AddOffset(m_length * 2 );
+ Writer.AddOffset(m_length * 2);
return RESULT_OK;
}
@@ -505,7 +497,10 @@ ASDCP::MXF::TLVReader::ReadObject(const MDDEntry& Entry, IArchive* Object)
ASDCP_TEST_NULL(Object);
if ( FindTL(Entry) )
- return Object->Unarchive(*this);
+ {
+ if ( m_size < m_capacity ) // don't try to unarchive an empty item
+ return Object->Unarchive(*this);
+ }
return RESULT_FALSE;
}
@@ -596,6 +591,10 @@ ASDCP::Result_t
ASDCP::MXF::TLVWriter::WriteObject(const MDDEntry& Entry, IArchive* Object)
{
ASDCP_TEST_NULL(Object);
+
+ if ( Entry.optional && ! Object->HasValue() )
+ return RESULT_OK;
+
Result_t result = WriteTag(Entry);
// write a temp length
@@ -660,6 +659,56 @@ ASDCP::MXF::TLVWriter::WriteUi64(const MDDEntry& Entry, ui64_t* value)
return result;
}
+
+//----------------------------------------------------------------------------------------------------
+//
+
+ASDCP::MXF::Raw::Raw()
+{
+ Capacity(256);
+}
+
+ASDCP::MXF::Raw::~Raw()
+{
+}
+
+//
+ASDCP::Result_t
+ASDCP::MXF::Raw::Unarchive(ASDCP::MemIOReader& Reader)
+{
+ ui32_t payload_size = Reader.Remainder();
+
+ if ( payload_size == 0 )
+ return RESULT_OK;
+
+ Result_t result = Capacity(payload_size);
+
+ if ( ASDCP_SUCCESS(result) )
+ {
+ memcpy(Data(), Reader.CurrentData(), payload_size);
+ Size(payload_size);
+ }
+
+ return result;
+}
+
+//
+ASDCP::Result_t
+ASDCP::MXF::Raw::Archive(ASDCP::MemIOWriter& Writer) const
+{
+ return Writer.WriteRaw(RoData(), Size());
+}
+
+//
+const char*
+ASDCP::MXF::Raw::ToString(char* str_buf) const
+{
+ *str_buf = 0;
+ bin2hex(RoData(), Size(), str_buf, IdentBufferLen);
+ snprintf(str_buf, IdentBufferLen, "%s\n", str_buf);
+ return str_buf;
+}
+
//
// end MXFTypes.cpp
//
diff --git a/src/MXFTypes.h b/src/MXFTypes.h
index d0638b1..0a6ea72 100755
--- a/src/MXFTypes.h
+++ b/src/MXFTypes.h
@@ -98,14 +98,12 @@ namespace ASDCP
class Batch : public std::vector<T>, public IArchive
{
public:
- ui32_t ItemCount;
- ui32_t ItemSize;
-
- Batch() : ItemCount(0), ItemSize(0) { ItemSize = sizeof(T); }
+ Batch() {}
~Batch() {}
//
Result_t Unarchive(ASDCP::MemIOReader& Reader) {
+ ui32_t ItemCount, ItemSize;
Result_t result = Reader.ReadUi32BE(&ItemCount);
if ( ASDCP_SUCCESS(result) )
@@ -126,14 +124,28 @@ namespace ASDCP
return result;
}
+ inline bool HasValue() const { return ! empty(); }
+
//
- Result_t Archive(ASDCP::MemIOWriter& Writer) {
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const {
Result_t result = Writer.WriteUi32BE(size());
+ byte_t* p = Writer.CurrentData();
if ( ASDCP_SUCCESS(result) )
- result = Writer.WriteUi32BE(ItemSize);
+ result = Writer.WriteUi32BE(0);
+
+ if ( ASDCP_FAILURE(result) || empty() )
+ return result;
+
+ typename std::vector<T>::const_iterator l_i = begin();
+ assert(l_i != end());
+
+ ui32_t ItemSize = Writer.Remainder();
+ result = (*l_i).Archive(Writer);
+ ItemSize -= Writer.Remainder();
+ i2p<ui32_t>(ASDCP_i32_BE(ItemSize), p);
+ l_i++;
- typename std::vector<T>::iterator l_i = begin();
for ( ; l_i != end() && ASDCP_SUCCESS(result); l_i++ )
result = (*l_i).Archive(Writer);
@@ -175,10 +187,12 @@ namespace ASDCP
return RESULT_OK;
}
+ inline bool HasValue() const { return ! empty(); }
+
//
- Result_t Archive(ASDCP::MemIOWriter& Writer) {
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const {
Result_t result = RESULT_OK;
- typename std::list<T>::iterator l_i = begin();
+ typename std::list<T>::const_iterator l_i = begin();
for ( ; l_i != end() && ASDCP_SUCCESS(result); l_i++ )
result = (*l_i).Archive(Writer);
@@ -244,8 +258,10 @@ namespace ASDCP
return result;
}
+ inline bool HasValue() const { return true; }
+
//
- inline Result_t Archive(ASDCP::MemIOWriter& Writer) {
+ inline Result_t Archive(ASDCP::MemIOWriter& Writer) const {
Result_t result = Writer.WriteUi16BE(Year);
if ( ASDCP_SUCCESS(result) )
@@ -260,6 +276,7 @@ namespace ASDCP
{
ui16_t m_length;
char m_buffer[IdentBufferLen];
+ ASDCP_NO_COPY_CONSTRUCT(UTF16String);
public:
UTF16String() : m_length(0) { *m_buffer = 0; }
@@ -274,7 +291,8 @@ namespace ASDCP
}
Result_t Unarchive(ASDCP::MemIOReader& Reader);
- Result_t Archive(ASDCP::MemIOWriter& Writer);
+ inline bool HasValue() const { return true; }
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const;
};
//
@@ -321,7 +339,9 @@ namespace ASDCP
return result;
}
- Result_t Archive(ASDCP::MemIOWriter& Writer) {
+ inline bool HasValue() const { return true; }
+
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const {
Result_t result = Writer.WriteUi32BE((ui32_t)Numerator);
if ( ASDCP_SUCCESS(result) )
@@ -349,7 +369,7 @@ namespace ASDCP
void Dump(FILE* = 0);
const char* ToString(char* str_buf) const {
- snprintf(str_buf, IdentBufferLen, "%hu.%hu.%hu.%hu.%hu", Major, Minor, Patch, Build, Release);
+ snprintf(str_buf, IdentBufferLen, "%hu.%hu.%hu.%hur%hu", Major, Minor, Patch, Build, Release);
return str_buf;
}
@@ -368,52 +388,32 @@ namespace ASDCP
return result;
}
- Result_t Archive(ASDCP::MemIOWriter& Writer) {
- Result_t result = Writer.WriteUi32BE(Major);
- if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi32BE(Minor);
- if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi32BE(Patch);
- if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi32BE(Build);
- if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi32BE((ui16_t)(Release & 0x0000ffffL));
+ inline bool HasValue() const { return true; }
+
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const {
+ Result_t result = Writer.WriteUi16BE(Major);
+ if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi16BE(Minor);
+ if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi16BE(Patch);
+ if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi16BE(Build);
+ if ( ASDCP_SUCCESS(result) ) result = Writer.WriteUi16BE((ui16_t)(Release & 0x0000ffffL));
return result;
}
};
//
- class RGBLayout : public IArchive
- {
- public:
- struct element {
- ui8_t Code;
- ui8_t Depth;
- } PictureElement[8];
- RGBLayout() { memset(PictureElement, 0, sizeof(PictureElement)); }
-
- //
- Result_t Unarchive(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
- Result_t Archive(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
- inline const char* ToString(char* str_buf) const {
- snprintf(str_buf, IdentBufferLen, "RGBLayout: <PictureElement[8]>\n");
- return str_buf;
- }
- };
-
- //
- class Raw : public IArchive
+ class Raw : public ASDCP::FrameBuffer, public IArchive
{
ASDCP_NO_COPY_CONSTRUCT(Raw);
public:
- byte_t* data;
- Raw() {}
- ~Raw() {}
+ Raw();
+ ~Raw();
//
- Result_t Unarchive(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
- Result_t Archive(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
- inline const char* ToString(char* str_buf) const {
- snprintf(str_buf, IdentBufferLen, "RAW\n");
- return str_buf;
- }
+ Result_t Unarchive(ASDCP::MemIOReader& Reader);
+ inline bool HasValue() const { return true; }
+ Result_t Archive(ASDCP::MemIOWriter& Writer) const;
+ const char* ToString(char* str_buf) const;
};
} // namespace MXF
diff --git a/src/Metadata.cpp b/src/Metadata.cpp
index 00bf99e..d4cc819 100755
--- a/src/Metadata.cpp
+++ b/src/Metadata.cpp
@@ -1157,7 +1157,6 @@ ASDCP::MXF::RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(RGBAEssenceDescriptor, ComponentMaxRef));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(RGBAEssenceDescriptor, ComponentMinRef));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(RGBAEssenceDescriptor, PixelLayout));
return result;
}
@@ -1168,7 +1167,6 @@ ASDCP::MXF::RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, ComponentMaxRef));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, ComponentMinRef));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, PixelLayout));
return result;
}
@@ -1185,7 +1183,6 @@ ASDCP::MXF::RGBAEssenceDescriptor::Dump(FILE* stream)
GenericPictureEssenceDescriptor::Dump(stream);
fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef);
fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef);
- fprintf(stream, " %22s = %s\n", "PixelLayout", PixelLayout.ToString(identbuf));
}
//
diff --git a/src/Metadata.h b/src/Metadata.h
index eb89061..f158194 100755
--- a/src/Metadata.h
+++ b/src/Metadata.h
@@ -401,7 +401,6 @@ namespace ASDCP
public:
ui32_t ComponentMaxRef;
ui32_t ComponentMinRef;
- RGBLayout PixelLayout;
RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
virtual ~RGBAEssenceDescriptor() {}
diff --git a/src/PCM_Parser.cpp b/src/PCM_Parser.cpp
index 70cc277..9262de7 100755
--- a/src/PCM_Parser.cpp
+++ b/src/PCM_Parser.cpp
@@ -94,22 +94,42 @@ ASDCP::Result_t
ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const char* filename, const Rational& PictureRate)
{
ASDCP_TEST_NULL_STR(filename);
- SimpleWaveHeader WavHeader;
Result_t result = m_FileReader.OpenRead(filename);
if ( ASDCP_SUCCESS(result) )
- result = WavHeader.ReadFromFile(m_FileReader, &m_DataStart);
-
- if ( ASDCP_SUCCESS(result) )
{
- WavHeader.FillADesc(m_ADesc, PictureRate);
- m_FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(m_ADesc);
- m_DataLength = WavHeader.data_len;
- m_ADesc.ContainerDuration = m_DataLength / m_FrameBufferSize;
- Reset();
+ SimpleWaveHeader WavHeader;
+ result = WavHeader.ReadFromFile(m_FileReader, &m_DataStart);
+
+ if ( ASDCP_SUCCESS(result) )
+ {
+ WavHeader.FillADesc(m_ADesc, PictureRate);
+ m_FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(m_ADesc);
+ m_DataLength = WavHeader.data_len;
+ m_ADesc.ContainerDuration = m_DataLength / m_FrameBufferSize;
+ Reset();
+ }
+ else
+ {
+ ASDCP::AIFF::SimpleAIFFHeader AIFFHeader;
+ m_FileReader.Seek(0);
+
+ result = AIFFHeader.ReadFromFile(m_FileReader, &m_DataStart);
+
+ if ( ASDCP_SUCCESS(result) )
+ {
+ AIFFHeader.FillADesc(m_ADesc, PictureRate);
+ m_FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(m_ADesc);
+ m_DataLength = AIFFHeader.data_len;
+ m_ADesc.ContainerDuration = m_DataLength / m_FrameBufferSize;
+ Reset();
+ }
+ }
}
+ AudioDescriptorDump(m_ADesc);
+
return result;
}
diff --git a/src/Wav.cpp b/src/Wav.cpp
index 42e0d21..ce64a78 100755
--- a/src/Wav.cpp
+++ b/src/Wav.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2005, John Hurst
+Copyright (c) 2005-2006, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -29,11 +29,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\brief Wave file common elements
*/
-#include <Wav.h>
+#include "Wav.h"
+#include "hex_utils.h"
#include <assert.h>
-const ui32_t SimpleHeaderLength = 46;
+const ui32_t SimpleWavHeaderLength = 46;
//
ASDCP::Wav::SimpleWaveHeader::SimpleWaveHeader(ASDCP::PCM::AudioDescriptor& ADesc)
@@ -71,7 +72,7 @@ ASDCP::Result_t
ASDCP::Wav::SimpleWaveHeader::WriteToFile(ASDCP::FileWriter& OutFile) const
{
ui32_t write_count;
- byte_t tmp_header[SimpleHeaderLength];
+ byte_t tmp_header[SimpleWavHeaderLength];
byte_t* p = tmp_header;
static ui32_t fmt_len =
@@ -83,7 +84,7 @@ ASDCP::Wav::SimpleWaveHeader::WriteToFile(ASDCP::FileWriter& OutFile) const
+ sizeof(bitspersample)
+ sizeof(cbsize);
- ui32_t RIFF_len = data_len + SimpleHeaderLength - 8;
+ ui32_t RIFF_len = data_len + SimpleWavHeaderLength - 8;
memcpy(p, &FCC_RIFF, sizeof(fourcc)); p += 4;
*((ui32_t*)p) = ASDCP_i32_LE(RIFF_len); p += 4;
@@ -100,7 +101,7 @@ ASDCP::Wav::SimpleWaveHeader::WriteToFile(ASDCP::FileWriter& OutFile) const
memcpy(p, &FCC_data, sizeof(fourcc)); p += 4;
*((ui32_t*)p) = ASDCP_i32_LE(data_len); p += 4;
- return OutFile.Write(tmp_header, SimpleHeaderLength, &write_count);
+ return OutFile.Write(tmp_header, SimpleWavHeaderLength, &write_count);
}
//
@@ -125,7 +126,7 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromFile(const ASDCP::FileReader& InFile, ui32
ASDCP::Result_t
ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start)
{
- if ( buf_len < SimpleHeaderLength )
+ if ( buf_len < SimpleWavHeaderLength )
return RESULT_SMALLBUF;
*data_start = 0;
@@ -135,7 +136,7 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len,
fourcc test_RIFF(p); p += 4;
if ( test_RIFF != FCC_RIFF )
{
- DefaultLogSink().Error("Files does not begin with RIFF header\n");
+ DefaultLogSink().Error("File does not begin with RIFF header\n");
return RESULT_RAW_FORMAT;
}
@@ -144,7 +145,7 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len,
fourcc test_WAVE(p); p += 4;
if ( test_WAVE != FCC_WAVE )
{
- DefaultLogSink().Error("Files does not begin with WAVE header\n");
+ DefaultLogSink().Error("File does not contain a WAVE header\n");
return RESULT_RAW_FORMAT;
}
@@ -200,6 +201,166 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len,
return RESULT_OK;
}
+//------------------------------------------------------------------------------------------
+// conversion algorithms from http://www.borg.com/~jglatt/tech/aiff.htm
+
+//
+void
+Rat_to_extended(ASDCP::Rational rate, byte_t* buf)
+{
+ memset(buf, 0, 10);
+ ui32_t value = (ui32_t)ceil(rate.Quotient());
+ ui32_t exp = value;
+ exp >>= 1;
+ ui8_t i = 0;
+
+ for ( ; i < 32; i++ )
+ {
+ exp >>= 1;
+ if ( ! exp )
+ break;
+ }
+
+ *(buf+1) = i;
+
+ for ( i = 32; i != 0 ; i-- )
+ {
+ if ( value & 0x80000000 )
+ break;
+ value <<= 1;
+ }
+
+ *(ui32_t*)(buf+2) = ASDCP_i32_BE(value);
+}
+
+//
+ASDCP::Rational
+extended_to_Rat(const byte_t* buf)
+{
+ ui32_t last = 0;
+ ui32_t mantissa = ASDCP_i32_BE(*(ui32_t*)(buf+2));
+
+ byte_t exp = 30 - *(buf+1);
+
+ while ( exp-- )
+ {
+ last = mantissa;
+ mantissa >>= 1;
+ }
+
+ if ( last & 0x00000001 )
+ mantissa++;
+
+ return ASDCP::Rational(mantissa, 1);
+}
+
+//
+void
+ASDCP::AIFF::SimpleAIFFHeader::FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, ASDCP::Rational PictureRate) const
+{
+ ADesc.SampleRate = PictureRate;
+
+ ADesc.ChannelCount = numChannels;
+ ADesc.AudioSamplingRate = extended_to_Rat(sampleRate);
+ ADesc.QuantizationBits = sampleSize;
+ ADesc.BlockAlign = sampleSize / 8;
+ ADesc.AvgBps = ADesc.BlockAlign * (ui32_t)ceil(ADesc.AudioSamplingRate.Quotient());
+ ui32_t FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(ADesc);
+ ADesc.ContainerDuration = data_len / FrameBufferSize;
+}
+
+//
+ASDCP::Result_t
+ASDCP::AIFF::SimpleAIFFHeader::ReadFromFile(const ASDCP::FileReader& InFile, ui32_t* data_start)
+{
+ ui32_t read_count = 0;
+ ui32_t local_data_start = 0;
+ ASDCP::PCM::FrameBuffer TmpBuffer(Wav::MaxWavHeader);
+
+ if ( data_start == 0 )
+ data_start = &local_data_start;
+
+ Result_t result = InFile.Read(TmpBuffer.Data(), TmpBuffer.Capacity(), &read_count);
+
+ if ( ASDCP_SUCCESS(result) )
+ result = ReadFromBuffer(TmpBuffer.RoData(), read_count, data_start);
+
+ return result;
+}
+
+//
+ASDCP::Result_t
+ASDCP::AIFF::SimpleAIFFHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start)
+{
+ if ( buf_len < 32 )
+ return RESULT_SMALLBUF;
+
+ *data_start = 0;
+ const byte_t* p = buf;
+ const byte_t* end_p = p + buf_len;
+
+ fourcc test_FORM(p); p += 4;
+ if ( test_FORM != FCC_FORM )
+ {
+ DefaultLogSink().Error("File does not begin with FORM header\n");
+ return RESULT_RAW_FORMAT;
+ }
+
+ ui32_t RIFF_len = ASDCP_i32_BE(*(ui32_t*)p); p += 4;
+
+ fourcc test_AIFF(p); p += 4;
+ if ( test_AIFF != FCC_AIFF )
+ {
+ DefaultLogSink().Error("File does not contain an AIFF header\n");
+ return RESULT_RAW_FORMAT;
+ }
+
+ fourcc test_fcc;
+
+ while ( p < end_p )
+ {
+ test_fcc = fourcc(p); p += 4;
+ ui32_t chunk_size = ASDCP_i32_BE(*(ui32_t*)p); p += 4;
+
+ if ( test_fcc == FCC_COMM )
+ {
+ numChannels = ASDCP_i16_BE(*(ui16_t*)p); p += 2;
+ numSampleFrames = ASDCP_i32_BE(*(ui32_t*)p); p += 4;
+ sampleSize = ASDCP_i16_BE(*(ui16_t*)p); p += 2;
+ memcpy(sampleRate, p, 10);
+ p += 10;
+ }
+ else if ( test_fcc == FCC_SSND )
+ {
+ if ( chunk_size > RIFF_len )
+ {
+ DefaultLogSink().Error("Chunk size %lu larger than file: %lu\n", chunk_size, RIFF_len);
+ return RESULT_RAW_FORMAT;
+ }
+
+ ui32_t offset = ASDCP_i32_BE(*(ui32_t*)p); p += 4;
+ p += 4; // blockSize;
+
+ data_len = chunk_size - 8;
+ *data_start = (p - buf) + offset;
+ fprintf(stderr, "*data_start: %p\n", *data_start);
+ break;
+ }
+ else
+ {
+ p += chunk_size;
+ }
+ }
+
+ if ( *data_start == 0 ) // can't have no data!
+ {
+ DefaultLogSink().Error("No data chunk found, file contains no essence\n");
+ return RESULT_RAW_FORMAT;
+ }
+
+ return RESULT_OK;
+}
+
//
diff --git a/src/Wav.h b/src/Wav.h
index a04c92f..efd99c0 100755
--- a/src/Wav.h
+++ b/src/Wav.h
@@ -36,10 +36,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace ASDCP
{
-namespace Wav
-{
- const ui32_t MaxWavHeader = 1024*32; // must find "data" within this space or no happy
-
//
class fourcc
{
@@ -55,37 +51,69 @@ namespace Wav
inline bool operator!=(const fourcc &rhs) { return memcmp(data, rhs.data, 4) != 0 ? true : false; }
};
- const fourcc FCC_RIFF("RIFF");
- const fourcc FCC_WAVE("WAVE");
- const fourcc FCC_fmt_("fmt ");
- const fourcc FCC_data("data");
+ namespace AIFF
+ {
+ const fourcc FCC_FORM("FORM");
+ const fourcc FCC_AIFF("AIFF");
+ const fourcc FCC_COMM("COMM");
+ const fourcc FCC_SSND("SSND");
+
+ class SimpleAIFFHeader
+ {
+ public:
+ ui16_t numChannels;
+ ui32_t numSampleFrames;
+ ui16_t sampleSize;
+ byte_t sampleRate[10]; // 80-bit IEEE 754 float
+ ui32_t data_len;
- //
- class SimpleWaveHeader
+ SimpleAIFFHeader() :
+ numChannels(0), numSampleFrames(0), sampleSize(0), data_len(0) {
+ memset(sampleRate, 0, 10);
+ }
+
+ Result_t ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start);
+ Result_t ReadFromFile(const ASDCP::FileReader& InFile, ui32_t* data_start);
+ void FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, Rational PictureRate) const;
+ };
+
+ } // namespace AIFF
+
+ namespace Wav
{
- public:
- ui16_t format;
- ui16_t nchannels;
- ui32_t samplespersec;
- ui32_t avgbps;
- ui16_t blockalign;
- ui16_t bitspersample;
- ui16_t cbsize;
- ui32_t data_len;
-
- SimpleWaveHeader() :
- format(0), nchannels(0), samplespersec(0), avgbps(0),
- blockalign(0), bitspersample(0), cbsize(0), data_len(0) {}
-
- SimpleWaveHeader(ASDCP::PCM::AudioDescriptor& ADesc);
+ const ui32_t MaxWavHeader = 1024*32; // must find "data" within this space or no happy
- Result_t ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start);
- Result_t ReadFromFile(const ASDCP::FileReader& InFile, ui32_t* data_start);
- Result_t WriteToFile(ASDCP::FileWriter& OutFile) const;
- void FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, Rational PictureRate) const;
- };
+ const fourcc FCC_RIFF("RIFF");
+ const fourcc FCC_WAVE("WAVE");
+ const fourcc FCC_fmt_("fmt ");
+ const fourcc FCC_data("data");
+
+ //
+ class SimpleWaveHeader
+ {
+ public:
+ ui16_t format;
+ ui16_t nchannels;
+ ui32_t samplespersec;
+ ui32_t avgbps;
+ ui16_t blockalign;
+ ui16_t bitspersample;
+ ui16_t cbsize;
+ ui32_t data_len;
+
+ SimpleWaveHeader() :
+ format(0), nchannels(0), samplespersec(0), avgbps(0),
+ blockalign(0), bitspersample(0), cbsize(0), data_len(0) {}
+
+ SimpleWaveHeader(ASDCP::PCM::AudioDescriptor& ADesc);
+
+ Result_t ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start);
+ Result_t ReadFromFile(const ASDCP::FileReader& InFile, ui32_t* data_start);
+ Result_t WriteToFile(ASDCP::FileWriter& OutFile) const;
+ void FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, Rational PictureRate) const;
+ };
-} // namespace Wav
+ } // namespace Wav
} // namespace ASDCP
#endif // _WAV_H_
diff --git a/src/h__Reader.cpp b/src/h__Reader.cpp
index 95c510c..4e20a98 100755
--- a/src/h__Reader.cpp
+++ b/src/h__Reader.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2004-2005, John Hurst
+Copyright (c) 2004-2006, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -99,23 +99,9 @@ ASDCP::h__Reader::OpenMXFRead(const char* filename)
if ( ASDCP_SUCCESS(result) )
result = m_HeaderPart.InitFromFile(m_File);
- // OP-Atom states that there will be either two or three partitions,
- // one closed header and one closed footer with an optional body
- ui32_t test_s = m_HeaderPart.m_RIP.PairArray.size();
-
- if ( test_s < 2 || test_s > 3 )
- {
- DefaultLogSink().Error("RIP count is not 2 or 3: %lu\n", test_s);
- return RESULT_FORMAT;
- }
-
- // it really OP-Atom?
- // MDObject* OpPattern = GetMDObjectByType("OperationalPattern");
- // TODO: check the label
-
// if this is a three partition file, go to the body
// partition and read off the partition pack
- if ( test_s == 3 )
+ if ( m_HeaderPart.m_RIP.PairArray.size() == 3 )
{
DefaultLogSink().Error("RIP count is 3: must write code...\n");
return RESULT_FORMAT;
@@ -183,12 +169,11 @@ ASDCP::h__Reader::ReadEKLVPacket(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf,
return result;
UL Key(Reader.Key());
- UL InteropRef(CryptEssenceUL_Data);
- UL SMPTERef(CryptEssenceUL_Data);
+ UL CryptEssenceUL(Dict::ul(MDD_CryptEssence));
ui64_t PacketLength = Reader.Length();
m_LastPosition = m_LastPosition + Reader.KLLength() + PacketLength;
- if ( Key == InteropRef || Key == SMPTERef )
+ if ( Key == CryptEssenceUL )
{
if ( ! m_Info.EncryptedEssence )
{
@@ -235,11 +220,11 @@ ASDCP::h__Reader::ReadEKLVPacket(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf,
ess_p += sizeof(ui64_t);
// read essence UL length
- if ( ! read_test_BER(&ess_p, klv_key_size) )
+ if ( ! read_test_BER(&ess_p, SMPTE_UL_LENGTH) )
return RESULT_FORMAT;
// TODO: test essence UL
- ess_p += klv_key_size;
+ ess_p += SMPTE_UL_LENGTH;
// read SourceLength length
if ( ! read_test_BER(&ess_p, sizeof(ui64_t)) )
@@ -336,7 +321,12 @@ ASDCP::h__Reader::ReadEKLVPacket(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf,
}
else
{
- DefaultLogSink().Error("Unexpected UL found.\n");
+ char strbuf[IntBufferLen];
+ const MDDEntry* Entry = Dict::FindUL(Key.Value());
+ if ( Entry == 0 )
+ DefaultLogSink().Warn("Unexpected Essence UL found: %s.\n", Key.ToString(strbuf));
+ else
+ DefaultLogSink().Warn("Unexpected Essence UL found: %s.\n", Entry->name);
return RESULT_FORMAT;
}
diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp
index cd51391..3c2b97b 100755
--- a/src/h__Writer.cpp
+++ b/src/h__Writer.cpp
@@ -31,21 +31,24 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "AS_DCP_internal.h"
#include "MemIO.h"
-#include "Timecode.h"
#include "KLV.h"
using namespace ASDCP;
using namespace ASDCP::MXF;
// a magic number identifying asdcplib
-#ifndef WM_BUILD_NUMBER
-#define WM_BUILD_NUMBER 0x4A48
+#ifndef ASDCP_BUILD_NUMBER
+#define ASDCP_BUILD_NUMBER 0x4A48
#endif
//
-ASDCP::h__Writer::h__Writer() : m_EssenceDescriptor(0), m_FramesWritten(0), m_StreamOffset(0)
+ASDCP::h__Writer::h__Writer() :
+ m_HeaderSize(0), m_EssenceStart(0),
+ m_MaterialPackage(0), m_MPTCSequence(0), m_MPTimecode(0), m_MPClSequence(0), m_MPClip(0),
+ m_FilePackage(0), m_FPTCSequence(0), m_FPTimecode(0), m_FPClSequence(0), m_FPClip(0),
+ m_EssenceDescriptor(0), m_FramesWritten(0), m_StreamOffset(0)
{
}
@@ -54,23 +57,6 @@ ASDCP::h__Writer::~h__Writer()
}
-const byte_t PictDD_Data[SMPTE_UL_LENGTH] = {
- 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
- 0x01, 0x03, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 };
-
-const byte_t SoundDD_Data[SMPTE_UL_LENGTH] = {
- 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
- 0x01, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00 };
-
-const byte_t TCDD_Data[SMPTE_UL_LENGTH] = {
- 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
- 0x01, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 };
-
-const byte_t DMDD_Data[SMPTE_UL_LENGTH] = {
- 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01,
- 0x01, 0x03, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00 };
-
-
//
// add DMS CryptographicFramework entry to source package
void
@@ -86,7 +72,7 @@ AddDMScrypt(Partition& HeaderPart, SourcePackage& Package, WriterInfo& Descr, co
Sequence* Seq = new Sequence;
HeaderPart.AddChildObject(Seq);
NewTrack->Sequence = Seq->InstanceUID;
- Seq->DataDefinition = UL(DMDD_Data);
+ Seq->DataDefinition = UL(Dict::ul(MDD_DescriptiveMetaDataDef));
DMSegment* Segment = new DMSegment;
HeaderPart.AddChildObject(Segment);
@@ -103,14 +89,15 @@ AddDMScrypt(Partition& HeaderPart, SourcePackage& Package, WriterInfo& Descr, co
Context->ContextID.Set(Descr.ContextID);
Context->SourceEssenceContainer = WrappingUL; // ??????
- Context->CipherAlgorithm.Set(CipherAlgorithm_AES);
- Context->MICAlgorithm.Set( Descr.UsesHMAC ? MICAlgorithm_HMAC_SHA1 : MICAlgorithm_NONE );
+ Context->CipherAlgorithm.Set(Dict::ul(MDD_CipherAlgorithm_AES));
+ Context->MICAlgorithm.Set( Descr.UsesHMAC ? Dict::ul(MDD_MICAlgorithm_HMAC_SHA1) : Dict::ul(MDD_MICAlgorithm_NONE) );
Context->CryptographicKeyID.Set(Descr.CryptographicKeyID);
}
//
Result_t
ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& WrappingUL,
+ const std::string& TrackName, const UL& DataDefinition,
const MXF::Rational& EditRate,
ui32_t TCFrameRate, ui32_t BytesPerEditUnit)
{
@@ -122,7 +109,7 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
// Set the Operational Pattern label -- we're just starting and have no RIP or index,
// so we tell the world by using OP1a
- m_HeaderPart.m_Preface->OperationalPattern = UL(OP1aUL);
+ m_HeaderPart.m_Preface->OperationalPattern = UL(Dict::ul(MDD_OP1a));
m_HeaderPart.OperationalPattern = m_HeaderPart.m_Preface->OperationalPattern;
m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(1, 0)); // First RIP Entry
@@ -138,12 +125,12 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
Ident->ProductName = m_Info.ProductName.c_str();
Ident->VersionString = m_Info.ProductVersion.c_str();
Ident->ProductUID.Set(m_Info.ProductUUID);
- // Ident->Platform = WM_PLATFORM;
- Ident->ToolkitVersion.Release = VersionType::RL_DEVELOPMENT;
+ // Ident->Platform = "Foonix"; // ASDCP_PLATFORM;
Ident->ToolkitVersion.Major = VERSION_MAJOR;
Ident->ToolkitVersion.Minor = VERSION_APIMINOR;
Ident->ToolkitVersion.Patch = VERSION_IMPMINOR;
- Ident->ToolkitVersion.Build = WM_BUILD_NUMBER;
+ Ident->ToolkitVersion.Build = ASDCP_BUILD_NUMBER;
+ Ident->ToolkitVersion.Release = VersionType::RL_DEVELOPMENT;
//
ContentStorage* Storage = new ContentStorage;
@@ -160,7 +147,7 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
// Material Package
//
UMID PackageUMID;
- PackageUMID.MakeUMID(0x0d); // Using mixed type. What is the actual type?
+ PackageUMID.MakeUMID(0x0f); // unidentified essence
m_MaterialPackage = new MaterialPackage;
m_MaterialPackage->Name = "AS-DCP Material Package";
@@ -177,17 +164,17 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
NewTrack->TrackID = 1;
NewTrack->TrackName = "Timecode Track";
- Sequence* Seq = new Sequence;
- m_HeaderPart.AddChildObject(Seq);
- NewTrack->Sequence = Seq->InstanceUID;
- Seq->DataDefinition = UL(TCDD_Data);
+ m_MPTCSequence = new Sequence;
+ m_HeaderPart.AddChildObject(m_MPTCSequence);
+ NewTrack->Sequence = m_MPTCSequence->InstanceUID;
+ m_MPTCSequence->DataDefinition = UL(Dict::ul(MDD_TimecodeDataDef));
m_MPTimecode = new TimecodeComponent;
m_HeaderPart.AddChildObject(m_MPTimecode);
- Seq->StructuralComponents.push_back(m_MPTimecode->InstanceUID);
+ m_MPTCSequence->StructuralComponents.push_back(m_MPTimecode->InstanceUID);
m_MPTimecode->RoundedTimecodeBase = TCFrameRate;
m_MPTimecode->StartTimecode = ui64_C(0);
- m_MPTimecode->DataDefinition = UL(TCDD_Data);
+ m_MPTimecode->DataDefinition = UL(Dict::ul(MDD_TimecodeDataDef));
// Essence Track
NewTrack = new Track;
@@ -195,15 +182,17 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
NewTrack->EditRate = EditRate;
m_MaterialPackage->Tracks.push_back(NewTrack->InstanceUID);
NewTrack->TrackID = 2;
- NewTrack->TrackName = "Essence Track";
+ NewTrack->TrackName = TrackName.c_str();
- Seq = new Sequence;
- m_HeaderPart.AddChildObject(Seq);
- NewTrack->Sequence = Seq->InstanceUID;
+ m_MPClSequence = new Sequence;
+ m_HeaderPart.AddChildObject(m_MPClSequence);
+ NewTrack->Sequence = m_MPClSequence->InstanceUID;
+ m_MPClSequence->DataDefinition = DataDefinition;
m_MPClip = new SourceClip;
m_HeaderPart.AddChildObject(m_MPClip);
- Seq->StructuralComponents.push_back(m_MPClip->InstanceUID);
+ m_MPClSequence->StructuralComponents.push_back(m_MPClip->InstanceUID);
+ m_MPClip->DataDefinition = DataDefinition;
//
// File (Source) Package
@@ -229,17 +218,17 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
NewTrack->TrackID = 1;
NewTrack->TrackName = "Timecode Track";
- Seq = new Sequence;
- m_HeaderPart.AddChildObject(Seq);
- NewTrack->Sequence = Seq->InstanceUID;
- Seq->DataDefinition = UL(TCDD_Data);
+ m_FPTCSequence = new Sequence;
+ m_HeaderPart.AddChildObject(m_FPTCSequence);
+ NewTrack->Sequence = m_FPTCSequence->InstanceUID;
+ m_FPTCSequence->DataDefinition = UL(Dict::ul(MDD_TimecodeDataDef));
m_FPTimecode = new TimecodeComponent;
m_HeaderPart.AddChildObject(m_FPTimecode);
- Seq->StructuralComponents.push_back(m_FPTimecode->InstanceUID);
+ m_FPTCSequence->StructuralComponents.push_back(m_FPTimecode->InstanceUID);
m_FPTimecode->RoundedTimecodeBase = TCFrameRate;
m_FPTimecode->StartTimecode = ui64_C(86400); // 01:00:00:00
- m_FPTimecode->DataDefinition = UL(TCDD_Data);
+ m_FPTimecode->DataDefinition = UL(Dict::ul(MDD_TimecodeDataDef));
// Essence Track
NewTrack = new Track;
@@ -247,24 +236,23 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
NewTrack->EditRate = EditRate;
m_FilePackage->Tracks.push_back(NewTrack->InstanceUID);
NewTrack->TrackID = 2;
- NewTrack->TrackName = "Essence Track";
+ NewTrack->TrackName = TrackName.c_str();
- Seq = new Sequence;
- m_HeaderPart.AddChildObject(Seq);
- NewTrack->Sequence = Seq->InstanceUID;
+ m_FPClSequence = new Sequence;
+ m_HeaderPart.AddChildObject(m_FPClSequence);
+ NewTrack->Sequence = m_FPClSequence->InstanceUID;
+ m_FPClSequence->DataDefinition = DataDefinition;
m_FPClip = new SourceClip;
m_HeaderPart.AddChildObject(m_FPClip);
- Seq->StructuralComponents.push_back(m_FPClip->InstanceUID);
+ m_FPClSequence->StructuralComponents.push_back(m_FPClip->InstanceUID);
+ m_FPClip->DataDefinition = DataDefinition;
//
// Essence Descriptor
//
m_EssenceDescriptor->EssenceContainer = WrappingUL;
m_EssenceDescriptor->LinkedTrackID = NewTrack->TrackID;
-
- // link the Material Package to the File Package ?????????????????????????????????
- Seq->StructuralComponents.push_back(NewTrack->InstanceUID);
m_HeaderPart.m_Preface->PrimaryPackage = m_FilePackage->InstanceUID;
//
@@ -272,16 +260,15 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
//
if ( m_Info.EncryptedEssence )
{
- UL CryptEssenceUL(WrappingUL_Data_Crypt);
+ UL CryptEssenceUL(Dict::ul(MDD_EncryptedContainerLabel));
m_HeaderPart.EssenceContainers.push_back(CryptEssenceUL);
m_HeaderPart.m_Preface->EssenceContainers.push_back(CryptEssenceUL);
- m_HeaderPart.m_Preface->DMSchemes.push_back(UL(CryptoFrameworkUL_Data));
+ m_HeaderPart.m_Preface->DMSchemes.push_back(UL(Dict::ul(MDD_CryptographicFrameworkLabel)));
AddDMScrypt(m_HeaderPart, *m_FilePackage, m_Info, WrappingUL);
}
else
{
- UL GCUL(GCMulti_Data);
- m_HeaderPart.EssenceContainers.push_back(GCUL);
+ m_HeaderPart.EssenceContainers.push_back(UL(Dict::ul(MDD_GCMulti)));
m_HeaderPart.EssenceContainers.push_back(WrappingUL);
m_HeaderPart.m_Preface->EssenceContainers = m_HeaderPart.EssenceContainers;
}
@@ -290,7 +277,7 @@ ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& Wrap
m_FilePackage->Descriptor = m_EssenceDescriptor->InstanceUID;
// Write the header partition
- Result_t result = m_HeaderPart.WriteToFile(m_File, HeaderPadding);
+ Result_t result = m_HeaderPart.WriteToFile(m_File, m_HeaderSize);
//
// Body Partition
@@ -349,7 +336,7 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte
if ( ASDCP_SUCCESS(result) )
{ // write UL
- Overhead.WriteRaw((byte_t*)CryptEssenceUL_Data, klv_key_size);
+ Overhead.WriteRaw(Dict::ul(MDD_CryptEssence), SMPTE_UL_LENGTH);
// construct encrypted triplet header
ui32_t ETLength = klv_cryptinfo_size + m_CtFrameBuf.Size();
@@ -357,18 +344,18 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte
if ( m_Info.UsesHMAC )
ETLength += klv_intpack_size;
else
- ETLength += (klv_length_size * 3); // for empty intpack
+ ETLength += (MXF_BER_LENGTH * 3); // for empty intpack
- Overhead.WriteBER(ETLength, klv_length_size); // write encrypted triplet length
- Overhead.WriteBER(UUIDlen, klv_length_size); // write ContextID length
+ Overhead.WriteBER(ETLength, MXF_BER_LENGTH); // write encrypted triplet length
+ Overhead.WriteBER(UUIDlen, MXF_BER_LENGTH); // write ContextID length
Overhead.WriteRaw(m_Info.ContextID, UUIDlen); // write ContextID
- Overhead.WriteBER(sizeof(ui64_t), klv_length_size); // write PlaintextOffset length
+ Overhead.WriteBER(sizeof(ui64_t), MXF_BER_LENGTH); // write PlaintextOffset length
Overhead.WriteUi64BE(FrameBuf.PlaintextOffset()); // write PlaintextOffset
- Overhead.WriteBER(klv_key_size, klv_length_size); // write essence UL length
- Overhead.WriteRaw((byte_t*)EssenceUL, klv_key_size); // write the essence UL
- Overhead.WriteBER(sizeof(ui64_t), klv_length_size); // write SourceLength length
+ Overhead.WriteBER(SMPTE_UL_LENGTH, MXF_BER_LENGTH); // write essence UL length
+ Overhead.WriteRaw((byte_t*)EssenceUL, SMPTE_UL_LENGTH); // write the essence UL
+ Overhead.WriteBER(sizeof(ui64_t), MXF_BER_LENGTH); // write SourceLength length
Overhead.WriteUi64BE(FrameBuf.Size()); // write SourceLength
- Overhead.WriteBER(m_CtFrameBuf.Size(), klv_length_size); // write ESV length
+ Overhead.WriteBER(m_CtFrameBuf.Size(), MXF_BER_LENGTH); // write ESV length
result = m_File.Writev(Overhead.Data(), Overhead.Size());
}
@@ -395,7 +382,7 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte
else
{ // we still need the var-pack length values if the intpack is empty
for ( ui32_t i = 0; i < 3 ; i++ )
- HMACOverhead.WriteBER(0, klv_length_size);
+ HMACOverhead.WriteBER(0, MXF_BER_LENGTH);
}
// write HMAC
@@ -405,8 +392,8 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte
}
else
{
- Overhead.WriteRaw((byte_t*)EssenceUL, klv_key_size);
- Overhead.WriteBER(FrameBuf.Size(), klv_length_size);
+ Overhead.WriteRaw((byte_t*)EssenceUL, SMPTE_UL_LENGTH);
+ Overhead.WriteBER(FrameBuf.Size(), MXF_BER_LENGTH);
result = m_File.Writev(Overhead.Data(), Overhead.Size());
if ( ASDCP_SUCCESS(result) )
@@ -429,9 +416,13 @@ Result_t
ASDCP::h__Writer::WriteMXFFooter()
{
// Set top-level file package correctly for OP-Atom
+ m_MPTCSequence->Duration = m_FramesWritten;
m_MPTimecode->Duration = m_FramesWritten;
+ m_MPClSequence->Duration = m_FramesWritten;
m_MPClip->Duration = m_FramesWritten;
+ m_FPTCSequence->Duration = m_FramesWritten;
m_FPTimecode->Duration = m_FramesWritten;
+ m_FPClSequence->Duration = m_FramesWritten;
m_FPClip->Duration = m_FramesWritten;
m_EssenceDescriptor->ContainerDuration = m_FramesWritten;
@@ -439,8 +430,8 @@ ASDCP::h__Writer::WriteMXFFooter()
m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(1, here)); // Third RIP Entry
m_HeaderPart.FooterPartition = here;
m_HeaderPart.BodySID = 1;
- m_HeaderPart.IndexSID = m_FooterPart.IndexSID;
- m_HeaderPart.OperationalPattern = UL(OPAtomUL);
+ // m_HeaderPart.IndexSID = m_FooterPart.IndexSID;
+ m_HeaderPart.OperationalPattern = UL(Dict::ul(MDD_OPAtom));
m_HeaderPart.m_Preface->OperationalPattern = m_HeaderPart.OperationalPattern;
m_FooterPart.OperationalPattern = m_HeaderPart.OperationalPattern;
@@ -457,7 +448,7 @@ ASDCP::h__Writer::WriteMXFFooter()
result = m_File.Seek(0);
if ( ASDCP_SUCCESS(result) )
- result = m_HeaderPart.WriteToFile(m_File, HeaderPadding);
+ result = m_HeaderPart.WriteToFile(m_File, m_HeaderSize);
m_File.Close();
return result;