comparison vgm.c @ 2006:327332138c5c

Prevent wait truncation in VGM logging
author Michael Pavone <pavone@retrodev.com>
date Fri, 16 Oct 2020 21:40:47 -0700
parents fc8fd89aeba9
children
comparison
equal deleted inserted replaced
2005:3ce38692a3f2 2006:327332138c5c
69 //given that VGM only has a granularity of 44.1 kHz ignoring this is harmless 69 //given that VGM only has a granularity of 44.1 kHz ignoring this is harmless
70 return; 70 return;
71 } 71 }
72 uint64_t last_sample = (uint64_t)writer->last_cycle * (uint64_t)44100; 72 uint64_t last_sample = (uint64_t)writer->last_cycle * (uint64_t)44100;
73 last_sample /= (uint64_t)writer->master_clock; 73 last_sample /= (uint64_t)writer->master_clock;
74 uint64_t sample = (uint64_t)cycle * (uint64_t)44100; 74 uint64_t sample = ((uint64_t)cycle + (uint64_t)writer->extra_delta) * (uint64_t)44100;
75 sample /= (uint64_t)writer->master_clock; 75 sample /= (uint64_t)writer->master_clock;
76 uint32_t delta = sample - last_sample; 76 uint32_t delta = sample - last_sample;
77 77
78 writer->last_cycle = cycle; 78 writer->last_cycle = cycle;
79 writer->extra_delta = 0;
79 writer->header.num_samples += delta; 80 writer->header.num_samples += delta;
80 wait_commands(writer, delta); 81 wait_commands(writer, delta);
81 } 82 }
82 83
83 static uint8_t last_cmd; 84 static uint8_t last_cmd;
111 } 112 }
112 113
113 void vgm_adjust_cycles(vgm_writer *writer, uint32_t deduction) 114 void vgm_adjust_cycles(vgm_writer *writer, uint32_t deduction)
114 { 115 {
115 if (deduction > writer->last_cycle) { 116 if (deduction > writer->last_cycle) {
117 writer->extra_delta += deduction - writer->last_cycle;
116 writer->last_cycle = 0; 118 writer->last_cycle = 0;
117 } else { 119 } else {
118 writer->last_cycle -= deduction; 120 writer->last_cycle -= deduction;
119 } 121 }
120 } 122 }