Remove duplicate header include from libardour source file
[ardour.git] / libs / ptformat / ptfformat.h
index 0f60dc3335769591ac61fbd2164d425ddf6a9b89..3a702aa10bd257246f1fd21475c2c8d217861252 100644 (file)
 #define PTFFORMAT_H
 
 #include <string>
+#include <cstring>
 #include <algorithm>
 #include <vector>
 #include <stdint.h>
+#include "ptformat/visibility.h"
 
-class PTFFormat {
+class LIBPTFORMAT_API PTFFormat {
 public:
        PTFFormat();
        ~PTFFormat();
@@ -28,20 +30,26 @@ public:
        /* Return values:       0            success
                                -1           could not open file as ptf
        */
-       int load(std::string path);
+       int load(std::string path, int64_t targetsr);
 
-       typedef struct wav {
+       struct wav_t {
                std::string filename;
                uint16_t    index;
 
                int64_t     posabsolute;
                int64_t     length;
 
-               bool operator ==(const struct wav& other) {
-                       return (this->index == other.index);
+               bool operator <(const struct wav_t& other) const {
+                       return (strcasecmp(this->filename.c_str(),
+                                       other.filename.c_str()) < 0);
+               }
+
+               bool operator ==(const struct wav_t& other) const {
+                       return (this->filename == other.filename ||
+                               this->index == other.index);
                }
 
-       } wav_t;
+       };
 
        typedef struct region {
                std::string name;
@@ -63,7 +71,7 @@ public:
                region_t    reg;
 
                bool operator ==(const struct track& other) {
-                       return (this->index == other.index);
+                       return (this->name == other.name);
                }
        } track_t;
 
@@ -71,25 +79,13 @@ public:
        std::vector<region_t> regions;
        std::vector<track_t> tracks;
 
-       static bool trackexistsin(std::vector<track_t> tr, uint16_t index) {
-               std::vector<track_t>::iterator begin = tr.begin();
-               std::vector<track_t>::iterator finish = tr.end();
-               std::vector<track_t>::iterator found;
-
-               track_t f = { std::string(""), index };
-
-               if ((found = std::find(begin, finish, f)) != finish) {
-                       return true;
-               }
-               return false;
-       }
-
        static bool regionexistsin(std::vector<region_t> reg, uint16_t index) {
                std::vector<region_t>::iterator begin = reg.begin();
                std::vector<region_t>::iterator finish = reg.end();
                std::vector<region_t>::iterator found;
 
-               region_t r = { std::string(""), index };
+               wav_t w = { std::string(""), 0, 0, 0 };
+               region_t r = { std::string(""), index, 0, 0, 0, w };
 
                if ((found = std::find(begin, finish, r)) != finish) {
                        return true;
@@ -102,7 +98,7 @@ public:
                std::vector<wav_t>::iterator finish = wv.end();
                std::vector<wav_t>::iterator found;
 
-               wav_t w = { std::string(""), index };
+               wav_t w = { std::string(""), index, 0, 0 };
 
                if ((found = std::find(begin, finish, w)) != finish) {
                        return true;
@@ -110,21 +106,38 @@ public:
                return false;
        }
 
-       uint32_t sessionrate;
+       int64_t sessionrate;
+       int64_t targetrate;
        uint8_t version;
 
        unsigned char c0;
        unsigned char c1;
        unsigned char *ptfunxored;
-       int len;
+       uint64_t len;
 
 private:
        bool foundin(std::string haystack, std::string needle);
-       void parse(void);
+       int parse(void);
+       void unxor10(void);
+       void unxor_ptx_to_ptf(void);
+       void setrates(void);
+       void parse5header(void);
+       void parse7header(void);
        void parse8header(void);
        void parse9header(void);
-       void parserest(void);
+       void parse10header(void);
+       void parserest5(void);
+       void parserest89(void);
+       void parserest10(void);
+       void parseaudio5(void);
+       void parseaudio(void);
+       void resort(std::vector<wav_t>& ws);
+       uint8_t mostfrequent(uint32_t start, uint32_t stop);
        std::vector<wav_t> actualwavs;
+       float ratefactor;
+       std::string extension;
+       unsigned char key10a;
+       unsigned char key10b;
 };