diff options
| author | mschroffel <mschroffel@cinecert.com> | 2016-05-06 19:35:34 +0000 |
|---|---|---|
| committer | mschroffel <> | 2016-05-06 19:35:34 +0000 |
| commit | d5cac9085e6da19bdfc8e76235a460da0e6e5f7b (patch) | |
| tree | 1a353b6b66d15ae1d2ce1b38e1c27be1bb7b6f65 /src/AS_DCP_DCData.cpp | |
| parent | 44af0118320a49c29a8b39abb4ec1009e4a29589 (diff) | |
update makefile for version roll
Diffstat (limited to 'src/AS_DCP_DCData.cpp')
| -rw-r--r-- | src/AS_DCP_DCData.cpp | 137 |
1 files changed, 84 insertions, 53 deletions
diff --git a/src/AS_DCP_DCData.cpp b/src/AS_DCP_DCData.cpp index e145e1f..5db1482 100644 --- a/src/AS_DCP_DCData.cpp +++ b/src/AS_DCP_DCData.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2004-2013, John Hurst +Copyright (c) 2004-2016, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -32,16 +32,15 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <iostream> #include "AS_DCP.h" -#include "AS_DCP_DCData_internal.h" #include "AS_DCP_internal.h" namespace ASDCP { -namespace DCData -{ - static std::string DC_DATA_PACKAGE_LABEL = "File Package: SMPTE-GC frame wrapping of D-Cinema Generic data"; - static std::string DC_DATA_DEF_LABEL = "D-Cinema Generic Data Track"; -} // namespace DCData + namespace DCData + { + static std::string DC_DATA_PACKAGE_LABEL = "File Package: SMPTE-GC frame wrapping of D-Cinema Generic data"; + static std::string DC_DATA_DEF_LABEL = "D-Cinema Generic Data Track"; + } // namespace DCData } // namespace ASDCP // @@ -75,9 +74,28 @@ ASDCP::DCData::DCDataDescriptorDump(const DCDataDescriptor& DDesc, FILE* stream) //------------------------------------------------------------------------------------------ +typedef std::list<MXF::InterchangeObject*> SubDescriptorList_t; + +class ASDCP::DCData::MXFReader::h__Reader : public ASDCP::h__ASDCPReader +{ + bool m_AtmosLabelCompatibilityMode; + MXF::DCDataDescriptor* m_EssenceDescriptor; + ASDCP_NO_COPY_CONSTRUCT(h__Reader); + h__Reader(); + + public: + DCDataDescriptor m_DDesc; + + h__Reader(const Dictionary& d) : ASDCP::h__ASDCPReader(d), m_AtmosLabelCompatibilityMode(false), m_EssenceDescriptor(0), m_DDesc() {} + ~h__Reader() {} + Result_t OpenRead(const std::string&); + Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); + Result_t MD_to_DCData_DDesc(DCData::DCDataDescriptor& DDesc); +}; + ASDCP::Result_t -ASDCP::DCData::h__Reader::MD_to_DCData_DDesc(DCData::DCDataDescriptor& DDesc) +ASDCP::DCData::MXFReader::h__Reader::MD_to_DCData_DDesc(DCData::DCDataDescriptor& DDesc) { ASDCP_TEST_NULL(m_EssenceDescriptor); MXF::DCDataDescriptor* DDescObj = m_EssenceDescriptor; @@ -91,31 +109,43 @@ ASDCP::DCData::h__Reader::MD_to_DCData_DDesc(DCData::DCDataDescriptor& DDesc) // // ASDCP::Result_t -ASDCP::DCData::h__Reader::OpenRead(const std::string& filename) +ASDCP::DCData::MXFReader::h__Reader::OpenRead(const std::string& filename) { Result_t result = OpenMXFRead(filename); + m_EssenceDescriptor = 0; - if( ASDCP_SUCCESS(result) ) + if( KM_SUCCESS(result) ) { - if (NULL == m_EssenceDescriptor) - { - InterchangeObject* iObj = NULL; - result = m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(DCDataDescriptor), &iObj); - m_EssenceDescriptor = static_cast<MXF::DCDataDescriptor*>(iObj); + InterchangeObject* iObj = 0; + result = m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(DCDataDescriptor), &iObj); - if ( m_EssenceDescriptor == 0 ) + if ( KM_FAILURE(result) ) + { + result = m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(DolbyAtmosDCDataDescriptor), &iObj); + + if ( KM_SUCCESS(result) ) { - DefaultLogSink().Error("DCDataDescriptor object not found.\n"); - return RESULT_FORMAT; + m_AtmosLabelCompatibilityMode = true; } } - if ( ASDCP_SUCCESS(result) ) + if ( KM_SUCCESS(result) ) { - result = MD_to_DCData_DDesc(m_DDesc); + m_EssenceDescriptor = static_cast<MXF::DCDataDescriptor*>(iObj); } } + if ( m_EssenceDescriptor == 0 ) + { + DefaultLogSink().Error("DCDataDescriptor object not found.\n"); + result = RESULT_FORMAT; + } + + if ( KM_SUCCESS(result) ) + { + result = MD_to_DCData_DDesc(m_DDesc); + } + // check for sample/frame rate sanity if ( ASDCP_SUCCESS(result) && m_DDesc.EditRate != EditRate_24 @@ -140,30 +170,22 @@ ASDCP::DCData::h__Reader::OpenRead(const std::string& filename) // // ASDCP::Result_t -ASDCP::DCData::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, +ASDCP::DCData::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { if ( ! m_File.IsOpen() ) return RESULT_INIT; assert(m_Dict); + if ( m_AtmosLabelCompatibilityMode ) + { + return ReadEKLVFrame(FrameNum, FrameBuf, m_Dict->ul(MDD_DolbyAtmosDCDataEssence), Ctx, HMAC); + } + return ReadEKLVFrame(FrameNum, FrameBuf, m_Dict->ul(MDD_DCDataEssence), Ctx, HMAC); } -// -//------------------------------------------------------------------------------------------ - -class ASDCP::DCData::MXFReader::h__Reader : public DCData::h__Reader -{ - ASDCP_NO_COPY_CONSTRUCT(h__Reader); - h__Reader(); - - public: - h__Reader(const Dictionary& d) : DCData::h__Reader(d) {} - virtual ~h__Reader() {} -}; - //------------------------------------------------------------------------------------------ @@ -330,9 +352,32 @@ ASDCP::DCData::MXFReader::Close() const //------------------------------------------------------------------------------------------ +class ASDCP::DCData::MXFWriter::h__Writer : public ASDCP::h__ASDCPWriter +{ + ASDCP_NO_COPY_CONSTRUCT(h__Writer); + h__Writer(); + +public: + DCDataDescriptor m_DDesc; + byte_t m_EssenceUL[SMPTE_UL_LENGTH]; + + h__Writer(const Dictionary& d) : ASDCP::h__ASDCPWriter(d) { + memset(m_EssenceUL, 0, SMPTE_UL_LENGTH); + } + + ~h__Writer(){} + + Result_t OpenWrite(const std::string&, ui32_t HeaderSize, const SubDescriptorList_t& subDescriptors); + Result_t SetSourceStream(const DCDataDescriptor&, const byte_t*, const std::string&, const std::string&); + Result_t WriteFrame(const FrameBuffer&, AESEncContext* = 0, HMACContext* = 0); + Result_t Finalize(); + Result_t DCData_DDesc_to_MD(DCData::DCDataDescriptor& DDesc); +}; + + // ASDCP::Result_t -ASDCP::DCData::h__Writer::DCData_DDesc_to_MD(DCData::DCDataDescriptor& DDesc) +ASDCP::DCData::MXFWriter::h__Writer::DCData_DDesc_to_MD(DCData::DCDataDescriptor& DDesc) { ASDCP_TEST_NULL(m_EssenceDescriptor); MXF::DCDataDescriptor* DDescObj = static_cast<MXF::DCDataDescriptor *>(m_EssenceDescriptor); @@ -346,7 +391,7 @@ ASDCP::DCData::h__Writer::DCData_DDesc_to_MD(DCData::DCDataDescriptor& DDesc) // ASDCP::Result_t -ASDCP::DCData::h__Writer::OpenWrite(const std::string& filename, ui32_t HeaderSize, +ASDCP::DCData::MXFWriter::h__Writer::OpenWrite(const std::string& filename, ui32_t HeaderSize, const SubDescriptorList_t& subDescriptors) { if ( ! m_State.Test_BEGIN() ) @@ -374,7 +419,7 @@ ASDCP::DCData::h__Writer::OpenWrite(const std::string& filename, ui32_t HeaderSi // ASDCP::Result_t -ASDCP::DCData::h__Writer::SetSourceStream(DCDataDescriptor const& DDesc, +ASDCP::DCData::MXFWriter::h__Writer::SetSourceStream(DCDataDescriptor const& DDesc, const byte_t * essenceCoding, const std::string& packageLabel, const std::string& defLabel) @@ -424,7 +469,7 @@ ASDCP::DCData::h__Writer::SetSourceStream(DCDataDescriptor const& DDesc, // ASDCP::Result_t -ASDCP::DCData::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, +ASDCP::DCData::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, ASDCP::AESEncContext* Ctx, ASDCP::HMACContext* HMAC) { Result_t result = RESULT_OK; @@ -450,7 +495,7 @@ ASDCP::DCData::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, // Closes the MXF file, writing the index and other closing information. // ASDCP::Result_t -ASDCP::DCData::h__Writer::Finalize() +ASDCP::DCData::MXFWriter::h__Writer::Finalize() { if ( ! m_State.Test_RUNNING() ) return RESULT_STATE; @@ -461,20 +506,6 @@ ASDCP::DCData::h__Writer::Finalize() } -// -//------------------------------------------------------------------------------------------ - - -class ASDCP::DCData::MXFWriter::h__Writer : public DCData::h__Writer -{ - ASDCP_NO_COPY_CONSTRUCT(h__Writer); - h__Writer(); - - public: - h__Writer(const Dictionary& d) : DCData::h__Writer(d) {} - virtual ~h__Writer() {} -}; - //------------------------------------------------------------------------------------------ |
