On Sat, Dec 29, 2012 at 01:24:03AM +0100, Maarten Lankhorst wrote:
- if(!maxq){
/* nothing to do! */LeaveCriticalSection(&device->mixlock); }return;
This was removed in 8ba4090fc304993. It breaks starting the device in some situations (write primary mode iirc).
if (native) {void *buffer = NULL;hr = IAudioRenderClient_GetBuffer(device->render, maxq / block, (void*)&buffer);if(FAILED(hr)){WARN("GetBuffer failed: %08x\n", hr);LeaveCriticalSection(&device->mixlock);return;}
I think this (mixing directly to RenderClient and skipping WaveQueue) could be split into a separate patch.
hres = IAudioClient_Initialize(device->client, AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_NOPERSIST |
AUDCLNT_STREAMFLAGS_EVENTCALLBACK, prebuf_rt, 0, device->pwfx, NULL);
AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 800000, 0, device->pwfx, NULL);
...
frames = (UINT64)device->pwfx->nSamplesPerSec * 800000 / 10000000;
Could you #define the 800000?
Anyway, I gave it a test on ALSA+Pulse and didn't find any issues. I'll test the other backends when you resubmit.
Andrew