Andrew Eikum : xaudio2: Implement IXAudio2SourceVoice frequency functions.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Sep 25 15:22:02 CDT 2015
Module: wine
Branch: master
Commit: eae93c1f412c9c55ac6319938fdf15444b8e7a74
URL: http://source.winehq.org/git/wine.git/?a=commit;h=eae93c1f412c9c55ac6319938fdf15444b8e7a74
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Fri Sep 25 12:39:40 2015 -0500
xaudio2: Implement IXAudio2SourceVoice frequency functions.
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
dlls/xaudio2_7/tests/xaudio2.c | 8 ++++++++
dlls/xaudio2_7/xaudio_dll.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c
index aabb70e..e8f4fbc 100644
--- a/dlls/xaudio2_7/tests/xaudio2.c
+++ b/dlls/xaudio2_7/tests/xaudio2.c
@@ -467,6 +467,14 @@ static void test_buffer_callbacks(IXAudio2 *xa)
XA2CALL_0(StartEngine);
ok(hr == S_OK, "StartEngine failed: %08x\n", hr);
+ if(xaudio27){
+ hr = IXAudio27SourceVoice_SetSourceSampleRate((IXAudio27SourceVoice*)src, 48000);
+ todo_wine ok(hr == S_OK, "SetSourceSampleRate failed: %08x\n", hr);
+ }else{
+ hr = IXAudio2SourceVoice_SetSourceSampleRate(src, 48000);
+ ok(hr == XAUDIO2_E_INVALID_CALL, "SetSourceSampleRate should have failed: %08x\n", hr);
+ }
+
while(1){
if(xaudio27)
IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state);
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 5c67ffb..8b41cbb 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -797,14 +797,32 @@ static HRESULT WINAPI XA2SRC_SetFrequencyRatio(IXAudio2SourceVoice *iface,
float Ratio, UINT32 OperationSet)
{
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+ ALfloat r;
+
TRACE("%p, %f, 0x%x\n", This, Ratio, OperationSet);
+
+ if(Ratio < XAUDIO2_MIN_FREQ_RATIO)
+ r = XAUDIO2_MIN_FREQ_RATIO;
+ else if (Ratio > XAUDIO2_MAX_FREQ_RATIO)
+ r = XAUDIO2_MAX_FREQ_RATIO;
+ else
+ r = Ratio;
+
+ alSourcef(This->al_src, AL_PITCH, r);
+
return S_OK;
}
static void WINAPI XA2SRC_GetFrequencyRatio(IXAudio2SourceVoice *iface, float *pRatio)
{
+ ALfloat ratio;
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+
TRACE("%p, %p\n", This, pRatio);
+
+ alGetSourcef(This->al_src, AL_PITCH, &ratio);
+
+ *pRatio = ratio;
}
static HRESULT WINAPI XA2SRC_SetSourceSampleRate(
@@ -812,7 +830,20 @@ static HRESULT WINAPI XA2SRC_SetSourceSampleRate(
UINT32 NewSourceSampleRate)
{
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+
TRACE("%p, %u\n", This, NewSourceSampleRate);
+
+ EnterCriticalSection(&This->lock);
+
+ if(This->nbufs){
+ LeaveCriticalSection(&This->lock);
+ return XAUDIO2_E_INVALID_CALL;
+ }
+
+ This->fmt->nSamplesPerSec = NewSourceSampleRate;
+
+ LeaveCriticalSection(&This->lock);
+
return S_OK;
}
More information about the wine-cvs
mailing list