-- v2: xaudio2: Use the preprocessor to modify definitions in xaudio2.idl and xaudio2fx.idl. xaudio2: Create XAPO objects directly from CreateAudioVolumeMeter() and CreateAudioReverb(). xaudio2: Move CreateAudioVolumeMeter() and CreateAudioReverb() to xapo.c.
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/xaudio2_7/tests/xaudio2.c | 83 ++++++++++++---------------------- 1 file changed, 30 insertions(+), 53 deletions(-)
diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c index c6768cb4143..8bf79eb2a34 100644 --- a/dlls/xaudio2_7/tests/xaudio2.c +++ b/dlls/xaudio2_7/tests/xaudio2.c @@ -40,6 +40,22 @@ static HRESULT (WINAPI *pCreateAudioVolumeMeter)(IUnknown**) = NULL; #define XA2CALL_V(method, ...) if(xaudio27) IXAudio27_##method((IXAudio27*)xa, __VA_ARGS__); else IXAudio2_##method(xa, __VA_ARGS__); #define XA2CALL(method, ...) if(xaudio27) hr = IXAudio27_##method((IXAudio27*)xa, __VA_ARGS__); else hr = IXAudio2_##method(xa, __VA_ARGS__);
+static HRESULT create_mastering_voice(IXAudio2 *audio, unsigned int channel_count, IXAudio2MasteringVoice **voice) +{ + if (xaudio27) + return IXAudio27_CreateMasteringVoice((IXAudio27*)audio, voice, channel_count, 44100, 0, 0, NULL); + else + return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, NULL, NULL, AudioCategory_GameEffects); +} + +static void get_voice_state(IXAudio2SourceVoice *voice, XAUDIO2_VOICE_STATE *state) +{ + if (xaudio27) + IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)voice, state); + else + IXAudio2SourceVoice_GetState(voice, state, 0); +} + static void fill_buf(float *buf, WAVEFORMATEX *fmt, DWORD hz, DWORD len_frames) { if(winetest_interactive){ @@ -195,10 +211,7 @@ static void test_simple_streaming(IXAudio2 *xa) XA2CALL(RegisterForCallbacks, &ecb); ok(hr == S_OK, "RegisterForCallbacks failed: %08lx\n", hr);
- if(xaudio27) - hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 2, 44100, 0, 0, NULL); - else - hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
if(!xaudio27){ @@ -315,10 +328,7 @@ static void test_simple_streaming(IXAudio2 *xa) IUnknown_Release(vumeter);
while(1){ - if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state); - else - IXAudio2SourceVoice_GetState(src, &state, 0); + get_voice_state(src, &state); if(state.SamplesPlayed >= 22050) break; Sleep(100); @@ -371,10 +381,7 @@ static void WINAPI vcb_buf_OnBufferStart(IXAudio2VoiceCallback *This,
ok(data->idx == obs_calls, "Buffer callback out of order: %u\n", data->idx);
- if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)data->src, &state); - else - IXAudio2SourceVoice_GetState(data->src, &state, 0); + get_voice_state(data->src, &state);
ok(state.BuffersQueued == 5 - obs_calls, "Got wrong number of buffers remaining: %u\n", state.BuffersQueued); ok(state.pCurrentBufferContext == pBufferContext, "Got wrong buffer from GetState\n"); @@ -390,10 +397,7 @@ static void WINAPI vcb_buf_OnBufferEnd(IXAudio2VoiceCallback *This,
ok(data->idx == obe_calls, "Buffer callback out of order: %u\n", data->idx);
- if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)data->src, &state); - else - IXAudio2SourceVoice_GetState(data->src, &state, 0); + get_voice_state(data->src, &state);
ok(state.BuffersQueued == 5 - obe_calls - 1, "Got wrong number of buffers remaining: %u\n", state.BuffersQueued); if(state.BuffersQueued == 0) @@ -485,10 +489,7 @@ static void test_buffer_callbacks(IXAudio2 *xa)
XA2CALL_0V(StopEngine);
- if(xaudio27) - hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 2, 44100, 0, 0, NULL); - else - hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
/* test OnBufferStart/End callbacks */ @@ -534,10 +535,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) }
while(1){ - if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state); - else - IXAudio2SourceVoice_GetState(src, &state, 0); + get_voice_state(src, &state); if(state.SamplesPlayed >= 4410 * 5) break; Sleep(100); @@ -572,10 +570,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) ok(nstreamends == 1, "Got wrong number of OnStreamEnd calls: %u\n", nstreamends);
/* xaudio resets SamplesPlayed after processing an end-of-stream buffer */ - if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state); - else - IXAudio2SourceVoice_GetState(src, &state, 0); + get_voice_state(src, &state); ok(state.SamplesPlayed == 0, "Got wrong samples played\n");
if(xaudio27) @@ -600,10 +595,7 @@ static UINT32 play_to_completion(IXAudio2SourceVoice *src, UINT32 max_samples) ok(hr == S_OK, "Start failed: %08lx\n", hr);
while(1){ - if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state); - else - IXAudio2SourceVoice_GetState(src, &state, 0); + get_voice_state(src, &state); if(state.BuffersQueued == 0) break; if(state.SamplesPlayed >= max_samples){ @@ -632,10 +624,7 @@ static void test_looping(IXAudio2 *xa)
XA2CALL_0V(StopEngine);
- if(xaudio27) - hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 2, 44100, 0, 0, NULL); - else - hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
@@ -816,10 +805,7 @@ static void test_submix(IXAudio2 *xa)
XA2CALL_0V(StopEngine);
- if(xaudio27) - hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 2, 44100, 0, 0, NULL); - else - hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
XA2CALL(CreateSubmixVoice, &sub, 2, 44100, 0, 0, NULL, NULL); @@ -855,10 +841,7 @@ static void test_flush(IXAudio2 *xa)
XA2CALL_0V(StopEngine);
- if(xaudio27) - hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 2, 44100, 0, 0, NULL); - else - hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
fmt.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; @@ -887,10 +870,7 @@ static void test_flush(IXAudio2 *xa) ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
while(1){ - if(xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state); - else - IXAudio2SourceVoice_GetState(src, &state, 0); + get_voice_state(src, &state); if(state.SamplesPlayed >= 2205) break; Sleep(10); @@ -1160,10 +1140,7 @@ static void test_setchannelvolumes(IXAudio2 *xa) WAVEFORMATEX fmt_2ch, fmt_8ch; float volumes[] = {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f};
- if(xaudio27) - hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 8, 44100, 0, 0, NULL); - else - hr = IXAudio2_CreateMasteringVoice(xa, &master, 8, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 8, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
fmt_2ch.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; @@ -1227,7 +1204,7 @@ static UINT32 check_has_devices(IXAudio2 *xa) HRESULT hr; IXAudio2MasteringVoice *master;
- hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects); + hr = create_mastering_voice(xa, 2, &master); if(hr != S_OK) return 0;
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/xaudio2_7/xapo.c | 38 +++++++++++++++++++++++++++++++++++++ dlls/xaudio2_7/xaudio_dll.c | 36 ----------------------------------- 2 files changed, 38 insertions(+), 36 deletions(-)
diff --git a/dlls/xaudio2_7/xapo.c b/dlls/xaudio2_7/xapo.c index 1451816df9c..75153ce8cd4 100644 --- a/dlls/xaudio2_7/xapo.c +++ b/dlls/xaudio2_7/xapo.c @@ -409,3 +409,41 @@ HRESULT make_xapo_factory(REFCLSID clsid, REFIID riid, void **ppv) HeapFree(GetProcessHeap(), 0, ret); return hr; } + +#if XAUDIO2_VER >= 8 +HRESULT WINAPI CreateAudioVolumeMeter(IUnknown **out) +{ + IClassFactory *cf; + HRESULT hr; + + TRACE("%p\n", out); + + hr = make_xapo_factory(&CLSID_AudioVolumeMeter27, &IID_IClassFactory, (void**)&cf); + if(FAILED(hr)) + return hr; + + hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)out); + + IClassFactory_Release(cf); + + return hr; +} + +HRESULT WINAPI CreateAudioReverb(IUnknown **out) +{ + IClassFactory *cf; + HRESULT hr; + + TRACE("%p\n", out); + + hr = make_xapo_factory(&CLSID_AudioReverb27, &IID_IClassFactory, (void**)&cf); + if(FAILED(hr)) + return hr; + + hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)out); + + IClassFactory_Release(cf); + + return hr; +} +#endif diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c index 5730e0b8811..ab759b678a9 100644 --- a/dlls/xaudio2_7/xaudio_dll.c +++ b/dlls/xaudio2_7/xaudio_dll.c @@ -1979,40 +1979,4 @@ HRESULT WINAPI XAudio2Create(IXAudio2 **ppxa2, UINT32 flags, XAUDIO2_PROCESSOR p
return S_OK; } - -HRESULT WINAPI CreateAudioVolumeMeter(IUnknown **out) -{ - IClassFactory *cf; - HRESULT hr; - - TRACE("%p\n", out); - - hr = make_xapo_factory(&CLSID_AudioVolumeMeter27, &IID_IClassFactory, (void**)&cf); - if(FAILED(hr)) - return hr; - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)out); - - IClassFactory_Release(cf); - - return hr; -} - -HRESULT WINAPI CreateAudioReverb(IUnknown **out) -{ - IClassFactory *cf; - HRESULT hr; - - TRACE("%p\n", out); - - hr = make_xapo_factory(&CLSID_AudioReverb27, &IID_IClassFactory, (void**)&cf); - if(FAILED(hr)) - return hr; - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)out); - - IClassFactory_Release(cf); - - return hr; -} #endif /* XAUDIO2_VER >= 8 */
From: Zebediah Figura zfigura@codeweavers.com
Instead of going through the class factory. --- dlls/xaudio2_7/xapo.c | 165 +++++++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 75 deletions(-)
diff --git a/dlls/xaudio2_7/xapo.c b/dlls/xaudio2_7/xapo.c index 75153ce8cd4..c8c323ff78a 100644 --- a/dlls/xaudio2_7/xapo.c +++ b/dlls/xaudio2_7/xapo.c @@ -256,6 +256,57 @@ static const IXAPOParametersVtbl XAPOFXParameters_Vtbl = { XAPOFXParams_GetParameters };
+static HRESULT xapo_create(FAPO *fapo, XA2XAPOFXImpl **out) +{ + XA2XAPOFXImpl *object; + + if (!(object = heap_alloc(sizeof(*object)))) + return E_OUTOFMEMORY; + + object->IXAPO_iface.lpVtbl = &XAPOFX_Vtbl; + object->IXAPOParameters_iface.lpVtbl = &XAPOFXParameters_Vtbl; + object->fapo = fapo; + + *out = object; + return S_OK; +} + +#ifndef XAPOFX1_VER +static HRESULT reverb_create(XA2XAPOFXImpl **out) +{ + FAPO *fapo; + HRESULT hr; + +#if XAUDIO2_VER >= 9 + hr = FAudioCreateReverb9WithCustomAllocatorEXT(&fapo, 0, + XAudio_Internal_Malloc, XAudio_Internal_Free, XAudio_Internal_Realloc); +#else + hr = FAudioCreateReverbWithCustomAllocatorEXT(&fapo, 0, + XAudio_Internal_Malloc, XAudio_Internal_Free, XAudio_Internal_Realloc); +#endif + if (FAILED(hr)) + return hr; + + if (FAILED(hr = xapo_create(fapo, out))) + fapo->Release(fapo); + return hr; +} + +static HRESULT volume_meter_create(XA2XAPOFXImpl **out) +{ + FAPO *fapo; + HRESULT hr; + + if (FAILED(hr = FAudioCreateVolumeMeterWithCustomAllocatorEXT(&fapo, 0, + XAudio_Internal_Malloc, XAudio_Internal_Free, XAudio_Internal_Realloc))) + return hr; + + if (FAILED(hr = xapo_create(fapo, out))) + fapo->Release(fapo); + return hr; +} +#endif /* XAPOFX1_VER */ + struct xapo_cf { IClassFactory IClassFactory_iface; LONG ref; @@ -300,56 +351,6 @@ static ULONG WINAPI xapocf_Release(IClassFactory *iface) return ref; }
-static inline HRESULT get_fapo_from_clsid(REFCLSID clsid, FAPO **fapo) -{ -#ifndef XAPOFX1_VER - if(IsEqualGUID(clsid, &CLSID_AudioVolumeMeter27)) - return FAudioCreateVolumeMeterWithCustomAllocatorEXT( - fapo, - 0, - XAudio_Internal_Malloc, - XAudio_Internal_Free, - XAudio_Internal_Realloc - ); -#if XAUDIO2_VER >= 9 - if(IsEqualGUID(clsid, &CLSID_AudioReverb27)) - return FAudioCreateReverb9WithCustomAllocatorEXT( - fapo, - 0, - XAudio_Internal_Malloc, - XAudio_Internal_Free, - XAudio_Internal_Realloc - ); -#else - if(IsEqualGUID(clsid, &CLSID_AudioReverb27)) - return FAudioCreateReverbWithCustomAllocatorEXT( - fapo, - 0, - XAudio_Internal_Malloc, - XAudio_Internal_Free, - XAudio_Internal_Realloc - ); -#endif -#endif -#if XAUDIO2_VER >= 8 || defined XAPOFX1_VER - if(IsEqualGUID(clsid, &CLSID_FXReverb) || - IsEqualGUID(clsid, &CLSID_FXEQ) || - IsEqualGUID(clsid, &CLSID_FXEcho) || - IsEqualGUID(clsid, &CLSID_FXMasteringLimiter)) - return FAPOFX_CreateFXWithCustomAllocatorEXT( - (const FAudioGUID*) clsid, - fapo, - NULL, - 0, - XAudio_Internal_Malloc, - XAudio_Internal_Free, - XAudio_Internal_Realloc - ); -#endif - ERR("Invalid XAPO CLSID!\n"); - return E_INVALIDARG; -} - static HRESULT WINAPI xapocf_CreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj) { @@ -364,16 +365,42 @@ static HRESULT WINAPI xapocf_CreateInstance(IClassFactory *iface, IUnknown *pOut if(pOuter) return CLASS_E_NOAGGREGATION;
- object = heap_alloc(sizeof(*object)); - object->IXAPO_iface.lpVtbl = &XAPOFX_Vtbl; - object->IXAPOParameters_iface.lpVtbl = &XAPOFXParameters_Vtbl; +#if XAUDIO2_VER < 8 && !defined(XAPOFX1_VER) + if (IsEqualGUID(This->class, &CLSID_AudioVolumeMeter27)) + { + hr = volume_meter_create(&object); + } + else if (IsEqualGUID(This->class, &CLSID_AudioReverb27)) + { + hr = reverb_create(&object); + } +#else + if (IsEqualGUID(This->class, &CLSID_FXReverb) + || IsEqualGUID(This->class, &CLSID_FXEQ) + || IsEqualGUID(This->class, &CLSID_FXEcho) + || IsEqualGUID(This->class, &CLSID_FXMasteringLimiter)) + { + FAPO *fapo;
- hr = get_fapo_from_clsid(This->class, &object->fapo); + if (FAILED(hr = FAPOFX_CreateFXWithCustomAllocatorEXT((const FAudioGUID *)This->class, &fapo, NULL, + 0, XAudio_Internal_Malloc, XAudio_Internal_Free, XAudio_Internal_Realloc))) + return hr;
- if(FAILED(hr)){ - HeapFree(GetProcessHeap(), 0, object); - return hr; + if (FAILED(hr = xapo_create(fapo, &object))) + { + fapo->Release(fapo); + return hr; + } } +#endif + else + { + FIXME("Unknown CLSID %s.\n", debugstr_guid(This->class)); + return E_INVALIDARG; + } + + if (FAILED(hr)) + return hr;
hr = IXAPO_QueryInterface(&object->IXAPO_iface, riid, ppobj); IXAPO_Release(&object->IXAPO_iface); @@ -413,37 +440,25 @@ HRESULT make_xapo_factory(REFCLSID clsid, REFIID riid, void **ppv) #if XAUDIO2_VER >= 8 HRESULT WINAPI CreateAudioVolumeMeter(IUnknown **out) { - IClassFactory *cf; + XA2XAPOFXImpl *object; HRESULT hr;
TRACE("%p\n", out);
- hr = make_xapo_factory(&CLSID_AudioVolumeMeter27, &IID_IClassFactory, (void**)&cf); - if(FAILED(hr)) - return hr; - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)out); - - IClassFactory_Release(cf); - + if (SUCCEEDED(hr = volume_meter_create(&object))) + *out = (IUnknown *)&object->IXAPO_iface; return hr; }
HRESULT WINAPI CreateAudioReverb(IUnknown **out) { - IClassFactory *cf; + XA2XAPOFXImpl *object; HRESULT hr;
TRACE("%p\n", out);
- hr = make_xapo_factory(&CLSID_AudioReverb27, &IID_IClassFactory, (void**)&cf); - if(FAILED(hr)) - return hr; - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)out); - - IClassFactory_Release(cf); - + if (SUCCEEDED(hr = reverb_create(&object))) + *out = (IUnknown *)&object->IXAPO_iface; return hr; } #endif
From: Zebediah Figura zfigura@codeweavers.com
Instead of including the IDLs directly, define a local IDL that #includes them, with XAUDIO2_VER defined, and include that generated header.
Get rid of compat.c, and use XAUDIO2_VER to modify the code in the other source files.
Build the tests for both xaudio2_7 and xaudio2_8 using PARENTSRC, and use XAUDIO2_VER to select between them. This mirrors the approach taken for d3dcompiler, and makes it easier to test more xaudio2 versions in the future. --- configure | 1 + configure.ac | 1 + dlls/xapofx1_1/Makefile.in | 2 + dlls/xapofx1_2/Makefile.in | 2 + dlls/xapofx1_3/Makefile.in | 2 + dlls/xapofx1_4/Makefile.in | 2 + dlls/xapofx1_5/Makefile.in | 2 + dlls/xaudio2_0/Makefile.in | 1 - dlls/xaudio2_1/Makefile.in | 1 - dlls/xaudio2_2/Makefile.in | 1 - dlls/xaudio2_3/Makefile.in | 1 - dlls/xaudio2_4/Makefile.in | 1 - dlls/xaudio2_5/Makefile.in | 1 - dlls/xaudio2_6/Makefile.in | 1 - dlls/xaudio2_7/Makefile.in | 1 - dlls/xaudio2_7/compat.c | 2853 ----------------------- dlls/xaudio2_7/tests/Makefile.in | 3 + dlls/xaudio2_7/tests/xaudio2.c | 378 ++- dlls/xaudio2_7/tests/xaudio_classes.idl | 24 + dlls/xaudio2_7/xapo.c | 5 +- dlls/xaudio2_7/xaudio_classes.idl | 186 +- dlls/xaudio2_7/xaudio_dll.c | 353 +-- dlls/xaudio2_7/xaudio_private.h | 69 +- dlls/xaudio2_8/Makefile.in | 2 +- dlls/xaudio2_8/tests/Makefile.in | 9 + dlls/xaudio2_9/Makefile.in | 1 - include/xaudio2.idl | 1065 ++------- include/xaudio2fx.idl | 124 +- 28 files changed, 647 insertions(+), 4445 deletions(-) delete mode 100644 dlls/xaudio2_7/compat.c create mode 100644 dlls/xaudio2_7/tests/xaudio_classes.idl create mode 100644 dlls/xaudio2_8/tests/Makefile.in
diff --git a/configure b/configure index 4cab5e67e43..931d3b17d8c 100755 --- a/configure +++ b/configure @@ -22024,6 +22024,7 @@ wine_fn_config_makefile dlls/xaudio2_6 enable_xaudio2_6 wine_fn_config_makefile dlls/xaudio2_7 enable_xaudio2_7 wine_fn_config_makefile dlls/xaudio2_7/tests enable_tests wine_fn_config_makefile dlls/xaudio2_8 enable_xaudio2_8 +wine_fn_config_makefile dlls/xaudio2_8/tests enable_tests wine_fn_config_makefile dlls/xaudio2_9 enable_xaudio2_9 wine_fn_config_makefile dlls/xinput1_1 enable_xinput1_1 wine_fn_config_makefile dlls/xinput1_2 enable_xinput1_2 diff --git a/configure.ac b/configure.ac index 3af0aa5fa98..e3792ecf3dd 100644 --- a/configure.ac +++ b/configure.ac @@ -3261,6 +3261,7 @@ WINE_CONFIG_MAKEFILE(dlls/xaudio2_6) WINE_CONFIG_MAKEFILE(dlls/xaudio2_7) WINE_CONFIG_MAKEFILE(dlls/xaudio2_7/tests) WINE_CONFIG_MAKEFILE(dlls/xaudio2_8) +WINE_CONFIG_MAKEFILE(dlls/xaudio2_8/tests) WINE_CONFIG_MAKEFILE(dlls/xaudio2_9) WINE_CONFIG_MAKEFILE(dlls/xinput1_1) WINE_CONFIG_MAKEFILE(dlls/xinput1_2) diff --git a/dlls/xapofx1_1/Makefile.in b/dlls/xapofx1_1/Makefile.in index 1eb2e2210c0..563bfeaf0cb 100644 --- a/dlls/xapofx1_1/Makefile.in +++ b/dlls/xapofx1_1/Makefile.in @@ -10,3 +10,5 @@ C_SRCS = \ xaudio_allocator.c
RC_SRCS = version.rc + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_2/Makefile.in b/dlls/xapofx1_2/Makefile.in index 38db115b39a..f37fcd356ac 100644 --- a/dlls/xapofx1_2/Makefile.in +++ b/dlls/xapofx1_2/Makefile.in @@ -8,3 +8,5 @@ C_SRCS = \ xapo.c \ xapofx.c \ xaudio_allocator.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_3/Makefile.in b/dlls/xapofx1_3/Makefile.in index 409fc9ad55b..5fb6ea8acad 100644 --- a/dlls/xapofx1_3/Makefile.in +++ b/dlls/xapofx1_3/Makefile.in @@ -10,3 +10,5 @@ C_SRCS = \ xaudio_allocator.c
RC_SRCS = version.rc + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_4/Makefile.in b/dlls/xapofx1_4/Makefile.in index 63eccff64b0..3b29169a321 100644 --- a/dlls/xapofx1_4/Makefile.in +++ b/dlls/xapofx1_4/Makefile.in @@ -8,3 +8,5 @@ C_SRCS = \ xapo.c \ xapofx.c \ xaudio_allocator.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_5/Makefile.in b/dlls/xapofx1_5/Makefile.in index fc692d781db..71937520a68 100644 --- a/dlls/xapofx1_5/Makefile.in +++ b/dlls/xapofx1_5/Makefile.in @@ -8,3 +8,5 @@ C_SRCS = \ xapo.c \ xapofx.c \ xaudio_allocator.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xaudio2_0/Makefile.in b/dlls/xaudio2_0/Makefile.in index 860e03e716f..49340bb90ba 100644 --- a/dlls/xaudio2_0/Makefile.in +++ b/dlls/xaudio2_0/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_1/Makefile.in b/dlls/xaudio2_1/Makefile.in index fa942761308..38a157a433f 100644 --- a/dlls/xaudio2_1/Makefile.in +++ b/dlls/xaudio2_1/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_2/Makefile.in b/dlls/xaudio2_2/Makefile.in index 26eee0a6f31..9d0fd75a2e0 100644 --- a/dlls/xaudio2_2/Makefile.in +++ b/dlls/xaudio2_2/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_3/Makefile.in b/dlls/xaudio2_3/Makefile.in index f6c555a9a3b..f4ef0d4f2f5 100644 --- a/dlls/xaudio2_3/Makefile.in +++ b/dlls/xaudio2_3/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_4/Makefile.in b/dlls/xaudio2_4/Makefile.in index 33bd0c155db..0b4f2a81a9f 100644 --- a/dlls/xaudio2_4/Makefile.in +++ b/dlls/xaudio2_4/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_5/Makefile.in b/dlls/xaudio2_5/Makefile.in index c4035aeb13f..6d4c5bdb3aa 100644 --- a/dlls/xaudio2_5/Makefile.in +++ b/dlls/xaudio2_5/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_6/Makefile.in b/dlls/xaudio2_6/Makefile.in index dbe2ae7829f..568f39ad9bb 100644 --- a/dlls/xaudio2_6/Makefile.in +++ b/dlls/xaudio2_6/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_7/Makefile.in b/dlls/xaudio2_7/Makefile.in index ef3987b693e..40f81d76d36 100644 --- a/dlls/xaudio2_7/Makefile.in +++ b/dlls/xaudio2_7/Makefile.in @@ -4,7 +4,6 @@ IMPORTS = $(FAUDIO_PE_LIBS) advapi32 ole32 user32 uuid EXTRAINCL = $(FAUDIO_PE_CFLAGS)
C_SRCS = \ - compat.c \ x3daudio.c \ xapo.c \ xapofx.c \ diff --git a/dlls/xaudio2_7/compat.c b/dlls/xaudio2_7/compat.c deleted file mode 100644 index 5bda1fa97f9..00000000000 --- a/dlls/xaudio2_7/compat.c +++ /dev/null @@ -1,2853 +0,0 @@ -/* - * Copyright (c) 2015 Andrew Eikum for CodeWeavers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - * - *************** - * - * Some versions of XAudio2 add or remove functions to the COM vtables, or - * incompatibly change structures. This file provides implementations of the - * older XAudio2 versions onto the new XAudio2 APIs. - * - * Below is a list of significant changes to the main XAudio2 interfaces and - * API. There may be further changes to effects and other parts that Wine - * doesn't currently implement. - * - * 2.0 - * Initial version - * - * 2.1 - * Change CLSID_XAudio2 - * Re-order Error codes - * Change XAUDIO2_LOOP_INFINITE - * Change struct XAUDIO2_PERFORMANCE_DATA - * Change IXAudio2Voice::GetOutputMatrix return value to void - * Add parameter to IXAudio2VoiceCallback::OnVoiceProcessingPassStart - * Change struct XAPO_REGISTRATION_PROPERTIES. CAREFUL when using! Not all - * implementations of IXAPO are Wine implementations. - * - * 2.2 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.3 - * Change CLSID_XAudio2 - * ABI break: - * Change struct XAUDIO2_PERFORMANCE_DATA - * - * 2.4 - * Change CLSID_XAudio2 - * ABI break: - * Add IXAudio2Voice::SetOutputFilterParameters - * Add IXAudio2Voice::GetOutputFilterParameters - * Add IXAudio2SourceVoice::SetSourceSampleRate - * Change struct XAUDIO2_VOICE_SENDS - * - * 2.5 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.6 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.7 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.8 - * Remove CLSID_XAudio2 - * Change IID_IXAudio2 - * Add xaudio2_8.XAudio2Create - * ABI break: - * Remove IXAudio2::GetDeviceCount - * Remove IXAudio2::GetDeviceDetails - * Remove IXAudio2::Initialize - * Change parameter of IXAudio2::CreateMasteringVoice - * Add Flags parameter to IXAudio2SourceVoice::GetState - * Add IXAudio2MasteringVoice::GetChannelMask - * Add DisableLateField member to XAUDIO2FX_REVERB_PARAMETERS - * Add ActiveFlags member to XAUDIO2_VOICE_DETAILS - * - * 2.9 - * Change IID_IXAudio2 - * New flags: XAUDIO2_STOP_ENGINE_WHEN_IDLE, XAUDIO2_1024_QUANTUM, - * XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT - * ABI break: - * Add SideDelay member to XAUDIO2FX_REVERB_PARAMETERS - */ - -#define NONAMELESSUNION -#define NONAMELESSSTRUCT -#define COBJMACROS - -#include <stdarg.h> - -#include "xaudio_private.h" - -#include "wine/debug.h" - -#if XAUDIO2_VER <= 7 -WINE_DEFAULT_DEBUG_CHANNEL(xaudio2); -#endif - -#if XAUDIO2_VER <= 3 -static XAUDIO2_SEND_DESCRIPTOR *convert_send_descriptors23(const XAUDIO23_VOICE_SENDS *sends) -{ - XAUDIO2_SEND_DESCRIPTOR *ret; - DWORD i; - - ret = HeapAlloc(GetProcessHeap(), 0, sends->OutputCount * sizeof(XAUDIO2_SEND_DESCRIPTOR)); - - for(i = 0; i < sends->OutputCount; ++i){ - ret[i].Flags = 0; - ret[i].pOutputVoice = sends->pOutputVoices[i]; - } - - return ret; -} -#endif - -/* BEGIN IXAudio2SourceVoice */ -#if XAUDIO2_VER == 0 -XA2VoiceImpl *impl_from_IXAudio20SourceVoice(IXAudio20SourceVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio20SourceVoice_iface); -} - -static void WINAPI XA20SRC_GetVoiceDetails(IXAudio20SourceVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SourceVoice_GetVoiceDetails(&This->IXAudio2SourceVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA20SRC_SetOutputVoices(IXAudio20SourceVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SourceVoice_SetOutputVoices(&This->IXAudio2SourceVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20SRC_SetEffectChain(IXAudio20SourceVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectChain(&This->IXAudio2SourceVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA20SRC_EnableEffect(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_EnableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA20SRC_DisableEffect(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_DisableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA20SRC_GetEffectState(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectState(&This->IXAudio2SourceVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA20SRC_SetEffectParameters(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA20SRC_GetEffectParameters(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA20SRC_SetFilterParameters(IXAudio20SourceVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetFilterParameters(&This->IXAudio2SourceVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA20SRC_GetFilterParameters(IXAudio20SourceVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetFilterParameters(&This->IXAudio2SourceVoice_iface, pParameters); -} - -static HRESULT WINAPI XA20SRC_SetVolume(IXAudio20SourceVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetVolume(&This->IXAudio2SourceVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA20SRC_GetVolume(IXAudio20SourceVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetVolume(&This->IXAudio2SourceVoice_iface, pVolume); -} - -static HRESULT WINAPI XA20SRC_SetChannelVolumes(IXAudio20SourceVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA20SRC_GetChannelVolumes(IXAudio20SourceVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA20SRC_SetOutputMatrix(IXAudio20SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static HRESULT WINAPI XA20SRC_GetOutputMatrix(IXAudio20SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - IXAudio2SourceVoice_GetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix); - return S_OK; -} - -static void WINAPI XA20SRC_DestroyVoice(IXAudio20SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_DestroyVoice(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA20SRC_Start(IXAudio20SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_Start(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA20SRC_Stop(IXAudio20SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_Stop(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA20SRC_SubmitSourceBuffer(IXAudio20SourceVoice *iface, - const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SubmitSourceBuffer(&This->IXAudio2SourceVoice_iface, - pBuffer, pBufferWMA); -} - -static HRESULT WINAPI XA20SRC_FlushSourceBuffers(IXAudio20SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_FlushSourceBuffers(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA20SRC_Discontinuity(IXAudio20SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_Discontinuity(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA20SRC_ExitLoop(IXAudio20SourceVoice *iface, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_ExitLoop(&This->IXAudio2SourceVoice_iface, OperationSet); -} - -static void WINAPI XA20SRC_GetState(IXAudio20SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetState(&This->IXAudio2SourceVoice_iface, pVoiceState, 0); -} - -static HRESULT WINAPI XA20SRC_SetFrequencyRatio(IXAudio20SourceVoice *iface, - float Ratio, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetFrequencyRatio(&This->IXAudio2SourceVoice_iface, - Ratio, OperationSet); -} - -static void WINAPI XA20SRC_GetFrequencyRatio(IXAudio20SourceVoice *iface, - float *pRatio) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetFrequencyRatio(&This->IXAudio2SourceVoice_iface, pRatio); -} - -const IXAudio20SourceVoiceVtbl XAudio20SourceVoice_Vtbl = { - XA20SRC_GetVoiceDetails, - XA20SRC_SetOutputVoices, - XA20SRC_SetEffectChain, - XA20SRC_EnableEffect, - XA20SRC_DisableEffect, - XA20SRC_GetEffectState, - XA20SRC_SetEffectParameters, - XA20SRC_GetEffectParameters, - XA20SRC_SetFilterParameters, - XA20SRC_GetFilterParameters, - XA20SRC_SetVolume, - XA20SRC_GetVolume, - XA20SRC_SetChannelVolumes, - XA20SRC_GetChannelVolumes, - XA20SRC_SetOutputMatrix, - XA20SRC_GetOutputMatrix, - XA20SRC_DestroyVoice, - XA20SRC_Start, - XA20SRC_Stop, - XA20SRC_SubmitSourceBuffer, - XA20SRC_FlushSourceBuffers, - XA20SRC_Discontinuity, - XA20SRC_ExitLoop, - XA20SRC_GetState, - XA20SRC_SetFrequencyRatio, - XA20SRC_GetFrequencyRatio, -}; - -#elif XAUDIO2_VER <= 3 - -XA2VoiceImpl *impl_from_IXAudio23SourceVoice(IXAudio23SourceVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio23SourceVoice_iface); -} - -static void WINAPI XA23SRC_GetVoiceDetails(IXAudio23SourceVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SourceVoice_GetVoiceDetails(&This->IXAudio2SourceVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA23SRC_SetOutputVoices(IXAudio23SourceVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SourceVoice_SetOutputVoices(&This->IXAudio2SourceVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23SRC_SetEffectChain(IXAudio23SourceVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectChain(&This->IXAudio2SourceVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA23SRC_EnableEffect(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_EnableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA23SRC_DisableEffect(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_DisableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA23SRC_GetEffectState(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectState(&This->IXAudio2SourceVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA23SRC_SetEffectParameters(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA23SRC_GetEffectParameters(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA23SRC_SetFilterParameters(IXAudio23SourceVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetFilterParameters(&This->IXAudio2SourceVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA23SRC_GetFilterParameters(IXAudio23SourceVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetFilterParameters(&This->IXAudio2SourceVoice_iface, pParameters); -} - -static HRESULT WINAPI XA23SRC_SetVolume(IXAudio23SourceVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetVolume(&This->IXAudio2SourceVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA23SRC_GetVolume(IXAudio23SourceVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetVolume(&This->IXAudio2SourceVoice_iface, pVolume); -} - -static HRESULT WINAPI XA23SRC_SetChannelVolumes(IXAudio23SourceVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA23SRC_GetChannelVolumes(IXAudio23SourceVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA23SRC_SetOutputMatrix(IXAudio23SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA23SRC_GetOutputMatrix(IXAudio23SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA23SRC_DestroyVoice(IXAudio23SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_DestroyVoice(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA23SRC_Start(IXAudio23SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_Start(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA23SRC_Stop(IXAudio23SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_Stop(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA23SRC_SubmitSourceBuffer(IXAudio23SourceVoice *iface, - const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SubmitSourceBuffer(&This->IXAudio2SourceVoice_iface, - pBuffer, pBufferWMA); -} - -static HRESULT WINAPI XA23SRC_FlushSourceBuffers(IXAudio23SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_FlushSourceBuffers(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA23SRC_Discontinuity(IXAudio23SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_Discontinuity(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA23SRC_ExitLoop(IXAudio23SourceVoice *iface, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_ExitLoop(&This->IXAudio2SourceVoice_iface, OperationSet); -} - -static void WINAPI XA23SRC_GetState(IXAudio23SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetState(&This->IXAudio2SourceVoice_iface, pVoiceState, 0); -} - -static HRESULT WINAPI XA23SRC_SetFrequencyRatio(IXAudio23SourceVoice *iface, - float Ratio, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetFrequencyRatio(&This->IXAudio2SourceVoice_iface, - Ratio, OperationSet); -} - -static void WINAPI XA23SRC_GetFrequencyRatio(IXAudio23SourceVoice *iface, - float *pRatio) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetFrequencyRatio(&This->IXAudio2SourceVoice_iface, pRatio); -} - -const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl = { - XA23SRC_GetVoiceDetails, - XA23SRC_SetOutputVoices, - XA23SRC_SetEffectChain, - XA23SRC_EnableEffect, - XA23SRC_DisableEffect, - XA23SRC_GetEffectState, - XA23SRC_SetEffectParameters, - XA23SRC_GetEffectParameters, - XA23SRC_SetFilterParameters, - XA23SRC_GetFilterParameters, - XA23SRC_SetVolume, - XA23SRC_GetVolume, - XA23SRC_SetChannelVolumes, - XA23SRC_GetChannelVolumes, - XA23SRC_SetOutputMatrix, - XA23SRC_GetOutputMatrix, - XA23SRC_DestroyVoice, - XA23SRC_Start, - XA23SRC_Stop, - XA23SRC_SubmitSourceBuffer, - XA23SRC_FlushSourceBuffers, - XA23SRC_Discontinuity, - XA23SRC_ExitLoop, - XA23SRC_GetState, - XA23SRC_SetFrequencyRatio, - XA23SRC_GetFrequencyRatio, -}; - -#elif XAUDIO2_VER <= 7 - -XA2VoiceImpl *impl_from_IXAudio27SourceVoice(IXAudio27SourceVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio27SourceVoice_iface); -} - -static void WINAPI XA27SRC_GetVoiceDetails(IXAudio27SourceVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SourceVoice_GetVoiceDetails(&This->IXAudio2SourceVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA27SRC_SetOutputVoices(IXAudio27SourceVoice *iface, - const XAUDIO2_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputVoices(&This->IXAudio2SourceVoice_iface, pSendList); -} - -static HRESULT WINAPI XA27SRC_SetEffectChain(IXAudio27SourceVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectChain(&This->IXAudio2SourceVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA27SRC_EnableEffect(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_EnableEffect(&This->IXAudio2SourceVoice_iface, EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA27SRC_DisableEffect(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_DisableEffect(&This->IXAudio2SourceVoice_iface, EffectIndex, OperationSet); -} - -static void WINAPI XA27SRC_GetEffectState(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetEffectState(&This->IXAudio2SourceVoice_iface, EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA27SRC_SetEffectParameters(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA27SRC_GetEffectParameters(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA27SRC_SetFilterParameters(IXAudio27SourceVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetFilterParameters(&This->IXAudio2SourceVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA27SRC_GetFilterParameters(IXAudio27SourceVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetFilterParameters(&This->IXAudio2SourceVoice_iface, pParameters); -} - -static HRESULT WINAPI XA27SRC_SetOutputFilterParameters(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputFilterParameters(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, pParameters, OperationSet); -} - -static void WINAPI XA27SRC_GetOutputFilterParameters(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetOutputFilterParameters(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, pParameters); -} - -static HRESULT WINAPI XA27SRC_SetVolume(IXAudio27SourceVoice *iface, float Volume, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetVolume(&This->IXAudio2SourceVoice_iface, Volume, - OperationSet); -} - -static void WINAPI XA27SRC_GetVolume(IXAudio27SourceVoice *iface, float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetVolume(&This->IXAudio2SourceVoice_iface, pVolume); -} - -static HRESULT WINAPI XA27SRC_SetChannelVolumes(IXAudio27SourceVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetChannelVolumes(&This->IXAudio2SourceVoice_iface, Channels, - pVolumes, OperationSet); -} - -static void WINAPI XA27SRC_GetChannelVolumes(IXAudio27SourceVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetChannelVolumes(&This->IXAudio2SourceVoice_iface, Channels, - pVolumes); -} - -static HRESULT WINAPI XA27SRC_SetOutputMatrix(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA27SRC_GetOutputMatrix(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetOutputMatrix(&This->IXAudio2SourceVoice_iface, pDestinationVoice, - SourceChannels, DestinationChannels, pLevelMatrix); -} - -static void WINAPI XA27SRC_DestroyVoice(IXAudio27SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_DestroyVoice(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA27SRC_Start(IXAudio27SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_Start(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA27SRC_Stop(IXAudio27SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_Stop(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA27SRC_SubmitSourceBuffer(IXAudio27SourceVoice *iface, - const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SubmitSourceBuffer(&This->IXAudio2SourceVoice_iface, pBuffer, - pBufferWMA); -} - -static HRESULT WINAPI XA27SRC_FlushSourceBuffers(IXAudio27SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_FlushSourceBuffers(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA27SRC_Discontinuity(IXAudio27SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_Discontinuity(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA27SRC_ExitLoop(IXAudio27SourceVoice *iface, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_ExitLoop(&This->IXAudio2SourceVoice_iface, OperationSet); -} - -static void WINAPI XA27SRC_GetState(IXAudio27SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_GetState(&This->IXAudio2SourceVoice_iface, pVoiceState, 0); -} - -static HRESULT WINAPI XA27SRC_SetFrequencyRatio(IXAudio27SourceVoice *iface, - float Ratio, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetFrequencyRatio(&This->IXAudio2SourceVoice_iface, Ratio, OperationSet); -} - -static void WINAPI XA27SRC_GetFrequencyRatio(IXAudio27SourceVoice *iface, float *pRatio) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_GetFrequencyRatio(&This->IXAudio2SourceVoice_iface, pRatio); -} - -static HRESULT WINAPI XA27SRC_SetSourceSampleRate( - IXAudio27SourceVoice *iface, - UINT32 NewSourceSampleRate) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetSourceSampleRate(&This->IXAudio2SourceVoice_iface, NewSourceSampleRate); -} - -const IXAudio27SourceVoiceVtbl XAudio27SourceVoice_Vtbl = { - XA27SRC_GetVoiceDetails, - XA27SRC_SetOutputVoices, - XA27SRC_SetEffectChain, - XA27SRC_EnableEffect, - XA27SRC_DisableEffect, - XA27SRC_GetEffectState, - XA27SRC_SetEffectParameters, - XA27SRC_GetEffectParameters, - XA27SRC_SetFilterParameters, - XA27SRC_GetFilterParameters, - XA27SRC_SetOutputFilterParameters, - XA27SRC_GetOutputFilterParameters, - XA27SRC_SetVolume, - XA27SRC_GetVolume, - XA27SRC_SetChannelVolumes, - XA27SRC_GetChannelVolumes, - XA27SRC_SetOutputMatrix, - XA27SRC_GetOutputMatrix, - XA27SRC_DestroyVoice, - XA27SRC_Start, - XA27SRC_Stop, - XA27SRC_SubmitSourceBuffer, - XA27SRC_FlushSourceBuffers, - XA27SRC_Discontinuity, - XA27SRC_ExitLoop, - XA27SRC_GetState, - XA27SRC_SetFrequencyRatio, - XA27SRC_GetFrequencyRatio, - XA27SRC_SetSourceSampleRate -}; -#endif -/* END IXAudio2SourceVoice */ - - -/* BEGIN IXAudio2SubmixVoice */ -#if XAUDIO2_VER == 0 -XA2VoiceImpl *impl_from_IXAudio20SubmixVoice(IXAudio20SubmixVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio20SubmixVoice_iface); -} - -static void WINAPI XA20SUB_GetVoiceDetails(IXAudio20SubmixVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SubmixVoice_GetVoiceDetails(&This->IXAudio2SubmixVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA20SUB_SetOutputVoices(IXAudio20SubmixVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SubmixVoice_SetOutputVoices(&This->IXAudio2SubmixVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20SUB_SetEffectChain(IXAudio20SubmixVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectChain(&This->IXAudio2SubmixVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA20SUB_EnableEffect(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_EnableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA20SUB_DisableEffect(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_DisableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA20SUB_GetEffectState(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectState(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA20SUB_SetEffectParameters(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA20SUB_GetEffectParameters(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA20SUB_SetFilterParameters(IXAudio20SubmixVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetFilterParameters(&This->IXAudio2SubmixVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA20SUB_GetFilterParameters(IXAudio20SubmixVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetFilterParameters(&This->IXAudio2SubmixVoice_iface, pParameters); -} - -static HRESULT WINAPI XA20SUB_SetVolume(IXAudio20SubmixVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetVolume(&This->IXAudio2SubmixVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA20SUB_GetVolume(IXAudio20SubmixVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetVolume(&This->IXAudio2SubmixVoice_iface, pVolume); -} - -static HRESULT WINAPI XA20SUB_SetChannelVolumes(IXAudio20SubmixVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA20SUB_GetChannelVolumes(IXAudio20SubmixVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA20SUB_SetOutputMatrix(IXAudio20SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static HRESULT WINAPI XA20SUB_GetOutputMatrix(IXAudio20SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - IXAudio2SubmixVoice_GetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix); - return S_OK; -} - -static void WINAPI XA20SUB_DestroyVoice(IXAudio20SubmixVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_DestroyVoice(&This->IXAudio2SubmixVoice_iface); -} - -const IXAudio20SubmixVoiceVtbl XAudio20SubmixVoice_Vtbl = { - XA20SUB_GetVoiceDetails, - XA20SUB_SetOutputVoices, - XA20SUB_SetEffectChain, - XA20SUB_EnableEffect, - XA20SUB_DisableEffect, - XA20SUB_GetEffectState, - XA20SUB_SetEffectParameters, - XA20SUB_GetEffectParameters, - XA20SUB_SetFilterParameters, - XA20SUB_GetFilterParameters, - XA20SUB_SetVolume, - XA20SUB_GetVolume, - XA20SUB_SetChannelVolumes, - XA20SUB_GetChannelVolumes, - XA20SUB_SetOutputMatrix, - XA20SUB_GetOutputMatrix, - XA20SUB_DestroyVoice -}; - -#elif XAUDIO2_VER <= 3 - -XA2VoiceImpl *impl_from_IXAudio23SubmixVoice(IXAudio23SubmixVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio23SubmixVoice_iface); -} - -static void WINAPI XA23SUB_GetVoiceDetails(IXAudio23SubmixVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SubmixVoice_GetVoiceDetails(&This->IXAudio2SubmixVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA23SUB_SetOutputVoices(IXAudio23SubmixVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SubmixVoice_SetOutputVoices(&This->IXAudio2SubmixVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23SUB_SetEffectChain(IXAudio23SubmixVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectChain(&This->IXAudio2SubmixVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA23SUB_EnableEffect(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_EnableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA23SUB_DisableEffect(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_DisableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA23SUB_GetEffectState(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectState(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA23SUB_SetEffectParameters(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA23SUB_GetEffectParameters(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA23SUB_SetFilterParameters(IXAudio23SubmixVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetFilterParameters(&This->IXAudio2SubmixVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA23SUB_GetFilterParameters(IXAudio23SubmixVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetFilterParameters(&This->IXAudio2SubmixVoice_iface, pParameters); -} - -static HRESULT WINAPI XA23SUB_SetVolume(IXAudio23SubmixVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetVolume(&This->IXAudio2SubmixVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA23SUB_GetVolume(IXAudio23SubmixVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetVolume(&This->IXAudio2SubmixVoice_iface, pVolume); -} - -static HRESULT WINAPI XA23SUB_SetChannelVolumes(IXAudio23SubmixVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA23SUB_GetChannelVolumes(IXAudio23SubmixVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA23SUB_SetOutputMatrix(IXAudio23SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA23SUB_GetOutputMatrix(IXAudio23SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA23SUB_DestroyVoice(IXAudio23SubmixVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_DestroyVoice(&This->IXAudio2SubmixVoice_iface); -} - -const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl = { - XA23SUB_GetVoiceDetails, - XA23SUB_SetOutputVoices, - XA23SUB_SetEffectChain, - XA23SUB_EnableEffect, - XA23SUB_DisableEffect, - XA23SUB_GetEffectState, - XA23SUB_SetEffectParameters, - XA23SUB_GetEffectParameters, - XA23SUB_SetFilterParameters, - XA23SUB_GetFilterParameters, - XA23SUB_SetVolume, - XA23SUB_GetVolume, - XA23SUB_SetChannelVolumes, - XA23SUB_GetChannelVolumes, - XA23SUB_SetOutputMatrix, - XA23SUB_GetOutputMatrix, - XA23SUB_DestroyVoice -}; - -#elif XAUDIO2_VER <= 7 - -XA2VoiceImpl *impl_from_IXAudio27SubmixVoice(IXAudio27SubmixVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio27SubmixVoice_iface); -} - -static void WINAPI XA27SUB_GetVoiceDetails(IXAudio27SubmixVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SubmixVoice_GetVoiceDetails(&This->IXAudio2SubmixVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA27SUB_SetOutputVoices(IXAudio27SubmixVoice *iface, - const XAUDIO2_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputVoices(&This->IXAudio2SubmixVoice_iface, pSendList); -} - -static HRESULT WINAPI XA27SUB_SetEffectChain(IXAudio27SubmixVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectChain(&This->IXAudio2SubmixVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA27SUB_EnableEffect(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_EnableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA27SUB_DisableEffect(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_DisableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA27SUB_GetEffectState(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectState(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA27SUB_SetEffectParameters(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA27SUB_GetEffectParameters(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA27SUB_SetFilterParameters(IXAudio27SubmixVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetFilterParameters(&This->IXAudio2SubmixVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA27SUB_GetFilterParameters(IXAudio27SubmixVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetFilterParameters(&This->IXAudio2SubmixVoice_iface, pParameters); -} - -static HRESULT WINAPI XA27SUB_SetOutputFilterParameters(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputFilterParameters(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, pParameters, OperationSet); -} - -static void WINAPI XA27SUB_GetOutputFilterParameters(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - IXAudio2SubmixVoice_GetOutputFilterParameters(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, pParameters); -} - -static HRESULT WINAPI XA27SUB_SetVolume(IXAudio27SubmixVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetVolume(&This->IXAudio2SubmixVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA27SUB_GetVolume(IXAudio27SubmixVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetVolume(&This->IXAudio2SubmixVoice_iface, pVolume); -} - -static HRESULT WINAPI XA27SUB_SetChannelVolumes(IXAudio27SubmixVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA27SUB_GetChannelVolumes(IXAudio27SubmixVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA27SUB_SetOutputMatrix(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA27SUB_GetOutputMatrix(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA27SUB_DestroyVoice(IXAudio27SubmixVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_DestroyVoice(&This->IXAudio2SubmixVoice_iface); -} - -const IXAudio27SubmixVoiceVtbl XAudio27SubmixVoice_Vtbl = { - XA27SUB_GetVoiceDetails, - XA27SUB_SetOutputVoices, - XA27SUB_SetEffectChain, - XA27SUB_EnableEffect, - XA27SUB_DisableEffect, - XA27SUB_GetEffectState, - XA27SUB_SetEffectParameters, - XA27SUB_GetEffectParameters, - XA27SUB_SetFilterParameters, - XA27SUB_GetFilterParameters, - XA27SUB_SetOutputFilterParameters, - XA27SUB_GetOutputFilterParameters, - XA27SUB_SetVolume, - XA27SUB_GetVolume, - XA27SUB_SetChannelVolumes, - XA27SUB_GetChannelVolumes, - XA27SUB_SetOutputMatrix, - XA27SUB_GetOutputMatrix, - XA27SUB_DestroyVoice -}; -#endif -/* END IXAudio2SubmixVoice */ - - -/* BEGIN IXAudio2MasteringVoice */ -#if XAUDIO2_VER == 0 -XA2VoiceImpl *impl_from_IXAudio20MasteringVoice(IXAudio20MasteringVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio20MasteringVoice_iface); -} - -static void WINAPI XA20M_GetVoiceDetails(IXAudio20MasteringVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2MasteringVoice_GetVoiceDetails(&This->IXAudio2MasteringVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA20M_SetOutputVoices(IXAudio20MasteringVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2MasteringVoice_SetOutputVoices(&This->IXAudio2MasteringVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20M_SetEffectChain(IXAudio20MasteringVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectChain(&This->IXAudio2MasteringVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA20M_EnableEffect(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_EnableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA20M_DisableEffect(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_DisableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA20M_GetEffectState(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectState(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA20M_SetEffectParameters(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA20M_GetEffectParameters(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA20M_SetFilterParameters(IXAudio20MasteringVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetFilterParameters(&This->IXAudio2MasteringVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA20M_GetFilterParameters(IXAudio20MasteringVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetFilterParameters(&This->IXAudio2MasteringVoice_iface, pParameters); -} - -static HRESULT WINAPI XA20M_SetVolume(IXAudio20MasteringVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetVolume(&This->IXAudio2MasteringVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA20M_GetVolume(IXAudio20MasteringVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetVolume(&This->IXAudio2MasteringVoice_iface, pVolume); -} - -static HRESULT WINAPI XA20M_SetChannelVolumes(IXAudio20MasteringVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA20M_GetChannelVolumes(IXAudio20MasteringVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA20M_SetOutputMatrix(IXAudio20MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static HRESULT WINAPI XA20M_GetOutputMatrix(IXAudio20MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - IXAudio2MasteringVoice_GetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix); - return S_OK; -} - -static void WINAPI XA20M_DestroyVoice(IXAudio20MasteringVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_DestroyVoice(&This->IXAudio2MasteringVoice_iface); -} - -const IXAudio20MasteringVoiceVtbl XAudio20MasteringVoice_Vtbl = { - XA20M_GetVoiceDetails, - XA20M_SetOutputVoices, - XA20M_SetEffectChain, - XA20M_EnableEffect, - XA20M_DisableEffect, - XA20M_GetEffectState, - XA20M_SetEffectParameters, - XA20M_GetEffectParameters, - XA20M_SetFilterParameters, - XA20M_GetFilterParameters, - XA20M_SetVolume, - XA20M_GetVolume, - XA20M_SetChannelVolumes, - XA20M_GetChannelVolumes, - XA20M_SetOutputMatrix, - XA20M_GetOutputMatrix, - XA20M_DestroyVoice -}; - -#elif XAUDIO2_VER <= 3 - -XA2VoiceImpl *impl_from_IXAudio23MasteringVoice(IXAudio23MasteringVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio23MasteringVoice_iface); -} - -static void WINAPI XA23M_GetVoiceDetails(IXAudio23MasteringVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2MasteringVoice_GetVoiceDetails(&This->IXAudio2MasteringVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA23M_SetOutputVoices(IXAudio23MasteringVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2MasteringVoice_SetOutputVoices(&This->IXAudio2MasteringVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23M_SetEffectChain(IXAudio23MasteringVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectChain(&This->IXAudio2MasteringVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA23M_EnableEffect(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_EnableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA23M_DisableEffect(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_DisableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA23M_GetEffectState(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectState(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA23M_SetEffectParameters(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA23M_GetEffectParameters(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA23M_SetFilterParameters(IXAudio23MasteringVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetFilterParameters(&This->IXAudio2MasteringVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA23M_GetFilterParameters(IXAudio23MasteringVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetFilterParameters(&This->IXAudio2MasteringVoice_iface, pParameters); -} - -static HRESULT WINAPI XA23M_SetVolume(IXAudio23MasteringVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetVolume(&This->IXAudio2MasteringVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA23M_GetVolume(IXAudio23MasteringVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetVolume(&This->IXAudio2MasteringVoice_iface, pVolume); -} - -static HRESULT WINAPI XA23M_SetChannelVolumes(IXAudio23MasteringVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA23M_GetChannelVolumes(IXAudio23MasteringVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA23M_SetOutputMatrix(IXAudio23MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA23M_GetOutputMatrix(IXAudio23MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA23M_DestroyVoice(IXAudio23MasteringVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_DestroyVoice(&This->IXAudio2MasteringVoice_iface); -} - -const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl = { - XA23M_GetVoiceDetails, - XA23M_SetOutputVoices, - XA23M_SetEffectChain, - XA23M_EnableEffect, - XA23M_DisableEffect, - XA23M_GetEffectState, - XA23M_SetEffectParameters, - XA23M_GetEffectParameters, - XA23M_SetFilterParameters, - XA23M_GetFilterParameters, - XA23M_SetVolume, - XA23M_GetVolume, - XA23M_SetChannelVolumes, - XA23M_GetChannelVolumes, - XA23M_SetOutputMatrix, - XA23M_GetOutputMatrix, - XA23M_DestroyVoice -}; - -#elif XAUDIO2_VER <= 7 - -XA2VoiceImpl *impl_from_IXAudio27MasteringVoice(IXAudio27MasteringVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio27MasteringVoice_iface); -} - -static void WINAPI XA27M_GetVoiceDetails(IXAudio27MasteringVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2MasteringVoice_GetVoiceDetails(&This->IXAudio2MasteringVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA27M_SetOutputVoices(IXAudio27MasteringVoice *iface, - const XAUDIO2_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputVoices(&This->IXAudio2MasteringVoice_iface, pSendList); -} - -static HRESULT WINAPI XA27M_SetEffectChain(IXAudio27MasteringVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectChain(&This->IXAudio2MasteringVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA27M_EnableEffect(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_EnableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA27M_DisableEffect(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_DisableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA27M_GetEffectState(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectState(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA27M_SetEffectParameters(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA27M_GetEffectParameters(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA27M_SetFilterParameters(IXAudio27MasteringVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetFilterParameters(&This->IXAudio2MasteringVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA27M_GetFilterParameters(IXAudio27MasteringVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetFilterParameters(&This->IXAudio2MasteringVoice_iface, pParameters); -} - -static HRESULT WINAPI XA27M_SetOutputFilterParameters(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputFilterParameters(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, pParameters, OperationSet); -} - -static void WINAPI XA27M_GetOutputFilterParameters(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - IXAudio2MasteringVoice_GetOutputFilterParameters(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, pParameters); -} - -static HRESULT WINAPI XA27M_SetVolume(IXAudio27MasteringVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetVolume(&This->IXAudio2MasteringVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA27M_GetVolume(IXAudio27MasteringVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetVolume(&This->IXAudio2MasteringVoice_iface, pVolume); -} - -static HRESULT WINAPI XA27M_SetChannelVolumes(IXAudio27MasteringVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA27M_GetChannelVolumes(IXAudio27MasteringVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA27M_SetOutputMatrix(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA27M_GetOutputMatrix(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA27M_DestroyVoice(IXAudio27MasteringVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_DestroyVoice(&This->IXAudio2MasteringVoice_iface); -} - -const IXAudio27MasteringVoiceVtbl XAudio27MasteringVoice_Vtbl = { - XA27M_GetVoiceDetails, - XA27M_SetOutputVoices, - XA27M_SetEffectChain, - XA27M_EnableEffect, - XA27M_DisableEffect, - XA27M_GetEffectState, - XA27M_SetEffectParameters, - XA27M_GetEffectParameters, - XA27M_SetFilterParameters, - XA27M_GetFilterParameters, - XA27M_SetOutputFilterParameters, - XA27M_GetOutputFilterParameters, - XA27M_SetVolume, - XA27M_GetVolume, - XA27M_SetChannelVolumes, - XA27M_GetChannelVolumes, - XA27M_SetOutputMatrix, - XA27M_GetOutputMatrix, - XA27M_DestroyVoice -}; -#endif -/* END IXAudio2MasteringVoice */ - - -/* BEGIN IXAudio2 */ -#if XAUDIO2_VER == 0 -static inline IXAudio2Impl *impl_from_IXAudio20(IXAudio20 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio20_iface); -} - -static HRESULT WINAPI XA20_QueryInterface(IXAudio20 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA20_AddRef(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA20_Release(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA20_GetDeviceCount(IXAudio20 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA20_GetDeviceDetails(IXAudio20 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA20_Initialize(IXAudio20 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA20_RegisterForCallbacks(IXAudio20 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA20_UnregisterForCallbacks(IXAudio20 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA20_CreateSourceVoice(IXAudio20 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20_CreateSubmixVoice(IXAudio20 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20_CreateMasteringVoice(IXAudio20 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* XAUDIO2_VER == 0 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio20MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA20_StartEngine(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA20_StopEngine(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA20_CommitChanges(IXAudio20 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA20_GetPerformanceData(IXAudio20 *iface, - XAUDIO20_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - XAUDIO2_PERFORMANCE_DATA data; - - IXAudio2_GetPerformanceData(&This->IXAudio2_iface, &data); - - pPerfData->AudioCyclesSinceLastQuery = data.AudioCyclesSinceLastQuery; - pPerfData->TotalCyclesSinceLastQuery = data.TotalCyclesSinceLastQuery; - pPerfData->MinimumCyclesPerQuantum = data.MinimumCyclesPerQuantum; - pPerfData->MaximumCyclesPerQuantum = data.MaximumCyclesPerQuantum; - pPerfData->MemoryUsageInBytes = data.MemoryUsageInBytes; - pPerfData->CurrentLatencyInSamples = data.CurrentLatencyInSamples; - pPerfData->GlitchesSinceLastQuery = data.GlitchesSinceEngineStarted - This->last_query_glitches; - This->last_query_glitches = data.GlitchesSinceEngineStarted; - pPerfData->ActiveSourceVoiceCount = data.ActiveSourceVoiceCount; - pPerfData->TotalSourceVoiceCount = data.TotalSourceVoiceCount; - - pPerfData->ActiveSubmixVoiceCount = data.ActiveSubmixVoiceCount; - pPerfData->TotalSubmixVoiceCount = data.ActiveSubmixVoiceCount; - - pPerfData->ActiveXmaSourceVoices = data.ActiveXmaSourceVoices; - pPerfData->ActiveXmaStreams = data.ActiveXmaStreams; -} - -static void WINAPI XA20_SetDebugConfiguration(IXAudio20 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio20Vtbl XAudio20_Vtbl = { - XA20_QueryInterface, - XA20_AddRef, - XA20_Release, - XA20_GetDeviceCount, - XA20_GetDeviceDetails, - XA20_Initialize, - XA20_RegisterForCallbacks, - XA20_UnregisterForCallbacks, - XA20_CreateSourceVoice, - XA20_CreateSubmixVoice, - XA20_CreateMasteringVoice, - XA20_StartEngine, - XA20_StopEngine, - XA20_CommitChanges, - XA20_GetPerformanceData, - XA20_SetDebugConfiguration -}; - -#elif XAUDIO2_VER <= 2 - -static inline IXAudio2Impl *impl_from_IXAudio22(IXAudio22 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio22_iface); -} - -static HRESULT WINAPI XA22_QueryInterface(IXAudio22 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA22_AddRef(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA22_Release(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA22_GetDeviceCount(IXAudio22 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA22_GetDeviceDetails(IXAudio22 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA22_Initialize(IXAudio22 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA22_RegisterForCallbacks(IXAudio22 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA22_UnregisterForCallbacks(IXAudio22 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA22_CreateSourceVoice(IXAudio22 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA22_CreateSubmixVoice(IXAudio22 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA22_CreateMasteringVoice(IXAudio22 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* 1 <= XAUDIO2_VER <= 2 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio23MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA22_StartEngine(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA22_StopEngine(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA22_CommitChanges(IXAudio22 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA22_GetPerformanceData(IXAudio22 *iface, - XAUDIO22_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - XAUDIO2_PERFORMANCE_DATA data; - - IXAudio2_GetPerformanceData(&This->IXAudio2_iface, &data); - - pPerfData->AudioCyclesSinceLastQuery = data.AudioCyclesSinceLastQuery; - pPerfData->TotalCyclesSinceLastQuery = data.TotalCyclesSinceLastQuery; - pPerfData->MinimumCyclesPerQuantum = data.MinimumCyclesPerQuantum; - pPerfData->MaximumCyclesPerQuantum = data.MaximumCyclesPerQuantum; - pPerfData->MemoryUsageInBytes = data.MemoryUsageInBytes; - pPerfData->CurrentLatencyInSamples = data.CurrentLatencyInSamples; - pPerfData->GlitchesSinceEngineStarted = data.GlitchesSinceEngineStarted; - pPerfData->ActiveSourceVoiceCount = data.ActiveSourceVoiceCount; - pPerfData->TotalSourceVoiceCount = data.TotalSourceVoiceCount; - - pPerfData->ActiveSubmixVoiceCount = data.ActiveSubmixVoiceCount; - pPerfData->TotalSubmixVoiceCount = data.ActiveSubmixVoiceCount; - - pPerfData->ActiveXmaSourceVoices = data.ActiveXmaSourceVoices; - pPerfData->ActiveXmaStreams = data.ActiveXmaStreams; -} - -static void WINAPI XA22_SetDebugConfiguration(IXAudio22 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio22Vtbl XAudio22_Vtbl = { - XA22_QueryInterface, - XA22_AddRef, - XA22_Release, - XA22_GetDeviceCount, - XA22_GetDeviceDetails, - XA22_Initialize, - XA22_RegisterForCallbacks, - XA22_UnregisterForCallbacks, - XA22_CreateSourceVoice, - XA22_CreateSubmixVoice, - XA22_CreateMasteringVoice, - XA22_StartEngine, - XA22_StopEngine, - XA22_CommitChanges, - XA22_GetPerformanceData, - XA22_SetDebugConfiguration -}; - -#elif XAUDIO2_VER <= 3 - -static inline IXAudio2Impl *impl_from_IXAudio23(IXAudio23 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio23_iface); -} - -static HRESULT WINAPI XA23_QueryInterface(IXAudio23 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA23_AddRef(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA23_Release(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA23_GetDeviceCount(IXAudio23 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA23_GetDeviceDetails(IXAudio23 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA23_Initialize(IXAudio23 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA23_RegisterForCallbacks(IXAudio23 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA23_UnregisterForCallbacks(IXAudio23 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA23_CreateSourceVoice(IXAudio23 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23_CreateSubmixVoice(IXAudio23 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23_CreateMasteringVoice(IXAudio23 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* XAUDIO2_VER == 3 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio23MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA23_StartEngine(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA23_StopEngine(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA23_CommitChanges(IXAudio23 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA23_GetPerformanceData(IXAudio23 *iface, - XAUDIO2_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_GetPerformanceData(&This->IXAudio2_iface, pPerfData); -} - -static void WINAPI XA23_SetDebugConfiguration(IXAudio23 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio23Vtbl XAudio23_Vtbl = { - XA23_QueryInterface, - XA23_AddRef, - XA23_Release, - XA23_GetDeviceCount, - XA23_GetDeviceDetails, - XA23_Initialize, - XA23_RegisterForCallbacks, - XA23_UnregisterForCallbacks, - XA23_CreateSourceVoice, - XA23_CreateSubmixVoice, - XA23_CreateMasteringVoice, - XA23_StartEngine, - XA23_StopEngine, - XA23_CommitChanges, - XA23_GetPerformanceData, - XA23_SetDebugConfiguration -}; - -#elif XAUDIO2_VER <= 7 - -static inline IXAudio2Impl *impl_from_IXAudio27(IXAudio27 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio27_iface); -} - -static HRESULT WINAPI XA27_QueryInterface(IXAudio27 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA27_AddRef(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA27_Release(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA27_GetDeviceCount(IXAudio27 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA27_GetDeviceDetails(IXAudio27 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA27_Initialize(IXAudio27 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA27_RegisterForCallbacks(IXAudio27 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA27_UnregisterForCallbacks(IXAudio27 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA27_CreateSourceVoice(IXAudio27 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO2_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, pSendList, - pEffectChain); -} - -static HRESULT WINAPI XA27_CreateSubmixVoice(IXAudio27 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO2_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, pSendList, - pEffectChain); -} - -static HRESULT WINAPI XA27_CreateMasteringVoice(IXAudio27 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* 4 <= XAUDIO2_VER <= 7 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio27MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA27_StartEngine(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA27_StopEngine(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA27_CommitChanges(IXAudio27 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA27_GetPerformanceData(IXAudio27 *iface, - XAUDIO2_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_GetPerformanceData(&This->IXAudio2_iface, pPerfData); -} - -static void WINAPI XA27_SetDebugConfiguration(IXAudio27 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio27Vtbl XAudio27_Vtbl = { - XA27_QueryInterface, - XA27_AddRef, - XA27_Release, - XA27_GetDeviceCount, - XA27_GetDeviceDetails, - XA27_Initialize, - XA27_RegisterForCallbacks, - XA27_UnregisterForCallbacks, - XA27_CreateSourceVoice, - XA27_CreateSubmixVoice, - XA27_CreateMasteringVoice, - XA27_StartEngine, - XA27_StopEngine, - XA27_CommitChanges, - XA27_GetPerformanceData, - XA27_SetDebugConfiguration -}; -#endif -/* END IXAudio2 */ diff --git a/dlls/xaudio2_7/tests/Makefile.in b/dlls/xaudio2_7/tests/Makefile.in index ba56d94a1f3..99b982a97ed 100644 --- a/dlls/xaudio2_7/tests/Makefile.in +++ b/dlls/xaudio2_7/tests/Makefile.in @@ -1,5 +1,8 @@ TESTDLL = xaudio2_7.dll IMPORTS = ole32 +EXTRADEFS = -DXAUDIO2_VER=7
C_SRCS = \ xaudio2.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c index 8bf79eb2a34..5f60f448187 100644 --- a/dlls/xaudio2_7/tests/xaudio2.c +++ b/dlls/xaudio2_7/tests/xaudio2.c @@ -18,42 +18,75 @@
#include <windows.h> #include <math.h> +#include <stdbool.h>
#define COBJMACROS #include "wine/test.h" #include "initguid.h" -#include "xaudio2.h" -#include "xaudio2fx.h" +#include "xaudio_classes.h" #include "xapo.h" #include "xapofx.h" #include "mmsystem.h" #include "ks.h" #include "ksmedia.h"
-static BOOL xaudio27; +static const GUID IID_IXAudio27 = {0x8bcf1f58, 0x9fe7, 0x4583, {0x8a, 0xc6, 0xe2, 0xad, 0xc4, 0x65, 0xc8, 0xbb}}; +static const GUID IID_IXAudio28 = {0x2b02e3cf, 0x2e0b, 0x4ec3, {0xbe, 0x45, 0x1b, 0x2a, 0x3f, 0xe7, 0x21, 0x0d}}; + +static const GUID CLSID_AudioVolumeMeter20 = {0xc0c56f46, 0x29b1, 0x44e9, {0x99, 0x39, 0xa3, 0x2c, 0xe8, 0x68, 0x67, 0xe2}}; +static const GUID CLSID_AudioVolumeMeter21 = {0xc1e3f122, 0xa2ea, 0x442c, {0x85, 0x4f, 0x20, 0xd9, 0x8f, 0x83, 0x57, 0xa1}}; +static const GUID CLSID_AudioVolumeMeter22 = {0xf5ca7b34, 0x8055, 0x42c0, {0xb8, 0x36, 0x21, 0x61, 0x29, 0xeb, 0x7e, 0x30}}; +static const GUID CLSID_AudioVolumeMeter23 = {0xe180344b, 0xac83, 0x4483, {0x95, 0x9e, 0x18, 0xa5, 0xc5, 0x6a, 0x5e, 0x19}}; +static const GUID CLSID_AudioVolumeMeter24 = {0xc7338b95, 0x52b8, 0x4542, {0xaa, 0x79, 0x42, 0xeb, 0x01, 0x6c, 0x8c, 0x1c}}; +static const GUID CLSID_AudioVolumeMeter25 = {0x2139e6da, 0xc341, 0x4774, {0x9a, 0xc3, 0xb4, 0xe0, 0x26, 0x34, 0x7f, 0x64}}; +static const GUID CLSID_AudioVolumeMeter26 = {0xe48c5a3f, 0x93ef, 0x43bb, {0xa0, 0x92, 0x2c, 0x7c, 0xeb, 0x94, 0x6f, 0x27}}; +static const GUID CLSID_AudioVolumeMeter27 = {0xcac1105f, 0x619b, 0x4d04, {0x83, 0x1a, 0x44, 0xe1, 0xcb, 0xf1, 0x2d, 0x57}}; +static const GUID CLSID_AudioReverb20 = {0x6f6ea3a9, 0x2cf5, 0x41cf, {0x91, 0xc1, 0x21, 0x70, 0xb1, 0x54, 0x00, 0x63}}; +static const GUID CLSID_AudioReverb21 = {0xf4769300, 0xb949, 0x4df9, {0xb3, 0x33, 0x00, 0xd3, 0x39, 0x32, 0xe9, 0xa6}}; +static const GUID CLSID_AudioReverb22 = {0x629cf0de, 0x3ecc, 0x41e7, {0x99, 0x26, 0xf7, 0xe4, 0x3e, 0xeb, 0xec, 0x51}}; +static const GUID CLSID_AudioReverb23 = {0x9cab402c, 0x1d37, 0x44b4, {0x88, 0x6d, 0xfa, 0x4f, 0x36, 0x17, 0x0a, 0x4c}}; +static const GUID CLSID_AudioReverb24 = {0x8bb7778b, 0x645b, 0x4475, {0x9a, 0x73, 0x1d, 0xe3, 0x17, 0x0b, 0xd3, 0xaf}}; +static const GUID CLSID_AudioReverb25 = {0xd06df0d0, 0x8518, 0x441e, {0x82, 0x2f, 0x54, 0x51, 0xd5, 0xc5, 0x95, 0xb8}}; +static const GUID CLSID_AudioReverb26 = {0xcecec95a, 0xd894, 0x491a, {0xbe, 0xe3, 0x5e, 0x10, 0x6f, 0xb5, 0x9f, 0x2d}}; +static const GUID CLSID_AudioReverb27 = {0x6a93130e, 0x1d53, 0x41d1, {0xa9, 0xcf, 0xe7, 0x58, 0x80, 0x0b, 0xb1, 0x79}}; + +static const bool xaudio27 = (XAUDIO2_VER <= 7); + +static IXAudio2 *create_xaudio2(void) +{ + IXAudio2 *audio; + HRESULT hr;
-static HRESULT (WINAPI *pXAudio2Create)(IXAudio2 **, UINT32, XAUDIO2_PROCESSOR) = NULL; -static HRESULT (WINAPI *pCreateAudioVolumeMeter)(IUnknown**) = NULL; +#if XAUDIO2_VER <= 7 + hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void **)&audio); + ok(hr == S_OK, "Got hr %#lx.\n", hr);
-#define XA2CALL_0(method) if(xaudio27) hr = IXAudio27_##method((IXAudio27*)xa); else hr = IXAudio2_##method(xa); -#define XA2CALL_0V(method) if(xaudio27) IXAudio27_##method((IXAudio27*)xa); else IXAudio2_##method(xa); -#define XA2CALL_V(method, ...) if(xaudio27) IXAudio27_##method((IXAudio27*)xa, __VA_ARGS__); else IXAudio2_##method(xa, __VA_ARGS__); -#define XA2CALL(method, ...) if(xaudio27) hr = IXAudio27_##method((IXAudio27*)xa, __VA_ARGS__); else hr = IXAudio2_##method(xa, __VA_ARGS__); + hr = IXAudio2_Initialize(audio, 0, XAUDIO2_ANY_PROCESSOR); + ok(hr == S_OK, "Got hr %#lx.\n", hr); +#else + hr = XAudio2Create(&audio, 0, XAUDIO2_DEFAULT_PROCESSOR); + ok(hr == S_OK, "Got hr %#lx.\n", hr); +#endif + + return audio; +}
static HRESULT create_mastering_voice(IXAudio2 *audio, unsigned int channel_count, IXAudio2MasteringVoice **voice) { - if (xaudio27) - return IXAudio27_CreateMasteringVoice((IXAudio27*)audio, voice, channel_count, 44100, 0, 0, NULL); - else - return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, NULL, NULL, AudioCategory_GameEffects); +#if XAUDIO2_VER <= 7 + return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, 0, NULL); +#else + return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, NULL, NULL, AudioCategory_GameEffects); +#endif }
static void get_voice_state(IXAudio2SourceVoice *voice, XAUDIO2_VOICE_STATE *state) { - if (xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)voice, state); - else - IXAudio2SourceVoice_GetState(voice, state, 0); +#if XAUDIO2_VER <= 7 + IXAudio2SourceVoice_GetState(voice, state); +#else + IXAudio2SourceVoice_GetState(voice, state, 0); +#endif }
static void fill_buf(float *buf, WAVEFORMATEX *fmt, DWORD hz, DWORD len_frames) @@ -191,16 +224,17 @@ static void test_simple_streaming(IXAudio2 *xa) IUnknown *vumeter; WAVEFORMATEX fmt; XAUDIO2_BUFFER buf, buf2; + XAUDIO2_VOICE_DETAILS details; XAUDIO2_VOICE_STATE state; XAUDIO2_EFFECT_DESCRIPTOR effect; XAUDIO2_EFFECT_CHAIN chain; - DWORD chmask; + IXAPO *xapo;
memset(&ecb_state, 0, sizeof(ecb_state)); memset(&src1_state, 0, sizeof(src1_state)); memset(&src2_state, 0, sizeof(src2_state));
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
/* Tests show in native XA2.8, ECB is called from a mixer thread, but VCBs * may be called from other threads in any order. So we can't rely on any @@ -208,17 +242,20 @@ static void test_simple_streaming(IXAudio2 *xa) * * XA2.7 does all mixing from a single thread, so call sequence can be * tested. */ - XA2CALL(RegisterForCallbacks, &ecb); + hr = IXAudio2_RegisterForCallbacks(xa, &ecb); ok(hr == S_OK, "RegisterForCallbacks failed: %08lx\n", hr);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
- if(!xaudio27){ - chmask = 0xdeadbeef; +#if XAUDIO2_VER >= 8 + { + DWORD chmask = 0xdeadbeef; + IXAudio2MasteringVoice_GetChannelMask(master, &chmask); ok(chmask == (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT), "Got unexpected channel mask: 0x%lx\n", chmask); } +#endif
/* create first source voice */ fmt.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; @@ -229,23 +266,16 @@ static void test_simple_streaming(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &vcb1, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &vcb1, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
- if(xaudio27){ - XAUDIO27_VOICE_DETAILS details; - IXAudio27SourceVoice_GetVoiceDetails((IXAudio27SourceVoice*)src, &details); - ok(details.CreationFlags == 0, "Got wrong flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - }else{ - XAUDIO2_VOICE_DETAILS details; - IXAudio2SourceVoice_GetVoiceDetails(src, &details); - ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); - ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - } + IXAudio2SourceVoice_GetVoiceDetails(src, &details); + ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); +#if XAUDIO2_VER >= 8 + ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.ActiveFlags); +#endif + ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); + ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate);
memset(&buf, 0, sizeof(buf)); buf.AudioBytes = 22050 * fmt.nBlockAlign; @@ -259,23 +289,16 @@ static void test_simple_streaming(IXAudio2 *xa) ok(hr == S_OK, "Start failed: %08lx\n", hr);
/* create second source voice */ - XA2CALL(CreateSourceVoice, &src2, &fmt, 0, 1.f, &vcb2, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src2, &fmt, 0, 1.f, &vcb2, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
- if(xaudio27){ - XAUDIO27_VOICE_DETAILS details; - IXAudio27SourceVoice_GetVoiceDetails((IXAudio27SourceVoice*)src2, &details); - ok(details.CreationFlags == 0, "Got wrong flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - }else{ - XAUDIO2_VOICE_DETAILS details; - IXAudio2SourceVoice_GetVoiceDetails(src2, &details); - ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); - ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - } + IXAudio2SourceVoice_GetVoiceDetails(src2, &details); + ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); +#if XAUDIO2_VER >= 8 + ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.ActiveFlags); +#endif + ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); + ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate);
memset(&buf2, 0, sizeof(buf2)); buf2.AudioBytes = 22050 * fmt.nBlockAlign; @@ -288,32 +311,21 @@ static void test_simple_streaming(IXAudio2 *xa) hr = IXAudio2SourceVoice_Start(src2, 0, XAUDIO2_COMMIT_NOW); ok(hr == S_OK, "Start failed: %08lx\n", hr);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
/* hook up volume meter */ - if(xaudio27){ - IXAPO *xapo; - - hr = CoCreateInstance(&CLSID_AudioVolumeMeter27, NULL, - CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&vumeter); - ok(hr == S_OK, "CoCreateInstance(AudioVolumeMeter) failed: %08lx\n", hr); - - hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO27, (void**)&xapo); - ok(hr == S_OK, "Couldn't get IXAPO27 interface: %08lx\n", hr); - if(SUCCEEDED(hr)) - IXAPO_Release(xapo); - }else{ - IXAPO *xapo; - - hr = pCreateAudioVolumeMeter(&vumeter); - ok(hr == S_OK, "CreateAudioVolumeMeter failed: %08lx\n", hr); - - hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO, (void**)&xapo); - ok(hr == S_OK, "Couldn't get IXAPO interface: %08lx\n", hr); - if(SUCCEEDED(hr)) - IXAPO_Release(xapo); - } +#if XAUDIO2_VER <= 7 + hr = CoCreateInstance(&CLSID_AudioVolumeMeter, NULL, + CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&vumeter); +#else + hr = CreateAudioVolumeMeter(&vumeter); +#endif + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO27, (void **)&xapo); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + IXAPO_Release(xapo);
effect.InitialState = TRUE; effect.OutputChannels = 2; @@ -339,16 +351,11 @@ static void test_simple_streaming(IXAudio2 *xa) HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); HeapFree(GetProcessHeap(), 0, (void*)buf2.pAudioData);
- if(xaudio27){ - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src2); - }else{ - IXAudio2SourceVoice_DestroyVoice(src); - IXAudio2SourceVoice_DestroyVoice(src2); - } + IXAudio2SourceVoice_DestroyVoice(src); + IXAudio2SourceVoice_DestroyVoice(src2); IXAudio2MasteringVoice_DestroyVoice(master);
- XA2CALL_V(UnregisterForCallbacks, &ecb); + IXAudio2_UnregisterForCallbacks(xa, &ecb); }
static void WINAPI vcb_buf_OnVoiceProcessingPassStart(IXAudio2VoiceCallback *This, @@ -487,7 +494,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) obs_calls = 0; obe_calls = 0;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr); @@ -501,7 +508,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &vcb_buf, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &vcb_buf, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
memset(&buf, 0, sizeof(buf)); @@ -523,16 +530,14 @@ static void test_buffer_callbacks(IXAudio2 *xa) ok(hr == S_OK, "Start failed: %08lx\n", hr);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
- if(xaudio27){ - hr = IXAudio27SourceVoice_SetSourceSampleRate((IXAudio27SourceVoice*)src, 48000); + hr = IXAudio2SourceVoice_SetSourceSampleRate(src, 48000); + if (xaudio27) ok(hr == S_OK, "SetSourceSampleRate failed: %08lx\n", hr); - }else{ - hr = IXAudio2SourceVoice_SetSourceSampleRate(src, 48000); + else ok(hr == XAUDIO2_E_INVALID_CALL, "SetSourceSampleRate should have failed: %08lx\n", hr); - }
while(1){ get_voice_state(src, &state); @@ -543,14 +548,10 @@ static void test_buffer_callbacks(IXAudio2 *xa)
ok(state.SamplesPlayed == 4410 * 5, "Got wrong samples played\n");
- if(xaudio27) - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - else - IXAudio2SourceVoice_DestroyVoice(src); - + IXAudio2SourceVoice_DestroyVoice(src);
/* test OnStreamEnd callback */ - XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
buf.Flags = XAUDIO2_END_OF_STREAM; @@ -573,12 +574,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) get_voice_state(src, &state); ok(state.SamplesPlayed == 0, "Got wrong samples played\n");
- if(xaudio27) - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - else - IXAudio2SourceVoice_DestroyVoice(src); - - + IXAudio2SourceVoice_DestroyVoice(src); IXAudio2MasteringVoice_DestroyVoice(master);
HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); @@ -598,12 +594,8 @@ static UINT32 play_to_completion(IXAudio2SourceVoice *src, UINT32 max_samples) get_voice_state(src, &state); if(state.BuffersQueued == 0) break; - if(state.SamplesPlayed >= max_samples){ - if(xaudio27) - IXAudio27SourceVoice_ExitLoop((IXAudio27SourceVoice*)src, XAUDIO2_COMMIT_NOW); - else - IXAudio2SourceVoice_ExitLoop(src, XAUDIO2_COMMIT_NOW); - } + if (state.SamplesPlayed >= max_samples) + IXAudio2SourceVoice_ExitLoop(src, XAUDIO2_COMMIT_NOW); Sleep(100); }
@@ -622,7 +614,7 @@ static void test_looping(IXAudio2 *xa) XAUDIO2_BUFFER buf; UINT32 played, running_total = 0;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr); @@ -636,7 +628,7 @@ static void test_looping(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
memset(&buf, 0, sizeof(buf)); @@ -645,7 +637,7 @@ static void test_looping(IXAudio2 *xa) buf.pAudioData = HeapAlloc(GetProcessHeap(), 0, buf.AudioBytes); fill_buf((float*)buf.pAudioData, &fmt, 440, 44100);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
/* play from middle to end */ @@ -789,10 +781,7 @@ static void test_looping(IXAudio2 *xa) ok(nloopends == (played - running_total) / 88200 + 1, "Got wrong OnLoopEnd calls: %u\n", nloopends); running_total = played;
- if(xaudio27) - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - else - IXAudio2SourceVoice_DestroyVoice(src); + IXAudio2SourceVoice_DestroyVoice(src); IXAudio2MasteringVoice_DestroyVoice(master); HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); } @@ -801,30 +790,24 @@ static void test_submix(IXAudio2 *xa) { HRESULT hr; IXAudio2MasteringVoice *master; + XAUDIO2_VOICE_DETAILS details; IXAudio2SubmixVoice *sub;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
- XA2CALL(CreateSubmixVoice, &sub, 2, 44100, 0, 0, NULL, NULL); + hr = IXAudio2_CreateSubmixVoice(xa, &sub, 2, 44100, 0, 0, NULL, NULL); ok(hr == S_OK, "CreateSubmixVoice failed: %08lx\n", hr);
- if(xaudio27){ - XAUDIO27_VOICE_DETAILS details; - IXAudio27SubmixVoice_GetVoiceDetails((IXAudio27SubmixVoice*)sub, &details); - ok(details.CreationFlags == 0, "Got wrong flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - }else{ - XAUDIO2_VOICE_DETAILS details; - IXAudio2SubmixVoice_GetVoiceDetails(sub, &details); - ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); - ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - } + IXAudio2SubmixVoice_GetVoiceDetails(sub, &details); + ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); +#if XAUDIO2_VER >= 8 + ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.ActiveFlags); +#endif + ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); + ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate);
IXAudio2SubmixVoice_DestroyVoice(sub); IXAudio2MasteringVoice_DestroyVoice(master); @@ -839,7 +822,7 @@ static void test_flush(IXAudio2 *xa) XAUDIO2_BUFFER buf; XAUDIO2_VOICE_STATE state;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr); @@ -852,7 +835,7 @@ static void test_flush(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, NULL, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, NULL, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
memset(&buf, 0, sizeof(buf)); @@ -866,7 +849,7 @@ static void test_flush(IXAudio2 *xa) hr = IXAudio2SourceVoice_Start(src, 0, XAUDIO2_COMMIT_NOW); ok(hr == S_OK, "Start failed: %08lx\n", hr);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
while(1){ @@ -890,30 +873,25 @@ static void test_flush(IXAudio2 *xa) hr = IXAudio2SourceVoice_SubmitSourceBuffer(src, &buf, NULL); ok(hr == S_OK, "SubmitSourceBuffer failed: %08lx\n", hr);
- if(xaudio27){ - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - }else{ - IXAudio2SourceVoice_DestroyVoice(src); - } + IXAudio2SourceVoice_DestroyVoice(src); IXAudio2MasteringVoice_DestroyVoice(master);
HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); }
-static UINT32 test_DeviceDetails(IXAudio27 *xa) +static void test_DeviceDetails(IXAudio2 *xa) { +#if XAUDIO2_VER <= 7 HRESULT hr; XAUDIO2_DEVICE_DETAILS dd; UINT32 count, i;
- hr = IXAudio27_GetDeviceCount(xa, &count); + hr = IXAudio2_GetDeviceCount(xa, &count); ok(hr == S_OK, "GetDeviceCount failed: %08lx\n", hr); - - if(count == 0) - return 0; + ok(count > 0, "Got %u devices.\n", count);
for(i = 0; i < count; ++i){ - hr = IXAudio27_GetDeviceDetails(xa, i, &dd); + hr = IXAudio2_GetDeviceDetails(xa, i, &dd); ok(hr == S_OK, "GetDeviceDetails failed: %08lx\n", hr);
if(i == 0) @@ -924,8 +902,7 @@ static UINT32 test_DeviceDetails(IXAudio27 *xa) ok(IsEqualGUID(&dd.OutputFormat.SubFormat, &KSDATAFORMAT_SUBTYPE_PCM), "got format %s\n", debugstr_guid(&dd.OutputFormat.SubFormat)); } - - return count; +#endif }
static void test_xapo_creation_legacy(const char *module, unsigned int version) @@ -1159,10 +1136,10 @@ static void test_setchannelvolumes(IXAudio2 *xa) fmt_8ch.nAvgBytesPerSec = fmt_8ch.nSamplesPerSec * fmt_8ch.nBlockAlign; fmt_8ch.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src_2ch, &fmt_2ch, 0, 1.f, NULL, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src_2ch, &fmt_2ch, 0, 1.f, NULL, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
- XA2CALL(CreateSourceVoice, &src_8ch, &fmt_8ch, 0, 1.f, NULL, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src_8ch, &fmt_8ch, 0, 1.f, NULL, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
hr = IXAudio2SourceVoice_SetChannelVolumes(src_2ch, 2, volumes, XAUDIO2_COMMIT_NOW); @@ -1188,14 +1165,8 @@ static void test_setchannelvolumes(IXAudio2 *xa) ok(hr == XAUDIO2_E_INVALID_CALL, "SetChannelVolumes should have failed: %08lx\n", hr); }
- if(xaudio27){ - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src_2ch); - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src_8ch); - }else{ - IXAudio2SourceVoice_DestroyVoice(src_2ch); - IXAudio2SourceVoice_DestroyVoice(src_8ch); - } - + IXAudio2SourceVoice_DestroyVoice(src_2ch); + IXAudio2SourceVoice_DestroyVoice(src_8ch); IXAudio2MasteringVoice_DestroyVoice(master); }
@@ -1215,76 +1186,39 @@ static UINT32 check_has_devices(IXAudio2 *xa)
START_TEST(xaudio2) { + IXAudio2 *audio, *audio2; HRESULT hr; - IXAudio27 *xa27 = NULL; - IXAudio2 *xa = NULL; - HANDLE xa28dll; - UINT32 has_devices; - ULONG rc; + ULONG ref;
CoInitialize(NULL);
- xa28dll = LoadLibraryA("xaudio2_8.dll"); - if(xa28dll){ - pXAudio2Create = (void*)GetProcAddress(xa28dll, "XAudio2Create"); - pCreateAudioVolumeMeter = (void*)GetProcAddress(xa28dll, "CreateAudioVolumeMeter"); - } - test_xapo_creation();
- /* XAudio 2.7 (Jun 2010 DirectX) */ - hr = CoCreateInstance(&CLSID_XAudio27, NULL, CLSCTX_INPROC_SERVER, - &IID_IXAudio27, (void**)&xa27); - if(hr == S_OK){ - xaudio27 = TRUE; - - hr = IXAudio27_QueryInterface(xa27, &IID_IXAudio28, (void**) &xa); - ok(hr != S_OK, "QueryInterface with IID_IXAudio28 on IXAudio27 object returned success. Expected to fail\n"); - - hr = IXAudio27_Initialize(xa27, 0, XAUDIO2_ANY_PROCESSOR); - ok(hr == S_OK, "Initialize failed: %08lx\n", hr); - - has_devices = test_DeviceDetails(xa27); - if(has_devices){ - test_simple_streaming((IXAudio2*)xa27); - test_buffer_callbacks((IXAudio2*)xa27); - test_looping((IXAudio2*)xa27); - test_submix((IXAudio2*)xa27); - test_flush((IXAudio2*)xa27); - test_setchannelvolumes((IXAudio2*)xa27); - }else - skip("No audio devices available\n"); - - rc = IXAudio27_Release(xa27); - ok(rc == 0, "IXAudio2.7 object should have been released, got refcount %lu\n", rc); - }else - win_skip("XAudio 2.7 not available\n"); - - /* XAudio 2.8 (Win8+) */ - if(pXAudio2Create){ - xaudio27 = FALSE; - - hr = pXAudio2Create(&xa, 0, XAUDIO2_DEFAULT_PROCESSOR); - ok(hr == S_OK, "XAudio2Create failed: %08lx\n", hr); - - hr = IXAudio2_QueryInterface(xa, &IID_IXAudio27, (void**)&xa27); - ok(hr == E_NOINTERFACE, "XA28 object should support IXAudio27, gave: %08lx\n", hr); - - has_devices = check_has_devices(xa); - if(has_devices){ - test_simple_streaming(xa); - test_buffer_callbacks(xa); - test_looping(xa); - test_submix(xa); - test_flush(xa); - test_setchannelvolumes(xa); - }else - skip("No audio devices available\n"); - - rc = IXAudio2_Release(xa); - ok(rc == 0, "IXAudio2 object should have been released, got refcount %lu\n", rc); - }else - win_skip("XAudio 2.8 not available\n"); + audio = create_xaudio2(); + + hr = IXAudio2_QueryInterface(audio, &IID_IXAudio27, (void **)&audio2); + ok(hr == (xaudio27 ? S_OK : E_NOINTERFACE), "Got hr %#lx.\n", hr); + if (hr == S_OK) + IXAudio2_Release(audio2); + hr = IXAudio2_QueryInterface(audio, &IID_IXAudio28, (void **)&audio2); + todo_wine_if (!xaudio27) + ok(hr == (xaudio27 ? E_NOINTERFACE : S_OK), "Got hr %#lx.\n", hr); + if (hr == S_OK) + IXAudio2_Release(audio2); + + if (check_has_devices(audio)) + { + test_DeviceDetails(audio); + test_simple_streaming(audio); + test_buffer_callbacks(audio); + test_looping(audio); + test_submix(audio); + test_flush(audio); + test_setchannelvolumes(audio); + } + + ref = IXAudio2_Release(audio); + ok(!ref, "Got unexpected refcount %lu.\n", ref);
CoUninitialize(); } diff --git a/dlls/xaudio2_7/tests/xaudio_classes.idl b/dlls/xaudio2_7/tests/xaudio_classes.idl new file mode 100644 index 00000000000..eb9967b6cb2 --- /dev/null +++ b/dlls/xaudio2_7/tests/xaudio_classes.idl @@ -0,0 +1,24 @@ +/* + * COM Classes for xaudio + * + * Copyright 2015 Guillaume Charifi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#pragma makedep header + +#include "xaudio2.idl" +#include "xaudio2fx.idl" diff --git a/dlls/xaudio2_7/xapo.c b/dlls/xaudio2_7/xapo.c index c8c323ff78a..2772fff9e66 100644 --- a/dlls/xaudio2_7/xapo.c +++ b/dlls/xaudio2_7/xapo.c @@ -24,7 +24,6 @@ #define COBJMACROS
#include "xaudio_private.h" -#include "xaudio2fx.h" #include "xapofx.h"
#include "wine/debug.h" @@ -366,11 +365,11 @@ static HRESULT WINAPI xapocf_CreateInstance(IClassFactory *iface, IUnknown *pOut return CLASS_E_NOAGGREGATION;
#if XAUDIO2_VER < 8 && !defined(XAPOFX1_VER) - if (IsEqualGUID(This->class, &CLSID_AudioVolumeMeter27)) + if (IsEqualGUID(This->class, &CLSID_AudioVolumeMeter)) { hr = volume_meter_create(&object); } - else if (IsEqualGUID(This->class, &CLSID_AudioReverb27)) + else if (IsEqualGUID(This->class, &CLSID_AudioReverb)) { hr = reverb_create(&object); } diff --git a/dlls/xaudio2_7/xaudio_classes.idl b/dlls/xaudio2_7/xaudio_classes.idl index 17a59c35ccb..a8dc5fdb148 100644 --- a/dlls/xaudio2_7/xaudio_classes.idl +++ b/dlls/xaudio2_7/xaudio_classes.idl @@ -18,188 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#pragma makedep header #pragma makedep register
-#if XAUDIO2_VER == 7 -[ - helpstring("XAudio2 Class"), - threading(both), - uuid(5a508685-a254-4fba-9b82-9a24b00306af) -] -coclass XAudio27 { interface IXAudio27; } - -[ - helpstring("XAudio2 Volume Meter Class"), - threading(both), - uuid(cac1105f-619b-4d04-831a-44e1cbf12d57) -] -coclass AudioVolumeMeter { interface IUnknown; } - -[ - helpstring("XAudio2 Reverb Class"), - threading(both), - uuid(6a93130e-1d53-41d1-a9cf-e758800bb179) -] -coclass AudioReverb { interface IUnknown; } -#endif /* XAUDIO2_VER == 7 */ - -#if XAUDIO2_VER == 6 -[ - helpstring("XAudio2.6 Class"), - threading(both), - uuid(3eda9b49-2085-498b-9bb2-39a6778493de) -] -coclass XAudio26 { interface IXAudio27; } - -[ - helpstring("XAudio2.6 AudioReverb Class"), - threading(both), - uuid(cecec95a-d894-491a-bee3-5e106fb59f2d) -] -coclass AudioReverb26 { interface IXAPO; } - -[ - helpstring("XAudio2.6 AudioVolumeMeter Class"), - threading(both), - uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27) -] -coclass AudioVolumeMeter26 { interface IXAPO; } -#endif /* XAUDIO2_VER == 6 */ - -#if XAUDIO2_VER == 5 -[ - helpstring("XAudio2.5 Class"), - threading(both), - uuid(4c9b6dde-6809-46e6-a278-9b6a97588670) -] -coclass XAudio25 { interface IXAudio27; } - -[ - helpstring("XAudio2.5 AudioReverb Class"), - threading(both), - uuid(d06df0d0-8518-441e-822f-5451d5c595b8) -] -coclass AudioReverb25 { interface IXAPO; } - -[ - helpstring("XAudio2.5 AudioVolumeMeter Class"), - threading(both), - uuid(2139e6da-c341-4774-9ac3-b4e026347f64) -] -coclass AudioVolumeMeter25 { interface IXAPO; } -#endif /* XAUDIO2_VER == 5 */ - -#if XAUDIO2_VER == 4 -[ - helpstring("XAudio2.4 Class"), - threading(both), - uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526) -] -coclass XAudio24 { interface IXAudio27; } - -[ - helpstring("XAudio2.4 AudioReverb Class"), - threading(both), - uuid(8bb7778b-645b-4475-9a73-1de3170bd3af) -] -coclass AudioReverb24 { interface IXAPO; } - -[ - helpstring("XAudio2.4 AudioVolumeMeter Class"), - threading(both), - uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c) -] -coclass AudioVolumeMeter24 { interface IXAPO; } -#endif /* XAUDIO2_VER == 4 */ - -#if XAUDIO2_VER == 3 -[ - helpstring("XAudio2.3 Class"), - threading(both), - uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d) -] -coclass XAudio23 { interface IXAudio27; } - -[ - helpstring("XAudio2.3 AudioReverb Class"), - threading(both), - uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c) -] -coclass AudioReverb23 { interface IXAPO; } - -[ - helpstring("XAudio2.3 AudioVolumeMeter Class"), - threading(both), - uuid(e180344b-ac83-4483-959e-18a5c56a5e19) -] -coclass AudioVolumeMeter23 { interface IXAPO; } -#endif /* XAUDIO2_VER == 3 */ - -#if XAUDIO2_VER == 2 -[ - helpstring("XAudio2.2 Class"), - threading(both), - uuid(b802058a-464a-42db-bc10-b650d6f2586a) -] -coclass XAudio22 { interface IXAudio22; } - -[ - helpstring("XAudio2.2 AudioReverb Class"), - threading(both), - uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51) -] -coclass AudioReverb22 { interface IXAPO; } - -[ - helpstring("XAudio2.2 AudioVolumeMeter Class"), - threading(both), - uuid(f5ca7b34-8055-42c0-b836-216129eb7e30) -] -coclass AudioVolumeMeter22 { interface IXAPO; } -#endif /* XAUDIO2_VER == 2 */ - -#if XAUDIO2_VER == 1 -[ - helpstring("XAudio2.1 Class"), - threading(both), - uuid(e21a7345-eb21-468e-be50-804db97cf708) -] -coclass XAudio21 { interface IXAudio22; } - -[ - helpstring("XAudio2.1 AudioReverb Class"), - threading(both), - uuid(f4769300-b949-4df9-b333-00d33932e9a6) -] -coclass AudioReverb21 { interface IXAPO; } - -[ - helpstring("XAudio2.1 AudioVolumeMeter Class"), - threading(both), - uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1) -] -coclass AudioVolumeMeter21 { interface IXAPO; } -#endif /* XAUDIO2_VER == 1 */ - -#if XAUDIO2_VER == 0 -[ - helpstring("XAudio2.0 Class"), - threading(both), - uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) -] -coclass XAudio20 { interface IXAudio20; } - -[ - helpstring("XAudio2.0 AudioReverb Class"), - threading(both), - uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063) -] -coclass AudioReverb20 { interface IXAPO; } - -[ - helpstring("XAudio2.0 AudioVolumeMeter Class"), - threading(both), - uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) -] -coclass AudioVolumeMeter20 { interface IXAPO; } -#endif /* XAUDIO2_VER == 0 */ +#include "xaudio2.idl" +#include "xaudio2fx.idl" diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c index ab759b678a9..5b9513b3ab0 100644 --- a/dlls/xaudio2_7/xaudio_dll.c +++ b/dlls/xaudio2_7/xaudio_dll.c @@ -29,7 +29,6 @@
#include "initguid.h" #include "xaudio_private.h" -#include "xaudio2fx.h" #if XAUDIO2_VER >= 8 #include "xapofx.h" #endif @@ -346,6 +345,16 @@ static FAudioVoiceSends *wrap_voice_sends(const XAUDIO2_VOICE_SENDS *sends) if(!sends) return NULL;
+#if XAUDIO2_VER <= 3 + ret = heap_alloc(sizeof(*ret) + sends->OutputCount * sizeof(FAudioSendDescriptor)); + ret->SendCount = sends->OutputCount; + ret->pSends = (FAudioSendDescriptor*)(ret + 1); + for(i = 0; i < sends->OutputCount; ++i){ + XA2VoiceImpl *voice = impl_from_IXAudio2Voice(sends->pOutputVoices[i]); + ret->pSends[i].pOutputVoice = voice->faudio_voice; + ret->pSends[i].Flags = 0; + } +#else ret = heap_alloc(sizeof(*ret) + sends->SendCount * sizeof(FAudioSendDescriptor)); ret->SendCount = sends->SendCount; ret->pSends = (FAudioSendDescriptor*)(ret + 1); @@ -354,6 +363,7 @@ static FAudioVoiceSends *wrap_voice_sends(const XAUDIO2_VOICE_SENDS *sends) ret->pSends[i].pOutputVoice = voice->faudio_voice; ret->pSends[i].Flags = sends->pSends[i].Flags; } +#endif return ret; }
@@ -377,11 +387,11 @@ static void FAUDIOCALL XA2VCB_OnVoiceProcessingPassStart(FAudioVoiceCallback *if XA2VoiceImpl *This = impl_from_FAudioVoiceCallback(iface); TRACE("%p\n", This); if(This->cb) -#if XAUDIO2_VER == 0 - IXAudio20VoiceCallback_OnVoiceProcessingPassStart((IXAudio20VoiceCallback*)This->cb); -#else - IXAudio2VoiceCallback_OnVoiceProcessingPassStart(This->cb, BytesRequired); + IXAudio2VoiceCallback_OnVoiceProcessingPassStart(This->cb +#if XAUDIO2_VER > 0 + , BytesRequired #endif + ); }
static void FAUDIOCALL XA2VCB_OnVoiceProcessingPassEnd(FAudioVoiceCallback *iface) @@ -497,6 +507,21 @@ static inline void destroy_voice(XA2VoiceImpl *This) This->in_use = FALSE; }
+static void get_voice_details(XA2VoiceImpl *voice, XAUDIO2_VOICE_DETAILS *details) +{ + FAudioVoiceDetails faudio_details; + + TRACE("%p, %p\n", voice, details); + + FAudioVoice_GetVoiceDetails(voice->faudio_voice, &faudio_details); + details->CreationFlags = faudio_details.CreationFlags; +#if XAUDIO2_VER >= 8 + details->ActiveFlags = faudio_details.ActiveFlags; +#endif + details->InputChannels = faudio_details.InputChannels; + details->InputSampleRate = faudio_details.InputSampleRate; +} + /* Source Voices */
static inline XA2VoiceImpl *impl_from_IXAudio2SourceVoice(IXAudio2SourceVoice *iface) @@ -504,12 +529,11 @@ static inline XA2VoiceImpl *impl_from_IXAudio2SourceVoice(IXAudio2SourceVoice *i return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio2SourceVoice_iface); }
-static void WINAPI XA2SRC_GetVoiceDetails(IXAudio2SourceVoice *iface, - XAUDIO2_VOICE_DETAILS *pVoiceDetails) +static void WINAPI XA2SRC_GetVoiceDetails(IXAudio2SourceVoice *iface, XAUDIO2_VOICE_DETAILS *details) { - XA2VoiceImpl *This = impl_from_IXAudio2SourceVoice(iface); - TRACE("%p, %p\n", This, pVoiceDetails); - FAudioVoice_GetVoiceDetails(This->faudio_voice, (FAudioVoiceDetails *)pVoiceDetails); + XA2VoiceImpl *voice = impl_from_IXAudio2SourceVoice(iface); + + get_voice_details(voice, details); }
static HRESULT WINAPI XA2SRC_SetOutputVoices(IXAudio2SourceVoice *iface, @@ -608,6 +632,7 @@ static void WINAPI XA2SRC_GetFilterParameters(IXAudio2SourceVoice *iface, FAudioVoice_GetFilterParameters(This->faudio_voice, (FAudioFilterParameters *)pParameters); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2SRC_SetOutputFilterParameters(IXAudio2SourceVoice *iface, IXAudio2Voice *pDestinationVoice, const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) @@ -633,6 +658,7 @@ static void WINAPI XA2SRC_GetOutputFilterParameters(IXAudio2SourceVoice *iface, FAudioVoice_GetOutputFilterParameters(This->faudio_voice, dst ? dst->faudio_voice : NULL, (FAudioFilterParameters *)pParameters); } +#endif
static HRESULT WINAPI XA2SRC_SetVolume(IXAudio2SourceVoice *iface, float Volume, UINT32 OperationSet) @@ -682,7 +708,12 @@ static HRESULT WINAPI XA2SRC_SetOutputMatrix(IXAudio2SourceVoice *iface, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet); }
-static void WINAPI XA2SRC_GetOutputMatrix(IXAudio2SourceVoice *iface, +#if XAUDIO2_VER == 0 + static HRESULT +#else + static void +#endif +WINAPI XA2SRC_GetOutputMatrix(IXAudio2SourceVoice *iface, IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels, float *pLevelMatrix) { @@ -694,6 +725,9 @@ static void WINAPI XA2SRC_GetOutputMatrix(IXAudio2SourceVoice *iface,
FAudioVoice_GetOutputMatrix(This->faudio_voice, dst ? dst->faudio_voice : NULL, SourceChannels, DestinationChannels, pLevelMatrix); +#if XAUDIO2_VER == 0 + return S_OK; +#endif }
static void WINAPI XA2SRC_DestroyVoice(IXAudio2SourceVoice *iface) @@ -766,10 +800,16 @@ static HRESULT WINAPI XA2SRC_ExitLoop(IXAudio2SourceVoice *iface, UINT32 Operati return FAudioSourceVoice_ExitLoop(This->faudio_voice, OperationSet); }
-static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState, UINT32 Flags) +#if XAUDIO2_VER >= 8 +static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface, XAUDIO2_VOICE_STATE *pVoiceState, UINT32 Flags) +#else +static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface, XAUDIO2_VOICE_STATE *pVoiceState) +#endif { XA2VoiceImpl *This = impl_from_IXAudio2SourceVoice(iface); +#if XAUDIO2_VER < 8 + UINT32 Flags = 0; +#endif
TRACE("%p, %p, 0x%x\n", This, pVoiceState, Flags);
@@ -795,6 +835,7 @@ static void WINAPI XA2SRC_GetFrequencyRatio(IXAudio2SourceVoice *iface, float *p return FAudioSourceVoice_GetFrequencyRatio(This->faudio_voice, pRatio); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2SRC_SetSourceSampleRate( IXAudio2SourceVoice *iface, UINT32 NewSourceSampleRate) @@ -805,6 +846,7 @@ static HRESULT WINAPI XA2SRC_SetSourceSampleRate(
return FAudioSourceVoice_SetSourceSampleRate(This->faudio_voice, NewSourceSampleRate); } +#endif
static const IXAudio2SourceVoiceVtbl XAudio2SourceVoice_Vtbl = { XA2SRC_GetVoiceDetails, @@ -817,8 +859,10 @@ static const IXAudio2SourceVoiceVtbl XAudio2SourceVoice_Vtbl = { XA2SRC_GetEffectParameters, XA2SRC_SetFilterParameters, XA2SRC_GetFilterParameters, +#if XAUDIO2_VER >= 4 XA2SRC_SetOutputFilterParameters, XA2SRC_GetOutputFilterParameters, +#endif XA2SRC_SetVolume, XA2SRC_GetVolume, XA2SRC_SetChannelVolumes, @@ -835,7 +879,9 @@ static const IXAudio2SourceVoiceVtbl XAudio2SourceVoice_Vtbl = { XA2SRC_GetState, XA2SRC_SetFrequencyRatio, XA2SRC_GetFrequencyRatio, +#if XAUDIO2_VER >= 4 XA2SRC_SetSourceSampleRate +#endif };
/* Submix Voices */ @@ -845,12 +891,11 @@ static inline XA2VoiceImpl *impl_from_IXAudio2SubmixVoice(IXAudio2SubmixVoice *i return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio2SubmixVoice_iface); }
-static void WINAPI XA2SUB_GetVoiceDetails(IXAudio2SubmixVoice *iface, - XAUDIO2_VOICE_DETAILS *pVoiceDetails) +static void WINAPI XA2SUB_GetVoiceDetails(IXAudio2SubmixVoice *iface, XAUDIO2_VOICE_DETAILS *details) { - XA2VoiceImpl *This = impl_from_IXAudio2SubmixVoice(iface); - TRACE("%p, %p\n", This, pVoiceDetails); - FAudioVoice_GetVoiceDetails(This->faudio_voice, (FAudioVoiceDetails *)pVoiceDetails); + XA2VoiceImpl *voice = impl_from_IXAudio2SubmixVoice(iface); + + get_voice_details(voice, details); }
static HRESULT WINAPI XA2SUB_SetOutputVoices(IXAudio2SubmixVoice *iface, @@ -949,6 +994,7 @@ static void WINAPI XA2SUB_GetFilterParameters(IXAudio2SubmixVoice *iface, FAudioVoice_GetFilterParameters(This->faudio_voice, (FAudioFilterParameters *)pParameters); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2SUB_SetOutputFilterParameters(IXAudio2SubmixVoice *iface, IXAudio2Voice *pDestinationVoice, const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) @@ -974,6 +1020,7 @@ static void WINAPI XA2SUB_GetOutputFilterParameters(IXAudio2SubmixVoice *iface, FAudioVoice_GetOutputFilterParameters(This->faudio_voice, dst ? dst->faudio_voice : NULL, (FAudioFilterParameters *)pParameters); } +#endif
static HRESULT WINAPI XA2SUB_SetVolume(IXAudio2SubmixVoice *iface, float Volume, UINT32 OperationSet) @@ -1023,7 +1070,12 @@ static HRESULT WINAPI XA2SUB_SetOutputMatrix(IXAudio2SubmixVoice *iface, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet); }
-static void WINAPI XA2SUB_GetOutputMatrix(IXAudio2SubmixVoice *iface, +#if XAUDIO2_VER == 0 + static HRESULT +#else + static void +#endif +WINAPI XA2SUB_GetOutputMatrix(IXAudio2SubmixVoice *iface, IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels, float *pLevelMatrix) { @@ -1035,6 +1087,9 @@ static void WINAPI XA2SUB_GetOutputMatrix(IXAudio2SubmixVoice *iface,
FAudioVoice_GetOutputMatrix(This->faudio_voice, dst ? dst->faudio_voice : NULL, SourceChannels, DestinationChannels, pLevelMatrix); +#if XAUDIO2_VER == 0 + return S_OK; +#endif }
static void WINAPI XA2SUB_DestroyVoice(IXAudio2SubmixVoice *iface) @@ -1061,8 +1116,10 @@ static const struct IXAudio2SubmixVoiceVtbl XAudio2SubmixVoice_Vtbl = { XA2SUB_GetEffectParameters, XA2SUB_SetFilterParameters, XA2SUB_GetFilterParameters, +#if XAUDIO2_VER >= 4 XA2SUB_SetOutputFilterParameters, XA2SUB_GetOutputFilterParameters, +#endif XA2SUB_SetVolume, XA2SUB_GetVolume, XA2SUB_SetChannelVolumes, @@ -1079,12 +1136,11 @@ static inline XA2VoiceImpl *impl_from_IXAudio2MasteringVoice(IXAudio2MasteringVo return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio2MasteringVoice_iface); }
-static void WINAPI XA2M_GetVoiceDetails(IXAudio2MasteringVoice *iface, - XAUDIO2_VOICE_DETAILS *pVoiceDetails) +static void WINAPI XA2M_GetVoiceDetails(IXAudio2MasteringVoice *iface, XAUDIO2_VOICE_DETAILS *details) { - XA2VoiceImpl *This = impl_from_IXAudio2MasteringVoice(iface); - TRACE("%p, %p\n", This, pVoiceDetails); - FAudioVoice_GetVoiceDetails(This->faudio_voice, (FAudioVoiceDetails *)pVoiceDetails); + XA2VoiceImpl *voice = impl_from_IXAudio2MasteringVoice(iface); + + get_voice_details(voice, details); }
static HRESULT WINAPI XA2M_SetOutputVoices(IXAudio2MasteringVoice *iface, @@ -1183,6 +1239,7 @@ static void WINAPI XA2M_GetFilterParameters(IXAudio2MasteringVoice *iface, FAudioVoice_GetFilterParameters(This->faudio_voice, (FAudioFilterParameters *)pParameters); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2M_SetOutputFilterParameters(IXAudio2MasteringVoice *iface, IXAudio2Voice *pDestinationVoice, const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) @@ -1208,6 +1265,7 @@ static void WINAPI XA2M_GetOutputFilterParameters(IXAudio2MasteringVoice *iface, FAudioVoice_GetOutputFilterParameters(This->faudio_voice, dst ? dst->faudio_voice : NULL, (FAudioFilterParameters *)pParameters); } +#endif
static HRESULT WINAPI XA2M_SetVolume(IXAudio2MasteringVoice *iface, float Volume, UINT32 OperationSet) @@ -1257,7 +1315,12 @@ static HRESULT WINAPI XA2M_SetOutputMatrix(IXAudio2MasteringVoice *iface, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet); }
-static void WINAPI XA2M_GetOutputMatrix(IXAudio2MasteringVoice *iface, +#if XAUDIO2_VER == 0 + static HRESULT +#else + static void +#endif +WINAPI XA2M_GetOutputMatrix(IXAudio2MasteringVoice *iface, IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels, float *pLevelMatrix) { @@ -1269,6 +1332,9 @@ static void WINAPI XA2M_GetOutputMatrix(IXAudio2MasteringVoice *iface,
FAudioVoice_GetOutputMatrix(This->faudio_voice, dst ? dst->faudio_voice : NULL, SourceChannels, DestinationChannels, pLevelMatrix); +#if XAUDIO2_VER == 0 + return S_OK; +#endif }
static void WINAPI XA2M_DestroyVoice(IXAudio2MasteringVoice *iface) @@ -1284,6 +1350,7 @@ static void WINAPI XA2M_DestroyVoice(IXAudio2MasteringVoice *iface) LeaveCriticalSection(&This->lock); }
+#if XAUDIO2_VER >= 8 static void WINAPI XA2M_GetChannelMask(IXAudio2MasteringVoice *iface, DWORD *pChannelMask) { @@ -1293,6 +1360,7 @@ static void WINAPI XA2M_GetChannelMask(IXAudio2MasteringVoice *iface,
FAudioMasteringVoice_GetChannelMask(This->faudio_voice, (uint32_t *)pChannelMask); } +#endif
static const struct IXAudio2MasteringVoiceVtbl XAudio2MasteringVoice_Vtbl = { XA2M_GetVoiceDetails, @@ -1305,8 +1373,10 @@ static const struct IXAudio2MasteringVoiceVtbl XAudio2MasteringVoice_Vtbl = { XA2M_GetEffectParameters, XA2M_SetFilterParameters, XA2M_GetFilterParameters, +#if XAUDIO2_VER >= 4 XA2M_SetOutputFilterParameters, XA2M_GetOutputFilterParameters, +#endif XA2M_SetVolume, XA2M_GetVolume, XA2M_SetChannelVolumes, @@ -1314,7 +1384,9 @@ static const struct IXAudio2MasteringVoiceVtbl XAudio2MasteringVoice_Vtbl = { XA2M_SetOutputMatrix, XA2M_GetOutputMatrix, XA2M_DestroyVoice, +#if XAUDIO2_VER >= 8 XA2M_GetChannelMask +#endif };
/* More Common Voice Functions */ @@ -1327,28 +1399,6 @@ static XA2VoiceImpl *impl_from_IXAudio2Voice(IXAudio2Voice *iface) return impl_from_IXAudio2MasteringVoice((IXAudio2MasteringVoice*)iface); if(iface->lpVtbl == (void*)&XAudio2SubmixVoice_Vtbl) return impl_from_IXAudio2SubmixVoice((IXAudio2SubmixVoice*)iface); -#if XAUDIO2_VER == 0 - if(iface->lpVtbl == (void*)&XAudio20SourceVoice_Vtbl) - return impl_from_IXAudio20SourceVoice((IXAudio20SourceVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio20SubmixVoice_Vtbl) - return impl_from_IXAudio20SubmixVoice((IXAudio20SubmixVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio20MasteringVoice_Vtbl) - return impl_from_IXAudio20MasteringVoice((IXAudio20MasteringVoice*)iface); -#elif XAUDIO2_VER <= 3 - if(iface->lpVtbl == (void*)&XAudio23SourceVoice_Vtbl) - return impl_from_IXAudio23SourceVoice((IXAudio23SourceVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio23SubmixVoice_Vtbl) - return impl_from_IXAudio23SubmixVoice((IXAudio23SubmixVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio23MasteringVoice_Vtbl) - return impl_from_IXAudio23MasteringVoice((IXAudio23MasteringVoice*)iface); -#elif XAUDIO2_VER <= 7 - if(iface->lpVtbl == (void*)&XAudio27SourceVoice_Vtbl) - return impl_from_IXAudio27SourceVoice((IXAudio27SourceVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio27SubmixVoice_Vtbl) - return impl_from_IXAudio27SubmixVoice((IXAudio27SubmixVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio27MasteringVoice_Vtbl) - return impl_from_IXAudio27MasteringVoice((IXAudio27MasteringVoice*)iface); -#endif ERR("invalid IXAudio2Voice pointer: %p\n", iface); return NULL; } @@ -1368,25 +1418,9 @@ static HRESULT WINAPI IXAudio2Impl_QueryInterface(IXAudio2 *iface, REFIID riid, TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
if(IsEqualGUID(riid, &IID_IUnknown) || -#if XAUDIO2_VER == 8 - IsEqualGUID(riid, &IID_IXAudio28) || -#endif IsEqualGUID(riid, &IID_IXAudio2)) *ppvObject = &This->IXAudio2_iface; - else if(IsEqualGUID(riid, &IID_IXAudio27)){ - /* all xaudio versions before 28 share an IID */ -#if XAUDIO2_VER == 0 - *ppvObject = &This->IXAudio20_iface; -#elif XAUDIO2_VER <= 2 - *ppvObject = &This->IXAudio22_iface; -#elif XAUDIO2_VER <= 3 - *ppvObject = &This->IXAudio23_iface; -#elif XAUDIO2_VER <= 7 - *ppvObject = &This->IXAudio27_iface; -#else - *ppvObject = NULL; -#endif - }else + else *ppvObject = NULL;
if(*ppvObject){ @@ -1433,6 +1467,36 @@ static ULONG WINAPI IXAudio2Impl_Release(IXAudio2 *iface) return ref; }
+#if XAUDIO2_VER <= 7 +static HRESULT WINAPI IXAudio2Impl_GetDeviceCount(IXAudio2 *iface, UINT32 *count) +{ + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + + TRACE("%p, %p\n", audio, count); + + return FAudio_GetDeviceCount(audio->faudio, count); +} + +static HRESULT WINAPI IXAudio2Impl_GetDeviceDetails(IXAudio2 *iface, UINT32 index, + XAUDIO2_DEVICE_DETAILS *details) +{ + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + + TRACE("%p, %u, %p\n", audio, index, details); + + return FAudio_GetDeviceDetails(audio->faudio, index, (FAudioDeviceDetails *)details); +} + +static HRESULT WINAPI IXAudio2Impl_Initialize(IXAudio2 *iface, UINT32 flags, XAUDIO2_PROCESSOR processor) +{ + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + + TRACE("%p, %#x, %#x\n", audio, flags, processor); + + return xaudio2_initialize(audio, flags, processor); +} +#endif + static HRESULT WINAPI IXAudio2Impl_RegisterForCallbacks(IXAudio2 *iface, IXAudio2EngineCallback *pCallback) { @@ -1501,23 +1565,7 @@ static inline XA2VoiceImpl *create_voice(IXAudio2Impl *This) list_add_head(&This->voices, &voice->entry);
voice->IXAudio2SourceVoice_iface.lpVtbl = &XAudio2SourceVoice_Vtbl; -#if XAUDIO2_VER == 0 - voice->IXAudio20SourceVoice_iface.lpVtbl = &XAudio20SourceVoice_Vtbl; -#elif XAUDIO2_VER <= 3 - voice->IXAudio23SourceVoice_iface.lpVtbl = &XAudio23SourceVoice_Vtbl; -#elif XAUDIO2_VER <= 7 - voice->IXAudio27SourceVoice_iface.lpVtbl = &XAudio27SourceVoice_Vtbl; -#endif - voice->IXAudio2SubmixVoice_iface.lpVtbl = &XAudio2SubmixVoice_Vtbl; -#if XAUDIO2_VER == 0 - voice->IXAudio20SubmixVoice_iface.lpVtbl = &XAudio20SubmixVoice_Vtbl; -#elif XAUDIO2_VER <= 3 - voice->IXAudio23SubmixVoice_iface.lpVtbl = &XAudio23SubmixVoice_Vtbl; -#elif XAUDIO2_VER <= 7 - voice->IXAudio27SubmixVoice_iface.lpVtbl = &XAudio27SubmixVoice_Vtbl; -#endif - voice->FAudioVoiceCallback_vtbl = FAudioVoiceCallback_Vtbl;
InitializeCriticalSection(&voice->lock); @@ -1574,15 +1622,7 @@ static HRESULT WINAPI IXAudio2Impl_CreateSourceVoice(IXAudio2 *iface,
LeaveCriticalSection(&src->lock);
-#if XAUDIO2_VER == 0 - *ppSourceVoice = (IXAudio2SourceVoice*)&src->IXAudio20SourceVoice_iface; -#elif XAUDIO2_VER <= 3 - *ppSourceVoice = (IXAudio2SourceVoice*)&src->IXAudio23SourceVoice_iface; -#elif XAUDIO2_VER <= 7 - *ppSourceVoice = (IXAudio2SourceVoice*)&src->IXAudio27SourceVoice_iface; -#else *ppSourceVoice = &src->IXAudio2SourceVoice_iface; -#endif
TRACE("Created source voice: %p\n", src);
@@ -1635,15 +1675,7 @@ static HRESULT WINAPI IXAudio2Impl_CreateSubmixVoice(IXAudio2 *iface,
LeaveCriticalSection(&sub->lock);
-#if XAUDIO2_VER == 0 - *ppSubmixVoice = (IXAudio2SubmixVoice*)&sub->IXAudio20SubmixVoice_iface; -#elif XAUDIO2_VER <= 3 - *ppSubmixVoice = (IXAudio2SubmixVoice*)&sub->IXAudio23SubmixVoice_iface; -#elif XAUDIO2_VER <= 7 - *ppSubmixVoice = (IXAudio2SubmixVoice*)&sub->IXAudio27SubmixVoice_iface; -#else *ppSubmixVoice = &sub->IXAudio2SubmixVoice_iface; -#endif
TRACE("Created submix voice: %p\n", sub);
@@ -1652,23 +1684,25 @@ static HRESULT WINAPI IXAudio2Impl_CreateSubmixVoice(IXAudio2 *iface,
static HRESULT WINAPI IXAudio2Impl_CreateMasteringVoice(IXAudio2 *iface, IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, const WCHAR *deviceId, - const XAUDIO2_EFFECT_CHAIN *pEffectChain, - AUDIO_STREAM_CATEGORY streamCategory) + UINT32 inputSampleRate, UINT32 flags, +#if XAUDIO2_VER >= 8 + const WCHAR *deviceId, +#else + UINT32 index, +#endif + const XAUDIO2_EFFECT_CHAIN *pEffectChain +#if XAUDIO2_VER >= 8 + , AUDIO_STREAM_CATEGORY streamCategory +#endif + ) { IXAudio2Impl *This = impl_from_IXAudio2(iface);
- TRACE("(%p)->(%p, %u, %u, 0x%x, %s, %p, 0x%x)\n", This, - ppMasteringVoice, inputChannels, inputSampleRate, flags, - wine_dbgstr_w(deviceId), pEffectChain, streamCategory); + TRACE("(%p)->(%p, %u, %u, 0x%x, %p)\n", This, + ppMasteringVoice, inputChannels, inputSampleRate, flags, pEffectChain);
EnterCriticalSection(&This->lock);
- /* Note that we don't have paths for each XAUDIO2_VER here. - * All versions < 8 have a very different CreateMasteringVoice, so we - * implement those separately in compat.c. - * -flibit - */ *ppMasteringVoice = &This->mst.IXAudio2MasteringVoice_iface;
EnterCriticalSection(&This->mst.lock); @@ -1683,9 +1717,18 @@ static HRESULT WINAPI IXAudio2Impl_CreateMasteringVoice(IXAudio2 *iface,
This->mst.effect_chain = wrap_effect_chain(pEffectChain);
+#if XAUDIO2_VER >= 8 + TRACE("device id %s, category %#x\n", debugstr_w(deviceId), streamCategory); + FAudio_CreateMasteringVoice8(This->faudio, &This->mst.faudio_voice, inputChannels, inputSampleRate, flags, NULL /* TODO: (uint16_t*)deviceId */, This->mst.effect_chain, (FAudioStreamCategory)streamCategory); +#else + TRACE("device index %u\n", index); + + FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, + inputSampleRate, flags, index, This->mst.effect_chain); +#endif
This->mst.in_use = TRUE;
@@ -1722,14 +1765,38 @@ static HRESULT WINAPI IXAudio2Impl_CommitChanges(IXAudio2 *iface, return FAudio_CommitOperationSet(This->faudio, operationSet); }
-static void WINAPI IXAudio2Impl_GetPerformanceData(IXAudio2 *iface, - XAUDIO2_PERFORMANCE_DATA *pPerfData) +static void WINAPI IXAudio2Impl_GetPerformanceData(IXAudio2 *iface, XAUDIO2_PERFORMANCE_DATA *data) { - IXAudio2Impl *This = impl_from_IXAudio2(iface); + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + FAudioPerformanceData faudio_data;
- TRACE("(%p)->(%p)\n", This, pPerfData); + TRACE("(%p)->(%p)\n", audio, data);
- FAudio_GetPerformanceData(This->faudio, (FAudioPerformanceData *)pPerfData); + FAudio_GetPerformanceData(audio->faudio, &faudio_data); + + data->AudioCyclesSinceLastQuery = faudio_data.AudioCyclesSinceLastQuery; + data->TotalCyclesSinceLastQuery = faudio_data.TotalCyclesSinceLastQuery; + data->MinimumCyclesPerQuantum = faudio_data.MinimumCyclesPerQuantum; + data->MaximumCyclesPerQuantum = faudio_data.MaximumCyclesPerQuantum; + data->MemoryUsageInBytes = faudio_data.MemoryUsageInBytes; + data->CurrentLatencyInSamples = faudio_data.CurrentLatencyInSamples; +#if XAUDIO2_VER == 0 + data->GlitchesSinceLastQuery = faudio_data.GlitchesSinceEngineStarted - audio->last_query_glitches; + audio->last_query_glitches = faudio_data.GlitchesSinceEngineStarted; +#else + data->GlitchesSinceEngineStarted = faudio_data.GlitchesSinceEngineStarted; +#endif + data->ActiveSourceVoiceCount = faudio_data.ActiveSourceVoiceCount; + data->TotalSourceVoiceCount = faudio_data.TotalSourceVoiceCount; + data->ActiveSubmixVoiceCount = faudio_data.ActiveSubmixVoiceCount; +#if XAUDIO2_VER <= 2 + data->TotalSubmixVoiceCount = faudio_data.ActiveSubmixVoiceCount; +#else + data->ActiveResamplerCount = faudio_data.ActiveResamplerCount; + data->ActiveMatrixMixCount = faudio_data.ActiveMatrixMixCount; +#endif + data->ActiveXmaSourceVoices = faudio_data.ActiveXmaSourceVoices; + data->ActiveXmaStreams = faudio_data.ActiveXmaStreams; }
static void WINAPI IXAudio2Impl_SetDebugConfiguration(IXAudio2 *iface, @@ -1743,12 +1810,16 @@ static void WINAPI IXAudio2Impl_SetDebugConfiguration(IXAudio2 *iface, FAudio_SetDebugConfiguration(This->faudio, (FAudioDebugConfiguration *)pDebugConfiguration, pReserved); }
-/* XAudio2 2.8 */ static const IXAudio2Vtbl XAudio2_Vtbl = { IXAudio2Impl_QueryInterface, IXAudio2Impl_AddRef, IXAudio2Impl_Release, +#if XAUDIO2_VER <= 7 + IXAudio2Impl_GetDeviceCount, + IXAudio2Impl_GetDeviceDetails, + IXAudio2Impl_Initialize, +#endif IXAudio2Impl_RegisterForCallbacks, IXAudio2Impl_UnregisterForCallbacks, IXAudio2Impl_CreateSourceVoice, @@ -1825,27 +1896,8 @@ static HRESULT WINAPI XAudio2CF_CreateInstance(IClassFactory *iface, IUnknown *p return E_OUTOFMEMORY;
object->IXAudio2_iface.lpVtbl = &XAudio2_Vtbl; - -#if XAUDIO2_VER == 0 - object->IXAudio20_iface.lpVtbl = &XAudio20_Vtbl; -#elif XAUDIO2_VER <= 2 - object->IXAudio22_iface.lpVtbl = &XAudio22_Vtbl; -#elif XAUDIO2_VER <= 3 - object->IXAudio23_iface.lpVtbl = &XAudio23_Vtbl; -#elif XAUDIO2_VER <= 7 - object->IXAudio27_iface.lpVtbl = &XAudio27_Vtbl; -#endif - object->mst.IXAudio2MasteringVoice_iface.lpVtbl = &XAudio2MasteringVoice_Vtbl;
-#if XAUDIO2_VER == 0 - object->mst.IXAudio20MasteringVoice_iface.lpVtbl = &XAudio20MasteringVoice_Vtbl; -#elif XAUDIO2_VER <= 3 - object->mst.IXAudio23MasteringVoice_iface.lpVtbl = &XAudio23MasteringVoice_Vtbl; -#elif XAUDIO2_VER <= 7 - object->mst.IXAudio27MasteringVoice_iface.lpVtbl = &XAudio27MasteringVoice_Vtbl; -#endif - object->FAudioEngineCallback_vtbl = FAudioEngineCallback_Vtbl;
list_init(&object->voices); @@ -1914,44 +1966,23 @@ HRESULT xaudio2_initialize(IXAudio2Impl *This, UINT32 flags, XAUDIO2_PROCESSOR p return FAudio_Initialize(This->faudio, flags, FAUDIO_DEFAULT_PROCESSOR); }
+#if XAUDIO2_VER <= 7 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) { TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
- if(IsEqualGUID(rclsid, &CLSID_XAudio20) || - IsEqualGUID(rclsid, &CLSID_XAudio21) || - IsEqualGUID(rclsid, &CLSID_XAudio22) || - IsEqualGUID(rclsid, &CLSID_XAudio23) || - IsEqualGUID(rclsid, &CLSID_XAudio24) || - IsEqualGUID(rclsid, &CLSID_XAudio25) || - IsEqualGUID(rclsid, &CLSID_XAudio26) || - IsEqualGUID(rclsid, &CLSID_XAudio27)) + if (IsEqualGUID(rclsid, &CLSID_XAudio2)) return make_xaudio2_factory(riid, ppv);
- if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter20) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter21) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter22) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter23) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter24) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter25) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter26) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter27)) - return make_xapo_factory(&CLSID_AudioVolumeMeter27, riid, ppv); - - if(IsEqualGUID(rclsid, &CLSID_AudioReverb20) || - IsEqualGUID(rclsid, &CLSID_AudioReverb21) || - IsEqualGUID(rclsid, &CLSID_AudioReverb22) || - IsEqualGUID(rclsid, &CLSID_AudioReverb23) || - IsEqualGUID(rclsid, &CLSID_AudioReverb24) || - IsEqualGUID(rclsid, &CLSID_AudioReverb25) || - IsEqualGUID(rclsid, &CLSID_AudioReverb26) || - IsEqualGUID(rclsid, &CLSID_AudioReverb27)) - return make_xapo_factory(&CLSID_AudioReverb27, riid, ppv); + if (IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter)) + return make_xapo_factory(&CLSID_AudioVolumeMeter, riid, ppv); + + if (IsEqualGUID(rclsid, &CLSID_AudioReverb)) + return make_xapo_factory(&CLSID_AudioReverb, riid, ppv);
return CLASS_E_CLASSNOTAVAILABLE; } - -#if XAUDIO2_VER >= 8 +#else HRESULT WINAPI XAudio2Create(IXAudio2 **ppxa2, UINT32 flags, XAUDIO2_PROCESSOR proc) { HRESULT hr; diff --git a/dlls/xaudio2_7/xaudio_private.h b/dlls/xaudio2_7/xaudio_private.h index c24bddff80b..0f87b83f999 100644 --- a/dlls/xaudio2_7/xaudio_private.h +++ b/dlls/xaudio2_7/xaudio_private.h @@ -20,7 +20,10 @@ #include "windef.h" #include "wine/list.h"
-#include "xaudio2.h" +/* Don't include xaudio2.h directly; it's generated from an IDL with ifdefs and + * hence is frozen at version 2.7. Instead include that IDL in a local IDL and + * include the generated header. */ +#include "xaudio_classes.h" #include "xapo.h"
#include <FAudio.h> @@ -52,31 +55,10 @@ typedef struct _XA2XAPOFXImpl {
typedef struct _XA2VoiceImpl { IXAudio2SourceVoice IXAudio2SourceVoice_iface; -#if XAUDIO2_VER == 0 - IXAudio20SourceVoice IXAudio20SourceVoice_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23SourceVoice IXAudio23SourceVoice_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27SourceVoice IXAudio27SourceVoice_iface; -#endif
IXAudio2SubmixVoice IXAudio2SubmixVoice_iface; -#if XAUDIO2_VER == 0 - IXAudio20SubmixVoice IXAudio20SubmixVoice_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23SubmixVoice IXAudio23SubmixVoice_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27SubmixVoice IXAudio27SubmixVoice_iface; -#endif
IXAudio2MasteringVoice IXAudio2MasteringVoice_iface; -#if XAUDIO2_VER == 0 - IXAudio20MasteringVoice IXAudio20MasteringVoice_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23MasteringVoice IXAudio23MasteringVoice_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27MasteringVoice IXAudio27MasteringVoice_iface; -#endif
FAudioVoiceCallback FAudioVoiceCallback_vtbl; FAudioEffectChain *effect_chain; @@ -101,16 +83,6 @@ typedef struct _XA2VoiceImpl { typedef struct _IXAudio2Impl { IXAudio2 IXAudio2_iface;
-#if XAUDIO2_VER == 0 - IXAudio20 IXAudio20_iface; -#elif XAUDIO2_VER <= 2 - IXAudio22 IXAudio22_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23 IXAudio23_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27 IXAudio27_iface; -#endif - CRITICAL_SECTION lock;
struct list voices; @@ -127,39 +99,6 @@ typedef struct _IXAudio2Impl { IXAudio2EngineCallback **cbs; } IXAudio2Impl;
-#if XAUDIO2_VER == 0 -extern const IXAudio20SourceVoiceVtbl XAudio20SourceVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio20SubmixVoiceVtbl XAudio20SubmixVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio20MasteringVoiceVtbl XAudio20MasteringVoice_Vtbl DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio20SourceVoice(IXAudio20SourceVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio20SubmixVoice(IXAudio20SubmixVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio20MasteringVoice(IXAudio20MasteringVoice *iface) DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 3 -extern const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio23SourceVoice(IXAudio23SourceVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio23SubmixVoice(IXAudio23SubmixVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio23MasteringVoice(IXAudio23MasteringVoice *iface) DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 7 -extern const IXAudio27SourceVoiceVtbl XAudio27SourceVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio27SubmixVoiceVtbl XAudio27SubmixVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio27MasteringVoiceVtbl XAudio27MasteringVoice_Vtbl DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio27SourceVoice(IXAudio27SourceVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio27SubmixVoice(IXAudio27SubmixVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio27MasteringVoice(IXAudio27MasteringVoice *iface) DECLSPEC_HIDDEN; -#endif - -#if XAUDIO2_VER == 0 -extern const IXAudio20Vtbl XAudio20_Vtbl DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 2 -extern const IXAudio22Vtbl XAudio22_Vtbl DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 3 -extern const IXAudio23Vtbl XAudio23_Vtbl DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 7 -extern const IXAudio27Vtbl XAudio27_Vtbl DECLSPEC_HIDDEN; -#endif - /* xaudio_dll.c */ extern HRESULT xaudio2_initialize(IXAudio2Impl *This, UINT32 flags, XAUDIO2_PROCESSOR proc) DECLSPEC_HIDDEN; extern FAudioEffectChain *wrap_effect_chain(const XAUDIO2_EFFECT_CHAIN *pEffectChain) DECLSPEC_HIDDEN; diff --git a/dlls/xaudio2_8/Makefile.in b/dlls/xaudio2_8/Makefile.in index 3e00abd892d..131da70954a 100644 --- a/dlls/xaudio2_8/Makefile.in +++ b/dlls/xaudio2_8/Makefile.in @@ -1,11 +1,11 @@ EXTRADEFS = -DXAUDIO2_VER=8 MODULE = xaudio2_8.dll +IMPORTLIB = xaudio2_8 IMPORTS = $(FAUDIO_PE_LIBS) advapi32 ole32 user32 uuid EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ x3daudio.c \ xapo.c \ xapofx.c \ diff --git a/dlls/xaudio2_8/tests/Makefile.in b/dlls/xaudio2_8/tests/Makefile.in new file mode 100644 index 00000000000..f8e0eae50e4 --- /dev/null +++ b/dlls/xaudio2_8/tests/Makefile.in @@ -0,0 +1,9 @@ +TESTDLL = xaudio2_8.dll +IMPORTS = ole32 xaudio2_8 +EXTRADEFS = -DXAUDIO2_VER=8 +PARENTSRC = ../../xaudio2_7/tests + +C_SRCS = \ + xaudio2.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xaudio2_9/Makefile.in b/dlls/xaudio2_9/Makefile.in index eb299816b55..51f69c7ba7d 100644 --- a/dlls/xaudio2_9/Makefile.in +++ b/dlls/xaudio2_9/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ x3daudio.c \ xapo.c \ xapofx.c \ diff --git a/include/xaudio2.idl b/include/xaudio2.idl index e9aeacc7ba8..d0e781fe1c6 100644 --- a/include/xaudio2.idl +++ b/include/xaudio2.idl @@ -16,6 +16,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#ifndef XAUDIO2_VER +#define XAUDIO2_VER 9 +#endif + import "unknwn.idl"; import "mmdeviceapi.idl";
@@ -23,69 +27,57 @@ import "audiosessiontypes.h";
cpp_quote("#include <pshpack1.h>")
-[ - uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) -] -coclass XAudio20 { - interface IUnknown; -} +#if XAUDIO2_VER <= 7
[ + threading(both), +#if XAUDIO2_VER == 0 + uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) +#elif XAUDIO2_VER == 1 uuid(e21a7345-eb21-468e-be50-804db97cf708) -] -coclass XAudio21 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 2 uuid(b802058a-464a-42db-bc10-b650d6f2586a) -] -coclass XAudio22 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 3 uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d) -] -coclass XAudio23 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 4 uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526) -] -coclass XAudio24 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 5 uuid(4c9b6dde-6809-46e6-a278-9b6a97588670) -] -coclass XAudio25 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 6 uuid(3eda9b49-2085-498b-9bb2-39a6778493de) -] -coclass XAudio26 { - interface IUnknown; -} - -[ +#else uuid(5a508685-a254-4fba-9b82-9a24b00306af) +#endif ] -coclass XAudio27 { +coclass XAudio2 { interface IUnknown; }
[ +#if XAUDIO2_VER == 0 + uuid(fac23f48-31f5-45a8-b49b-5225d61401db) +#elif XAUDIO2_VER == 1 + uuid(f7a76c21-53d4-46bb-ac53-8b459cae46bd) +#elif XAUDIO2_VER == 2 + uuid(97dfb7e7-5161-4015-87a9-c79e6a1952cc) +#elif XAUDIO2_VER == 3 + uuid(ef0aa05d-8075-4e5d-bead-45be0c3ccbb3) +#elif XAUDIO2_VER == 4 + uuid(4256535c-1ea4-4d4b-8ad5-f9db762eca9e) +#elif XAUDIO2_VER == 5 + uuid(715bdd1a-aa82-436b-b0fa-6acea39bd0a1) +#elif XAUDIO2_VER == 6 + uuid(47199894-7cc2-444d-9873-ced2562cc60e) +#else uuid(db05ea35-0329-4d4b-a53a-6dead03d3852) +#endif ] coclass XAudio2Debug { interface IUnknown; }
+#endif + cpp_quote("#if 0") typedef struct WAVEFORMATEX { @@ -160,50 +152,24 @@ typedef struct XAUDIO2_PERFORMANCE_DATA UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; +#if XAUDIO2_VER == 0 + UINT32 GlitchesSinceLastQuery; +#else UINT32 GlitchesSinceEngineStarted; +#endif UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; +#if XAUDIO2_VER <= 2 + UINT32 TotalSubmixVoiceCount; +#else UINT32 ActiveResamplerCount; UINT32 ActiveMatrixMixCount; +#endif UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO2_PERFORMANCE_DATA;
-typedef struct XAUDIO22_PERFORMANCE_DATA -{ - UINT64 AudioCyclesSinceLastQuery; - UINT64 TotalCyclesSinceLastQuery; - UINT32 MinimumCyclesPerQuantum; - UINT32 MaximumCyclesPerQuantum; - UINT32 MemoryUsageInBytes; - UINT32 CurrentLatencyInSamples; - UINT32 GlitchesSinceEngineStarted; - UINT32 ActiveSourceVoiceCount; - UINT32 TotalSourceVoiceCount; - UINT32 ActiveSubmixVoiceCount; - UINT32 TotalSubmixVoiceCount; - UINT32 ActiveXmaSourceVoices; - UINT32 ActiveXmaStreams; -} XAUDIO22_PERFORMANCE_DATA; - -typedef struct XAUDIO20_PERFORMANCE_DATA -{ - UINT64 AudioCyclesSinceLastQuery; - UINT64 TotalCyclesSinceLastQuery; - UINT32 MinimumCyclesPerQuantum; - UINT32 MaximumCyclesPerQuantum; - UINT32 MemoryUsageInBytes; - UINT32 CurrentLatencyInSamples; - UINT32 GlitchesSinceLastQuery; - UINT32 ActiveSourceVoiceCount; - UINT32 TotalSourceVoiceCount; - UINT32 ActiveSubmixVoiceCount; - UINT32 TotalSubmixVoiceCount; - UINT32 ActiveXmaSourceVoices; - UINT32 ActiveXmaStreams; -} XAUDIO20_PERFORMANCE_DATA; - typedef enum XAUDIO2_DEVICE_ROLE { NotDefaultDevice = 0x0, @@ -215,6 +181,7 @@ typedef enum XAUDIO2_DEVICE_ROLE InvalidDeviceRole = ~GlobalDefaultDevice } XAUDIO2_DEVICE_ROLE;
+#if XAUDIO2_VER <= 7 typedef struct XAUDIO2_DEVICE_DETAILS { WCHAR DeviceID[256]; @@ -222,40 +189,37 @@ typedef struct XAUDIO2_DEVICE_DETAILS XAUDIO2_DEVICE_ROLE Role; WAVEFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS; - -typedef struct XAUDIO27_VOICE_DETAILS -{ - UINT32 CreationFlags; - UINT32 InputChannels; - UINT32 InputSampleRate; -} XAUDIO27_VOICE_DETAILS; +#endif
typedef struct XAUDIO2_VOICE_DETAILS { UINT32 CreationFlags; +#if XAUDIO2_VER >= 8 UINT32 ActiveFlags; +#endif UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO2_VOICE_DETAILS;
+#if XAUDIO2_VER <= 3 +typedef struct XAUDIO2_VOICE_SENDS +{ + UINT32 OutputCount; + IXAudio2Voice **pOutputVoices; +} XAUDIO2_VOICE_SENDS; +#else typedef struct XAUDIO2_SEND_DESCRIPTOR { UINT32 Flags; IXAudio2Voice* pOutputVoice; } XAUDIO2_SEND_DESCRIPTOR;
-/* XAudio2 2.3's XAUDIO2_VOICE_SENDS struct */ -typedef struct XAUDIO23_VOICE_SENDS -{ - UINT32 OutputCount; - IXAudio2Voice **pOutputVoices; -} XAUDIO23_VOICE_SENDS; - typedef struct XAUDIO2_VOICE_SENDS { UINT32 SendCount; XAUDIO2_SEND_DESCRIPTOR* pSends; } XAUDIO2_VOICE_SENDS; +#endif
typedef struct XAUDIO2_EFFECT_DESCRIPTOR { @@ -282,15 +246,21 @@ const float XAUDIO2_MAX_FREQ_RATIO = 1024.0; const float XAUDIO2_DEFAULT_FREQ_RATIO = 2.0; const float XAUDIO2_MAX_FILTER_ONEOVERQ = 1.5; const float XAUDIO2_MAX_FILTER_FREQUENCY = 1.0; +#if XAUDIO2_VER > 0 const UINT32 XAUDIO2_MAX_LOOP_COUNT = 254; -const UINT32 XAUDIO20_MAX_LOOP_COUNT = 0x100000; /* xaudio 2.0 */ +#else +const UINT32 XAUDIO2_MAX_LOOP_COUNT = 0x100000; +#endif
const UINT32 XAUDIO2_COMMIT_NOW = 0; const UINT32 XAUDIO2_COMMIT_ALL = 0; const UINT32 XAUDIO2_INVALID_OPSET = 0xffffffff; const UINT32 XAUDIO2_NO_LOOP_REGION = 0; +#if XAUDIO2_VER > 0 const UINT32 XAUDIO2_LOOP_INFINITE = 255; -const UINT32 XAUDIO20_LOOP_INFINITE = ((UINT)-1); /* xaudio 2.0 */ +#else +const UINT32 XAUDIO2_LOOP_INFINITE = ((UINT)-1); +#endif const UINT32 XAUDIO2_DEFAULT_CHANNELS = 0; const UINT32 XAUDIO2_DEFAULT_SAMPLERATE = 0;
@@ -322,18 +292,15 @@ typedef struct XAUDIO2_FILTER_PARAMETERS float OneOverQ; } XAUDIO2_FILTER_PARAMETERS;
-/* XAudio 2.0's IXAudio2Voice */ -/* XAudio2 2.0's IXAudio2Voice interface. Actually called - * IXAudio2Voice in the Mar 2008 DX SDK */ [ object, local ] -interface IXAudio20Voice +interface IXAudio2Voice { - void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); + void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails);
- HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); + HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList);
HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain);
@@ -366,6 +333,17 @@ interface IXAudio20Voice
void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters);
+#if XAUDIO2_VER >= 4 + HRESULT SetOutputFilterParameters( + [in] IXAudio2Voice* pDestinationVoice, + [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, + [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + + void GetOutputFilterParameters( + [in] IXAudio2Voice* pDestinationVoice, + [out] XAUDIO2_FILTER_PARAMETERS* pParameters); +#endif + HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); @@ -388,7 +366,12 @@ interface IXAudio20Voice [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- HRESULT GetOutputMatrix( +#if XAUDIO2_VER == 0 + HRESULT +#else + void +#endif + GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, @@ -397,791 +380,147 @@ interface IXAudio20Voice void DestroyVoice(); }
-/* XAudio 2.3's IXAudio2Voice */ -/* XAudio2 2.3's IXAudio2Voice interface. Actually called - * IXAudio2Voice in the Nov 2008 DX SDK */ -[ - object, - local -] -interface IXAudio23Voice +typedef struct XAUDIO2_BUFFER { - void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); - - HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); + UINT32 Flags; + UINT32 AudioBytes; + const BYTE* pAudioData; + UINT32 PlayBegin; + UINT32 PlayLength; + UINT32 LoopBegin; + UINT32 LoopLength; + UINT32 LoopCount; + void* pContext; +} XAUDIO2_BUFFER;
- HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); +typedef struct XAUDIO2_BUFFER_WMA +{ + const UINT32* pDecodedPacketCumulativeBytes; + UINT32 PacketCount; +} XAUDIO2_BUFFER_WMA;
- HRESULT EnableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); +typedef struct XAUDIO2_VOICE_STATE +{ + void* pCurrentBufferContext; + UINT32 BuffersQueued; + UINT64 SamplesPlayed; +} XAUDIO2_VOICE_STATE;
- HRESULT DisableEffect( - [in] UINT32 EffectIndex, +[ + local +] +interface IXAudio2SourceVoice : IXAudio2Voice +{ + HRESULT Start( + [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- void GetEffectState( - [in] UINT32 EffectIndex, - [out] BOOL* pEnabled); - - HRESULT SetEffectParameters( - [in] UINT32 EffectIndex, - [in] const void* pParameters, - [in] UINT32 ParametersByteSize, + HRESULT Stop( + [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- HRESULT GetEffectParameters( - [in] UINT32 EffectIndex, - [out] void* pParameters, - [in] UINT32 ParametersByteSize); + HRESULT SubmitSourceBuffer( + [in] const XAUDIO2_BUFFER* pBuffer, + [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA);
- HRESULT SetFilterParameters( - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + HRESULT FlushSourceBuffers();
- void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); + HRESULT Discontinuity();
- HRESULT SetVolume( - [in] float Volume, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- void GetVolume([out] float* pVolume); +#if XAUDIO2_VER >= 8 + void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags); +#else + void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); +#endif
- HRESULT SetChannelVolumes( - [in] UINT32 Channels, - [in, size_is(Channels)] const float* pVolumes, + HRESULT SetFrequencyRatio( + [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- void GetChannelVolumes( - [in] UINT32 Channels, - [out, size_is(Channels)] float* pVolumes); + void GetFrequencyRatio([out] float* pRatio);
- HRESULT SetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); +#if XAUDIO2_VER >= 4 + HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); +#endif +}
- void GetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); +[ + local +] +interface IXAudio2SubmixVoice : IXAudio2Voice +{ +}
- void DestroyVoice(); +[ + local +] +interface IXAudio2MasteringVoice : IXAudio2Voice +{ +#if XAUDIO2_VER >= 8 + void GetChannelMask([out] DWORD *pChannelMask); +#endif }
-/* XAudio 2.7's IXAudio2Voice */ -/* XAudio2 2.7's IXAudio2Voice interface. Actually called - * IXAudio2Voice in the Jun 2010 DX SDK */ [ object, local ] -interface IXAudio27Voice +interface IXAudio2VoiceCallback { - void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); +#if XAUDIO2_VER > 0 + void OnVoiceProcessingPassStart([in] UINT32 BytesRequired); +#else + void OnVoiceProcessingPassStart(); +#endif
- HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); + void OnVoiceProcessingPassEnd();
- HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); + void OnStreamEnd();
- HRESULT EnableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + void OnBufferStart([in] void* pBufferContext);
- HRESULT DisableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + void OnBufferEnd([in] void* pBufferContext);
- void GetEffectState( - [in] UINT32 EffectIndex, - [out] BOOL* pEnabled); + void OnLoopEnd([in] void* pBufferContext);
- HRESULT SetEffectParameters( - [in] UINT32 EffectIndex, - [in] const void* pParameters, - [in] UINT32 ParametersByteSize, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + void OnVoiceError( + [in] void* pBuffercontext, + [in] HRESULT Error); +}
- HRESULT GetEffectParameters( - [in] UINT32 EffectIndex, - [out] void* pParameters, - [in] UINT32 ParametersByteSize); +typedef struct XAUDIO2_DEBUG_CONFIGURATION +{ + UINT32 TraceMask; + UINT32 BreakMask; + BOOL LogThreadID; + BOOL LogFileline; + BOOL LogFunctionName; + BOOL LogTiming; +} XAUDIO2_DEBUG_CONFIGURATION;
- HRESULT SetFilterParameters( - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); +[ + object, +#if XAUDIO2_VER <= 7 + uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb) +#elif XAUDIO2_VER == 8 + uuid(60d8dac8-5aa1-4e8e-b597-2f5e2883d484) +#else + uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d) +#endif +] +/* XAudio2 2.9's IXAudio2 interface. */ +interface IXAudio2 : IUnknown +{ +#if XAUDIO2_VER <= 7 + HRESULT GetDeviceCount(UINT32 *count);
- void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); + HRESULT GetDeviceDetails(UINT32 index, XAUDIO2_DEVICE_DETAILS *details);
- HRESULT SetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + HRESULT Initialize(UINT32 flags, XAUDIO2_PROCESSOR processor); +#endif
- void GetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [out] XAUDIO2_FILTER_PARAMETERS* pParameters); - - HRESULT SetVolume( - [in] float Volume, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetVolume([out] float* pVolume); - - HRESULT SetChannelVolumes( - [in] UINT32 Channels, - [in, size_is(Channels)] const float* pVolumes, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetChannelVolumes( - [in] UINT32 Channels, - [out, size_is(Channels)] float* pVolumes); - - HRESULT SetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); - - void DestroyVoice(); -} - -[ - object, - local -] -interface IXAudio2Voice -{ - void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails); - - HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); - - HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT EnableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT DisableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetEffectState( - [in] UINT32 EffectIndex, - [out] BOOL* pEnabled); - - HRESULT SetEffectParameters( - [in] UINT32 EffectIndex, - [in] const void* pParameters, - [in] UINT32 ParametersByteSize, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT GetEffectParameters( - [in] UINT32 EffectIndex, - [out] void* pParameters, - [in] UINT32 ParametersByteSize); - - HRESULT SetFilterParameters( - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); - - HRESULT SetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [out] XAUDIO2_FILTER_PARAMETERS* pParameters); - - HRESULT SetVolume( - [in] float Volume, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetVolume([out] float* pVolume); - - HRESULT SetChannelVolumes( - [in] UINT32 Channels, - [in, size_is(Channels)] const float* pVolumes, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetChannelVolumes( - [in] UINT32 Channels, - [out, size_is(Channels)] float* pVolumes); - - HRESULT SetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); - - void DestroyVoice(); -} - -typedef struct XAUDIO2_BUFFER -{ - UINT32 Flags; - UINT32 AudioBytes; - const BYTE* pAudioData; - UINT32 PlayBegin; - UINT32 PlayLength; - UINT32 LoopBegin; - UINT32 LoopLength; - UINT32 LoopCount; - void* pContext; -} XAUDIO2_BUFFER; - -typedef struct XAUDIO2_BUFFER_WMA -{ - const UINT32* pDecodedPacketCumulativeBytes; - UINT32 PacketCount; -} XAUDIO2_BUFFER_WMA; - -typedef struct XAUDIO2_VOICE_STATE -{ - void* pCurrentBufferContext; - UINT32 BuffersQueued; - UINT64 SamplesPlayed; -} XAUDIO2_VOICE_STATE; - -[ - local -] -/* XAudio2 2.0's IXAudio2SourceVoice interface. Actually called - * IXAudio2SourceVoice in the Mar 2008 DX SDK */ -interface IXAudio20SourceVoice : IXAudio20Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); -} - -[ - local -] -/* XAudio2 2.3's IXAudio2SourceVoice interface. Actually called - * IXAudio2SourceVoice in the Nov 2008 DX SDK */ -interface IXAudio23SourceVoice : IXAudio23Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); -} - -[ - local -] -/* XAudio2 2.7's IXAudio2SourceVoice interface. Actually called - * IXAudio2SourceVoice in the Jun 2010 DX SDK */ -interface IXAudio27SourceVoice : IXAudio27Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); - - HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); -} - -[ - local -] -/* XAudio2 2.8's IXAudio2SourceVoice interface. */ -interface IXAudio2SourceVoice : IXAudio2Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); - - HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); -} - -[ - local -] -/* XAudio2 2.0's IXAudio2SubmixVoice interface. Actually called - * IXAudio2SubmixVoice in the Mar 2008 DX SDK */ -interface IXAudio20SubmixVoice : IXAudio20Voice -{ -} - -[ - local -] -/* XAudio2 2.3's IXAudio2SubmixVoice interface. Actually called - * IXAudio2SubmixVoice in the Nov 2008 DX SDK */ -interface IXAudio23SubmixVoice : IXAudio23Voice -{ -} - -[ - local -] -/* XAudio2 2.7's IXAudio2SubmixVoice interface. Actually called - * IXAudio2SubmixVoice in the Jun 2010 DX SDK */ -interface IXAudio27SubmixVoice : IXAudio27Voice -{ -} - -[ - local -] -interface IXAudio2SubmixVoice : IXAudio2Voice -{ -} - -[ - local -] -/* XAudio2 2.0's IXAudio2MasteringVoice interface. Actually called - * IXAudio2MasteringVoice in the Mar 2008 DX SDK */ -interface IXAudio20MasteringVoice : IXAudio20Voice -{ -} - -[ - local -] -/* XAudio2 2.3's IXAudio2MasteringVoice interface. Actually called - * IXAudio2MasteringVoice in the Nov 2008 DX SDK */ -interface IXAudio23MasteringVoice : IXAudio23Voice -{ -} - -[ - local -] -/* XAudio2 2.7's IXAudio2MasteringVoice interface. Actually called - * IXAudio2MasteringVoice in the Jun 2010 DX SDK */ -interface IXAudio27MasteringVoice : IXAudio27Voice -{ -} - -[ - local -] -interface IXAudio2MasteringVoice : IXAudio2Voice -{ - /* not present in XAudio2 2.7 */ - void GetChannelMask([out] DWORD *pChannelMask); -} - -[ - object, - local -] -interface IXAudio20VoiceCallback -{ - void OnVoiceProcessingPassStart(); - - void OnVoiceProcessingPassEnd(); - - void OnStreamEnd(); - - void OnBufferStart([in] void* pBufferContext); - - void OnBufferEnd([in] void* pBufferContext); - - void OnLoopEnd([in] void* pBufferContext); - - void OnVoiceError( - [in] void* pBuffercontext, - [in] HRESULT Error); -} - -[ - object, - local -] -interface IXAudio2VoiceCallback -{ - void OnVoiceProcessingPassStart([in] UINT32 BytesRequired); - - void OnVoiceProcessingPassEnd(); - - void OnStreamEnd(); - - void OnBufferStart([in] void* pBufferContext); - - void OnBufferEnd([in] void* pBufferContext); - - void OnLoopEnd([in] void* pBufferContext); - - void OnVoiceError( - [in] void* pBuffercontext, - [in] HRESULT Error); -} - -typedef struct XAUDIO2_DEBUG_CONFIGURATION -{ - UINT32 TraceMask; - UINT32 BreakMask; - BOOL LogThreadID; - BOOL LogFileline; - BOOL LogFunctionName; - BOOL LogTiming; -} XAUDIO2_DEBUG_CONFIGURATION; - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ -] -/* XAudio2 2.0's IXAudio2 interface. Actually called IXAudio2 in the Mar 2008 - * DX SDK */ -interface IXAudio20 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO20_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ -] -/* XAudio2 2.2's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 - * DX SDK */ -interface IXAudio22 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO22_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ -] -/* XAudio2 2.3's IXAudio2 interface. Actually called IXAudio2 in the Nov 2008 - * DX SDK */ -interface IXAudio23 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), -] -/* XAudio2 2.7's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 - * DX SDK */ -interface IXAudio27 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -/* XAudio2 2.8's IXAudio2 is identical to 2.9's */ -cpp_quote("DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);") - -[ - object, - uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d) -] -/* XAudio2 2.9's IXAudio2 interface. */ -interface IXAudio2 : IUnknown -{ HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);
void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); @@ -1209,9 +548,16 @@ interface IXAudio2 : IUnknown [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, +#if XAUDIO2_VER >= 8 [in, defaultvalue(NULL)] LPCWSTR DeviceId, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain, - [in, defaultvalue(AudioCategory_GameEffects)] AUDIO_STREAM_CATEGORY StreamCategory); +#else + [in, defaultvalue(0)] UINT32 index, +#endif + [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain +#if XAUDIO2_VER >= 8 + , AUDIO_STREAM_CATEGORY category +#endif + );
HRESULT StartEngine();
@@ -1244,15 +590,16 @@ const UINT32 XAUDIO2_QUANTUM_DENOMINATOR = 100; const float XAUDIO2_QUANTUM_MS = (1000.0 * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR);
/* use cpp_quote to retain the HRESULT type in header file */ +#if XAUDIO2_VER > 0 cpp_quote("#define XAUDIO2_E_INVALID_CALL ((HRESULT)0x88960001)") cpp_quote("#define XAUDIO2_E_XMA_DECODER_ERROR ((HRESULT)0x88960002)") cpp_quote("#define XAUDIO2_E_XAPO_CREATION_FAILED ((HRESULT)0x88960003)") cpp_quote("#define XAUDIO2_E_DEVICE_INVALIDATED ((HRESULT)0x88960004)") - -/* xaudio 2.0 error codes */ -cpp_quote("#define XAUDIO20_E_XMA_DECODER_ERROR ((HRESULT)0x88960001)") -cpp_quote("#define XAUDIO20_E_XAPO_CREATION_FAILED ((HRESULT)0x88960002)") -cpp_quote("#define XAUDIO20_E_DEVICE_INVALIDATED ((HRESULT)0x88960003)") +#else +cpp_quote("#define XAUDIO2_E_XMA_DECODER_ERROR ((HRESULT)0x88960001)") +cpp_quote("#define XAUDIO2_E_XAPO_CREATION_FAILED ((HRESULT)0x88960002)") +cpp_quote("#define XAUDIO2_E_DEVICE_INVALIDATED ((HRESULT)0x88960003)") +#endif
cpp_quote("#ifdef XAUDIO2_HELPER_FUNCTIONS") cpp_quote("#define _USE_MATH_DEFINES") @@ -1265,6 +612,8 @@ cpp_quote("inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, cpp_quote("inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }") cpp_quote("#endif")
-cpp_quote("HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);") - cpp_quote("#include <poppack.h>") + +#if XAUDIO2_VER >= 8 +cpp_quote("HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);") +#endif diff --git a/include/xaudio2fx.idl b/include/xaudio2fx.idl index 224c660a610..a340d2de824 100644 --- a/include/xaudio2fx.idl +++ b/include/xaudio2fx.idl @@ -18,114 +18,58 @@
import "unknwn.idl";
-[ - uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) -] -coclass AudioVolumeMeter20 { - interface IUnknown; -} +#ifndef XAUDIO2_VER +#define XAUDIO2_VER 9 +#endif
+#if XAUDIO2_VER < 8 [ + threading(both), +#if XAUDIO2_VER == 0 + uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) +#elif XAUDIO2_VER == 1 uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1) -] -coclass AudioVolumeMeter21 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 2 uuid(f5ca7b34-8055-42c0-b836-216129eb7e30) -] -coclass AudioVolumeMeter22 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 3 uuid(e180344b-ac83-4483-959e-18a5c56a5e19) -] -coclass AudioVolumeMeter23 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 4 uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c) -] -coclass AudioVolumeMeter24 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 5 uuid(2139e6da-c341-4774-9ac3-b4e026347f64) -] -coclass AudioVolumeMeter25 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 6 uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27) -] -coclass AudioVolumeMeter26 { - interface IUnknown; -} - -[ +#else uuid(cac1105f-619b-4d04-831a-44e1cbf12d57) +#endif ] -coclass AudioVolumeMeter27 { - interface IUnknown; -} +coclass AudioVolumeMeter {}
[ + threading(both), +#if XAUDIO2_VER == 0 uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063) -] -coclass AudioReverb20 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 1 uuid(f4769300-b949-4df9-b333-00d33932e9a6) -] -coclass AudioReverb21 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 2 uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51) -] -coclass AudioReverb22 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 3 uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c) -] -coclass AudioReverb23 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 4 uuid(8bb7778b-645b-4475-9a73-1de3170bd3af) -] -coclass AudioReverb24 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 5 uuid(d06df0d0-8518-441e-822f-5451d5c595b8) -] -coclass AudioReverb25 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 6 uuid(cecec95a-d894-491a-bee3-5e106fb59f2d) -] -coclass AudioReverb26 { - interface IUnknown; -} - -[ +#else uuid(6a93130e-1d53-41d1-a9cf-e758800bb179) +#endif ] -coclass AudioReverb27 { - interface IUnknown; -} +coclass AudioReverb {} + +#else + +HRESULT __stdcall CreateAudioReverb(IUnknown **out); +HRESULT __stdcall CreateAudioVolumeMeter(IUnknown **out); + +#endif
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=133335
Your paranoid android.
=== w1064v1507 (32 bit report) ===
xaudio2_7: xaudio2.c:62: Test failed: Got hr 0x80040154. 0974:xaudio2: unhandled exception c0000005 at 004028B2
=== w7pro64 (64 bit report) ===
xaudio2_7: xaudio2.c:62: Test failed: Got hr 0x80040154. 08a4:xaudio2: unhandled exception c0000005 at 000000000040264F
=== w1064v1507 (64 bit report) ===
xaudio2_7: xaudio2.c:62: Test failed: Got hr 0x80040154. 0ccc:xaudio2: unhandled exception c0000005 at 000000000040264F
There were a number of errors in the previous version related to CLSID registration, which I didn't catch since I ran with an existing prefix. Should be fixed in v2.