From d2ae1054018a8018f80b650497cb3d4db820e43b Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Thu, 27 Aug 2015 09:33:19 -0500 Subject: [PATCH] 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 26670b7d611..530318cf247 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 9213f4180b9..4dca60027fb 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;