Andrew Eikum : xaudio2: Implement IXAudio2SourceVoice::GetState.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 28 07:42:28 CDT 2015


Module: wine
Branch: master
Commit: d2ae1054018a8018f80b650497cb3d4db820e43b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d2ae1054018a8018f80b650497cb3d4db820e43b

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Thu Aug 27 09:33:19 2015 -0500

xaudio2: Implement IXAudio2SourceVoice::GetState.

---

 dlls/xaudio2_7/xaudio_dll.c | 23 +++++++++++++++++++++++
 include/xaudio2.idl         |  1 +
 2 files changed, 24 insertions(+)

diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 26670b7..530318c 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -655,7 +655,30 @@ static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface,
         XAUDIO2_VOICE_STATE *pVoiceState, UINT32 Flags)
 {
     XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+
     TRACE("%p, %p, 0x%x\n", This, pVoiceState, Flags);
+
+    EnterCriticalSection(&This->lock);
+
+    if(!(Flags & XAUDIO2_VOICE_NOSAMPLESPLAYED)){
+        ALint bufpos = 0;
+
+        alGetSourcei(This->al_src, AL_SAMPLE_OFFSET, &bufpos);
+
+        pVoiceState->SamplesPlayed = This->played_frames + bufpos;
+    }else
+        pVoiceState->SamplesPlayed = 0;
+
+    if(This->nbufs)
+        pVoiceState->pCurrentBufferContext = This->buffers[This->first_buf].xa2buffer.pContext;
+    else
+        pVoiceState->pCurrentBufferContext = NULL;
+
+    pVoiceState->BuffersQueued = This->nbufs;
+
+    LeaveCriticalSection(&This->lock);
+
+    TRACE("returning %s, queued: %u\n", wine_dbgstr_longlong(pVoiceState->SamplesPlayed), This->nbufs);
 }
 
 static HRESULT WINAPI XA2SRC_SetFrequencyRatio(IXAudio2SourceVoice *iface,
diff --git a/include/xaudio2.idl b/include/xaudio2.idl
index 9213f41..4dca600 100644
--- a/include/xaudio2.idl
+++ b/include/xaudio2.idl
@@ -567,6 +567,7 @@ const UINT32 XAUDIO2_VOICE_MUSIC = 16;
 const UINT32 XAUDIO2_PLAY_TAILS = 32;
 const UINT32 XAUDIO2_END_OF_STREAM = 64;
 const UINT32 XAUDIO2_SEND_USEFILTER = 128;
+const UINT32 XAUDIO2_VOICE_NOSAMPLESPLAYED = 256;
 
 const XAUDIO2_FILTER_TYPE XAUDIO2_DEFAULT_FILTER_TYPE = LowPassFilter;
 const float XAUDIO2_DEFAULT_FILTER_FREQUENCY = XAUDIO2_MAX_FILTER_FREQUENCY;




More information about the wine-cvs mailing list