From d3501789586fed3c072f8f9289470d49f28a6f39 Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Fri, 7 Aug 2015 20:52:11 +1000 Subject: PT7 initial checkin Signed-off-by: Damien Zammit --- ptfformat.cc | 34 ++++++++++++++++++++++++++++++++-- ptfformat.h | 1 + 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(); @@ -321,6 +330,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); -- cgit v1.2.3