# HG changeset patch # User Michael Pavone # Date 1602909647 25200 # Node ID 327332138c5ce9a921c99862b4bbb3406f5c1c63 # Parent 3ce38692a3f2b6769d27dc9303868be96d009710 Prevent wait truncation in VGM logging diff -r 3ce38692a3f2 -r 327332138c5c vgm.c --- a/vgm.c Sun Oct 11 22:42:10 2020 -0700 +++ b/vgm.c Fri Oct 16 21:40:47 2020 -0700 @@ -71,11 +71,12 @@ } uint64_t last_sample = (uint64_t)writer->last_cycle * (uint64_t)44100; last_sample /= (uint64_t)writer->master_clock; - uint64_t sample = (uint64_t)cycle * (uint64_t)44100; + uint64_t sample = ((uint64_t)cycle + (uint64_t)writer->extra_delta) * (uint64_t)44100; sample /= (uint64_t)writer->master_clock; uint32_t delta = sample - last_sample; writer->last_cycle = cycle; + writer->extra_delta = 0; writer->header.num_samples += delta; wait_commands(writer, delta); } @@ -113,6 +114,7 @@ void vgm_adjust_cycles(vgm_writer *writer, uint32_t deduction) { if (deduction > writer->last_cycle) { + writer->extra_delta += deduction - writer->last_cycle; writer->last_cycle = 0; } else { writer->last_cycle -= deduction; diff -r 3ce38692a3f2 -r 327332138c5c vgm.h --- a/vgm.h Sun Oct 11 22:42:10 2020 -0700 +++ b/vgm.h Fri Oct 16 21:40:47 2020 -0700 @@ -79,6 +79,7 @@ FILE *f; uint32_t master_clock; uint32_t last_cycle; + uint32_t extra_delta; } vgm_writer; vgm_writer *vgm_write_open(char *filename, uint32_t rate, uint32_t clock, uint32_t cycle);