#endif
+// uncomment to remove MXFGCGenericEssenceMultipleMappings from your AS-02 files
+// #define ASDCP_GCMULTI_PATCH
+
+
#ifdef DEFAULT_MD_DECL
ASDCP::MXF::OP1aHeader *g_OP1aHeader;
ASDCP::MXF::OPAtomIndexFooter *g_OPAtomIndexFooter;
Result_t Write_EKLV_Packet(Kumu::FileWriter& File, const ASDCP::Dictionary& Dict, const MXF::OP1aHeader& HeaderPart,
const ASDCP::WriterInfo& Info, ASDCP::FrameBuffer& CtFrameBuf, ui32_t& FramesWritten,
ui64_t & StreamOffset, const ASDCP::FrameBuffer& FrameBuf, const byte_t* EssenceUL,
+ const ui32_t& MinEssenceElementBerLength,
AESEncContext* Ctx, HMACContext* HMAC);
//
// Reads a Generic Stream Partition payload. Returns RESULT_FORMAT if the SID is
// not present in the RIP, or if the actual partition at ByteOffset does not have
// a matching BodySID value. Encryption is not currently supported.
- Result_t ReadGenericStreamPartitionPayload(const ui32_t sid, ASDCP::FrameBuffer& frame_buf)
+ Result_t ReadGenericStreamPartitionPayload(const ui32_t sid, ASDCP::FrameBuffer& frame_buf,
+ AESDecContext* Ctx, HMACContext* HMAC)
{
Kumu::fpos_t start_offset = 0, end_offset = 0;
ui32_t sequence = 0;
}
else
{
- result = ReadEKLVPacket(0, sequence, frame_buf, m_Dict->ul(MDD_GenericStream_DataElement), 0, 0);
+ result = ReadEKLVPacket(0, sequence, frame_buf, m_Dict->ul(MDD_GenericStream_DataElement), Ctx, HMAC);
}
}
}
if ( mxf_ver == MXFVersion_2004 )
{
m_HeaderPart.MinorVersion = MXF_2004_MinorVersion;
- m_HeaderPart.m_Preface->Version = ((MXF_ObjectModelVersion < 8) | MXF_2004_MinorVersion);
+ m_HeaderPart.m_Preface->Version = ((MXF_ObjectModelVersion << 8) | MXF_2004_MinorVersion);
m_HeaderPart.m_Preface->ObjectModelVersion = MXF_ObjectModelVersion;
}
else
{
assert(mxf_ver == MXFVersion_2011);
m_HeaderPart.MinorVersion = MXF_2011_MinorVersion;
- m_HeaderPart.m_Preface->Version = ((MXF_ObjectModelVersion < 8) | MXF_2011_MinorVersion);
+ m_HeaderPart.m_Preface->Version = ((MXF_ObjectModelVersion << 8) | MXF_2011_MinorVersion);
m_HeaderPart.m_Preface->ObjectModelVersion = MXF_ObjectModelVersion;
}
// Essence Descriptors
//
assert(m_Dict);
+#ifndef ASDCP_GCMULTI_PATCH
UL GenericContainerUL(m_Dict->ul(MDD_GCMulti));
m_HeaderPart.EssenceContainers.push_back(GenericContainerUL);
+#endif
if ( m_Info.EncryptedEssence )
{
if ( KM_SUCCESS(result) )
{
result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, frame_buffer, GenericStream_DataElement.Value(), enc, hmac);
+ m_StreamOffset, frame_buffer, GenericStream_DataElement.Value(),
+ MXF_BER_LENGTH, enc, hmac);
}
}
Result_t CreateBodyPart(const MXF::Rational& EditRate, ui32_t BytesPerEditUnit = 0);
Result_t WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,const byte_t* EssenceUL,
+ const ui32_t& MinEssenceElementBerLength,
AESEncContext* Ctx, HMACContext* HMAC);
Result_t WriteASDCPFooter();
};