diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-02-10 03:45:13 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-02-10 03:45:13 +0000 |
commit | cd0e83e01075cf986a4986a08e07ab580d65b22f (patch) | |
tree | 1ffea116b0cced8325c82452db8d75cdb4ae75a5 /tools/omf/omftool.h | |
parent | 3c00a7ca2ae34cb65c8d3394d9a012f20c69ee77 (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.h | 97 |
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__ */ |