summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2018-10-13 21:50:44 +0000
committerjhurst <>2018-10-13 21:50:44 +0000
commitd25eed5c922ac911a92fb568099f8f507d6fca98 (patch)
treeab3108fcf69ffeafcb034a18ff259fe0bf826830 /src
parent11a6c3d9b3fb6318909d36e6bbc1c4c74450b9f2 (diff)
Added BER length minimum value
Diffstat (limited to 'src')
-rw-r--r--src/AS_02_ACES.cpp6
-rw-r--r--src/AS_02_ISXD.cpp2
-rw-r--r--src/AS_02_JP2K.cpp4
-rw-r--r--src/AS_02_PHDR.cpp10
-rw-r--r--src/AS_02_TimedText.cpp5
-rw-r--r--src/AS_02_internal.h1
-rw-r--r--src/AS_DCP_DCData.cpp4
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp2
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp2
-rwxr-xr-xsrc/AS_DCP_PCM.cpp2
-rw-r--r--src/AS_DCP_TimedText.cpp4
-rw-r--r--src/h__02_Writer.cpp8
-rwxr-xr-xsrc/h__Writer.cpp30
13 files changed, 48 insertions, 32 deletions
diff --git a/src/AS_02_ACES.cpp b/src/AS_02_ACES.cpp
index cac72c4..040e059 100644
--- a/src/AS_02_ACES.cpp
+++ b/src/AS_02_ACES.cpp
@@ -634,7 +634,7 @@ AS_02::Result_t AS_02::ACES::MXFWriter::h__Writer::WriteFrame(const AS_02::ACES:
if(KM_SUCCESS(result))
{
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
m_FramesWritten++;
}
@@ -694,7 +694,9 @@ AS_02::Result_t AS_02::ACES::MXFWriter::h__Writer::WriteAncillaryResource(const
{
ui64_t this_stream_offset = m_StreamOffset; // m_StreamOffset will be changed by the call to Write_EKLV_Packet
- result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten, m_StreamOffset, FrameBuf, GenericStream_DataElement.Value(), Ctx, HMAC);
+ result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
+ m_StreamOffset, FrameBuf, GenericStream_DataElement.Value(),
+ MXF_BER_LENGTH, Ctx, HMAC);
}
return result;
}
diff --git a/src/AS_02_ISXD.cpp b/src/AS_02_ISXD.cpp
index 55c937d..1483bfb 100644
--- a/src/AS_02_ISXD.cpp
+++ b/src/AS_02_ISXD.cpp
@@ -373,7 +373,7 @@ AS_02::ISXD::MXFWriter::h__Writer::WriteFrame(const ASDCP::FrameBuffer& FrameBuf
if ( KM_SUCCESS(result) )
{
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
m_FramesWritten++;
}
diff --git a/src/AS_02_JP2K.cpp b/src/AS_02_JP2K.cpp
index 2d8bfa5..321abfc 100644
--- a/src/AS_02_JP2K.cpp
+++ b/src/AS_02_JP2K.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2011-2016, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
+Copyright (c) 2011-2018, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
John Hurst
All rights reserved.
@@ -399,7 +399,7 @@ AS_02::JP2K::MXFWriter::h__Writer::WriteFrame(const ASDCP::JP2K::FrameBuffer& Fr
if ( KM_SUCCESS(result) )
{
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
m_FramesWritten++;
}
diff --git a/src/AS_02_PHDR.cpp b/src/AS_02_PHDR.cpp
index 61795a3..c08efd0 100644
--- a/src/AS_02_PHDR.cpp
+++ b/src/AS_02_PHDR.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2011-2016, John Hurst
+Copyright (c) 2011-2018, John Hurst
All rights reserved.
@@ -572,7 +572,7 @@ AS_02::PHDR::MXFWriter::h__Writer::WriteFrame(const AS_02::PHDR::FrameBuffer& Fr
ui64_t this_stream_offset = m_StreamOffset; // m_StreamOffset will be changed by the call to Write_EKLV_Packet
result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, FrameBuf, m_EssenceUL, Ctx, HMAC);
+ m_StreamOffset, FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
if ( KM_SUCCESS(result) )
{
@@ -582,7 +582,8 @@ AS_02::PHDR::MXFWriter::h__Writer::WriteFrame(const AS_02::PHDR::FrameBuffer& Fr
result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, metadata_buffer_wrapper, m_MetadataUL, Ctx, HMAC);
+ m_StreamOffset, metadata_buffer_wrapper, m_MetadataUL,
+ MXF_BER_LENGTH, Ctx, HMAC);
}
if ( KM_SUCCESS(result) )
@@ -667,7 +668,8 @@ AS_02::PHDR::MXFWriter::h__Writer::Finalize(const std::string& PHDR_master_metad
tmp_buf.Size(PHDR_master_metadata.size());
result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, tmp_buf, GenericStream_DataElement.Value(), 0, 0);
+ m_StreamOffset, tmp_buf, GenericStream_DataElement.Value(),
+ MXF_BER_LENGTH, 0, 0);
}
}
diff --git a/src/AS_02_TimedText.cpp b/src/AS_02_TimedText.cpp
index 085d34f..6868395 100644
--- a/src/AS_02_TimedText.cpp
+++ b/src/AS_02_TimedText.cpp
@@ -523,7 +523,7 @@ AS_02::TimedText::MXFWriter::h__Writer::WriteTimedTextResource(const std::string
index_entry.StreamOffset = m_StreamOffset;
result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, FrameBuf, m_EssenceUL, Ctx, HMAC);
+ m_StreamOffset, FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
}
if ( KM_SUCCESS(result) )
@@ -620,7 +620,8 @@ AS_02::TimedText::MXFWriter::h__Writer::WriteAncillaryResource(const ASDCP::Time
if ( KM_SUCCESS(result) )
{
result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, FrameBuf, GenericStream_DataElement.Value(), Ctx, HMAC);
+ m_StreamOffset, FrameBuf, GenericStream_DataElement.Value(),
+ MXF_BER_LENGTH, Ctx, HMAC);
}
m_FramesWritten++;
diff --git a/src/AS_02_internal.h b/src/AS_02_internal.h
index c4aee7e..4be764d 100644
--- a/src/AS_02_internal.h
+++ b/src/AS_02_internal.h
@@ -309,6 +309,7 @@ namespace AS_02
virtual ~h__AS02WriterFrame();
Result_t WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,const byte_t* EssenceUL,
+ const ui32_t& MinEssenceElementBerLength,
AESEncContext* Ctx, HMACContext* HMAC);
};
diff --git a/src/AS_DCP_DCData.cpp b/src/AS_DCP_DCData.cpp
index 818af2c..245b46b 100644
--- a/src/AS_DCP_DCData.cpp
+++ b/src/AS_DCP_DCData.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2004-2016, John Hurst
+Copyright (c) 2004-2018, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -495,7 +495,7 @@ ASDCP::DCData::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf,
ui64_t StreamOffset = m_StreamOffset;
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
if ( ASDCP_SUCCESS(result) )
{
diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp
index 25d452f..a4bffc6 100755
--- a/src/AS_DCP_JP2K.cpp
+++ b/src/AS_DCP_JP2K.cpp
@@ -1064,7 +1064,7 @@ lh__Writer::WriteFrame(const JP2K::FrameBuffer& FrameBuf, bool add_index,
ui64_t StreamOffset = m_StreamOffset;
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
if ( ASDCP_SUCCESS(result) && add_index )
{
diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp
index b7877b5..8afa8bc 100755
--- a/src/AS_DCP_MPEG2.cpp
+++ b/src/AS_DCP_MPEG2.cpp
@@ -594,7 +594,7 @@ ASDCP::MPEG2::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESE
Entry.StreamOffset = m_StreamOffset;
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
if ( ASDCP_FAILURE(result) )
return result;
diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp
index 6cf1d42..e7fbff3 100755
--- a/src/AS_DCP_PCM.cpp
+++ b/src/AS_DCP_PCM.cpp
@@ -627,7 +627,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, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
if ( ASDCP_SUCCESS(result) )
m_FramesWritten++;
diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp
index bf0e256..d3c0fa8 100644
--- a/src/AS_DCP_TimedText.cpp
+++ b/src/AS_DCP_TimedText.cpp
@@ -586,7 +586,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::WriteTimedTextResource(const std::string
IndexTableSegment::IndexEntry Entry;
Entry.StreamOffset = m_StreamOffset;
- result = WriteEKLVPacket(FrameBuf, m_EssenceUL, Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
if ( ASDCP_SUCCESS(result) )
{
@@ -625,7 +625,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::WriteAncillaryResource(const ASDCP::Time
Result_t result = GSPart.WriteToFile(m_File, TmpUL);
if ( ASDCP_SUCCESS(result) )
- result = WriteEKLVPacket(FrameBuf, GenericStream_DataElement.Value(), Ctx, HMAC);
+ result = WriteEKLVPacket(FrameBuf, GenericStream_DataElement.Value(), MXF_BER_LENGTH, Ctx, HMAC);
m_FramesWritten++;
return result;
diff --git a/src/h__02_Writer.cpp b/src/h__02_Writer.cpp
index 41765de..9b1c6c6 100644
--- a/src/h__02_Writer.cpp
+++ b/src/h__02_Writer.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2011-2016, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
+Copyright (c) 2011-2018, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
John Hurst
All rights reserved.
@@ -183,12 +183,14 @@ AS_02::h__AS02WriterFrame::~h__AS02WriterFrame() {}
//
Result_t
-AS_02::h__AS02WriterFrame::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,const byte_t* EssenceUL, AESEncContext* Ctx, HMACContext* HMAC)
+AS_02::h__AS02WriterFrame::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,const byte_t* EssenceUL,
+ const ui32_t& MinEssenceElementBerLength,
+ AESEncContext* Ctx, HMACContext* HMAC)
{
ui64_t this_stream_offset = m_StreamOffset; // m_StreamOffset will be changed by the call to Write_EKLV_Packet
Result_t result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, FrameBuf, EssenceUL, Ctx, HMAC);
+ m_StreamOffset, FrameBuf, EssenceUL, MinEssenceElementBerLength, Ctx, HMAC);
if ( KM_SUCCESS(result) )
{
diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp
index 99d835a..71e9ce6 100755
--- a/src/h__Writer.cpp
+++ b/src/h__Writer.cpp
@@ -285,6 +285,11 @@ ASDCP::h__ASDCPWriter::WriteASDCPHeader(const std::string& PackageLabel, const U
AddSourceClip(EditRate, EditRate, TCFrameRate, TrackName, EssenceUL, DataDefinition, PackageLabel);
AddEssenceDescriptor(WrappingUL);
+#ifdef ASDCP_GCMULTI_PATCH
+ UL GenericContainerUL(m_Dict->ul(MDD_GCMulti));
+ m_HeaderPart.EssenceContainers.push_back(GenericContainerUL);
+#endif
+
Result_t result = m_HeaderPart.WriteToFile(m_File, m_HeaderSize);
if ( KM_SUCCESS(result) )
@@ -296,10 +301,12 @@ ASDCP::h__ASDCPWriter::WriteASDCPHeader(const std::string& PackageLabel, const U
//
Result_t
ASDCP::h__ASDCPWriter::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,const byte_t* EssenceUL,
+ const ui32_t& MinEssenceElementBerLength,
AESEncContext* Ctx, HMACContext* HMAC)
{
return Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
- m_StreamOffset, FrameBuf, EssenceUL, Ctx, HMAC);
+ m_StreamOffset, FrameBuf, EssenceUL, MinEssenceElementBerLength,
+ Ctx, HMAC);
}
// standard method of writing the header and footer of a completed MXF file
@@ -358,6 +365,7 @@ Result_t
ASDCP::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)
{
Result_t result = RESULT_OK;
@@ -396,7 +404,7 @@ ASDCP::Write_EKLV_Packet(Kumu::FileWriter& File, const ASDCP::Dictionary& Dict,
// construct encrypted triplet header
ui32_t ETLength = klv_cryptinfo_size + CtFrameBuf.Size();
- ui32_t BER_length = MXF_BER_LENGTH;
+ ui32_t essence_element_BER_length = MinEssenceElementBerLength;
if ( Info.UsesHMAC )
ETLength += klv_intpack_size;
@@ -405,18 +413,18 @@ ASDCP::Write_EKLV_Packet(Kumu::FileWriter& File, const ASDCP::Dictionary& Dict,
if ( ETLength > 0x00ffffff ) // Need BER integer longer than MXF_BER_LENGTH bytes
{
- BER_length = Kumu::get_BER_length_for_value(ETLength);
+ essence_element_BER_length = Kumu::get_BER_length_for_value(ETLength);
// the packet is longer by the difference in expected vs. actual BER length
- ETLength += BER_length - MXF_BER_LENGTH;
+ ETLength += essence_element_BER_length - MXF_BER_LENGTH;
- if ( BER_length == 0 )
+ if ( essence_element_BER_length == 0 )
result = RESULT_KLV_CODING;
}
if ( ASDCP_SUCCESS(result) )
{
- if ( ! ( Overhead.WriteBER(ETLength, BER_length) // write encrypted triplet length
+ if ( ! ( Overhead.WriteBER(ETLength, essence_element_BER_length) // write encrypted triplet length
&& Overhead.WriteBER(UUIDlen, MXF_BER_LENGTH) // write ContextID length
&& Overhead.WriteRaw(Info.ContextID, UUIDlen) // write ContextID
&& Overhead.WriteBER(sizeof(ui64_t), MXF_BER_LENGTH) // write PlaintextOffset length
@@ -425,7 +433,7 @@ ASDCP::Write_EKLV_Packet(Kumu::FileWriter& File, const ASDCP::Dictionary& Dict,
&& 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(CtFrameBuf.Size(), BER_length) ) ) // write ESV length
+ && Overhead.WriteBER(CtFrameBuf.Size(), essence_element_BER_length) ) ) // write ESV length
{
result = RESULT_KLV_CODING;
}
@@ -467,18 +475,18 @@ ASDCP::Write_EKLV_Packet(Kumu::FileWriter& File, const ASDCP::Dictionary& Dict,
}
else
{
- ui32_t BER_length = MXF_BER_LENGTH;
+ ui32_t essence_element_BER_length = MinEssenceElementBerLength;
if ( FrameBuf.Size() > 0x00ffffff ) // Need BER integer longer than MXF_BER_LENGTH bytes
{
- BER_length = Kumu::get_BER_length_for_value(FrameBuf.Size());
+ essence_element_BER_length = Kumu::get_BER_length_for_value(FrameBuf.Size());
- if ( BER_length == 0 )
+ if ( essence_element_BER_length == 0 )
result = RESULT_KLV_CODING;
}
Overhead.WriteRaw((byte_t*)EssenceUL, SMPTE_UL_LENGTH);
- Overhead.WriteBER(FrameBuf.Size(), BER_length);
+ Overhead.WriteBER(FrameBuf.Size(), essence_element_BER_length);
if ( ASDCP_SUCCESS(result) )
result = File.Writev(Overhead.Data(), Overhead.Length());