summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2019-07-14 16:13:17 +1000
committerDamien Zammit <damien@zamaudio.com>2019-07-14 16:13:17 +1000
commit5e482128ff187b8a4b4a7ae61391ae580be90659 (patch)
treeeb3d24efd181329220e0eacd9e619849c8e1bc86
parent777686bcd5c333213451e3b5782fa263f10a12fe (diff)
Drop fade regions that we don't know how to handle && fix samplerate scaling of offsets
-rw-r--r--ptformat.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/ptformat.cc b/ptformat.cc
index 33717d9..8768f57 100644
--- a/ptformat.cc
+++ b/ptformat.cc
@@ -915,6 +915,7 @@ PTFFormat::parserest(void) {
uint32_t nch;
uint16_t ch_map[MAX_CHANNELS_PER_TRACK];
bool found = false;
+ bool region_is_fade = false;
std::string regionname, trackname, midiregionname;
rindex = 0;
@@ -1054,10 +1055,15 @@ PTFFormat::parserest(void) {
for (vector<PTFFormat::block_t>::iterator c = b->child.begin();
c != b->child.end(); ++c) {
if (c->content_type == 0x1052) {
- regionname = parsestring(c->offset + 2);
+ trackname = parsestring(c->offset + 2);
for (vector<PTFFormat::block_t>::iterator d = c->child.begin();
d != c->child.end(); ++d) {
if (d->content_type == 0x1050) {
+ region_is_fade = (_ptfunxored[d->offset + 46] == 0x01);
+ if (region_is_fade) {
+ verbose_printf("dropped fade region\n");
+ continue;
+ }
for (vector<PTFFormat::block_t>::iterator e = d->child.begin();
e != d->child.end(); ++e) {
if (e->content_type == 0x104f) {
@@ -1076,7 +1082,7 @@ PTFFormat::parserest(void) {
verbose_printf("dropped region %d\n", rawindex);
continue;
}
- ti.reg.startpos = start;
+ ti.reg.startpos = start * _ratefactor;
if (ti.reg.index != 65535) {
_tracks.push_back(ti);
}
@@ -1257,7 +1263,7 @@ PTFFormat::parsemidi(void) {
r.length = mc.maxlen;
r.midi = mc.chunk;
_midiregions.push_back(r);
- verbose_printf("%s : MIDI region mr(%d) ?(%d) (%llu %llu %llu)\n", str, mindex, n, start, offset, length);
+ verbose_printf("%s : MIDI region mr(%d) ?(%d) (%lu %lu %lu)\n", regionname.c_str(), mindex, n, start, offset, length);
mindex++;
}
}
@@ -1302,7 +1308,7 @@ PTFFormat::parsemidi(void) {
int64_t signedstart = (int64_t)(start - ZERO_TICKS);
if (signedstart < 0)
signedstart = -signedstart;
- ti.reg.startpos = (uint64_t)signedstart;
+ ti.reg.startpos = (uint64_t)(signedstart * _ratefactor);
if (ti.reg.index != 65535) {
_miditracks.push_back(ti);
}