This commit is contained in:
dborth 2010-07-09 03:02:10 +00:00
parent 78f29f784c
commit 2bfdd07d6c

View file

@ -62,39 +62,38 @@ AudioThread (void *arg)
break; break;
// Is the device ready? // Is the device ready?
if (current_audio && (!current_audio->paused)) if (!current_audio || current_audio->paused)
{ {
// Is conversion required? memset(dma_buffers[whichab], 0, sizeof(dma_buffers[0]));
if (current_audio->convert.needed) }
{ else if (current_audio->convert.needed) // Is conversion required?
SDL_mutexP(current_audio->mixer_lock); {
// Get the client to produce audio SDL_mutexP(current_audio->mixer_lock);
current_audio->spec.callback( // Get the client to produce audio
current_audio->spec.userdata, current_audio->spec.callback(
current_audio->convert.buf, current_audio->spec.userdata,
current_audio->convert.len); current_audio->convert.buf,
SDL_mutexV(current_audio->mixer_lock); current_audio->convert.len);
SDL_mutexV(current_audio->mixer_lock);
// Convert the audio // Convert the audio
SDL_ConvertAudio(&current_audio->convert); SDL_ConvertAudio(&current_audio->convert);
// Copy from SDL buffer to DMA buffer // Copy from SDL buffer to DMA buffer
memset(dma_buffers[whichab], 0, sizeof(dma_buffers[0])); memcpy(dma_buffers[whichab], current_audio->convert.buf, current_audio->convert.len_cvt);
memcpy(dma_buffers[whichab], current_audio->convert.buf, current_audio->convert.len_cvt); DCFlushRange(dma_buffers[whichab], current_audio->convert.len_cvt);
DCFlushRange(dma_buffers[whichab], current_audio->convert.len_cvt); dma_buffers_size[whichab] = current_audio->convert.len_cvt;
dma_buffers_size[whichab] = current_audio->convert.len_cvt; }
} else
else {
{ SDL_mutexP(current_audio->mixer_lock);
SDL_mutexP(current_audio->mixer_lock); current_audio->spec.callback(
current_audio->spec.callback( current_audio->spec.userdata,
current_audio->spec.userdata, (Uint8 *)dma_buffers[whichab],
(Uint8 *)dma_buffers[whichab], SAMPLES_PER_DMA_BUFFER*4);
SAMPLES_PER_DMA_BUFFER*4); DCFlushRange(dma_buffers[whichab], SAMPLES_PER_DMA_BUFFER*4);
DCFlushRange(dma_buffers[whichab], SAMPLES_PER_DMA_BUFFER*4); dma_buffers_size[whichab] = SAMPLES_PER_DMA_BUFFER*4;
dma_buffers_size[whichab] = SAMPLES_PER_DMA_BUFFER*4; SDL_mutexV(current_audio->mixer_lock);
SDL_mutexV(current_audio->mixer_lock);
}
} }
LWP_ThreadSleep (audioqueue); LWP_ThreadSleep (audioqueue);
} }