summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2015-08-07 20:52:11 +1000
committerDamien Zammit <damien@zamaudio.com>2015-08-07 20:52:11 +1000
commitd3501789586fed3c072f8f9289470d49f28a6f39 (patch)
treea813cb6e6e577c14ccd0f233772fb0850a4991ab
parentc9bf74d79792a36e53a83c6d83b75bc1c9d67ad5 (diff)
PT7 initial checkin
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--ptfformat.cc34
-rw-r--r--ptfformat.h1
2 files changed, 33 insertions, 2 deletions
diff --git a/ptfformat.cc b/ptfformat.cc
index f0c9793..652024e 100644
--- a/ptfformat.cc
+++ b/ptfformat.cc
@@ -128,6 +128,10 @@ PTFFormat::load(std::string path, int64_t targetsr) {
fread(&c0, 1, 1, fp);
fread(&c1, 1, 1, fp);
+ // For version 7 support:
+ version = c0 & 0x0f;
+ c0 = c0 & 0xc0;
+
if (! (ptfunxored = (unsigned char*) malloc(len * sizeof(unsigned char)))) {
/* Silently fail -- out of memory*/
fclose(fp);
@@ -290,9 +294,14 @@ PTFFormat::unxor10(void)
void
PTFFormat::parse(void) {
- version = ptfunxored[61];
+ version = (version == 0) ? ptfunxored[61] : version;
- if (version == 8) {
+ if (version == 7) {
+ parse7header();
+ setrates();
+ parseaudio();
+ parserest89();
+ } else if (version == 8) {
parse8header();
setrates();
parseaudio();
@@ -322,6 +331,27 @@ PTFFormat::setrates(void) {
}
void
+PTFFormat::parse7header(void) {
+ int k;
+
+ // Find session sample rate
+ k = 0x100;
+ while (k < len) {
+ if ( (ptfunxored[k ] == 0x5a) &&
+ (ptfunxored[k+1] == 0x00) &&
+ (ptfunxored[k+2] == 0x05)) {
+ break;
+ }
+ k++;
+ }
+
+ sessionrate = 0;
+ sessionrate |= ptfunxored[k+12] << 16;
+ sessionrate |= ptfunxored[k+13] << 8;
+ sessionrate |= ptfunxored[k+14];
+}
+
+void
PTFFormat::parse8header(void) {
int k;
diff --git a/ptfformat.h b/ptfformat.h
index 4571d4a..2cd855f 100644
--- a/ptfformat.h
+++ b/ptfformat.h
@@ -124,6 +124,7 @@ private:
void parse(void);
void unxor10(void);
void setrates(void);
+ void parse7header(void);
void parse8header(void);
void parse9header(void);
void parse10header(void);