Mercurial > repos > blastem
comparison render_audio.c @ 2093:46ee354f29bd
Hack fix for audio deadlock issue
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Feb 2022 23:25:23 -0800 |
parents | cfd53c94fffb |
children | b3832f73444f |
comparison
equal
deleted
inserted
replaced
2092:8665d8da0e1c | 2093:46ee354f29bd |
---|---|
131 if (audio_sources[i]->front_populated) { | 131 if (audio_sources[i]->front_populated) { |
132 num_populated++; | 132 num_populated++; |
133 } | 133 } |
134 } | 134 } |
135 return num_populated == num_audio_sources; | 135 return num_populated == num_audio_sources; |
136 } | |
137 | |
138 uint8_t audio_deadlock_hack(void) | |
139 { | |
140 uint32_t min_buffer_pos = 0xFFFFFFFFU; | |
141 for (uint8_t i = 0; i < num_audio_sources; i++) | |
142 { | |
143 if (audio_sources[i]->front_populated) { | |
144 uint32_t buffer_pos = audio_sources[i]->buffer_pos; | |
145 if (audio_sources[i]->num_channels == 1) { | |
146 buffer_pos *= 2; | |
147 } | |
148 if (buffer_pos < min_buffer_pos) { | |
149 min_buffer_pos = buffer_pos; | |
150 } | |
151 } | |
152 } | |
153 uint8_t do_signal = 0; | |
154 for (uint8_t i = 0; i < num_audio_sources; i++) | |
155 { | |
156 if (!audio_sources[i]->front_populated) { | |
157 audio_sources[i]->front_populated = 1; | |
158 int16_t *tmp = audio_sources[i]->front; | |
159 audio_sources[i]->front = audio_sources[i]->back; | |
160 audio_sources[i]->back = tmp; | |
161 if (audio_sources[i]->num_channels == 2) { | |
162 audio_sources[i]->buffer_pos = min_buffer_pos; | |
163 } else { | |
164 audio_sources[i]->buffer_pos = min_buffer_pos / 2; | |
165 } | |
166 do_signal = 1; | |
167 } | |
168 } | |
169 return do_signal; | |
136 } | 170 } |
137 | 171 |
138 #define BUFFER_INC_RES 0x40000000UL | 172 #define BUFFER_INC_RES 0x40000000UL |
139 | 173 |
140 void render_audio_adjust_clock(audio_source *src, uint64_t master_clock, uint64_t sample_divider) | 174 void render_audio_adjust_clock(audio_source *src, uint64_t master_clock, uint64_t sample_divider) |