diff options
Diffstat (limited to 'src')
38 files changed, 529 insertions, 447 deletions
diff --git a/src/AS_02.h b/src/AS_02.h index ab58f31..8a31d8f 100644 --- a/src/AS_02.h +++ b/src/AS_02.h @@ -87,7 +87,7 @@ namespace AS_02 AS02IndexReader(const ASDCP::Dictionary*); virtual ~AS02IndexReader(); - Result_t InitFromFile(const Kumu::FileReader& reader, const ASDCP::MXF::RIP& rip, const bool has_header_essence); + Result_t InitFromFile(const Kumu::IFileReader& reader, const ASDCP::MXF::RIP& rip, const bool has_header_essence); ui32_t GetDuration() const; void Dump(FILE* = 0); Result_t GetMDObjectByID(const Kumu::UUID&, ASDCP::MXF::InterchangeObject** = 0); @@ -196,7 +196,7 @@ namespace AS_02 ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -289,7 +289,7 @@ namespace AS_02 ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -443,8 +443,8 @@ namespace AS_02 ASDCP::mem_ptr<h__Reader> m_Reader; ASDCP_NO_COPY_CONSTRUCT(MXFReader); - public: - MXFReader(); + public: + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -547,7 +547,7 @@ namespace AS_02 ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere diff --git a/src/AS_02_ACES.cpp b/src/AS_02_ACES.cpp index 0d3105a..1eda2d0 100644 --- a/src/AS_02_ACES.cpp +++ b/src/AS_02_ACES.cpp @@ -290,8 +290,8 @@ class AS_02::ACES::MXFReader::h__Reader : public AS_02::h__AS02Reader ASDCP::MXF::RGBAEssenceDescriptor *m_EssenceDescriptor; public: - h__Reader(const Dictionary *d) : - AS_02::h__AS02Reader(d), m_EssenceDescriptor(NULL) {} + h__Reader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : + AS_02::h__AS02Reader(d, fileReaderFactory), m_EssenceDescriptor(NULL) {} AS_02::ACES::ResourceList_t m_Anc_Resources; @@ -343,7 +343,7 @@ Result_t AS_02::ACES::MXFReader::h__Reader::OpenRead(const std::string& filename Result_t AS_02::ACES::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, AS_02::ACES::FrameBuffer& FrameBuf, ASDCP::AESDecContext* Ctx, ASDCP::HMACContext* HMAC) { - if(!m_File.IsOpen()) return RESULT_INIT; + if(!m_File->IsOpen()) return RESULT_INIT; assert(m_Dict); return ReadEKLVFrame(FrameNum, FrameBuf, m_Dict->ul(MDD_ACESFrameWrappedEssence), Ctx, HMAC); //PB:new UL @@ -395,12 +395,12 @@ AS_02::Result_t AS_02::ACES::MXFReader::h__Reader::ReadAncillaryResource(const K if((Kumu::fpos_t)TmpPair.ByteOffset != m_LastPosition) { m_LastPosition = TmpPair.ByteOffset; - result = m_File.Seek(TmpPair.ByteOffset); + result = m_File->Seek(TmpPair.ByteOffset); } // read the partition header ASDCP::MXF::Partition GSPart(m_Dict); - result = GSPart.InitFromFile(m_File); + result = GSPart.InitFromFile(*m_File); if(ASDCP_SUCCESS(result)) { @@ -473,7 +473,7 @@ AS_02::Result_t AS_02::ACES::MXFReader::h__Reader::FillAncillaryResourceDescript void AS_02::ACES::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_HeaderPart.Dump(stream); } @@ -484,7 +484,7 @@ AS_02::ACES::MXFReader::DumpHeaderMetadata(FILE* stream) const void AS_02::ACES::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_IndexAccess.Dump(stream); } @@ -672,7 +672,7 @@ AS_02::Result_t AS_02::ACES::MXFWriter::h__Writer::WriteAncillaryResource(const return RESULT_STATE; } - Kumu::fpos_t here = m_File.Tell(); + Kumu::fpos_t here = m_File.TellPosition(); assert(m_Dict); // create generic stream partition header @@ -782,10 +782,9 @@ AS_02::Result_t AS_02::ACES::MXFWriter::WriteAncillaryResource(const AS_02::ACES } -AS_02::ACES::MXFReader::MXFReader() +AS_02::ACES::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } AS_02::ACES::MXFReader::~MXFReader() @@ -841,7 +840,7 @@ AS_02::Result_t AS_02::ACES::MXFReader::OpenRead(const std::string& filename) co AS_02::Result_t AS_02::ACES::MXFReader::Close() const { - if(m_Reader && m_Reader->m_File.IsOpen()) + if(m_Reader && m_Reader->m_File->IsOpen()) { m_Reader->Close(); return RESULT_OK; @@ -852,7 +851,7 @@ AS_02::Result_t AS_02::ACES::MXFReader::Close() const AS_02::Result_t AS_02::ACES::MXFReader::FillWriterInfo(ASDCP::WriterInfo& Info) const { - if(m_Reader && m_Reader->m_File.IsOpen()) + if(m_Reader && m_Reader->m_File->IsOpen()) { Info = m_Reader->m_Info; return RESULT_OK; @@ -863,7 +862,7 @@ AS_02::Result_t AS_02::ACES::MXFReader::FillWriterInfo(ASDCP::WriterInfo& Info) AS_02::Result_t AS_02::ACES::MXFReader::ReadFrame(ui32_t FrameNum, AS_02::ACES::FrameBuffer &FrameBuf, ASDCP::AESDecContext *Ctx /*= 0*/, ASDCP::HMACContext *HMAC /*= 0*/) const { - if(m_Reader && m_Reader->m_File.IsOpen()) + if(m_Reader && m_Reader->m_File->IsOpen()) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -872,7 +871,7 @@ AS_02::Result_t AS_02::ACES::MXFReader::ReadFrame(ui32_t FrameNum, AS_02::ACES:: AS_02::Result_t AS_02::ACES::MXFReader::ReadAncillaryResource(const Kumu::UUID &uuid, AS_02::ACES::FrameBuffer &FrameBuf, ASDCP::AESDecContext *Ctx , ASDCP::HMACContext *HMAC ) const { - if(m_Reader && m_Reader->m_File.IsOpen()) + if(m_Reader && m_Reader->m_File->IsOpen()) return m_Reader->ReadAncillaryResource(uuid, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -881,7 +880,7 @@ AS_02::Result_t AS_02::ACES::MXFReader::ReadAncillaryResource(const Kumu::UUID & AS_02::Result_t AS_02::ACES::MXFReader::FillAncillaryResourceList(AS_02::ACES::ResourceList_t &ancillary_resources) const { - if(m_Reader && m_Reader->m_File.IsOpen()) + if(m_Reader && m_Reader->m_File->IsOpen()) { ancillary_resources = m_Reader->m_Anc_Resources; return RESULT_OK; diff --git a/src/AS_02_ACES.h b/src/AS_02_ACES.h index dd53904..faa06c4 100644 --- a/src/AS_02_ACES.h +++ b/src/AS_02_ACES.h @@ -442,7 +442,7 @@ class MXFReader ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere diff --git a/src/AS_02_IAB.cpp b/src/AS_02_IAB.cpp index aa551d9..dc06f10 100644 --- a/src/AS_02_IAB.cpp +++ b/src/AS_02_IAB.cpp @@ -177,7 +177,7 @@ AS_02::IAB::MXFWriter::OpenWrite( /* start the clip */ - this->m_ClipStart = this->m_Writer->m_File.Tell(); + this->m_ClipStart = this->m_Writer->m_File.TellPosition(); /* reserve space for the KL of the KLV, which will be written later during finalization */ @@ -278,7 +278,7 @@ AS_02::IAB::MXFWriter::Finalize() { /* write clip length */ - ui64_t current_position = this->m_Writer->m_File.Tell(); + ui64_t current_position = this->m_Writer->m_File.TellPosition(); result = this->m_Writer->m_File.Seek(m_ClipStart + ASDCP::SMPTE_UL_LENGTH); @@ -337,7 +337,7 @@ AS_02::IAB::MXFWriter::Reset() { //------------------------------------------------------------------------------------------ -AS_02::IAB::MXFReader::MXFReader() : m_State(ST_READER_BEGIN) {} +AS_02::IAB::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) : m_State(ST_READER_BEGIN), m_FileReaderFactory(fileReaderFactory) {} AS_02::IAB::MXFReader::~MXFReader() {} @@ -372,7 +372,7 @@ AS_02::IAB::MXFReader::OpenRead(const std::string& filename) { /* initialize the writer */ - this->m_Reader = new h__Reader(&DefaultCompositeDict()); + this->m_Reader = new h__Reader(&DefaultCompositeDict(), m_FileReaderFactory); try { diff --git a/src/AS_02_IAB.h b/src/AS_02_IAB.h index 57fb77e..9027ea2 100644 --- a/src/AS_02_IAB.h +++ b/src/AS_02_IAB.h @@ -148,6 +148,8 @@ namespace AS_02 { i64_t m_CurrentFrameIndex; std::vector<ui8_t> m_CurrentFrameBuffer; ReaderState_t m_State; + + const Kumu::IFileReaderFactory& m_FileReaderFactory; void Reset(); @@ -161,7 +163,16 @@ namespace AS_02 { /* methods */ - MXFReader(); + /** + * Construct MXF Reader + * . + * @param fileReaderFactory Abstract interface that allows + * to override asdcplib's file read access by a user implementation. + * Notice that the factory object reference needs to remain valid + * when performing OpenRead operation. + */ + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); + virtual ~MXFReader(); /** diff --git a/src/AS_02_ISXD.cpp b/src/AS_02_ISXD.cpp index f7165a3..fe6f037 100644 --- a/src/AS_02_ISXD.cpp +++ b/src/AS_02_ISXD.cpp @@ -54,8 +54,8 @@ class AS_02::ISXD::MXFReader::h__Reader : public AS_02::h__AS02Reader ASDCP_NO_COPY_CONSTRUCT(h__Reader); public: - h__Reader(const Dictionary *d) : - AS_02::h__AS02Reader(d) {} + h__Reader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : + AS_02::h__AS02Reader(d, fileReaderFactory) {} virtual ~h__Reader() {} @@ -101,7 +101,7 @@ Result_t AS_02::ISXD::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf, ASDCP::AESDecContext* Ctx, ASDCP::HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; assert(m_Dict); @@ -113,9 +113,9 @@ AS_02::ISXD::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::FrameBuffer //------------------------------------------------------------------------------------------ // -AS_02::ISXD::MXFReader::MXFReader() +AS_02::ISXD::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } @@ -181,7 +181,7 @@ AS_02::ISXD::MXFReader::OpenRead(const std::string& filename) const Result_t AS_02::ISXD::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; @@ -195,7 +195,7 @@ Result_t AS_02::ISXD::MXFReader::ReadFrame(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf, ASDCP::AESDecContext* Ctx, ASDCP::HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); } @@ -207,7 +207,7 @@ AS_02::ISXD::MXFReader::ReadFrame(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf, Result_t AS_02::ISXD::MXFReader::ReadGenericStreamPartitionPayload(const ui32_t SID, ASDCP::FrameBuffer& frame_buf) { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { return m_Reader->ReadGenericStreamPartitionPayload(SID, frame_buf, 0, 0 /*no encryption*/); } @@ -220,7 +220,7 @@ AS_02::ISXD::MXFReader::ReadGenericStreamPartitionPayload(const ui32_t SID, ASDC Result_t AS_02::ISXD::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -233,7 +233,7 @@ AS_02::ISXD::MXFReader::FillWriterInfo(WriterInfo& Info) const void AS_02::ISXD::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_HeaderPart.Dump(stream); } @@ -244,7 +244,7 @@ AS_02::ISXD::MXFReader::DumpHeaderMetadata(FILE* stream) const void AS_02::ISXD::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_IndexAccess.Dump(stream); } diff --git a/src/AS_02_JP2K.cpp b/src/AS_02_JP2K.cpp index 4817f21..88131b9 100644 --- a/src/AS_02_JP2K.cpp +++ b/src/AS_02_JP2K.cpp @@ -55,8 +55,8 @@ class AS_02::JP2K::MXFReader::h__Reader : public AS_02::h__AS02Reader ASDCP_NO_COPY_CONSTRUCT(h__Reader); public: - h__Reader(const Dictionary *d) : - AS_02::h__AS02Reader(d) {} + h__Reader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : + AS_02::h__AS02Reader(d, fileReaderFactory) {} virtual ~h__Reader() {} @@ -112,7 +112,7 @@ Result_t AS_02::JP2K::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::JP2K::FrameBuffer& FrameBuf, ASDCP::AESDecContext* Ctx, ASDCP::HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; assert(m_Dict); @@ -122,9 +122,9 @@ AS_02::JP2K::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::JP2K::Frame //------------------------------------------------------------------------------------------ // -AS_02::JP2K::MXFReader::MXFReader() +AS_02::JP2K::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } @@ -189,7 +189,7 @@ AS_02::JP2K::MXFReader::OpenRead(const std::string& filename) const Result_t AS_02::JP2K::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; @@ -203,7 +203,7 @@ Result_t AS_02::JP2K::MXFReader::ReadFrame(ui32_t FrameNum, ASDCP::JP2K::FrameBuffer& FrameBuf, ASDCP::AESDecContext* Ctx, ASDCP::HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -214,7 +214,7 @@ AS_02::JP2K::MXFReader::ReadFrame(ui32_t FrameNum, ASDCP::JP2K::FrameBuffer& Fra Result_t AS_02::JP2K::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -227,7 +227,7 @@ AS_02::JP2K::MXFReader::FillWriterInfo(WriterInfo& Info) const void AS_02::JP2K::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_HeaderPart.Dump(stream); } @@ -238,7 +238,7 @@ AS_02::JP2K::MXFReader::DumpHeaderMetadata(FILE* stream) const void AS_02::JP2K::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_IndexAccess.Dump(stream); } diff --git a/src/AS_02_PCM.cpp b/src/AS_02_PCM.cpp index d034ffb..0f7b8df 100644 --- a/src/AS_02_PCM.cpp +++ b/src/AS_02_PCM.cpp @@ -56,7 +56,7 @@ class AS_02::PCM::MXFReader::h__Reader : public AS_02::h__AS02Reader h__Reader(); public: - h__Reader(const Dictionary *d) : AS_02::h__AS02Reader(d), m_ClipEssenceBegin(0), m_ClipSize(0), + h__Reader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : AS_02::h__AS02Reader(d, fileReaderFactory), m_ClipEssenceBegin(0), m_ClipSize(0), m_ClipDurationFrames(0) {} virtual ~h__Reader() {} @@ -94,13 +94,13 @@ AS_02::PCM::MXFReader::h__Reader::OpenRead(const std::string& filename, const AS result = m_IndexAccess.Lookup(0, tmp_entry); if ( KM_SUCCESS(result) ) - result = m_File.Seek(tmp_entry.StreamOffset); + result = m_File->Seek(tmp_entry.StreamOffset); if ( KM_SUCCESS(result) ) { assert(wave_descriptor); KLReader reader; - result = reader.ReadKLFromFile(m_File); + result = reader.ReadKLFromFile(*m_File); if ( KM_SUCCESS(result) ) { @@ -133,7 +133,7 @@ AS_02::PCM::MXFReader::h__Reader::OpenRead(const std::string& filename, const AS return RESULT_AS02_FORMAT; } - m_ClipEssenceBegin = m_File.Tell(); + m_ClipEssenceBegin = m_File->TellPosition(); m_ClipSize = reader.Length(); m_BytesPerFrame = AS_02::MXF::CalcFrameBufferSize(*wave_descriptor, edit_rate); m_ClipDurationFrames = m_ClipSize / m_BytesPerFrame; @@ -153,7 +153,7 @@ ASDCP::Result_t AS_02::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::PCM::FrameBuffer& FrameBuf, ASDCP::AESDecContext*, ASDCP::HMACContext*) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) { return RESULT_INIT; } @@ -168,16 +168,16 @@ AS_02::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::PCM::FrameBu ui64_t position = m_ClipEssenceBegin + offset; Result_t result = RESULT_OK; - if ( m_File.Tell() != static_cast<Kumu::fpos_t>(position) ) + if ( m_File->TellPosition() != static_cast<Kumu::fpos_t>(position) ) { - result = m_File.Seek(position); + result = m_File->Seek(position); } if ( KM_SUCCESS(result) ) { ui64_t remainder = m_ClipSize - offset; ui32_t read_size = ( remainder < m_BytesPerFrame ) ? remainder : m_BytesPerFrame; - result = m_File.Read(FrameBuf.Data(), read_size); + result = m_File->Read(FrameBuf.Data(), read_size); if ( KM_SUCCESS(result) ) { @@ -198,9 +198,9 @@ AS_02::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, ASDCP::PCM::FrameBu // -AS_02::PCM::MXFReader::MXFReader() +AS_02::PCM::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } AS_02::PCM::MXFReader::~MXFReader() @@ -264,7 +264,7 @@ AS_02::PCM::MXFReader::OpenRead(const std::string& filename, const ASDCP::Ration Result_t AS_02::PCM::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; @@ -281,7 +281,7 @@ ASDCP::Result_t AS_02::PCM::MXFReader::ReadFrame(ui32_t FrameNum, ASDCP::PCM::FrameBuffer& FrameBuf, ASDCP::AESDecContext* Ctx, ASDCP::HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -293,7 +293,7 @@ AS_02::PCM::MXFReader::ReadFrame(ui32_t FrameNum, ASDCP::PCM::FrameBuffer& Frame ASDCP::Result_t AS_02::PCM::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -306,7 +306,7 @@ AS_02::PCM::MXFReader::FillWriterInfo(WriterInfo& Info) const void AS_02::PCM::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_HeaderPart.Dump(stream); } @@ -316,7 +316,7 @@ AS_02::PCM::MXFReader::DumpHeaderMetadata(FILE* stream) const void AS_02::PCM::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->m_IndexAccess.Dump(stream); } diff --git a/src/AS_02_TimedText.cpp b/src/AS_02_TimedText.cpp index aa593a1..e64547e 100644 --- a/src/AS_02_TimedText.cpp +++ b/src/AS_02_TimedText.cpp @@ -32,6 +32,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AS_02_internal.h" #include "KM_xml.h" +#include "KM_fileio.h" #include <iostream> #include <iomanip> @@ -67,9 +68,9 @@ class AS_02::TimedText::MXFReader::h__Reader : public AS_02::h__AS02Reader ASDCP_NO_COPY_CONSTRUCT(h__Reader); public: - TimedTextDescriptor m_TDesc; + TimedTextDescriptor m_TDesc; - h__Reader(const Dictionary *d) : AS_02::h__AS02Reader(d), m_EssenceDescriptor(0) { + h__Reader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : AS_02::h__AS02Reader(d, fileReaderFactory), m_EssenceDescriptor(0) { memset(&m_TDesc.AssetID, 0, UUIDlen); } @@ -169,7 +170,7 @@ ASDCP::Result_t AS_02::TimedText::MXFReader::h__Reader::ReadTimedTextResource(ASDCP::TimedText::FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) { return RESULT_INIT; } @@ -223,9 +224,9 @@ AS_02::TimedText::MXFReader::h__Reader::ReadAncillaryResource(const Kumu::UUID& //------------------------------------------------------------------------------------------ -AS_02::TimedText::MXFReader::MXFReader() +AS_02::TimedText::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultSMPTEDict()); + m_Reader = new h__Reader(&DefaultSMPTEDict(), fileReaderFactory); } @@ -291,7 +292,7 @@ AS_02::TimedText::MXFReader::OpenRead(const std::string& filename) const ASDCP::Result_t AS_02::TimedText::MXFReader::FillTimedTextDescriptor(TimedText::TimedTextDescriptor& TDesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { TDesc = m_Reader->m_TDesc; return RESULT_OK; @@ -305,7 +306,7 @@ AS_02::TimedText::MXFReader::FillTimedTextDescriptor(TimedText::TimedTextDescrip ASDCP::Result_t AS_02::TimedText::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -333,7 +334,7 @@ ASDCP::Result_t AS_02::TimedText::MXFReader::ReadTimedTextResource(ASDCP::TimedText::FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadTimedTextResource(FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -344,7 +345,7 @@ ASDCP::Result_t AS_02::TimedText::MXFReader::ReadAncillaryResource(const Kumu::UUID& uuid, ASDCP::TimedText::FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadAncillaryResource(uuid, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -355,7 +356,7 @@ AS_02::TimedText::MXFReader::ReadAncillaryResource(const Kumu::UUID& uuid, ASDCP void AS_02::TimedText::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -364,7 +365,7 @@ AS_02::TimedText::MXFReader::DumpHeaderMetadata(FILE* stream) const void AS_02::TimedText::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -372,7 +373,7 @@ AS_02::TimedText::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t AS_02::TimedText::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; @@ -554,7 +555,7 @@ AS_02::TimedText::MXFWriter::h__Writer::WriteTimedTextResource(const std::string if ( KM_SUCCESS(result) ) { // create an index partition header - Kumu::fpos_t here = m_File.Tell(); + Kumu::fpos_t here = m_File.TellPosition(); assert(m_Dict); ASDCP::MXF::Partition partition(m_Dict); @@ -601,7 +602,7 @@ AS_02::TimedText::MXFWriter::h__Writer::WriteAncillaryResource(const ASDCP::Time return RESULT_STATE; } - Kumu::fpos_t here = m_File.Tell(); + Kumu::fpos_t here = m_File.TellPosition(); assert(m_Dict); // create generic stream partition header diff --git a/src/AS_02_internal.h b/src/AS_02_internal.h index ba7c33d..135a6ac 100644 --- a/src/AS_02_internal.h +++ b/src/AS_02_internal.h @@ -41,15 +41,14 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using Kumu::DefaultLogSink; -#ifdef DEFAULT_02_MD_DECL -AS_02::MXF::AS02IndexReader *g_AS02IndexReader; -#else -extern AS_02::MXF::AS02IndexReader *g_AS02IndexReader; -#endif - - namespace AS_02 { + + #ifdef DEFAULT_02_MD_DECL + AS_02::MXF::AS02IndexReader *g_AS02IndexReader; + #else + extern AS_02::MXF::AS02IndexReader *g_AS02IndexReader; + #endif void default_md_object_init(); @@ -61,7 +60,8 @@ namespace AS_02 h__AS02Reader(); public: - h__AS02Reader(const ASDCP::Dictionary*); + h__AS02Reader(const ASDCP::Dictionary*, const Kumu::IFileReaderFactory& fileReaderFactory); + virtual ~h__AS02Reader(); Result_t OpenMXFRead(const std::string& filename); @@ -191,7 +191,7 @@ namespace AS_02 if ( KM_SUCCESS(result) ) { this->m_PartitionSpace *= (ui32_t)floor( EditRate.Quotient() + 0.5 ); // convert seconds to edit units - this->m_ECStart = this->m_File.Tell(); + this->m_ECStart = this->m_File.TellPosition(); this->m_IndexWriter.IndexSID = 129; UL body_ul(this->m_Dict->ul(MDD_ClosedCompleteBodyPartition)); @@ -209,21 +209,23 @@ namespace AS_02 return result; } - void FlushIndexPartition() + Result_t FlushIndexPartition() { - if ( this->m_IndexWriter.GetDuration() > 0 ) - { - this->m_IndexWriter.ThisPartition = this->m_File.Tell(); - this->m_IndexWriter.WriteToFile(this->m_File); + Result_t result = RESULT_OK; + if ( this->m_IndexWriter.GetDuration() > 0 ) + { + this->m_IndexWriter.ThisPartition = this->m_File.TellPosition(); + result = this->m_IndexWriter.WriteToFile(this->m_File); this->m_RIP.PairArray.push_back(RIP::PartitionPair(0, this->m_IndexWriter.ThisPartition)); - } + } + return result; } // standard method of writing the header and footer of a completed AS-02 file // Result_t WriteAS02Footer() { - this->FlushIndexPartition(); + Result_t result = this->FlushIndexPartition(); // update all Duration properties ASDCP::MXF::Partition footer_part(this->m_Dict); @@ -237,7 +239,7 @@ namespace AS_02 this->m_EssenceDescriptor->ContainerDuration = this->m_FramesWritten; footer_part.PreviousPartition = this->m_RIP.PairArray.back().ByteOffset; - Kumu::fpos_t here = this->m_File.Tell(); + Kumu::fpos_t here = this->m_File.TellPosition(); this->m_RIP.PairArray.push_back(RIP::PartitionPair(0, here)); // Last RIP Entry this->m_HeaderPart.FooterPartition = here; @@ -249,8 +251,11 @@ namespace AS_02 footer_part.FooterPartition = here; footer_part.ThisPartition = here; - UL footer_ul(this->m_Dict->ul(MDD_CompleteFooter)); - Result_t result = footer_part.WriteToFile(this->m_File, footer_ul); + if (KM_SUCCESS(result)) + { + UL footer_ul(this->m_Dict->ul(MDD_CompleteFooter)); + result = footer_part.WriteToFile(this->m_File, footer_ul); + } if ( KM_SUCCESS(result) ) result = this->m_RIP.WriteToFile(this->m_File); diff --git a/src/AS_DCP.h b/src/AS_DCP.h index ef38f7d..aab7f77 100755 --- a/src/AS_DCP.h +++ b/src/AS_DCP.h @@ -234,7 +234,7 @@ namespace ASDCP { // Determine the type of essence contained in the given MXF file. RESULT_OK // is returned if the file is successfully opened and contains a valid MXF // stream. If there is an error, the result code will indicate the reason. - Result_t EssenceType(const std::string& filename, EssenceType_t& type); + Result_t EssenceType(const std::string& filename, EssenceType_t& type, const Kumu::IFileReaderFactory& fileReaderFactory); // Determine the type of essence contained in the given raw file. RESULT_OK // is returned if the file is successfully opened and contains a known @@ -795,7 +795,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -1006,7 +1006,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -1284,7 +1284,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -1399,7 +1399,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFSReader); public: - MXFSReader(); + MXFSReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFSReader(); // Warning: direct manipulation of MXF structures can interfere @@ -1624,7 +1624,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -1810,7 +1810,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere @@ -1918,7 +1918,7 @@ namespace ASDCP { ASDCP_NO_COPY_CONSTRUCT(MXFReader); public: - MXFReader(); + MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~MXFReader(); // Warning: direct manipulation of MXF structures can interfere diff --git a/src/AS_DCP_ATMOS.cpp b/src/AS_DCP_ATMOS.cpp index d476e20..396f359 100644 --- a/src/AS_DCP_ATMOS.cpp +++ b/src/AS_DCP_ATMOS.cpp @@ -117,8 +117,9 @@ class ASDCP::ATMOS::MXFReader::h__Reader : public ASDCP::h__ASDCPReader ASDCP::DCData::DCDataDescriptor m_DDesc; AtmosDescriptor m_ADesc; - h__Reader(const Dictionary *d) : - ASDCP::h__ASDCPReader(d), m_EssenceDescriptor(0), m_EssenceSubDescriptor(0) {} + h__Reader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : + ASDCP::h__ASDCPReader(d, fileReaderFactory), m_EssenceDescriptor(0), m_EssenceSubDescriptor(0) {} + virtual ~h__Reader() {} Result_t OpenRead(const std::string&); Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); @@ -239,7 +240,7 @@ ASDCP::Result_t ASDCP::ATMOS::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; assert(m_Dict); @@ -249,15 +250,15 @@ ASDCP::ATMOS::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& Fram //------------------------------------------------------------------------------------------ -ASDCP::ATMOS::MXFReader::MXFReader() +ASDCP::ATMOS::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&AtmosSMPTEDict()); + m_Reader = new h__Reader(&AtmosSMPTEDict(), fileReaderFactory); } ASDCP::ATMOS::MXFReader::~MXFReader() { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->Close(); } @@ -319,7 +320,7 @@ ASDCP::Result_t ASDCP::ATMOS::MXFReader::ReadFrame(ui32_t FrameNum, DCData::FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -337,7 +338,7 @@ ASDCP::ATMOS::MXFReader::LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffset ASDCP::Result_t ASDCP::ATMOS::MXFReader::FillAtmosDescriptor(AtmosDescriptor& ADesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { ADesc = m_Reader->m_ADesc; return RESULT_OK; @@ -352,7 +353,7 @@ ASDCP::ATMOS::MXFReader::FillAtmosDescriptor(AtmosDescriptor& ADesc) const ASDCP::Result_t ASDCP::ATMOS::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -365,7 +366,7 @@ ASDCP::ATMOS::MXFReader::FillWriterInfo(WriterInfo& Info) const void ASDCP::ATMOS::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -373,7 +374,7 @@ ASDCP::ATMOS::MXFReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::ATMOS::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -381,7 +382,7 @@ ASDCP::ATMOS::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::ATMOS::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; diff --git a/src/AS_DCP_DCData.cpp b/src/AS_DCP_DCData.cpp index fee3ff8..f73ca9f 100644 --- a/src/AS_DCP_DCData.cpp +++ b/src/AS_DCP_DCData.cpp @@ -85,7 +85,7 @@ class ASDCP::DCData::MXFReader::h__Reader : public ASDCP::h__ASDCPReader public: DCDataDescriptor m_DDesc; - h__Reader(const Dictionary *d) : ASDCP::h__ASDCPReader(d), m_PrivateLabelCompatibilityMode(false), m_DDesc() {} + h__Reader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : ASDCP::h__ASDCPReader(d, fileReaderFactory), m_PrivateLabelCompatibilityMode(false), m_DDesc() {} ~h__Reader() {} Result_t OpenRead(const std::string&); Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); @@ -191,7 +191,7 @@ ASDCP::Result_t ASDCP::DCData::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; assert(m_Dict); @@ -224,15 +224,15 @@ ASDCP::DCData::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const //------------------------------------------------------------------------------------------ -ASDCP::DCData::MXFReader::MXFReader() +ASDCP::DCData::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultSMPTEDict()); + m_Reader = new h__Reader(&DefaultSMPTEDict(), fileReaderFactory); } ASDCP::DCData::MXFReader::~MXFReader() { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->Close(); } @@ -294,7 +294,7 @@ ASDCP::Result_t ASDCP::DCData::MXFReader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -312,7 +312,7 @@ ASDCP::DCData::MXFReader::LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffse ASDCP::Result_t ASDCP::DCData::MXFReader::FillDCDataDescriptor(DCDataDescriptor& DDesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { DDesc = m_Reader->m_DDesc; return RESULT_OK; @@ -327,7 +327,7 @@ ASDCP::DCData::MXFReader::FillDCDataDescriptor(DCDataDescriptor& DDesc) const ASDCP::Result_t ASDCP::DCData::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -340,7 +340,7 @@ ASDCP::DCData::MXFReader::FillWriterInfo(WriterInfo& Info) const void ASDCP::DCData::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -349,7 +349,7 @@ ASDCP::DCData::MXFReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::DCData::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -357,7 +357,7 @@ ASDCP::DCData::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::DCData::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index 39aaa2a..e00e4ef 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -527,8 +527,8 @@ class lh__Reader : public ASDCP::h__ASDCPReader public: PictureDescriptor m_PDesc; // codestream parameter list - lh__Reader(const Dictionary *d) : - ASDCP::h__ASDCPReader(d), m_EssenceDescriptor(0), m_EssenceSubDescriptor(0), m_Format(ESS_UNKNOWN) {} + lh__Reader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : + ASDCP::h__ASDCPReader(d, fileReaderFactory), m_EssenceDescriptor(0), m_EssenceSubDescriptor(0), m_Format(ESS_UNKNOWN) {} virtual ~lh__Reader() {} @@ -701,7 +701,7 @@ ASDCP::Result_t lh__Reader::ReadFrame(ui32_t FrameNum, JP2K::FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; assert(m_Dict); @@ -716,7 +716,7 @@ class ASDCP::JP2K::MXFReader::h__Reader : public lh__Reader h__Reader(); public: - h__Reader(const Dictionary *d) : lh__Reader(d) {} + h__Reader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : lh__Reader(d, fileReaderFactory) {} }; @@ -742,15 +742,15 @@ ASDCP::JP2K::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const //------------------------------------------------------------------------------------------ -ASDCP::JP2K::MXFReader::MXFReader() +ASDCP::JP2K::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } ASDCP::JP2K::MXFReader::~MXFReader() { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->Close(); } @@ -812,7 +812,7 @@ ASDCP::Result_t ASDCP::JP2K::MXFReader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -830,7 +830,7 @@ ASDCP::JP2K::MXFReader::LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffset, ASDCP::Result_t ASDCP::JP2K::MXFReader::FillPictureDescriptor(PictureDescriptor& PDesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { PDesc = m_Reader->m_PDesc; return RESULT_OK; @@ -845,7 +845,7 @@ ASDCP::JP2K::MXFReader::FillPictureDescriptor(PictureDescriptor& PDesc) const ASDCP::Result_t ASDCP::JP2K::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -858,7 +858,7 @@ ASDCP::JP2K::MXFReader::FillWriterInfo(WriterInfo& Info) const void ASDCP::JP2K::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -867,7 +867,7 @@ ASDCP::JP2K::MXFReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::JP2K::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -875,7 +875,7 @@ ASDCP::JP2K::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::JP2K::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; @@ -893,7 +893,7 @@ class ASDCP::JP2K::MXFSReader::h__SReader : public lh__Reader ui32_t m_StereoFrameReady; public: - h__SReader(const Dictionary *d) : lh__Reader(d), m_StereoFrameReady(0xffffffff) {} + h__SReader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : lh__Reader(d, fileReaderFactory), m_StereoFrameReady(0xffffffff) {} // Result_t ReadFrame(ui32_t FrameNum, StereoscopicPhase_t phase, FrameBuffer& FrameBuf, @@ -916,7 +916,7 @@ public: if ( FilePosition != m_LastPosition ) { m_LastPosition = FilePosition; - result = m_File.Seek(FilePosition); + result = m_File->Seek(FilePosition); } // the call to ReadEKLVPacket() will leave the file on an R frame @@ -931,17 +931,17 @@ public: if ( FilePosition != m_LastPosition ) { m_LastPosition = FilePosition; - result = m_File.Seek(FilePosition); + result = m_File->Seek(FilePosition); } KLReader Reader; - result = Reader.ReadKLFromFile(m_File); + result = Reader.ReadKLFromFile(*m_File); if ( ASDCP_SUCCESS(result) ) { // skip over the companion SP_LEFT frame Kumu::fpos_t new_pos = FilePosition + SMPTE_UL_LENGTH + Reader.KLLength() + Reader.Length(); - result = m_File.Seek(new_pos); + result = m_File->Seek(new_pos); } } @@ -968,15 +968,15 @@ public: -ASDCP::JP2K::MXFSReader::MXFSReader() +ASDCP::JP2K::MXFSReader::MXFSReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__SReader(&DefaultCompositeDict()); + m_Reader = new h__SReader(&DefaultCompositeDict(), fileReaderFactory); } ASDCP::JP2K::MXFSReader::~MXFSReader() { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->Close(); } @@ -1039,7 +1039,7 @@ ASDCP::JP2K::MXFSReader::ReadFrame(ui32_t FrameNum, SFrameBuffer& FrameBuf, AESD { Result_t result = RESULT_INIT; - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { result = m_Reader->ReadFrame(FrameNum, SP_LEFT, FrameBuf.Left, Ctx, HMAC); @@ -1055,7 +1055,7 @@ ASDCP::Result_t ASDCP::JP2K::MXFSReader::ReadFrame(ui32_t FrameNum, StereoscopicPhase_t phase, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, phase, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -1072,7 +1072,7 @@ ASDCP::JP2K::MXFSReader::LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffset ASDCP::Result_t ASDCP::JP2K::MXFSReader::FillPictureDescriptor(PictureDescriptor& PDesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { PDesc = m_Reader->m_PDesc; return RESULT_OK; @@ -1087,7 +1087,7 @@ ASDCP::JP2K::MXFSReader::FillPictureDescriptor(PictureDescriptor& PDesc) const ASDCP::Result_t ASDCP::JP2K::MXFSReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -1100,7 +1100,7 @@ ASDCP::JP2K::MXFSReader::FillWriterInfo(WriterInfo& Info) const void ASDCP::JP2K::MXFSReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -1109,7 +1109,7 @@ ASDCP::JP2K::MXFSReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::JP2K::MXFSReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -1117,7 +1117,7 @@ ASDCP::JP2K::MXFSReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::JP2K::MXFSReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 0608abd..ccec372 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -185,7 +185,7 @@ class ASDCP::MPEG2::MXFReader::h__Reader : public ASDCP::h__ASDCPReader public: VideoDescriptor m_VDesc; // video parameter list - h__Reader(const Dictionary *d) : ASDCP::h__ASDCPReader(d) {} + h__Reader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : ASDCP::h__ASDCPReader(d, fileReaderFactory) {} virtual ~h__Reader() {} Result_t OpenRead(const std::string&); Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); @@ -246,7 +246,7 @@ ASDCP::MPEG2::MXFReader::h__Reader::FindFrameGOPStart(ui32_t FrameNum, ui32_t& K { KeyFrameNum = 0; - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; // look up frame index node @@ -266,7 +266,7 @@ ASDCP::MPEG2::MXFReader::h__Reader::FindFrameGOPStart(ui32_t FrameNum, ui32_t& K ASDCP::Result_t ASDCP::MPEG2::MXFReader::h__Reader::FrameType(ui32_t FrameNum, FrameType_t& type) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; // look up frame index node @@ -289,7 +289,7 @@ ASDCP::MPEG2::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& Fram AESDecContext* Ctx, HMACContext* HMAC) { assert(m_Dict); - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; Result_t result = ReadEKLVFrame(FrameNum, FrameBuf, m_Dict->ul(MDD_MPEG2Essence), Ctx, HMAC); @@ -340,15 +340,15 @@ ASDCP::MPEG2::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const //------------------------------------------------------------------------------------------ -ASDCP::MPEG2::MXFReader::MXFReader() +ASDCP::MPEG2::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } ASDCP::MPEG2::MXFReader::~MXFReader() { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->Close(); } @@ -410,7 +410,7 @@ ASDCP::Result_t ASDCP::MPEG2::MXFReader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -429,7 +429,7 @@ ASDCP::Result_t ASDCP::MPEG2::MXFReader::ReadFrameGOPStart(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrameGOPStart(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -440,7 +440,7 @@ ASDCP::MPEG2::MXFReader::ReadFrameGOPStart(ui32_t FrameNum, FrameBuffer& FrameBu ASDCP::Result_t ASDCP::MPEG2::MXFReader::FindFrameGOPStart(ui32_t FrameNum, ui32_t& KeyFrameNum) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->FindFrameGOPStart(FrameNum, KeyFrameNum); return RESULT_INIT; @@ -452,7 +452,7 @@ ASDCP::MPEG2::MXFReader::FindFrameGOPStart(ui32_t FrameNum, ui32_t& KeyFrameNum) ASDCP::Result_t ASDCP::MPEG2::MXFReader::FillVideoDescriptor(VideoDescriptor& VDesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { VDesc = m_Reader->m_VDesc; return RESULT_OK; @@ -467,7 +467,7 @@ ASDCP::MPEG2::MXFReader::FillVideoDescriptor(VideoDescriptor& VDesc) const ASDCP::Result_t ASDCP::MPEG2::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -480,7 +480,7 @@ ASDCP::MPEG2::MXFReader::FillWriterInfo(WriterInfo& Info) const void ASDCP::MPEG2::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -489,7 +489,7 @@ ASDCP::MPEG2::MXFReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::MPEG2::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -497,7 +497,7 @@ ASDCP::MPEG2::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::MPEG2::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; diff --git a/src/AS_DCP_MXF.cpp b/src/AS_DCP_MXF.cpp index 9cb4c15..e63faa5 100755 --- a/src/AS_DCP_MXF.cpp +++ b/src/AS_DCP_MXF.cpp @@ -163,19 +163,19 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info, const D // // ASDCP::Result_t -ASDCP::EssenceType(const std::string& filename, EssenceType_t& type) +ASDCP::EssenceType(const std::string& filename, EssenceType_t& type, const Kumu::IFileReaderFactory& fileReaderFactory) { const Dictionary* m_Dict = &DefaultCompositeDict(); InterchangeObject* md_object = 0; assert(m_Dict); - Kumu::FileReader Reader; + Kumu::IFileReader* Reader = fileReaderFactory.CreateFileReader(); OP1aHeader TestHeader(m_Dict); - Result_t result = Reader.OpenRead(filename); + Result_t result = Reader->OpenRead(filename); if ( ASDCP_SUCCESS(result) ) - result = TestHeader.InitFromFile(Reader); // test UL and OP + result = TestHeader.InitFromFile(*Reader); // test UL and OP if ( ASDCP_SUCCESS(result) ) { @@ -285,10 +285,11 @@ ASDCP::EssenceType(const std::string& filename, EssenceType_t& type) else { DefaultLogSink().Error("Unsupported MXF Operational Pattern.\n"); - return RESULT_FORMAT; + result = RESULT_FORMAT; } } + delete Reader; return result; } diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index 4cca5d5..fb11e19 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -254,7 +254,7 @@ class ASDCP::PCM::MXFReader::h__Reader : public ASDCP::h__ASDCPReader public: AudioDescriptor m_ADesc; - h__Reader(const Dictionary *d) : ASDCP::h__ASDCPReader(d) {} + h__Reader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : ASDCP::h__ASDCPReader(d, fileReaderFactory) {} virtual ~h__Reader() {} Result_t OpenRead(const std::string&); Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); @@ -339,7 +339,7 @@ ASDCP::Result_t ASDCP::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; if ( (FrameNum+1) > m_ADesc.ContainerDuration ) @@ -370,15 +370,15 @@ ASDCP::PCM::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const //------------------------------------------------------------------------------------------ -ASDCP::PCM::MXFReader::MXFReader() +ASDCP::PCM::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultCompositeDict()); + m_Reader = new h__Reader(&DefaultCompositeDict(), fileReaderFactory); } ASDCP::PCM::MXFReader::~MXFReader() { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->Close(); } @@ -443,7 +443,7 @@ ASDCP::Result_t ASDCP::PCM::MXFReader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadFrame(FrameNum, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -461,7 +461,7 @@ ASDCP::PCM::MXFReader::LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffset, ASDCP::Result_t ASDCP::PCM::MXFReader::FillAudioDescriptor(AudioDescriptor& ADesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { ADesc = m_Reader->m_ADesc; return RESULT_OK; @@ -475,7 +475,7 @@ ASDCP::PCM::MXFReader::FillAudioDescriptor(AudioDescriptor& ADesc) const ASDCP::Result_t ASDCP::PCM::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -488,7 +488,7 @@ ASDCP::PCM::MXFReader::FillWriterInfo(WriterInfo& Info) const void ASDCP::PCM::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -497,7 +497,7 @@ ASDCP::PCM::MXFReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::PCM::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -505,7 +505,7 @@ ASDCP::PCM::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::PCM::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp index f04c7d8..9a3e336 100644 --- a/src/AS_DCP_TimedText.cpp +++ b/src/AS_DCP_TimedText.cpp @@ -132,9 +132,9 @@ class ASDCP::TimedText::MXFReader::h__Reader : public ASDCP::h__ASDCPReader ASDCP_NO_COPY_CONSTRUCT(h__Reader); public: - TimedTextDescriptor m_TDesc; + TimedTextDescriptor m_TDesc; - h__Reader(const Dictionary *d) : ASDCP::h__ASDCPReader(d), m_EssenceDescriptor(0) { + h__Reader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : ASDCP::h__ASDCPReader(d, fileReaderFactory), m_EssenceDescriptor(0) { memset(&m_TDesc.AssetID, 0, UUIDlen); } @@ -231,7 +231,7 @@ ASDCP::Result_t ASDCP::TimedText::MXFReader::h__Reader::ReadTimedTextResource(FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) { - if ( ! m_File.IsOpen() ) + if ( ! m_File->IsOpen() ) return RESULT_INIT; assert(m_Dict); @@ -285,9 +285,9 @@ ASDCP::TimedText::MXFReader::h__Reader::ReadAncillaryResource(const byte_t* uuid //------------------------------------------------------------------------------------------ -ASDCP::TimedText::MXFReader::MXFReader() +ASDCP::TimedText::MXFReader::MXFReader(const Kumu::IFileReaderFactory& fileReaderFactory) { - m_Reader = new h__Reader(&DefaultSMPTEDict()); + m_Reader = new h__Reader(&DefaultSMPTEDict(), fileReaderFactory); } @@ -353,7 +353,7 @@ ASDCP::TimedText::MXFReader::OpenRead(const std::string& filename) const ASDCP::Result_t ASDCP::TimedText::MXFReader::FillTimedTextDescriptor(TimedText::TimedTextDescriptor& TDesc) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { TDesc = m_Reader->m_TDesc; return RESULT_OK; @@ -367,7 +367,7 @@ ASDCP::TimedText::MXFReader::FillTimedTextDescriptor(TimedText::TimedTextDescrip ASDCP::Result_t ASDCP::TimedText::MXFReader::FillWriterInfo(WriterInfo& Info) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { Info = m_Reader->m_Info; return RESULT_OK; @@ -395,7 +395,7 @@ ASDCP::Result_t ASDCP::TimedText::MXFReader::ReadTimedTextResource(FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadTimedTextResource(FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -406,7 +406,7 @@ ASDCP::Result_t ASDCP::TimedText::MXFReader::ReadAncillaryResource(const byte_t* uuid, FrameBuffer& FrameBuf, AESDecContext* Ctx, HMACContext* HMAC) const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) return m_Reader->ReadAncillaryResource(uuid, FrameBuf, Ctx, HMAC); return RESULT_INIT; @@ -417,7 +417,7 @@ ASDCP::TimedText::MXFReader::ReadAncillaryResource(const byte_t* uuid, FrameBuff void ASDCP::TimedText::MXFReader::DumpHeaderMetadata(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_HeaderPart.Dump(stream); } @@ -426,7 +426,7 @@ ASDCP::TimedText::MXFReader::DumpHeaderMetadata(FILE* stream) const void ASDCP::TimedText::MXFReader::DumpIndex(FILE* stream) const { - if ( m_Reader->m_File.IsOpen() ) + if ( m_Reader->m_File->IsOpen() ) m_Reader->m_IndexAccess.Dump(stream); } @@ -434,7 +434,7 @@ ASDCP::TimedText::MXFReader::DumpIndex(FILE* stream) const ASDCP::Result_t ASDCP::TimedText::MXFReader::Close() const { - if ( m_Reader && m_Reader->m_File.IsOpen() ) + if ( m_Reader && m_Reader->m_File->IsOpen() ) { m_Reader->Close(); return RESULT_OK; @@ -689,7 +689,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::WriteAncillaryResource(const ASDCP::Time if ( ! m_State.Test_RUNNING() ) return RESULT_STATE; - Kumu::fpos_t here = m_File.Tell(); + Kumu::fpos_t here = m_File.TellPosition(); assert(m_Dict); // create generic stream partition header diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index 5626058..e3cb227 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -175,7 +175,7 @@ namespace ASDCP Result_t WriteGenericStreamPartition(Kumu::FileWriter&, ASDCP::MXF::OP1aHeader&, ASDCP::MXF::RIP&, const Dictionary*, const ASDCP::FrameBuffer&, ASDCP::AESEncContext* = 0, ASDCP::HMACContext* = 0); - Result_t Read_EKLV_Packet(Kumu::FileReader& File, const ASDCP::Dictionary& Dict, + Result_t Read_EKLV_Packet(Kumu::IFileReader& File, const ASDCP::Dictionary& Dict, const ASDCP::WriterInfo& Info, Kumu::fpos_t& LastPosition, ASDCP::FrameBuffer& CtFrameBuf, ui32_t FrameNum, ui32_t SequenceNum, ASDCP::FrameBuffer& FrameBuf, const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC); @@ -200,7 +200,7 @@ namespace ASDCP inline ui64_t Length() { return m_ValueLength; } inline ui64_t KLLength() { return m_KLLength; } - Result_t ReadKLFromFile(Kumu::FileReader& Reader); + Result_t ReadKLFromFile(Kumu::IFileReader& Reader); }; namespace MXF @@ -218,7 +218,7 @@ namespace ASDCP public: const Dictionary *m_Dict; - Kumu::FileReader m_File; + Kumu::IFileReader* m_File; HeaderType m_HeaderPart; IndexAccessType m_IndexAccess; RIP m_RIP; @@ -226,14 +226,16 @@ namespace ASDCP ASDCP::FrameBuffer m_CtFrameBuf; Kumu::fpos_t m_LastPosition; - TrackFileReader(const Dictionary *d) : - m_HeaderPart(d), m_IndexAccess(d), m_RIP(d), m_Dict(d) + TrackFileReader(const Dictionary* d, const Kumu::IFileReaderFactory& fileReaderFactory) : + m_HeaderPart(m_Dict), m_IndexAccess(m_Dict), m_RIP(m_Dict), m_Dict(d) { default_md_object_init(); + m_File = fileReaderFactory.CreateFileReader(); } virtual ~TrackFileReader() { Close(); + delete m_File; } const MXF::RIP& GetRIP() const { return m_RIP; } @@ -242,14 +244,14 @@ namespace ASDCP Result_t OpenMXFRead(const std::string& filename) { m_LastPosition = 0; - Result_t result = m_File.OpenRead(filename); + Result_t result = m_File->OpenRead(filename); if ( ASDCP_SUCCESS(result) ) - result = SeekToRIP(m_File); + result = SeekToRIP(*m_File); if ( ASDCP_SUCCESS(result) ) { - result = m_RIP.InitFromFile(m_File); + result = m_RIP.InitFromFile(*m_File); if ( ASDCP_FAILURE(result) ) { @@ -265,8 +267,8 @@ namespace ASDCP DefaultLogSink().Error("TrackFileReader::OpenMXFRead, SeekToRIP failed\n"); } - m_File.Seek(0); - result = m_HeaderPart.InitFromFile(m_File); + m_File->Seek(0); + result = m_HeaderPart.InitFromFile(*m_File); if ( KM_FAILURE(result) ) { @@ -332,7 +334,7 @@ namespace ASDCP if ( FilePosition != m_LastPosition ) { m_LastPosition = FilePosition; - result = m_File.Seek(FilePosition); + result = m_File->Seek(FilePosition); } if ( KM_SUCCESS(result) ) @@ -361,7 +363,7 @@ namespace ASDCP if ( static_cast<Kumu::fpos_t>(TmpEntry.StreamOffset) != m_LastPosition ) { m_LastPosition = TmpEntry.StreamOffset; - result = m_File.Seek(TmpEntry.StreamOffset); + result = m_File->Seek(TmpEntry.StreamOffset); } if ( KM_SUCCESS(result) ) @@ -375,7 +377,7 @@ namespace ASDCP const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC) { assert(m_Dict); - return Read_EKLV_Packet(m_File, *m_Dict, m_Info, m_LastPosition, m_CtFrameBuf, + return Read_EKLV_Packet(*m_File, *m_Dict, m_Info, m_LastPosition, m_CtFrameBuf, FrameNum, SequenceNum, FrameBuf, EssenceUL, Ctx, HMAC); } @@ -455,7 +457,7 @@ namespace ASDCP } // Read the Partition header and then read the payload. - Result_t result = m_File.Seek(start_offset); + Result_t result = m_File->Seek(start_offset); if ( KM_SUCCESS(result) ) { @@ -466,7 +468,7 @@ namespace ASDCP { // read the partition header ASDCP::MXF::Partition GSPart(m_Dict); - result = GSPart.InitFromFile(m_File); + result = GSPart.InitFromFile(*m_File); if ( KM_SUCCESS(result) ) { @@ -489,7 +491,7 @@ namespace ASDCP // void Close() { - m_File.Close(); + m_File->Close(); } }; @@ -863,7 +865,7 @@ namespace ASDCP { // m_RIP now contains an entry (at the back) for the new generic stream // (this entry was created during the call to AddDmsTrackGenericPartUtf8Text()) - if ( m_File.Tell() != m_RIP.PairArray.back().ByteOffset ) + if ( m_File.TellPosition() != m_RIP.PairArray.back().ByteOffset ) { DefaultLogSink().Error("File offset has moved since RIP modification. Unrecoverable error.\n"); return RESULT_FAIL; @@ -924,7 +926,7 @@ namespace ASDCP public: Partition m_BodyPart; - h__ASDCPReader(const Dictionary*); + h__ASDCPReader(const Dictionary*, const Kumu::IFileReaderFactory& fileReaderFactory); virtual ~h__ASDCPReader(); Result_t OpenMXFRead(const std::string& filename); diff --git a/src/KLV.cpp b/src/KLV.cpp index 303a672..681a834 100755 --- a/src/KLV.cpp +++ b/src/KLV.cpp @@ -189,7 +189,7 @@ ASDCP::KLVPacket::Dump(FILE* stream, const Dictionary& Dict, bool show_value) // ASDCP::Result_t -ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader, const UL& label) +ASDCP::KLVFilePacket::InitFromFile(const Kumu::IFileReader& Reader, const UL& label) { Result_t result = KLVFilePacket::InitFromFile(Reader); @@ -201,7 +201,7 @@ ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader, const UL& lab // TODO: refactor to use InitFromBuffer ASDCP::Result_t -ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader) +ASDCP::KLVFilePacket::InitFromFile(const Kumu::IFileReader& Reader) { ui32_t read_count; byte_t tmp_data[tmp_read_size]; @@ -266,7 +266,7 @@ ASDCP::KLVFilePacket::InitFromFile(const Kumu::FileReader& Reader) if ( (remainder = read_count - packet_length) != 0 ) { DefaultLogSink().Warn("Repositioning pointer for short packet\n"); - Kumu::fpos_t pos = Reader.Tell(); + Kumu::fpos_t pos = Reader.TellPosition(); assert(pos > remainder); result = Reader.Seek(pos - remainder); } @@ -249,8 +249,8 @@ inline const char* ui64sz(ui64_t i, char* buf) KLVFilePacket() {} virtual ~KLVFilePacket() {} - virtual Result_t InitFromFile(const Kumu::FileReader&); - virtual Result_t InitFromFile(const Kumu::FileReader&, const UL& label); + virtual Result_t InitFromFile(const Kumu::IFileReader&); + virtual Result_t InitFromFile(const Kumu::IFileReader&, const UL& label); virtual Result_t WriteKLToFile(Kumu::FileWriter& Writer, const UL& label, ui32_t length); }; diff --git a/src/KM_fileio.cpp b/src/KM_fileio.cpp index b24c7db..c753012 100644 --- a/src/KM_fileio.cpp +++ b/src/KM_fileio.cpp @@ -816,6 +816,17 @@ Kumu::utf8_to_wbstr(const std::string& in, Kumu::ByteString& out) //------------------------------------------------------------------------------------------ // +Kumu::FileReader::FileReader() +{ + m_Handle = INVALID_HANDLE_VALUE; + assert(sizeof(off_t) <= sizeof(int64_t)); +} + +Kumu::FileReader::~FileReader() +{ + Kumu::FileReader::Close(); +} + Kumu::Result_t Kumu::FileReader::OpenRead(const std::string& filename) const { @@ -1066,6 +1077,18 @@ Kumu::FileWriter::Write(const byte_t* buf, ui32_t buf_len, ui32_t* bytes_written // POSIX // +Kumu::FileReader::FileReader() +{ + m_Handle = INVALID_HANDLE_VALUE; + assert(sizeof(off_t) <= sizeof(int64_t)); +} + +// +Kumu::FileReader::~FileReader() +{ + Kumu::FileReader::Close(); +} + Kumu::Result_t Kumu::FileReader::OpenRead(const std::string& filename) const { @@ -1140,7 +1163,6 @@ Kumu::FileReader::Read(byte_t* buf, ui32_t buf_len, ui32_t* read_count) const return (tmp_count == 0 ? RESULT_ENDOFFILE : RESULT_OK); } - //------------------------------------------------------------------------------------------ // @@ -1233,6 +1255,11 @@ Kumu::FileWriter::Write(const byte_t* buf, ui32_t buf_len, ui32_t* bytes_written //------------------------------------------------------------------------------------------ +// +IFileReader* FileReaderFactory::CreateFileReader() const +{ + return new FileReader(); +} // Kumu::Result_t diff --git a/src/KM_fileio.h b/src/KM_fileio.h index 60e1e6a..f7713fc 100755 --- a/src/KM_fileio.h +++ b/src/KM_fileio.h @@ -67,7 +67,7 @@ namespace Kumu }; - // + // enum DirectoryEntryType_t { DET_FILE, DET_DIR, @@ -84,7 +84,7 @@ namespace Kumu KM_NO_COPY_CONSTRUCT(DirScannerEx); public: - + DirScannerEx(); ~DirScannerEx() { Close(); } @@ -133,7 +133,7 @@ namespace Kumu // // error: 'void Kumu::compile_time_size_checker() [with bool sizecheck = false]' previously declared here // - // This is happening because the equality being tested below is false. The reason for this + // This is happening because the equality being tested below is false. The reason for this // will depend on your OS, but on Linux it is probably because you have not used -D_FILE_OFFSET_BITS=64 // Adding this magic macro to your CFLAGS will get you going again. If you are on a system that // does not support 64-bit files, you can disable this check by using -DKM_SMALL_FILES_OK. You @@ -190,7 +190,7 @@ namespace Kumu std::string PathJoin(const std::string& Path1, const std::string& Path2, char separator = '/'); std::string PathJoin(const std::string& Path1, const std::string& Path2, const std::string& Path3, char separator = '/'); std::string PathJoin(const std::string& Path1, const std::string& Path2, - const std::string& Path3, const std::string& Path4, char separator = '/'); + const std::string& Path3, const std::string& Path4, char separator = '/'); //------------------------------------------------------------------------------------------ @@ -247,10 +247,10 @@ namespace Kumu // Search all paths in SearchPaths for filenames matching Pattern (no directories are returned). // Put results in FoundPaths. Returns after first find if one_shot is true. PathList_t& FindInPath(const IPathMatch& Pattern, const std::string& SearchDir, - PathList_t& FoundPaths, bool one_shot = false, char separator = '/'); + PathList_t& FoundPaths, bool one_shot = false, char separator = '/'); PathList_t& FindInPaths(const IPathMatch& Pattern, const PathList_t& SearchPaths, - PathList_t& FoundPaths, bool one_shot = false, char separator = '/'); + PathList_t& FoundPaths, bool one_shot = false, char separator = '/'); std::string GetExecutablePath(const std::string& default_path); @@ -294,7 +294,7 @@ namespace Kumu // // Unarchives a file into a buffer Result_t ReadFileIntoBuffer(const std::string& Filename, Kumu::ByteString& Buffer, - ui32_t max_size = 8 * Kumu::Megabyte); + ui32_t max_size = 8 * Kumu::Megabyte); // Archives a buffer into a file Result_t WriteBufferIntoFile(const Kumu::ByteString& Buffer, const std::string& Filename); @@ -313,37 +313,64 @@ namespace Kumu //------------------------------------------------------------------------------------------ // File I/O //------------------------------------------------------------------------------------------ + // + class IFileReader + { + public: + virtual ~IFileReader(){} + + virtual Result_t OpenRead(const std::string&) const = 0; // open the file for reading + virtual Result_t Close() const = 0; // close the file + virtual int64_t Size() const = 0; // returns the file's current size + virtual Result_t Seek(Kumu::fpos_t = 0, SeekPos_t = SP_BEGIN) const = 0; // move the file pointer + virtual Result_t Tell(Kumu::fpos_t* pos) const = 0; // report the file pointer's location + virtual Result_t Read(byte_t*, ui32_t, ui32_t* = 0) const = 0; // read a buffer of data + virtual bool IsOpen() const = 0; // returns true if the file is open + + inline int64_t TellPosition() const // report the file pointer's location + { + int64_t tmp_pos; + Tell(&tmp_pos); + return tmp_pos; + } + }; // - class FileReader + class FileReader : public IFileReader { KM_NO_COPY_CONSTRUCT(FileReader); + public: + FileReader(); + ~FileReader(); + virtual Result_t OpenRead(const std::string&) const; // open the file for reading + virtual Result_t Close() const; // close the file + virtual int64_t Size() const; // returns the file's current size + virtual Result_t Seek(Kumu::fpos_t = 0, SeekPos_t = SP_BEGIN) const; // move the file pointer + virtual Result_t Tell(Kumu::fpos_t* pos) const; // report the file pointer's location + virtual Result_t Read(byte_t*, ui32_t, ui32_t* = 0) const; // read a buffer of data + + inline virtual bool IsOpen() const { // returns true if the file is open + return (m_Handle != INVALID_HANDLE_VALUE); + } + protected: std::string m_Filename; FileHandle m_Handle; + }; + + // + class IFileReaderFactory + { + public: + virtual IFileReader* CreateFileReader() const = 0; + virtual ~IFileReaderFactory(){} + }; + class FileReaderFactory : public IFileReaderFactory + { public: - FileReader() : m_Handle(INVALID_HANDLE_VALUE) {} - virtual ~FileReader() { Close(); } - - Result_t OpenRead(const std::string&) const; // open the file for reading - Result_t Close() const; // close the file - fsize_t Size() const; // returns the file's current size - Result_t Seek(Kumu::fpos_t = 0, SeekPos_t = SP_BEGIN) const; // move the file pointer - Result_t Tell(Kumu::fpos_t* pos) const; // report the file pointer's location - Result_t Read(byte_t*, ui32_t, ui32_t* = 0) const; // read a buffer of data - - inline Kumu::fpos_t Tell() const // report the file pointer's location - { - Kumu::fpos_t tmp_pos; - Tell(&tmp_pos); - return tmp_pos; - } - - inline bool IsOpen() { // returns true if the file is open - return (m_Handle != INVALID_HANDLE_VALUE); - } + virtual IFileReader* CreateFileReader() const; }; // diff --git a/src/MXF.cpp b/src/MXF.cpp index 94c94ad..9e1f345 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -45,7 +45,7 @@ const ui32_t CBRIndexEntriesPerSegment = 5000; // ASDCP::Result_t -ASDCP::MXF::SeekToRIP(const Kumu::FileReader& Reader) +ASDCP::MXF::SeekToRIP(const Kumu::IFileReader& Reader) { Kumu::fpos_t end_pos; @@ -118,7 +118,7 @@ ASDCP::MXF::RIP::GetPairBySID(ui32_t SID, PartitionPair& outPair) const // ASDCP::Result_t -ASDCP::MXF::RIP::InitFromFile(const Kumu::FileReader& Reader) +ASDCP::MXF::RIP::InitFromFile(const Kumu::IFileReader& Reader) { assert(m_Dict); Result_t result = KLVFilePacket::InitFromFile(Reader, m_Dict->ul(MDD_RandomIndexMetadata)); @@ -291,7 +291,7 @@ ASDCP::MXF::Partition::AddChildObject(InterchangeObject* Object) // ASDCP::Result_t -ASDCP::MXF::Partition::InitFromFile(const Kumu::FileReader& Reader) +ASDCP::MXF::Partition::InitFromFile(const Kumu::IFileReader& Reader) { Result_t result = KLVFilePacket::InitFromFile(Reader); // test the UL @@ -750,7 +750,7 @@ ASDCP::MXF::OP1aHeader::~OP1aHeader() {} // ASDCP::Result_t -ASDCP::MXF::OP1aHeader::InitFromFile(const Kumu::FileReader& Reader) +ASDCP::MXF::OP1aHeader::InitFromFile(const Kumu::IFileReader& Reader) { Result_t result = Partition::InitFromFile(Reader); @@ -986,7 +986,7 @@ ASDCP::MXF::OP1aHeader::WriteToFile(Kumu::FileWriter& Writer, ui32_t HeaderSize) // KLV Fill if ( ASDCP_SUCCESS(result) ) { - Kumu::fpos_t pos = Writer.Tell(); + Kumu::fpos_t pos = Writer.TellPosition(); if ( pos > (Kumu::fpos_t)HeaderByteCount ) { @@ -1058,7 +1058,7 @@ ASDCP::MXF::OPAtomIndexFooter::~OPAtomIndexFooter() {} // ASDCP::Result_t -ASDCP::MXF::OPAtomIndexFooter::InitFromFile(const Kumu::FileReader& Reader) +ASDCP::MXF::OPAtomIndexFooter::InitFromFile(const Kumu::IFileReader& Reader) { Result_t result = Partition::InitFromFile(Reader); // test UL and OP @@ -54,7 +54,7 @@ namespace ASDCP // seek an open file handle to the start of the RIP KLV packet - Result_t SeekToRIP(const Kumu::FileReader&); + Result_t SeekToRIP(const Kumu::IFileReader &); // class RIP : public ASDCP::KLVFilePacket @@ -107,7 +107,7 @@ namespace ASDCP RIP(const Dictionary* d) : m_Dict(d) {} virtual ~RIP() {} - virtual Result_t InitFromFile(const Kumu::FileReader& Reader); + virtual Result_t InitFromFile(const Kumu::IFileReader& Reader); virtual Result_t WriteToFile(Kumu::FileWriter& Writer); virtual bool GetPairBySID(ui32_t, PartitionPair&) const; virtual void Dump(FILE* = 0); @@ -156,7 +156,7 @@ namespace ASDCP Partition(const Dictionary*); virtual ~Partition(); virtual void AddChildObject(InterchangeObject*); // takes ownership - virtual Result_t InitFromFile(const Kumu::FileReader& Reader); + virtual Result_t InitFromFile(const Kumu::IFileReader& Reader); virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l); virtual Result_t WriteToFile(Kumu::FileWriter& Writer, UL& PartitionLabel); virtual ui32_t ArchiveSize(); // returns the size of the archived structure @@ -443,7 +443,7 @@ namespace ASDCP OP1aHeader(const Dictionary*); virtual ~OP1aHeader(); - virtual Result_t InitFromFile(const Kumu::FileReader& Reader); + virtual Result_t InitFromFile(const Kumu::IFileReader& Reader); virtual Result_t InitFromPartitionBuffer(const byte_t* p, ui32_t l); virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l); virtual Result_t WriteToFile(Kumu::FileWriter& Writer, ui32_t HeaderLength = 16384); @@ -478,7 +478,7 @@ namespace ASDCP OPAtomIndexFooter(const Dictionary*); virtual ~OPAtomIndexFooter(); - virtual Result_t InitFromFile(const Kumu::FileReader& Reader); + virtual Result_t InitFromFile(const Kumu::IFileReader& Reader); virtual Result_t InitFromPartitionBuffer(const byte_t* p, ui32_t l); virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l); virtual Result_t WriteToFile(Kumu::FileWriter& Writer, ui64_t duration); diff --git a/src/PCM_Parser.cpp b/src/PCM_Parser.cpp index 072c235..43111fd 100755 --- a/src/PCM_Parser.cpp +++ b/src/PCM_Parser.cpp @@ -45,14 +45,14 @@ using namespace ASDCP::RF64; // class ASDCP::PCM::WAVParser::h__WAVParser { - Kumu::FileReader m_FileReader; - bool m_EOF; - ui32_t m_DataStart; - ui64_t m_DataLength; - ui64_t m_ReadCount; - ui32_t m_FrameBufferSize; - ui32_t m_FramesRead; - Rational m_PictureRate; + Kumu::IFileReader* m_FileReader; + bool m_EOF; + ui32_t m_DataStart; + ui64_t m_DataLength; + ui64_t m_ReadCount; + ui32_t m_FrameBufferSize; + ui32_t m_FramesRead; + Rational m_PictureRate; ASDCP_NO_COPY_CONSTRUCT(h__WAVParser); @@ -81,14 +81,14 @@ public: void ASDCP::PCM::WAVParser::h__WAVParser::Close() { - m_FileReader.Close(); + m_FileReader->Close(); } // void ASDCP::PCM::WAVParser::h__WAVParser::Reset() { - m_FileReader.Seek(m_DataStart); + m_FileReader->Seek(m_DataStart); m_FramesRead = 0; m_ReadCount = 0; } @@ -97,12 +97,12 @@ ASDCP::PCM::WAVParser::h__WAVParser::Reset() ASDCP::Result_t ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const std::string& filename, const Rational& PictureRate) { - Result_t result = m_FileReader.OpenRead(filename); + Result_t result = m_FileReader->OpenRead(filename); if ( ASDCP_SUCCESS(result) ) { SimpleWaveHeader WavHeader; - result = WavHeader.ReadFromFile(m_FileReader, &m_DataStart); + result = WavHeader.ReadFromFile(*m_FileReader, &m_DataStart); if ( ASDCP_SUCCESS(result) ) { @@ -116,9 +116,9 @@ ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const std::string& filename, const else { ASDCP::AIFF::SimpleAIFFHeader AIFFHeader; - m_FileReader.Seek(0); + m_FileReader->Seek(0); - result = AIFFHeader.ReadFromFile(m_FileReader, &m_DataStart); + result = AIFFHeader.ReadFromFile(*m_FileReader, &m_DataStart); if ( ASDCP_SUCCESS(result) ) { @@ -132,8 +132,8 @@ ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const std::string& filename, const else { SimpleRF64Header RF64Header; - m_FileReader.Seek(0); - result = RF64Header.ReadFromFile(m_FileReader, &m_DataStart); + m_FileReader->Seek(0); + result = RF64Header.ReadFromFile(*m_FileReader, &m_DataStart); if ( ASDCP_SUCCESS(result) ) { @@ -170,7 +170,7 @@ ASDCP::PCM::WAVParser::h__WAVParser::ReadFrame(FrameBuffer& FB) } ui32_t read_count = 0; - Result_t result = m_FileReader.Read(FB.Data(), m_FrameBufferSize, &read_count); + Result_t result = m_FileReader->Read(FB.Data(), m_FrameBufferSize, &read_count); if ( result == RESULT_ENDOFFILE ) { @@ -202,7 +202,7 @@ ASDCP::Result_t ASDCP::PCM::WAVParser::h__WAVParser::Seek(ui32_t frame_number) { m_FramesRead = frame_number - 1; m_ReadCount = 0; - return m_FileReader.Seek(m_DataStart + m_FrameBufferSize * frame_number); + return m_FileReader->Seek(m_DataStart + m_FrameBufferSize * frame_number); } diff --git a/src/Wav.cpp b/src/Wav.cpp index 8f510eb..edb5cb0 100755 --- a/src/Wav.cpp +++ b/src/Wav.cpp @@ -108,7 +108,7 @@ ASDCP::Wav::SimpleWaveHeader::WriteToFile(Kumu::FileWriter& OutFile) const // ASDCP::Result_t -ASDCP::Wav::SimpleWaveHeader::ReadFromFile(const Kumu::FileReader& InFile, ui32_t* data_start) +ASDCP::Wav::SimpleWaveHeader::ReadFromFile(const Kumu::IFileReader& InFile, ui32_t* data_start) { ui32_t read_count = 0; ui32_t local_data_start = 0; @@ -274,7 +274,7 @@ ASDCP::AIFF::SimpleAIFFHeader::FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, ASD // ASDCP::Result_t -ASDCP::AIFF::SimpleAIFFHeader::ReadFromFile(const Kumu::FileReader& InFile, ui32_t* data_start) +ASDCP::AIFF::SimpleAIFFHeader::ReadFromFile(const Kumu::IFileReader& InFile, ui32_t* data_start) { ui32_t read_count = 0; ui32_t local_data_start = 0; @@ -483,7 +483,7 @@ ASDCP::RF64::SimpleRF64Header::WriteToFile(Kumu::FileWriter& OutFile) const // ASDCP::Result_t -ASDCP::RF64::SimpleRF64Header::ReadFromFile(const Kumu::FileReader& InFile, ui32_t* data_start) +ASDCP::RF64::SimpleRF64Header::ReadFromFile(const Kumu::IFileReader& InFile, ui32_t* data_start) { ui32_t read_count = 0; ui32_t local_data_start = 0; @@ -74,7 +74,7 @@ namespace ASDCP } Result_t ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start); - Result_t ReadFromFile(const Kumu::FileReader& InFile, ui32_t* data_start); + Result_t ReadFromFile(const Kumu::IFileReader& InFile, ui32_t* data_start); void FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, Rational PictureRate) const; }; @@ -112,7 +112,7 @@ namespace ASDCP SimpleWaveHeader(ASDCP::PCM::AudioDescriptor& ADesc); Result_t ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start); - Result_t ReadFromFile(const Kumu::FileReader& InFile, ui32_t* data_start); + Result_t ReadFromFile(const Kumu::IFileReader& InFile, ui32_t* data_start); Result_t WriteToFile(Kumu::FileWriter& OutFile) const; void FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, Rational PictureRate) const; }; @@ -148,7 +148,7 @@ namespace ASDCP SimpleRF64Header(ASDCP::PCM::AudioDescriptor& ADesc); Result_t ReadFromBuffer(const byte_t* buf, ui32_t buf_len, ui32_t* data_start); - Result_t ReadFromFile(const Kumu::FileReader& InFile, ui32_t* data_start); + Result_t ReadFromFile(const Kumu::IFileReader& InFile, ui32_t* data_start); Result_t WriteToFile(Kumu::FileWriter& OutFile) const; void FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, Rational PictureRate) const; diff --git a/src/as-02-info.cpp b/src/as-02-info.cpp index 2ac42fe..d1b823c 100644 --- a/src/as-02-info.cpp +++ b/src/as-02-info.cpp @@ -39,6 +39,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <KM_log.h> #include <AS_DCP.h> #include <AS_02.h> +#include <AS_02_IAB.h> #include <JP2K.h> #include <AS_02_ACES.h> #include <ACES.h> @@ -646,7 +647,7 @@ class FileInfoWrapper } public: - FileInfoWrapper() : m_MaxBitrate(0.0), m_AvgBitrate(0.0) {} + FileInfoWrapper(const IFileReaderFactory& fileReaderFactory) : m_MaxBitrate(0.0), m_AvgBitrate(0.0), m_Reader(fileReaderFactory) {} virtual ~FileInfoWrapper() {} Result_t @@ -862,17 +863,17 @@ public: // Read header metadata from an ASDCP file // Result_t -show_file_info(CommandOptions& Options) +show_file_info(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { EssenceType_t EssenceType; - Result_t result = ASDCP::EssenceType(Options.filenames.front().c_str(), EssenceType); + Result_t result = ASDCP::EssenceType(Options.filenames.front().c_str(), EssenceType, fileReaderFactory); if ( ASDCP_FAILURE(result) ) return result; if ( EssenceType == ESS_AS02_JPEG_2000 ) { - FileInfoWrapper<AS_02::JP2K::MXFReader, MyPictureDescriptor> wrapper; + FileInfoWrapper<AS_02::JP2K::MXFReader, MyPictureDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "JPEG 2000 pictures"); if ( KM_SUCCESS(result) ) @@ -896,7 +897,7 @@ show_file_info(CommandOptions& Options) else if ( EssenceType == ESS_AS02_ACES ) { - FileInfoWrapper<AS_02::ACES::MXFReader, MyACESPictureDescriptor> wrapper; + FileInfoWrapper<AS_02::ACES::MXFReader, MyACESPictureDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "ACES pictures"); if ( KM_SUCCESS(result) ) @@ -920,7 +921,7 @@ show_file_info(CommandOptions& Options) else if ( EssenceType == ESS_AS02_PCM_24b_48k || EssenceType == ESS_AS02_PCM_24b_96k ) { - FileInfoWrapper<AS_02::PCM::MXFReader, MyAudioDescriptor> wrapper; + FileInfoWrapper<AS_02::PCM::MXFReader, MyAudioDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "PCM audio"); if ( ASDCP_SUCCESS(result) && Options.showcoding_flag ) @@ -929,14 +930,14 @@ show_file_info(CommandOptions& Options) else { fprintf(stderr, "Unknown/unsupported essence type: %s\n", Options.filenames.front().c_str()); - Kumu::FileReader Reader; + Kumu::IFileReader* Reader = fileReaderFactory.CreateFileReader(); const Dictionary* Dict = &DefaultCompositeDict(); MXF::OP1aHeader TestHeader(Dict); - result = Reader.OpenRead(Options.filenames.front().c_str()); + result = Reader->OpenRead(Options.filenames.front().c_str()); if ( ASDCP_SUCCESS(result) ) - result = TestHeader.InitFromFile(Reader); // test UL and OP + result = TestHeader.InitFromFile(*Reader); // test UL and OP if ( ASDCP_SUCCESS(result) ) { @@ -956,8 +957,8 @@ show_file_info(CommandOptions& Options) { fputs("File is not MXF.\n", stdout); } - } - + delete Reader; + } return result; } @@ -984,10 +985,10 @@ main(int argc, const char** argv) } init_rate_info(); - + Kumu::FileReaderFactory defaultFactory; while ( ! Options.filenames.empty() && ASDCP_SUCCESS(result) ) { - result = show_file_info(Options); + result = show_file_info(Options, defaultFactory); Options.filenames.pop_front(); } diff --git a/src/as-02-unwrap.cpp b/src/as-02-unwrap.cpp index 18429c2..5cc0cae 100755 --- a/src/as-02-unwrap.cpp +++ b/src/as-02-unwrap.cpp @@ -290,13 +290,13 @@ public: // Read one or more ciphertext JPEG 2000 codestreams from a ciphertext ASDCP file // Result_t -read_JP2K_file(CommandOptions& Options) +read_JP2K_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { - AESDecContext* Context = 0; - HMACContext* HMAC = 0; - AS_02::JP2K::MXFReader Reader; - JP2K::FrameBuffer FrameBuffer(Options.fb_size); - ui32_t frame_count = 0; + AESDecContext* Context = 0; + HMACContext* HMAC = 0; + AS_02::JP2K::MXFReader Reader(fileReaderFactory); + JP2K::FrameBuffer FrameBuffer(Options.fb_size); + ui32_t frame_count = 0; Result_t result = Reader.OpenRead(Options.input_filename); @@ -436,11 +436,11 @@ read_JP2K_file(CommandOptions& Options) // Result_t -read_ACES_file(CommandOptions& Options) +read_ACES_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - AS_02::ACES::MXFReader Reader; + AS_02::ACES::MXFReader Reader(fileReaderFactory); AS_02::ACES::FrameBuffer FrameBuffer(Options.fb_size); ui64_t frame_count = 0; AS_02::ACES::ResourceList_t resource_list_t; @@ -626,11 +626,11 @@ read_ACES_file(CommandOptions& Options) // Read one or more ciphertext PCM audio streams from a ciphertext ASDCP file // Result_t -read_PCM_file(CommandOptions& Options) +read_PCM_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - AS_02::PCM::MXFReader Reader; + AS_02::PCM::MXFReader Reader(fileReaderFactory); PCM::FrameBuffer FrameBuffer; WavFileWriter OutWave; ui32_t last_frame = 0; @@ -798,11 +798,11 @@ read_PCM_file(CommandOptions& Options) // Read one or more timed text streams from a plaintext AS-02 file // Result_t -read_timed_text_file(CommandOptions& Options) +read_timed_text_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - AS_02::TimedText::MXFReader Reader; + AS_02::TimedText::MXFReader Reader(fileReaderFactory); TimedText::FrameBuffer FrameBuffer(Options.fb_size); //ASDCP::TimedText::FrameBuffer FrameBuffer(Options.fb_size); AS_02::TimedText::TimedTextDescriptor TDesc; @@ -875,11 +875,11 @@ read_timed_text_file(CommandOptions& Options) // Result_t -read_isxd_file(CommandOptions& Options) +read_isxd_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - AS_02::ISXD::MXFReader Reader; + AS_02::ISXD::MXFReader Reader(fileReaderFactory); ASDCP::FrameBuffer FrameBuffer; ui32_t frame_count = 0; @@ -960,10 +960,10 @@ read_isxd_file(CommandOptions& Options) } Result_t -extract_generic_stream_partition_payload(const std::string& in_filename, const ui32_t sid, const std::string& out_filename) +extract_generic_stream_partition_payload(const std::string& in_filename, const ui32_t sid, const std::string& out_filename, const Kumu::IFileReaderFactory& fileReaderFactory) { ASDCP::FrameBuffer payload; - AS_02::ISXD::MXFReader reader; + AS_02::ISXD::MXFReader reader(fileReaderFactory); Result_t result = reader.OpenRead(in_filename); @@ -987,11 +987,11 @@ extract_generic_stream_partition_payload(const std::string& in_filename, const u return result; } -Result_t read_iab_file(CommandOptions& Options) +Result_t read_iab_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - AS_02::IAB::MXFReader Reader; + AS_02::IAB::MXFReader Reader(fileReaderFactory); ASDCP::FrameBuffer FrameBuffer; ui32_t last_frame = 0; @@ -1123,43 +1123,44 @@ main(int argc, const char** argv) } EssenceType_t EssenceType; - Result_t result = ASDCP::EssenceType(Options.input_filename, EssenceType); + Kumu::FileReaderFactory defaultFactory; + Result_t result = ASDCP::EssenceType(Options.input_filename, EssenceType, defaultFactory); if ( ASDCP_SUCCESS(result) ) { switch ( EssenceType ) { case ESS_AS02_JPEG_2000: - result = read_JP2K_file(Options); + result = read_JP2K_file(Options, defaultFactory); break; //PB case ESS_AS02_ACES: - result = read_ACES_file(Options); + result = read_ACES_file(Options, defaultFactory); break; //-- case ESS_AS02_PCM_24b_48k: case ESS_AS02_PCM_24b_96k: - result = read_PCM_file(Options); + result = read_PCM_file(Options, defaultFactory); break; case ESS_AS02_TIMED_TEXT: - result = read_timed_text_file(Options); + result = read_timed_text_file(Options, defaultFactory); break; case ESS_AS02_IAB: - result = read_iab_file(Options); + result = read_iab_file(Options, defaultFactory); break; case ESS_AS02_ISXD: if ( Options.g_stream_sid == 0 ) { - result = read_isxd_file(Options); + result = read_isxd_file(Options, defaultFactory); } else { result = extract_generic_stream_partition_payload(Options.input_filename, Options.g_stream_sid, - Options.file_prefix); + Options.file_prefix, defaultFactory); } break; diff --git a/src/asdcp-info.cpp b/src/asdcp-info.cpp index b8876fe..f8a301c 100755 --- a/src/asdcp-info.cpp +++ b/src/asdcp-info.cpp @@ -309,7 +309,7 @@ class FileInfoWrapper KM_NO_COPY_CONSTRUCT(FileInfoWrapper); public: - FileInfoWrapper() : m_MaxBitrate(0.0), m_AvgBitrate(0.0) {} + FileInfoWrapper(const Kumu::IFileReaderFactory& fileReaderFactory) : m_MaxBitrate(0.0), m_AvgBitrate(0.0), m_Reader(fileReaderFactory) {} virtual ~FileInfoWrapper() {} Result_t @@ -532,17 +532,17 @@ public: // Read header metadata from an ASDCP file // Result_t -show_file_info(CommandOptions& Options) +show_file_info(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { EssenceType_t EssenceType; - Result_t result = ASDCP::EssenceType(Options.filenames.front().c_str(), EssenceType); + Result_t result = ASDCP::EssenceType(Options.filenames.front().c_str(), EssenceType, fileReaderFactory); if ( ASDCP_FAILURE(result) ) return result; if ( EssenceType == ESS_MPEG2_VES ) { - FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor> wrapper; + FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "MPEG2 video"); if ( ASDCP_SUCCESS(result) && Options.showrate_flag ) @@ -550,7 +550,7 @@ show_file_info(CommandOptions& Options) } else if ( EssenceType == ESS_PCM_24b_48k || EssenceType == ESS_PCM_24b_96k ) { - FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor> wrapper; + FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "PCM audio"); if ( ASDCP_SUCCESS(result) && Options.showcoding_flag ) @@ -560,7 +560,7 @@ show_file_info(CommandOptions& Options) { if ( Options.stereo_image_flag ) { - FileInfoWrapper<ASDCP::JP2K::MXFSReader, MyStereoPictureDescriptor> wrapper; + FileInfoWrapper<ASDCP::JP2K::MXFSReader, MyStereoPictureDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "JPEG 2000 stereoscopic pictures"); if ( KM_SUCCESS(result) ) @@ -579,7 +579,7 @@ show_file_info(CommandOptions& Options) } else { - FileInfoWrapper<ASDCP::JP2K::MXFReader, MyPictureDescriptor>wrapper; + FileInfoWrapper<ASDCP::JP2K::MXFReader, MyPictureDescriptor>wrapper(fileReaderFactory); result = wrapper.file_info(Options, "JPEG 2000 pictures"); if ( KM_SUCCESS(result) ) @@ -599,7 +599,7 @@ show_file_info(CommandOptions& Options) } else if ( EssenceType == ESS_JPEG_2000_S ) { - FileInfoWrapper<ASDCP::JP2K::MXFSReader, MyStereoPictureDescriptor>wrapper; + FileInfoWrapper<ASDCP::JP2K::MXFSReader, MyStereoPictureDescriptor>wrapper(fileReaderFactory); result = wrapper.file_info(Options, "JPEG 2000 stereoscopic pictures"); if ( KM_SUCCESS(result) ) @@ -618,17 +618,17 @@ show_file_info(CommandOptions& Options) } else if ( EssenceType == ESS_TIMED_TEXT ) { - FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>wrapper; + FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>wrapper(fileReaderFactory); result = wrapper.file_info(Options, "Timed Text"); } else if ( EssenceType == ESS_DCDATA_UNKNOWN ) { - FileInfoWrapper<ASDCP::DCData::MXFReader, MyDCDataDescriptor> wrapper; + FileInfoWrapper<ASDCP::DCData::MXFReader, MyDCDataDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "D-Cinema Generic Data"); } else if ( EssenceType == ESS_DCDATA_DOLBY_ATMOS ) { - FileInfoWrapper<ASDCP::ATMOS::MXFReader, MyAtmosDescriptor> wrapper; + FileInfoWrapper<ASDCP::ATMOS::MXFReader, MyAtmosDescriptor> wrapper(fileReaderFactory); result = wrapper.file_info(Options, "Dolby ATMOS"); } else if ( EssenceType == ESS_AS02_PCM_24b_48k @@ -641,14 +641,14 @@ show_file_info(CommandOptions& Options) else { fprintf(stderr, "File is not AS-DCP: %s\n", Options.filenames.front().c_str()); - Kumu::FileReader Reader; + Kumu::IFileReader* Reader = fileReaderFactory.CreateFileReader(); const Dictionary* Dict = &DefaultCompositeDict(); MXF::OP1aHeader TestHeader(Dict); - result = Reader.OpenRead(Options.filenames.front().c_str()); + result = Reader->OpenRead(Options.filenames.front().c_str()); if ( ASDCP_SUCCESS(result) ) - result = TestHeader.InitFromFile(Reader); // test UL and OP + result = TestHeader.InitFromFile(*Reader); // test UL and OP if ( ASDCP_SUCCESS(result) ) { @@ -668,6 +668,7 @@ show_file_info(CommandOptions& Options) { fputs("File is not MXF.\n", stdout); } + delete Reader; } return result; @@ -696,9 +697,10 @@ main(int argc, const char** argv) return 3; } + Kumu::FileReaderFactory defaultFactory; while ( ! Options.filenames.empty() && ASDCP_SUCCESS(result) ) { - result = show_file_info(Options); + result = show_file_info(Options, defaultFactory); Options.filenames.pop_front(); } diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp index ecf6f21..853c10a 100755 --- a/src/asdcp-test.cpp +++ b/src/asdcp-test.cpp @@ -670,11 +670,11 @@ write_MPEG2_file(CommandOptions& Options) // Read a ciphertext MPEG2 Video Elementary Stream from a ciphertext ASDCP file // Result_t -read_MPEG2_file(CommandOptions& Options) +read_MPEG2_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - MPEG2::MXFReader Reader; + MPEG2::MXFReader Reader(fileReaderFactory); MPEG2::FrameBuffer FrameBuffer(Options.fb_size); Kumu::FileWriter OutFile; ui32_t frame_count = 0; @@ -749,11 +749,11 @@ read_MPEG2_file(CommandOptions& Options) // Result_t -gop_start_test(CommandOptions& Options) +gop_start_test(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { using namespace ASDCP::MPEG2; - MXFReader Reader; + MXFReader Reader(fileReaderFactory); MPEG2::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -937,11 +937,11 @@ write_JP2K_S_file(CommandOptions& Options) // Read one or more plaintext JPEG 2000 stereoscopic codestream pairs from a ciphertext ASDCP file // Read one or more ciphertext JPEG 2000 stereoscopic codestream pairs from a ciphertext ASDCP file Result_t -read_JP2K_S_file(CommandOptions& Options) +read_JP2K_S_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - JP2K::MXFSReader Reader; + JP2K::MXFSReader Reader(fileReaderFactory); JP2K::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -1160,11 +1160,11 @@ write_JP2K_file(CommandOptions& Options) // Read one or more ciphertext JPEG 2000 codestreams from a ciphertext ASDCP file // Result_t -read_JP2K_file(CommandOptions& Options) +read_JP2K_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - JP2K::MXFReader Reader; + JP2K::MXFReader Reader(fileReaderFactory); JP2K::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -1382,11 +1382,11 @@ write_PCM_file(CommandOptions& Options) // Read one or more ciphertext PCM audio streams from a ciphertext ASDCP file // Result_t -read_PCM_file(CommandOptions& Options) +read_PCM_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - PCM::MXFReader Reader; + PCM::MXFReader Reader(fileReaderFactory); PCM::FrameBuffer FrameBuffer; WavFileWriter OutWave; PCM::AudioDescriptor ADesc; @@ -1607,11 +1607,11 @@ write_timed_text_file(CommandOptions& Options) // Read one or more timed text streams from a ciphertext ASDCP file // Result_t -read_timed_text_file(CommandOptions& Options) +read_timed_text_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - TimedText::MXFReader Reader; + TimedText::MXFReader Reader(fileReaderFactory); TimedText::FrameBuffer FrameBuffer; TimedText::TimedTextDescriptor TDesc; @@ -1766,7 +1766,7 @@ class FileInfoWrapper { public: static Result_t - file_info(CommandOptions& Options, const char* type_string, FILE* stream = 0) + file_info(CommandOptions& Options, const char* type_string, const Kumu::IFileReaderFactory& fileReaderFactory, FILE* stream = 0) { assert(type_string); if ( stream == 0 ) @@ -1776,7 +1776,7 @@ public: if ( Options.verbose_flag || Options.showheader_flag ) { - ReaderT Reader; + ReaderT Reader(fileReaderFactory); result = Reader.OpenRead(Options.filenames[0]); if ( ASDCP_SUCCESS(result) ) @@ -1810,26 +1810,26 @@ public: // Read header metadata from an ASDCP file // Result_t -show_file_info(CommandOptions& Options) +show_file_info(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { EssenceType_t EssenceType; - Result_t result = ASDCP::EssenceType(Options.filenames[0], EssenceType); + Result_t result = ASDCP::EssenceType(Options.filenames[0], EssenceType, fileReaderFactory); if ( ASDCP_FAILURE(result) ) return result; if ( EssenceType == ESS_MPEG2_VES ) { - result = FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor>::file_info(Options, "MPEG2 video"); + result = FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor>::file_info(Options, "MPEG2 video", fileReaderFactory); } else if ( EssenceType == ESS_PCM_24b_48k || EssenceType == ESS_PCM_24b_96k ) { - result = FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor>::file_info(Options, "PCM audio"); + result = FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor>::file_info(Options, "PCM audio", fileReaderFactory); if ( ASDCP_SUCCESS(result) ) { const Dictionary* Dict = &DefaultCompositeDict(); - PCM::MXFReader Reader; + PCM::MXFReader Reader(fileReaderFactory); MXF::OP1aHeader Header(Dict); MXF::WaveAudioDescriptor *descriptor = 0; @@ -1850,34 +1850,34 @@ show_file_info(CommandOptions& Options) if ( Options.stereo_image_flag ) { result = FileInfoWrapper<ASDCP::JP2K::MXFSReader, - MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures"); + MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures", fileReaderFactory); } else { result = FileInfoWrapper<ASDCP::JP2K::MXFReader, - MyPictureDescriptor>::file_info(Options, "JPEG 2000 pictures"); + MyPictureDescriptor>::file_info(Options, "JPEG 2000 pictures", fileReaderFactory); } } else if ( EssenceType == ESS_JPEG_2000_S ) { result = FileInfoWrapper<ASDCP::JP2K::MXFSReader, - MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures"); + MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures", fileReaderFactory); } else if ( EssenceType == ESS_TIMED_TEXT ) { - result = FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>::file_info(Options, "Timed Text"); + result = FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>::file_info(Options, "Timed Text", fileReaderFactory); } else { - fprintf(stderr, "File is not AS-DCP: %s\n", Options.filenames[0]); - Kumu::FileReader Reader; + fprintf(stderr, "File is not AS-DCP: %s\n", Options.filenames[0]); + Kumu::IFileReader* Reader = fileReaderFactory.CreateFileReader(); const Dictionary* Dict = &DefaultCompositeDict(); MXF::OP1aHeader TestHeader(Dict); - result = Reader.OpenRead(Options.filenames[0]); + result = Reader->OpenRead(Options.filenames[0]); if ( ASDCP_SUCCESS(result) ) - result = TestHeader.InitFromFile(Reader); // test UL and OP + result = TestHeader.InitFromFile(*Reader); // test UL and OP if ( ASDCP_SUCCESS(result) ) { @@ -1897,6 +1897,7 @@ show_file_info(CommandOptions& Options) { fputs("File is not MXF.\n", stdout); } + delete Reader; } return result; @@ -1967,19 +1968,21 @@ main(int argc, const char** argv) return 3; } + Kumu::FileReaderFactory defaultFactory; + if ( Options.mode == MMT_INFO ) { - result = show_file_info(Options); + result = show_file_info(Options, defaultFactory); for ( int i = 1; ASDCP_SUCCESS(result) && i < Options.file_count; ++i ) { Options.filenames[0] = Options.filenames[i]; // oh-so hackish - result = show_file_info(Options); + result = show_file_info(Options, defaultFactory); } } else if ( Options.mode == MMT_GOP_START ) { - result = gop_start_test(Options); + result = gop_start_test(Options, defaultFactory); } else if ( Options.mode == MMT_GEN_KEY ) { @@ -2008,37 +2011,37 @@ main(int argc, const char** argv) else if ( Options.mode == MMT_EXTRACT ) { EssenceType_t EssenceType; - result = ASDCP::EssenceType(Options.filenames[0], EssenceType); + result = ASDCP::EssenceType(Options.filenames[0], EssenceType, defaultFactory); if ( ASDCP_SUCCESS(result) ) { switch ( EssenceType ) { case ESS_MPEG2_VES: - result = read_MPEG2_file(Options); + result = read_MPEG2_file(Options, defaultFactory); break; case ESS_JPEG_2000: if ( Options.stereo_image_flag ) - result = read_JP2K_S_file(Options); + result = read_JP2K_S_file(Options, defaultFactory); else - result = read_JP2K_file(Options); + result = read_JP2K_file(Options, defaultFactory); break; case ESS_JPEG_2000_S: - result = read_JP2K_S_file(Options); + result = read_JP2K_S_file(Options, defaultFactory); break; case ESS_PCM_24b_48k: case ESS_PCM_24b_96k: - result = read_PCM_file(Options); + result = read_PCM_file(Options, defaultFactory); break; case ESS_TIMED_TEXT: - result = read_timed_text_file(Options); + result = read_timed_text_file(Options, defaultFactory); break; - default: + default: fprintf(stderr, "%s: Unknown file type, not ASDCP essence.\n", Options.filenames[0]); return 5; } diff --git a/src/asdcp-unwrap.cpp b/src/asdcp-unwrap.cpp index 7b607d9..3779b95 100755 --- a/src/asdcp-unwrap.cpp +++ b/src/asdcp-unwrap.cpp @@ -325,11 +325,11 @@ public: // Read a ciphertext MPEG2 Video Elementary Stream from a ciphertext ASDCP file // Result_t -read_MPEG2_file(CommandOptions& Options) +read_MPEG2_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - MPEG2::MXFReader Reader; + MPEG2::MXFReader Reader(fileReaderFactory); MPEG2::FrameBuffer FrameBuffer(Options.fb_size); Kumu::FileWriter OutFile; ui32_t frame_count = 0; @@ -407,11 +407,11 @@ read_MPEG2_file(CommandOptions& Options) // Result_t -gop_start_test(CommandOptions& Options) +gop_start_test(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { using namespace ASDCP::MPEG2; - MXFReader Reader; + MXFReader Reader(fileReaderFactory); MPEG2::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -461,11 +461,11 @@ gop_start_test(CommandOptions& Options) // Read one or more plaintext JPEG 2000 stereoscopic codestream pairs from a ciphertext ASDCP file // Read one or more ciphertext JPEG 2000 stereoscopic codestream pairs from a ciphertext ASDCP file Result_t -read_JP2K_S_file(CommandOptions& Options) +read_JP2K_S_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - JP2K::MXFSReader Reader; + JP2K::MXFSReader Reader(fileReaderFactory); JP2K::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -569,11 +569,11 @@ read_JP2K_S_file(CommandOptions& Options) // Read one or more ciphertext JPEG 2000 codestreams from a ciphertext ASDCP file // Result_t -read_JP2K_file(CommandOptions& Options) +read_JP2K_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - JP2K::MXFReader Reader; + JP2K::MXFReader Reader(fileReaderFactory); JP2K::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -658,11 +658,11 @@ read_JP2K_file(CommandOptions& Options) // Read one or more ciphertext PCM audio streams from a ciphertext ASDCP file // Result_t -read_PCM_file(CommandOptions& Options) +read_PCM_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - PCM::MXFReader Reader; + PCM::MXFReader Reader(fileReaderFactory); PCM::FrameBuffer FrameBuffer; WavFileWriter OutWave; PCM::AudioDescriptor ADesc; @@ -779,11 +779,11 @@ read_PCM_file(CommandOptions& Options) // Read one or more timed text streams from a ciphertext ASDCP file // Result_t -read_timed_text_file(CommandOptions& Options) +read_timed_text_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - TimedText::MXFReader Reader; + TimedText::MXFReader Reader(fileReaderFactory); TimedText::FrameBuffer FrameBuffer; TimedText::TimedTextDescriptor TDesc; @@ -867,11 +867,11 @@ read_timed_text_file(CommandOptions& Options) // Read one or more ciphertext DCData byestreams from a ciphertext ASDCP file // Result_t -read_DCData_file(CommandOptions& Options) +read_DCData_file(CommandOptions& Options, const Kumu::IFileReaderFactory& fileReaderFactory) { AESDecContext* Context = 0; HMACContext* HMAC = 0; - DCData::MXFReader Reader; + DCData::MXFReader Reader(fileReaderFactory); DCData::FrameBuffer FrameBuffer(Options.fb_size); ui32_t frame_count = 0; @@ -971,50 +971,52 @@ main(int argc, const char** argv) return 3; } + Kumu::FileReaderFactory defaultFactory; + if ( Options.mode == MMT_GOP_START ) { - result = gop_start_test(Options); + result = gop_start_test(Options, defaultFactory); } else if ( Options.mode == MMT_EXTRACT ) { EssenceType_t EssenceType; - result = ASDCP::EssenceType(Options.input_filename, EssenceType); + result = ASDCP::EssenceType(Options.input_filename, EssenceType, defaultFactory); if ( ASDCP_SUCCESS(result) ) { switch ( EssenceType ) { case ESS_MPEG2_VES: - result = read_MPEG2_file(Options); + result = read_MPEG2_file(Options, defaultFactory); break; case ESS_JPEG_2000: if ( Options.stereo_image_flag ) - result = read_JP2K_S_file(Options); + result = read_JP2K_S_file(Options, defaultFactory); else - result = read_JP2K_file(Options); + result = read_JP2K_file(Options, defaultFactory); break; case ESS_JPEG_2000_S: - result = read_JP2K_S_file(Options); + result = read_JP2K_S_file(Options, defaultFactory); break; case ESS_PCM_24b_48k: case ESS_PCM_24b_96k: - result = read_PCM_file(Options); + result = read_PCM_file(Options, defaultFactory); break; case ESS_TIMED_TEXT: - result = read_timed_text_file(Options); + result = read_timed_text_file(Options, defaultFactory); break; case ESS_DCDATA_UNKNOWN: - result = read_DCData_file(Options); + result = read_DCData_file(Options, defaultFactory); break; case ESS_DCDATA_DOLBY_ATMOS: Options.extension = "atmos"; - result = read_DCData_file(Options); + result = read_DCData_file(Options, defaultFactory); break; default: diff --git a/src/h__02_Reader.cpp b/src/h__02_Reader.cpp index ff4af7c..17c5871 100644 --- a/src/h__02_Reader.cpp +++ b/src/h__02_Reader.cpp @@ -72,7 +72,7 @@ AS_02::MXF::AS02IndexReader::~AS02IndexReader() {} // Result_t -AS_02::MXF::AS02IndexReader::InitFromFile(const Kumu::FileReader& reader, const ASDCP::MXF::RIP& rip, const bool has_header_essence) +AS_02::MXF::AS02IndexReader::InitFromFile(const Kumu::IFileReader& reader, const ASDCP::MXF::RIP& rip, const bool has_header_essence) { typedef std::list<Kumu::mem_ptr<ASDCP::MXF::Partition> > body_part_array_t; body_part_array_t body_part_array; @@ -395,8 +395,7 @@ AS_02::MXF::AS02IndexReader::Lookup(ui32_t frame_num, ASDCP::MXF::IndexTableSegm // -AS_02::h__AS02Reader::h__AS02Reader(const ASDCP::Dictionary *d) : - ASDCP::MXF::TrackFileReader<ASDCP::MXF::OP1aHeader, AS_02::MXF::AS02IndexReader>(d) {} +AS_02::h__AS02Reader::h__AS02Reader(const ASDCP::Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : ASDCP::MXF::TrackFileReader<ASDCP::MXF::OP1aHeader, AS_02::MXF::AS02IndexReader>(d, fileReaderFactory) {} AS_02::h__AS02Reader::~h__AS02Reader() {} @@ -478,7 +477,7 @@ AS_02::h__AS02Reader::OpenMXFRead(const std::string& filename) if ( KM_SUCCESS(result) ) { m_IndexAccess.m_Lookup = &m_HeaderPart.m_Primer; - result = m_IndexAccess.InitFromFile(m_File, m_RIP, has_header_essence); + result = m_IndexAccess.InitFromFile(*m_File, m_RIP, has_header_essence); } return result; diff --git a/src/h__02_Writer.cpp b/src/h__02_Writer.cpp index e35727e..20004c0 100644 --- a/src/h__02_Writer.cpp +++ b/src/h__02_Writer.cpp @@ -221,7 +221,7 @@ AS_02::h__AS02WriterFrame::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,co body_part.BodySID = 1; body_part.OperationalPattern = m_HeaderPart.OperationalPattern; body_part.EssenceContainers = m_HeaderPart.EssenceContainers; - body_part.ThisPartition = m_File.Tell(); + body_part.ThisPartition = m_File.TellPosition(); body_part.BodyOffset = m_StreamOffset; result = body_part.WriteToFile(m_File, body_ul); diff --git a/src/h__Reader.cpp b/src/h__Reader.cpp index ce2abf6..c24f656 100755 --- a/src/h__Reader.cpp +++ b/src/h__Reader.cpp @@ -64,8 +64,7 @@ ASDCP::default_md_object_init() // // -ASDCP::h__ASDCPReader::h__ASDCPReader(const Dictionary *d) : - MXF::TrackFileReader<OP1aHeader, OPAtomIndexFooter>(d), m_BodyPart(d) {} +ASDCP::h__ASDCPReader::h__ASDCPReader(const Dictionary *d, const Kumu::IFileReaderFactory& fileReaderFactory) : MXF::TrackFileReader<OP1aHeader, OPAtomIndexFooter>(d, fileReaderFactory), m_BodyPart(m_Dict) {} ASDCP::h__ASDCPReader::~h__ASDCPReader() {} @@ -127,8 +126,8 @@ ASDCP::h__ASDCPReader::OpenMXFRead(const std::string& filename) // partition and read the partition pack RIP::const_pair_iterator r_i = m_RIP.PairArray.begin(); r_i++; - m_File.Seek((*r_i).ByteOffset); - result = m_BodyPart.InitFromFile(m_File); + m_File->Seek((*r_i).ByteOffset); + result = m_BodyPart.InitFromFile(*m_File); if( ASDCP_FAILURE(result) ) { @@ -142,18 +141,18 @@ ASDCP::h__ASDCPReader::OpenMXFRead(const std::string& filename) // this position will be at either // a) the spot in the header partition where essence units appear, or // b) right after the body partition header (where essence units appear) - m_HeaderPart.BodyOffset = m_File.Tell(); + m_HeaderPart.BodyOffset = m_File->TellPosition(); - result = m_File.Seek(m_HeaderPart.FooterPartition); + result = m_File->Seek(m_HeaderPart.FooterPartition); if ( ASDCP_SUCCESS(result) ) { m_IndexAccess.m_Lookup = &m_HeaderPart.m_Primer; - result = m_IndexAccess.InitFromFile(m_File); + result = m_IndexAccess.InitFromFile(*m_File); } } - m_File.Seek(m_HeaderPart.BodyOffset); + m_File->Seek(m_HeaderPart.BodyOffset); return result; } @@ -181,7 +180,7 @@ ASDCP::h__ASDCPReader::LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffset, // Result_t -ASDCP::KLReader::ReadKLFromFile(Kumu::FileReader& Reader) +ASDCP::KLReader::ReadKLFromFile(Kumu::IFileReader& Reader) { ui32_t read_count; ui32_t header_length = SMPTE_UL_LENGTH + MXF_BER_LENGTH; @@ -241,7 +240,7 @@ ASDCP::KLReader::ReadKLFromFile(Kumu::FileReader& Reader) // base subroutine for reading a KLV packet, assumes file position is at the first byte of the packet Result_t -ASDCP::Read_EKLV_Packet(Kumu::FileReader& File, const ASDCP::Dictionary& Dict, +ASDCP::Read_EKLV_Packet(Kumu::IFileReader& File, const ASDCP::Dictionary& Dict, const ASDCP::WriterInfo& Info, Kumu::fpos_t& LastPosition, ASDCP::FrameBuffer& CtFrameBuf, ui32_t FrameNum, ui32_t SequenceNum, ASDCP::FrameBuffer& FrameBuf, const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC) diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp index 5f836fe..3a62c8b 100755 --- a/src/h__Writer.cpp +++ b/src/h__Writer.cpp @@ -200,7 +200,7 @@ ASDCP::AddDmsTrackGenericPartUtf8Text(Kumu::FileWriter& file_writer, MXF::OP1aHe return RESULT_FORMAT; } - rip.PairArray.push_back(RIP::PartitionPair(max_sid + 1, file_writer.Tell())); + rip.PairArray.push_back(RIP::PartitionPair(max_sid + 1, file_writer.TellPosition())); // Add new GSTBS linked to DMF GenericStreamTextBasedSet *gst_obj = new GenericStreamTextBasedSet(Dict); @@ -231,7 +231,7 @@ ASDCP::h__ASDCPWriter::CreateBodyPart(const MXF::Rational& EditRate, ui32_t Byte { // Body Partition m_BodyPart.EssenceContainers = m_HeaderPart.EssenceContainers; - m_BodyPart.ThisPartition = m_File.Tell(); + m_BodyPart.ThisPartition = m_File.TellPosition(); m_BodyPart.BodySID = 1; UL OPAtomUL(m_Dict->ul(MDD_OPAtom)); m_BodyPart.OperationalPattern = OPAtomUL; @@ -248,7 +248,7 @@ ASDCP::h__ASDCPWriter::CreateBodyPart(const MXF::Rational& EditRate, ui32_t Byte if ( ASDCP_SUCCESS(result) ) { // Index setup - Kumu::fpos_t ECoffset = m_File.Tell(); + Kumu::fpos_t ECoffset = m_File.TellPosition(); m_FooterPart.IndexSID = 129; if ( BytesPerEditUnit == 0 ) @@ -326,7 +326,7 @@ ASDCP::h__ASDCPWriter::WriteASDCPFooter() m_EssenceDescriptor->ContainerDuration = m_FramesWritten; m_FooterPart.PreviousPartition = m_RIP.PairArray.back().ByteOffset; - Kumu::fpos_t here = m_File.Tell(); + Kumu::fpos_t here = m_File.TellPosition(); m_RIP.PairArray.push_back(RIP::PartitionPair(0, here)); // Last RIP Entry m_HeaderPart.FooterPartition = here; diff --git a/src/klvwalk.cpp b/src/klvwalk.cpp index 90b719b..4f4af21 100755 --- a/src/klvwalk.cpp +++ b/src/klvwalk.cpp @@ -188,33 +188,35 @@ main(int argc, const char** argv) FileList_t::iterator fi; Result_t result = RESULT_OK; + Kumu::FileReaderFactory defaultFactory; for ( fi = Options.inFileList.begin(); ASDCP_SUCCESS(result) && fi != Options.inFileList.end(); fi++ ) { + Kumu::IFileReader* Reader = defaultFactory.CreateFileReader(); + if (Options.verbose_flag) fprintf(stderr, "Opening file %s\n", ((*fi).c_str())); if ( Options.read_mxf_flag ) // dump MXF - { - Kumu::FileReader Reader; + { const Dictionary* Dict = &DefaultCompositeDict(); ASDCP::MXF::OP1aHeader Header(Dict); ASDCP::MXF::RIP RIP(Dict); - result = Reader.OpenRead(*fi); + result = Reader->OpenRead(*fi); if ( ASDCP_SUCCESS(result) ) { - result = MXF::SeekToRIP(Reader); + result = MXF::SeekToRIP(*Reader); if ( ASDCP_SUCCESS(result) ) { - result = RIP.InitFromFile(Reader); + result = RIP.InitFromFile(*Reader); ui32_t test_s = RIP.PairArray.size(); if ( ASDCP_FAILURE(result) ) { - DefaultLogSink().Error("File contains no RIP\n"); + DefaultLogSink().Error("File contains no RIP\n"); result = RESULT_OK; } else if ( RIP.PairArray.empty() ) @@ -222,7 +224,7 @@ main(int argc, const char** argv) DefaultLogSink().Error("RIP contains no Pairs.\n"); } - Reader.Seek(0); + Reader->Seek(0); } else { @@ -231,7 +233,7 @@ main(int argc, const char** argv) } if ( ASDCP_SUCCESS(result) ) - result = Header.InitFromFile(Reader); + result = Header.InitFromFile(*Reader); if ( ASDCP_SUCCESS(result) ) Header.Dump(stdout); @@ -242,12 +244,12 @@ main(int argc, const char** argv) for ( pi++; pi != RIP.PairArray.end() && ASDCP_SUCCESS(result); pi++ ) { - result = Reader.Seek((*pi).ByteOffset); + result = Reader->Seek((*pi).ByteOffset); if ( ASDCP_SUCCESS(result) ) { MXF::Partition TmpPart(Dict); - result = TmpPart.InitFromFile(Reader); + result = TmpPart.InitFromFile(*Reader); if ( ASDCP_SUCCESS(result) && TmpPart.BodySID > 0 ) TmpPart.Dump(stdout); @@ -258,12 +260,12 @@ main(int argc, const char** argv) if ( ASDCP_SUCCESS(result) ) { ASDCP::MXF::OPAtomIndexFooter Index(Dict); - result = Reader.Seek(Header.FooterPartition); + result = Reader->Seek(Header.FooterPartition); if ( ASDCP_SUCCESS(result) ) { Index.m_Lookup = &Header.m_Primer; - result = Index.InitFromFile(Reader); + result = Index.InitFromFile(*Reader); } if ( ASDCP_SUCCESS(result) ) @@ -275,19 +277,18 @@ main(int argc, const char** argv) } else if ( Options.walk_parts_flag ) { - Kumu::FileReader Reader; const Dictionary* Dict = &DefaultCompositeDict(); ASDCP::MXF::OP1aHeader Header(Dict); ASDCP::MXF::RIP RIP(Dict); - result = Reader.OpenRead((*fi).c_str()); + result = Reader->OpenRead((*fi).c_str()); if ( ASDCP_SUCCESS(result) ) - result = MXF::SeekToRIP(Reader); + result = MXF::SeekToRIP(*Reader); if ( ASDCP_SUCCESS(result) ) { - result = RIP.InitFromFile(Reader); + result = RIP.InitFromFile(*Reader); ui32_t test_s = RIP.PairArray.size(); if ( ASDCP_FAILURE(result) ) @@ -300,7 +301,7 @@ main(int argc, const char** argv) DefaultLogSink().Error("RIP contains no Pairs.\n"); } - Reader.Seek(0); + Reader->Seek(0); } else { @@ -314,9 +315,9 @@ main(int argc, const char** argv) MXF::RIP::const_pair_iterator i; for ( i = RIP.PairArray.begin(); i != RIP.PairArray.end(); ++i ) { - Reader.Seek(i->ByteOffset); + Reader->Seek(i->ByteOffset); MXF::Partition plain_part(Dict); - plain_part.InitFromFile(Reader); + plain_part.InitFromFile(*Reader); if ( plain_part.ThisPartition != i->ByteOffset ) { @@ -329,27 +330,27 @@ main(int argc, const char** argv) } } else // dump klv - { - Kumu::FileReader Reader; + { KLVFilePacket KP; ui64_t pos = 0; - result = Reader.OpenRead((*fi).c_str()); + result = Reader->OpenRead((*fi).c_str()); if ( ASDCP_SUCCESS(result) ) - result = KP.InitFromFile(Reader); + result = KP.InitFromFile(*Reader); while ( ASDCP_SUCCESS(result) ) { fprintf(stdout, "@0x%08llx: ", pos); KP.Dump(stdout, DefaultCompositeDict(), true); - pos = Reader.Tell(); - result = KP.InitFromFile(Reader); + pos = Reader->TellPosition(); + result = KP.InitFromFile(*Reader); } if( result == RESULT_ENDOFFILE ) result = RESULT_OK; } + delete Reader; } if ( ASDCP_FAILURE(result) ) |
