diff options
| author | jhurst <jhurst@cinecert.com> | 2018-10-13 21:50:44 +0000 |
|---|---|---|
| committer | jhurst <> | 2018-10-13 21:50:44 +0000 |
| commit | d25eed5c922ac911a92fb568099f8f507d6fca98 (patch) | |
| tree | ab3108fcf69ffeafcb034a18ff259fe0bf826830 /src | |
| parent | 11a6c3d9b3fb6318909d36e6bbc1c4c74450b9f2 (diff) | |
Added BER length minimum value
Diffstat (limited to 'src')
| -rw-r--r-- | src/AS_02_ACES.cpp | 6 | ||||
| -rw-r--r-- | src/AS_02_ISXD.cpp | 2 | ||||
| -rw-r--r-- | src/AS_02_JP2K.cpp | 4 | ||||
| -rw-r--r-- | src/AS_02_PHDR.cpp | 10 | ||||
| -rw-r--r-- | src/AS_02_TimedText.cpp | 5 | ||||
| -rw-r--r-- | src/AS_02_internal.h | 1 | ||||
| -rw-r--r-- | src/AS_DCP_DCData.cpp | 4 | ||||
| -rwxr-xr-x | src/AS_DCP_JP2K.cpp | 2 | ||||
| -rwxr-xr-x | src/AS_DCP_MPEG2.cpp | 2 | ||||
| -rwxr-xr-x | src/AS_DCP_PCM.cpp | 2 | ||||
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 4 | ||||
| -rw-r--r-- | src/h__02_Writer.cpp | 8 | ||||
| -rwxr-xr-x | src/h__Writer.cpp | 30 |
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()); |
