X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Falsa.c;h=6b9f83eacecebf9a9975916ca361307a178f8314;hp=1c02d3725e0a4759e38cfc9be9d4aa270621180a;hb=8a55ebcc07d4f860633db8c77bb9e16bcfa03313;hpb=1b908f9e6e455d3eecf3b9a9236405c29764c0f8 diff --git a/plugins/dfsound/alsa.c b/plugins/dfsound/alsa.c index 1c02d372..6b9f83ea 100644 --- a/plugins/dfsound/alsa.c +++ b/plugins/dfsound/alsa.c @@ -16,6 +16,7 @@ ***************************************************************************/ #include +#include #define ALSA_PCM_NEW_HW_PARAMS_API #define ALSA_PCM_NEW_SW_PARAMS_API #include @@ -184,11 +185,31 @@ static int alsa_busy(void) // FEED SOUND DATA static void alsa_feed(void *pSound, int lBytes) { + char sbuf[4096]; + if (handle == NULL) return; if (snd_pcm_state(handle) == SND_PCM_STATE_XRUN) - snd_pcm_prepare(handle); - snd_pcm_writei(handle,pSound, lBytes / 4); + { + memset(sbuf, 0, sizeof(sbuf)); + snd_pcm_prepare(handle); + snd_pcm_writei(handle, sbuf, sizeof(sbuf) / 4); + snd_pcm_writei(handle, sbuf, sizeof(sbuf) / 4); + snd_pcm_writei(handle, sbuf, sizeof(sbuf) / 4); + } + else + { + int l = snd_pcm_avail(handle); + if (l < lBytes / 4) + { + if (l == 0) + return; + + lBytes = l * 4; + } + } + + snd_pcm_writei(handle, pSound, lBytes / 4); } void out_register_alsa(struct out_driver *drv)