summaryrefslogtreecommitdiff
path: root/src/AS_DCP_DCData.cpp
diff options
context:
space:
mode:
authormschroffel <mschroffel@cinecert.com>2016-05-06 19:35:34 +0000
committermschroffel <>2016-05-06 19:35:34 +0000
commitd5cac9085e6da19bdfc8e76235a460da0e6e5f7b (patch)
tree1a353b6b66d15ae1d2ce1b38e1c27be1bb7b6f65 /src/AS_DCP_DCData.cpp
parent44af0118320a49c29a8b39abb4ec1009e4a29589 (diff)
update makefile for version roll
Diffstat (limited to 'src/AS_DCP_DCData.cpp')
-rw-r--r--src/AS_DCP_DCData.cpp137
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() {}
-};
-
//------------------------------------------------------------------------------------------