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
This commit is contained in:
Paul Davis 2010-02-10 03:45:13 +00:00
parent 3c00a7ca2a
commit cd0e83e010
3 changed files with 1450 additions and 0 deletions

7
tools/omf/Makefile Normal file
View File

@ -0,0 +1,7 @@
CXXFLAGS = -g -I../../libs/pbd \
$(shell pkg-config --cflags sqlite3) \
$(shell pkg-config --cflags libxml-2.0) \
$(shell pkg-config --cflags glibmm-2.4)
omftool: omftool.o
$(CXX) -o $@ omftool.o -L../../build/default/libs/pbd -lpbd $(shell pkg-config --libs sqlite3) $(shell pkg-config --libs libxml-2.0)

1346
tools/omf/omftool.cc Normal file

File diff suppressed because it is too large Load Diff

97
tools/omf/omftool.h Normal file
View File

@ -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__ */