diff options
| author | jhurst <jhurst@cinecert.com> | 2005-12-20 01:55:40 +0000 |
|---|---|---|
| committer | jhurst <> | 2005-12-20 01:55:40 +0000 |
| commit | 8095eaa320551b6795d0368c0ad0c227a3167caa (patch) | |
| tree | e522d5137671fffbc8fcc084831b5d8806ef44f2 /src/klvwalk.cpp | |
wheee!
Diffstat (limited to 'src/klvwalk.cpp')
| -rwxr-xr-x | src/klvwalk.cpp | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/klvwalk.cpp b/src/klvwalk.cpp new file mode 100755 index 0000000..3704f10 --- /dev/null +++ b/src/klvwalk.cpp @@ -0,0 +1,161 @@ +// +// klvwalk.cpp +// + +#include <AS_DCP.h> +#include <MXF.h> +#include <hex_utils.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> +#include <sys/types.h> +#include <sys/stat.h> + +using namespace ASDCP; + + +//------------------------------------------------------------------------------------------ +// + +// There is no header file thet defines this function. +// You just have to know it's there... +void set_debug_mode(bool info_mode, bool debug_mode); + + +int +main(int argc, char** argv) +{ + Result_t result = RESULT_OK; + bool read_mxf = false; + bool rewrite_mxf = false; + int arg_i = 1; + set_debug_mode(true, true); + + if ( strcmp(argv[1], "-r") == 0 ) + { + read_mxf = true; + arg_i++; + } + else if ( strcmp(argv[1], "-w") == 0 ) + { + rewrite_mxf = true; + arg_i++; + assert(argc - arg_i == 2); + } + + fprintf(stderr, "Opening file %s\n", argv[arg_i]); + + if ( read_mxf ) + { + ASDCP::FileReader Reader; + ASDCP::MXF::OPAtomHeader Header; + + result = Reader.OpenRead(argv[arg_i]); + + if ( ASDCP_SUCCESS(result) ) + result = Header.InitFromFile(Reader); + + // if ( ASDCP_SUCCESS(result) ) + Header.Dump(); + + if ( ASDCP_SUCCESS(result) ) + { + ASDCP::MXF::OPAtomIndexFooter Index; + result = Reader.Seek(Header.FooterPartition); + + if ( ASDCP_SUCCESS(result) ) + { + Index.m_Lookup = &Header.m_Primer; + result = Index.InitFromFile(Reader); + } + + if ( ASDCP_SUCCESS(result) ) + Index.Dump(); + } + } + else if ( rewrite_mxf ) + { + ASDCP::FileReader Reader; + ASDCP::FileWriter Writer; + ASDCP::MXF::OPAtomHeader Header; + ASDCP::MXF::OPAtomIndexFooter Index; + + result = Reader.OpenRead(argv[arg_i++]); + + if ( ASDCP_SUCCESS(result) ) + result = Header.InitFromFile(Reader); + + if ( ASDCP_SUCCESS(result) ) + result = Reader.Seek(Header.FooterPartition); + + if ( ASDCP_SUCCESS(result) ) + result = Index.InitFromFile(Reader); + + Header.m_Primer.ClearTagList(); + + if ( ASDCP_SUCCESS(result) ) + result = Writer.OpenWrite(argv[arg_i]); + + if ( ASDCP_SUCCESS(result) ) + result = Header.WriteToFile(Writer); + +// if ( ASDCP_SUCCESS(result) ) +// result = Index.WriteToFile(Writer); + + // essence packets + + // index + + // RIP + } + else // dump klv + { + ASDCP::FileReader Reader; + KLVFilePacket KP; + + result = Reader.OpenRead(argv[arg_i]); + + if ( ASDCP_SUCCESS(result) ) + result = KP.InitFromFile(Reader); + + while ( ASDCP_SUCCESS(result) ) + { + KP.Dump(stderr, true); + result = KP.InitFromFile(Reader); + } + + if( result == RESULT_ENDOFFILE ) + result = RESULT_OK; + } + + if ( result != RESULT_OK ) + { + fputs("Program stopped on error.\n", stderr); + + if ( result != RESULT_FAIL ) + { + fputs(GetResultString(result), stderr); + fputc('\n', stderr); + } + + return 1; + } + + return 0; +} + + +// +// end klvwalk.cpp +// + + + + + + + + + + |
