summaryrefslogtreecommitdiff
path: root/src/klvwalk.cpp
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 /src/klvwalk.cpp
parent7a085ad0d445ffc63ec42a2faa69a82138931575 (diff)
FileReader pluggable at runtime
Diffstat (limited to 'src/klvwalk.cpp')
-rwxr-xr-xsrc/klvwalk.cpp51
1 files changed, 26 insertions, 25 deletions
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) )