{
}
-
//
// add DMS CryptographicFramework entry to source package
void
// so we tell the world by using OP1a
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(0, 0)); // First RIP Entry
+
+ // First RIP Entry
+ if ( m_Info.LabelSetType == LS_MXF_SMPTE )
+ m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(0, 0)); // 3-part, no essence in header
+ else
+ m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(1, 0)); // 2-part, essence in header
//
// Identification
m_HeaderPart.m_Preface->EssenceContainers = m_HeaderPart.EssenceContainers;
m_HeaderPart.AddChildObject(m_EssenceDescriptor);
+
+ std::list<FileDescriptor*>::iterator sdli = m_EssenceSubDescriptorList.begin();
+ for ( ; sdli != m_EssenceSubDescriptorList.end(); sdli++ )
+ m_HeaderPart.AddChildObject(*sdli);
+
m_FilePackage->Descriptor = m_EssenceDescriptor->InstanceUID;
// Write the header partition
Result_t result = m_HeaderPart.WriteToFile(m_File, m_HeaderSize);
- if ( ASDCP_SUCCESS(result) )
+ // create a body partition of we're writing proper 429-3/OP-Atom
+ if ( ASDCP_SUCCESS(result) && m_Info.LabelSetType == LS_MXF_SMPTE )
{
// Body Partition
m_BodyPart.EssenceContainers = m_HeaderPart.EssenceContainers;
m_BodyPart.ThisPartition = m_File.Tell();
m_BodyPart.BodySID = 1;
UL OPAtomUL(Dict::ul(MDD_OPAtom));
-
- if ( m_Info.LabelSetType == LS_MXF_INTEROP )
- OPAtomUL.Set(Dict::ul(MDD_MXFInterop_OPAtom));
-
m_BodyPart.OperationalPattern = OPAtomUL;
m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(1, m_BodyPart.ThisPartition)); // Second RIP Entry
UL BodyUL(Dict::ul(MDD_ClosedCompleteBodyPartition));
result = m_BodyPart.WriteToFile(m_File, BodyUL);
}
+ else
+ {
+ m_HeaderPart.BodySID = 1;
+ }
if ( ASDCP_SUCCESS(result) )
{
// Index setup
Kumu::fpos_t ECoffset = m_File.Tell();
+ m_FooterPart.IndexSID = 129;
if ( BytesPerEditUnit == 0 )
m_FooterPart.SetIndexParamsVBR(&m_HeaderPart.m_Primer, EditRate, ECoffset);
m_EssenceDescriptor->ContainerDuration = m_FramesWritten;
Kumu::fpos_t here = m_File.Tell();
- m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(0, here)); // Third RIP Entry
+ m_HeaderPart.m_RIP.PairArray.push_back(RIP::Pair(0, here)); // Last RIP Entry
m_HeaderPart.FooterPartition = here;
// re-label the partition
m_HeaderPart.OperationalPattern = OPAtomUL;
m_HeaderPart.m_Preface->OperationalPattern = m_HeaderPart.OperationalPattern;
- m_FooterPart.PreviousPartition = m_BodyPart.ThisPartition;
+ if ( m_Info.LabelSetType == LS_MXF_SMPTE )
+ m_FooterPart.PreviousPartition = m_BodyPart.ThisPartition;
+ else
+ m_FooterPart.PreviousPartition = m_HeaderPart.ThisPartition;
+
m_FooterPart.OperationalPattern = m_HeaderPart.OperationalPattern;
m_FooterPart.EssenceContainers = m_HeaderPart.EssenceContainers;
m_FooterPart.FooterPartition = here;