[PATCH 3/4] xaudio2: Implement IXAudio2SourceVoice::SubmitSourceBuffer
Andrew Eikum
aeikum at codeweavers.com
Thu Aug 27 09:32:48 CDT 2015
---
dlls/xaudio2_7/xaudio_dll.c | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 8097ba3..26670b7 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -584,7 +584,49 @@ static HRESULT WINAPI XA2SRC_SubmitSourceBuffer(IXAudio2SourceVoice *iface,
const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA)
{
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+ XA2Buffer *buf;
+ UINT32 buf_idx;
+
TRACE("%p, %p, %p\n", This, pBuffer, pBufferWMA);
+
+ if(TRACE_ON(xaudio2)){
+ TRACE("Flags: 0x%x\n", pBuffer->Flags);
+ TRACE("AudioBytes: %u\n", pBuffer->AudioBytes);
+ TRACE("pAudioData: %p\n", pBuffer->pAudioData);
+ TRACE("PlayBegin: %u\n", pBuffer->PlayBegin);
+ TRACE("PlayLength: %u\n", pBuffer->PlayLength);
+ TRACE("LoopBegin: %u\n", pBuffer->LoopBegin);
+ TRACE("LoopLength: %u\n", pBuffer->LoopLength);
+ TRACE("LoopCount: %u\n", pBuffer->LoopCount);
+ TRACE("pContext: %p\n", pBuffer->pContext);
+ }
+
+ EnterCriticalSection(&This->lock);
+
+ if(This->nbufs >= XAUDIO2_MAX_QUEUED_BUFFERS){
+ TRACE("Too many buffers queued!\n");
+ LeaveCriticalSection(&This->lock);
+ return XAUDIO2_E_INVALID_CALL;
+ }
+
+ buf_idx = (This->first_buf + This->nbufs) % XAUDIO2_MAX_QUEUED_BUFFERS;
+ buf = &This->buffers[buf_idx];
+ memset(buf, 0, sizeof(*buf));
+
+ /* API contract: pAudioData must remain valid until this buffer is played,
+ * but pBuffer itself may be reused immediately */
+ memcpy(&buf->xa2buffer, pBuffer, sizeof(*pBuffer));
+
+ buf->offs_bytes = 0;
+ buf->latest_al_buf = -1;
+
+ ++This->nbufs;
+
+ TRACE("%p: queued buffer %u (%u bytes), now %u buffers held\n",
+ This, buf_idx, buf->xa2buffer.AudioBytes, This->nbufs);
+
+ LeaveCriticalSection(&This->lock);
+
return S_OK;
}
--
2.5.0
More information about the wine-patches
mailing list