From: Giovanni Mascellani gmascellani@codeweavers.com
--- dlls/mmdevapi/client.c | 7 ++++++- dlls/mmdevapi/tests/render.c | 1 - 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/mmdevapi/client.c b/dlls/mmdevapi/client.c index 61b9167f3c6..6401f231e4f 100644 --- a/dlls/mmdevapi/client.c +++ b/dlls/mmdevapi/client.c @@ -400,12 +400,17 @@ static HRESULT stream_init(struct audio_client *client, const BOOLEAN force_def_
if (mode == AUDCLNT_SHAREMODE_SHARED) { WAVEFORMATEX *mix_fmt; + BOOL compatible; HRESULT hr;
if (FAILED(hr = IAudioClient3_GetMixFormat(&client->IAudioClient3_iface, &mix_fmt))) return hr;
- if (fmt->nChannels != mix_fmt->nChannels || fmt->nSamplesPerSec != mix_fmt->nSamplesPerSec) + compatible = fmt->nChannels == mix_fmt->nChannels; + if (!(flags & AUDCLNT_STREAMFLAGS_RATEADJUST)) + compatible &= fmt->nSamplesPerSec == mix_fmt->nSamplesPerSec; + + if (!compatible) { CoTaskMemFree(mix_fmt); return AUDCLNT_E_UNSUPPORTED_FORMAT; diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c index ea0caf4b6b0..7ad890320e0 100644 --- a/dlls/mmdevapi/tests/render.c +++ b/dlls/mmdevapi/tests/render.c @@ -628,7 +628,6 @@ static void test_formats(AUDCLNT_SHAREMODE mode)
hr = IAudioClient_Initialize(ac, mode, AUDCLNT_STREAMFLAGS_RATEADJUST, 5000000, 0, &fmt, NULL); if (mode == AUDCLNT_SHAREMODE_SHARED) - todo_wine_if(hr == AUDCLNT_E_UNSUPPORTED_FORMAT && compatible) ok(hr == expected || broken(hr == E_INVALIDARG) /* Vista */, "Initialize(shared, %c%lux%2ux%u) returns %08lx\n", format_chr, fmt.nSamplesPerSec, fmt.wBitsPerSample, fmt.nChannels, hr);