summaryrefslogtreecommitdiff
path: root/tools/omf/omftool.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-02-10 03:45:13 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-02-10 03:45:13 +0000
commitcd0e83e01075cf986a4986a08e07ab580d65b22f (patch)
tree1ffea116b0cced8325c82452db8d75cdb4ae75a5 /tools/omf/omftool.h
parent3c00a7ca2ae34cb65c8d3394d9a012f20c69ee77 (diff)
pass 0.92 of an OMF2 importer, based on the Reaper extension by Hannes Breul
git-svn-id: svn://localhost/ardour2/branches/3.0@6672 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'tools/omf/omftool.h')
-rw-r--r--tools/omf/omftool.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/tools/omf/omftool.h b/tools/omf/omftool.h
new file mode 100644
index 0000000000..1d93f47989
--- /dev/null
+++ b/tools/omf/omftool.h
@@ -0,0 +1,97 @@
+#ifndef __ardour_omftool__
+#define __ardour_omftool__
+
+#include <vector>
+#include <string>
+#include <cstdio>
+
+#include <stdint.h>
+#include <sqlite3.h>
+
+class XMLNode;
+
+class OMF {
+public:
+ OMF ();
+ ~OMF ();
+
+ int init ();
+ int load (const std::string&);
+ void create_xml ();
+
+ void set_version (int);
+ void set_session_name (const std::string&);
+ void set_sample_rate (int);
+
+private:
+ bool bigEndian;
+ int64_t id_counter;
+ FILE* file;
+ sqlite3* db;
+ int version;
+ std::string base_dir;
+ std::string session_name;
+ std::vector<std::string> audiofile_path_vector;
+ int sample_rate;
+ XMLNode* session;
+ XMLNode* sources;
+ XMLNode* routes;
+ XMLNode* regions;
+ XMLNode* playlists;
+ XMLNode* diskstreams;
+ XMLNode* locations;
+ XMLNode* options;
+
+ XMLNode* new_region_node ();
+ XMLNode* new_source_node ();
+ XMLNode* new_route_node ();
+ XMLNode* new_playlist_node ();
+ XMLNode* new_diskstream_node ();
+
+ typedef std::map<std::string,XMLNode*> KnownSources;
+ KnownSources known_sources;
+
+ XMLNode* get_known_source (const char*);
+ void add_source (const char*, XMLNode*);
+ char* read_name (size_t offset, size_t length);
+ bool get_offset_and_length (const char* offstr, const char* lenstr, uint32_t& offset, uint32_t len);
+ void name_types ();
+
+ uint16_t e16(uint16_t x)
+ {
+ if (bigEndian)
+ return (x>>8)
+ | (x<<8);
+ else
+ return x;
+ }
+
+ uint32_t e32(uint32_t x)
+ {
+ if (bigEndian)
+ return (x>>24) |
+ ((x<<8) & 0x00FF0000) |
+ ((x>>8) & 0x0000FF00) |
+ (x<<24);
+ else
+ return x;
+ }
+
+ uint64_t e64(uint64_t x)
+ {
+ if (bigEndian)
+ return (x>>56) |
+ ((x<<40) & 0x00FF000000000000) |
+ ((x<<24) & 0x0000FF0000000000) |
+ ((x<<8) & 0x000000FF00000000) |
+ ((x>>8) & 0x00000000FF000000) |
+ ((x>>24) & 0x0000000000FF0000) |
+ ((x>>40) & 0x000000000000FF00) |
+ (x<<56);
+ else
+ return x;
+ }
+
+};
+
+#endif /* __ardour_omftool__ */