summaryrefslogtreecommitdiff
path: root/src/klvwalk.cpp
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2005-12-20 01:55:40 +0000
committerjhurst <>2005-12-20 01:55:40 +0000
commit8095eaa320551b6795d0368c0ad0c227a3167caa (patch)
treee522d5137671fffbc8fcc084831b5d8806ef44f2 /src/klvwalk.cpp
wheee!
Diffstat (limited to 'src/klvwalk.cpp')
-rwxr-xr-xsrc/klvwalk.cpp161
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
+//
+
+
+
+
+
+
+
+
+
+