remove debug output
[ardour.git] / libs / ptformat / ptfformat.cc
index 6d055d4a3697157b14615fce701f45284724be30..1dba1ac31a6e7a11726e1640ce34f141a4f5398f 100644 (file)
 
 */
 
-#include "ptfformat.h"
-
 #include <stdio.h>
+#include <stdlib.h>
 #include <string>
 #include <string.h>
 #include <assert.h>
 
+#include <glib/gstdio.h>
+
+#include "ptfformat.h"
+
 using namespace std;
 
 static const uint32_t baselut[16] = {
@@ -113,8 +116,9 @@ PTFFormat::load(std::string path, int64_t targetsr) {
        uint64_t i;
        uint64_t j;
        int inv;
+       int err;
 
-       if (! (fp = fopen(path.c_str(), "rb"))) {
+       if (! (fp = g_fopen(path.c_str(), "rb"))) {
                return -1;
        }
 
@@ -230,6 +234,12 @@ PTFFormat::load(std::string path, int64_t targetsr) {
                unxor10();
        }
 
+       // Special case when ptx is exported to ptf in PT
+       if (v == 3) {
+               version = 11;
+               unxor_ptx_to_ptf();
+       }
+
        if (version == 0 || version == 5 || version == 7) {
                /* Haven't detected version yet so decipher */
                j = 0;
@@ -257,8 +267,12 @@ PTFFormat::load(std::string path, int64_t targetsr) {
                }
        }
 
+       if (version < 5 || version > 12)
+               return -1;
        targetrate = targetsr;
-       parse();
+       err = parse();
+       if (err)
+               return -1;
        return 0;
 }
 
@@ -299,35 +313,69 @@ PTFFormat::unxor10(void)
 }
 
 void
+PTFFormat::unxor_ptx_to_ptf(void)
+{
+       unsigned char keyy[16] = {      0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,
+                                       0x80,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0
+       };
+       uint64_t j;
+       uint8_t i;
+
+       for (i = 0, j = 0x10; j < len; j++,i++) {
+               ptfunxored[j] ^= keyy[i];
+               if ((j % 16) == 0) {
+                       i = 0;
+                       if (ptfunxored[j] % 2 == 0) {
+                               ptfunxored[j]++;
+                       } else {
+                               ptfunxored[j]--;
+                       }
+               }
+       }
+}
+
+int
 PTFFormat::parse(void) {
        if (version == 5) {
                parse5header();
                setrates();
+               if (sessionrate < 44100 || sessionrate > 192000)
+                 return -1;
                parseaudio5();
                parserest5();
        } else if (version == 7) {
                parse7header();
                setrates();
+               if (sessionrate < 44100 || sessionrate > 192000)
+                 return -1;
                parseaudio();
                parserest89();
        } else if (version == 8) {
                parse8header();
                setrates();
+               if (sessionrate < 44100 || sessionrate > 192000)
+                 return -1;
                parseaudio();
                parserest89();
        } else if (version == 9) {
                parse9header();
                setrates();
+               if (sessionrate < 44100 || sessionrate > 192000)
+                 return -1;
                parseaudio();
                parserest89();
        } else if (version == 10 || version == 11 || version == 12) {
                parse10header();
                setrates();
+               if (sessionrate < 44100 || sessionrate > 192000)
+                 return -1;
                parseaudio();
                parserest10();
        } else {
                // Should not occur
+               return -1;
        }
+       return 0;
 }
 
 void
@@ -589,13 +637,18 @@ PTFFormat::parserest5(void) {
                                vector<track_t>::iterator ti;
                                vector<track_t>::iterator bt = tracks.begin();
                                vector<track_t>::iterator et = tracks.end();
-                               track_t tr ( name, 0, 0, &r);
+                               track_t tr = { name, 0, 0, r };
                                if ((ti = std::find(bt, et, tr)) != et) {
                                        tracknumber = (*ti).index;
                                } else {
                                        tracknumber = tracks.size() + 1;
                                }
-                               track_t t ( name, (uint16_t)tracknumber, uint8_t(0), &r);
+                               track_t t = {
+                                       name,
+                                       (uint16_t)tracknumber,
+                                       uint8_t(0),
+                                       r
+                               };
                                tracks.push_back(t);
                        } else {
                                region_t r = {
@@ -610,13 +663,18 @@ PTFFormat::parserest5(void) {
                                vector<track_t>::iterator ti;
                                vector<track_t>::iterator bt = tracks.begin();
                                vector<track_t>::iterator et = tracks.end();
-                               track_t tr ( name, 0, 0, &r );
+                               track_t tr = { name, 0, 0, r };
                                if ((ti = std::find(bt, et, tr)) != et) {
                                        tracknumber = (*ti).index;
                                } else {
                                        tracknumber = tracks.size() + 1;
                                }
-                               track_t t ( name, (uint16_t)tracknumber, uint8_t(0), &r);
+                               track_t t = {
+                                       name,
+                                       (uint16_t)tracknumber,
+                                       uint8_t(0),
+                                       r
+                               };
                                tracks.push_back(t);
                        }
                        rindex++;
@@ -627,11 +685,10 @@ PTFFormat::parserest5(void) {
 }
 
 void
-PTFFormat::resort(std::vector<wav_t> *ws) {
+PTFFormat::resort(std::vector<wav_t>ws) {
        int j = 0;
-       std::sort((*ws).begin(), (*ws).end());
-       for (std::vector<wav_t>::iterator i = (*ws).begin();
-                       i != (*ws).end(); ++i) {
+       std::sort(ws.begin(), ws.end());
+       for (std::vector<wav_t>::iterator i = ws.begin(); i != ws.end(); ++i) {
                (*i).index = j;
                j++;
        }
@@ -723,8 +780,8 @@ PTFFormat::parseaudio5(void) {
                numberofwavs--;
                i += 7;
        }
-       resort(&actualwavs);
-       resort(&audiofiles);
+       resort(actualwavs);
+       resort(audiofiles);
 }
 
 void
@@ -1297,7 +1354,7 @@ PTFFormat::parserest10(void) {
                                        vector<region_t>::iterator finish = regions.end();
                                        vector<region_t>::iterator found;
                                        if ((found = std::find(begin, finish, tr.reg)) != finish) {
-                                               tr.set_region (&(*found));
+                                               tr.reg = (*found);
                                        }
                                        i = l+16;
                                        offset = 0;