From facf4f4c7a8ed65d59baed9020d5fa061b952874 Mon Sep 17 00:00:00 2001 From: milla Date: Wed, 26 May 2021 13:32:55 +0200 Subject: FileReader pluggable at runtime --- src/AS_02_PCM.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/AS_02_PCM.cpp') 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(position) ) + if ( m_File->TellPosition() != static_cast(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); } -- cgit v1.2.3