Module: wine Branch: master Commit: 55ed98cb882f5a1cd78f045807c7da8ea8ee29ff URL: http://source.winehq.org/git/wine.git/?a=commit;h=55ed98cb882f5a1cd78f045807...
Author: Mark Harmstone hellas@burntcomma.com Date: Tue Mar 10 23:51:35 2015 +0000
dsound: Pipe audio data through DMOs.
---
dlls/dsound/buffer.c | 5 +++++ dlls/dsound/mixer.c | 14 ++++++++++++++ 2 files changed, 19 insertions(+)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c index 92849a6..e581c5a 100644 --- a/dlls/dsound/buffer.c +++ b/dlls/dsound/buffer.c @@ -293,6 +293,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_Play(IDirectSoundBuffer8 *iface, DW { IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer8(iface); HRESULT hres = DS_OK; + int i;
TRACE("(%p,%08x,%08x,%08x)\n",This,reserved1,reserved2,flags);
@@ -306,6 +307,10 @@ static HRESULT WINAPI IDirectSoundBufferImpl_Play(IDirectSoundBuffer8 *iface, DW } else if (This->state == STATE_STOPPING) This->state = STATE_PLAYING;
+ for (i = 0; i < This->num_filters; i++) { + IMediaObject_Discontinuity(This->filters[i].obj, 0); + } + RtlReleaseResource(&This->lock); /* **** */
diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c index 973a65e..db1152c 100644 --- a/dlls/dsound/mixer.c +++ b/dlls/dsound/mixer.c @@ -398,6 +398,8 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2) static void DSOUND_MixToTemporary(IDirectSoundBufferImpl *dsb, DWORD frames) { UINT size_bytes = frames * sizeof(float) * dsb->device->pwfx->nChannels; + HRESULT hr; + int i;
if (dsb->device->tmp_buffer_len < size_bytes || !dsb->device->tmp_buffer) { @@ -409,6 +411,18 @@ static void DSOUND_MixToTemporary(IDirectSoundBufferImpl *dsb, DWORD frames) }
cp_fields(dsb, frames, &dsb->freqAccNum); + + if (size_bytes > 0) { + for (i = 0; i < dsb->num_filters; i++) { + if (dsb->filters[i].inplace) { + hr = IMediaObjectInPlace_Process(dsb->filters[i].inplace, size_bytes, (BYTE*)dsb->device->tmp_buffer, 0, DMO_INPLACE_NORMAL); + + if (FAILED(hr)) + WARN("IMediaObjectInPlace_Process failed for filter %u\n", i); + } else + WARN("filter %u has no inplace object - unsupported\n", i); + } + } }
static void DSOUND_MixerVol(const IDirectSoundBufferImpl *dsb, INT frames)