Prevent ALSA audio corruption
When using the ALSA driver, corruption would occur if `snd_pcm_writei` was unable to consume the entire sound buffer. This would occur frequently on the Raspberry Pi 3 which uses the `snd_bcm2835` audio driver. This bug resulted from incorrect pointer math on line 187, resulting in the sample source pointer being advanced by `total * ad->channels` bytes instead of `total * ad->channels` samples. In my opinion, the best fix is to change `*src` to type `int16_t`, since that is the sample type in use. Fixes #43927.
This commit is contained in:
parent
828d1ea59e
commit
25b2f82ccf
|
@ -183,7 +183,7 @@ void AudioDriverALSA::thread_func(void *p_udata) {
|
||||||
int total = 0;
|
int total = 0;
|
||||||
|
|
||||||
while (todo && !ad->exit_thread) {
|
while (todo && !ad->exit_thread) {
|
||||||
uint8_t *src = (uint8_t *)ad->samples_out.ptr();
|
int16_t *src = (int16_t *)ad->samples_out.ptr();
|
||||||
int wrote = snd_pcm_writei(ad->pcm_handle, (void *)(src + (total * ad->channels)), todo);
|
int wrote = snd_pcm_writei(ad->pcm_handle, (void *)(src + (total * ad->channels)), todo);
|
||||||
|
|
||||||
if (wrote > 0) {
|
if (wrote > 0) {
|
||||||
|
|
Loading…
Reference in New Issue