Mercurial > repos > blastem
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 } |