*/
-#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] = {
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;
}
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;
}
}
+ if (version < 5 || version > 12)
+ return -1;
targetrate = targetsr;
- parse();
+ err = parse();
+ if (err)
+ return -1;
return 0;
}
}
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
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 = {
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++;
}
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++;
}
numberofwavs--;
i += 7;
}
- resort(&actualwavs);
- resort(&audiofiles);
+ resort(actualwavs);
+ resort(audiofiles);
}
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;