static void sdl_audio_callback(struct pcm_udata *udata, Uint8 *stream, int len) { logf("sdl_audio_callback: len %d, pcm %d\n", len, pcm_data_size); udata->stream = stream; /* Write what we have in the PCM buffer */ if (pcm_data_size > 0) goto start; /* Audio card wants more? Get some more then. */ while (len > 0) { pcm_play_get_more_callback((void **)&pcm_data, &pcm_data_size); start: if (pcm_data_size != 0) { udata->num_in = pcm_data_size / pcm_sample_bytes; udata->num_out = len / pcm_sample_bytes; write_to_soundcard(udata); udata->num_in *= pcm_sample_bytes; udata->num_out *= pcm_sample_bytes; pcm_data += udata->num_in; pcm_data_size -= udata->num_in; udata->stream += udata->num_out; len -= udata->num_out; } else { DEBUGF("sdl_audio_callback: No Data.\n"); break; } } }
void sdl_audio_callback(struct pcm_udata *udata, Uint8 *stream, int len) { udata->stream = stream; /* Write what we have in the PCM buffer */ if (pcm_data_size > 0) goto start; /* Audio card wants more? Get some more then. */ while (len > 0) { if ((ssize_t)pcm_data_size <= 0) { pcm_data_size = 0; if (pcm_callback_for_more) pcm_callback_for_more(&pcm_data, &pcm_data_size); } if (pcm_data_size > 0) { start: udata->num_in = pcm_data_size / pcm_sample_bytes; udata->num_out = len / pcm_sample_bytes; write_to_soundcard(udata); udata->num_in *= pcm_sample_bytes; udata->num_out *= pcm_sample_bytes; pcm_data += udata->num_in; pcm_data_size -= udata->num_in; udata->stream += udata->num_out; len -= udata->num_out; } else { DEBUGF("sdl_audio_callback: No Data.\n"); pcm_play_dma_stop(); pcm_play_dma_stopped_callback(); break; } } }