summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormilla <marc.illa@dolby.com>2021-05-26 13:32:55 +0200
committermilla <marc.illa@dolby.com>2021-06-03 13:50:11 +0200
commitfacf4f4c7a8ed65d59baed9020d5fa061b952874 (patch)
tree8c718f4b7690db47315ebf70b6443f3fba540cf7
parent7a085ad0d445ffc63ec42a2faa69a82138931575 (diff)
FileReader pluggable at runtime
-rw-r--r--src/AS_02.h12
-rw-r--r--src/AS_02_ACES.cpp31
-rw-r--r--src/AS_02_ACES.h2
-rw-r--r--src/AS_02_IAB.cpp8
-rw-r--r--src/AS_02_IAB.h13
-rw-r--r--src/AS_02_ISXD.cpp22
-rw-r--r--src/AS_02_JP2K.cpp20
-rw-r--r--src/AS_02_PCM.cpp30
-rw-r--r--src/AS_02_TimedText.cpp29
-rw-r--r--src/AS_02_internal.h43
-rwxr-xr-xsrc/AS_DCP.h16
-rw-r--r--src/AS_DCP_ATMOS.cpp25
-rw-r--r--src/AS_DCP_DCData.cpp22
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp56
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp30
-rwxr-xr-xsrc/AS_DCP_MXF.cpp11
-rwxr-xr-xsrc/AS_DCP_PCM.cpp22
-rw-r--r--src/AS_DCP_TimedText.cpp26
-rwxr-xr-xsrc/AS_DCP_internal.h38
-rwxr-xr-xsrc/KLV.cpp6
-rwxr-xr-xsrc/KLV.h4
-rw-r--r--src/KM_fileio.cpp29
-rwxr-xr-xsrc/KM_fileio.h83
-rwxr-xr-xsrc/MXF.cpp12
-rwxr-xr-xsrc/MXF.h10
-rwxr-xr-xsrc/PCM_Parser.cpp36
-rwxr-xr-xsrc/Wav.cpp6
-rwxr-xr-xsrc/Wav.h6
-rw-r--r--src/as-02-info.cpp27
-rwxr-xr-xsrc/as-02-unwrap.cpp53
-rwxr-xr-xsrc/asdcp-info.cpp32
-rwxr-xr-xsrc/asdcp-test.cpp79
-rwxr-xr-xsrc/asdcp-unwrap.cpp50
-rw-r--r--src/h__02_Reader.cpp7
-rw-r--r--src/h__02_Writer.cpp2
-rwxr-xr-xsrc/h__Reader.cpp19
-rwxr-xr-xsrc/h__Writer.cpp8
-rwxr-xr-xsrc/klvwalk.cpp51
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);
}
diff --git a/src/KLV.h b/src/KLV.h
index f34ebd9..727efb0 100755
--- a/src/KLV.h
+++ b/src/KLV.h
@@ -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
diff --git a/src/MXF.h b/src/MXF.h
index 5cc883f..d27bc47 100755
--- a/src/MXF.h
+++ b/src/MXF.h
@@ -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;
diff --git a/src/Wav.h b/src/Wav.h
index 7e274d8..68cf9d8 100755
--- a/src/Wav.h
+++ b/src/Wav.h
@@ -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) )