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