Vijay Kiran Kamuju : xactengine3_7: Implement IXACT3Wave interface.
Alexandre Julliard
julliard at winehq.org
Thu Aug 6 16:33:43 CDT 2020
Module: wine
Branch: master
Commit: 568227cc039ce16f232008f34fb72fc6aecc5029
URL: https://source.winehq.org/git/wine.git/?a=commit;h=568227cc039ce16f232008f34fb72fc6aecc5029
Author: Vijay Kiran Kamuju <infyquest at gmail.com>
Date: Sat Jul 18 22:51:16 2020 +0200
xactengine3_7: Implement IXACT3Wave interface.
Based on patch from Ethan Lee.
Signed-off-by: Vijay Kiran Kamuju <infyquest at gmail.com>
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/xactengine3_7/xact_dll.c | 145 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 143 insertions(+), 2 deletions(-)
diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c
index dc4d9c01ac..267863f930 100644
--- a/dlls/xactengine3_7/xact_dll.c
+++ b/dlls/xactengine3_7/xact_dll.c
@@ -318,6 +318,120 @@ static const IXACT3SoundBankVtbl XACT3SoundBank_Vtbl =
IXACT3SoundBankImpl_GetState
};
+typedef struct _XACT3WaveImpl {
+ IXACT3Wave IXACT3Wave_iface;
+
+ FACTWave *fact_wave;
+} XACT3WaveImpl;
+
+static inline XACT3WaveImpl *impl_from_IXACT3Wave(IXACT3Wave *iface)
+{
+ return CONTAINING_RECORD(iface, XACT3WaveImpl, IXACT3Wave_iface);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_Destroy(IXACT3Wave *iface)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+ HRESULT hr;
+
+ TRACE("(%p)\n", This);
+
+ hr = FACTWave_Destroy(This->fact_wave);
+ HeapFree(GetProcessHeap(), 0, This);
+ return hr;
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_Play(IXACT3Wave *iface)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)\n", This);
+
+ return FACTWave_Play(This->fact_wave);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_Stop(IXACT3Wave *iface, DWORD dwFlags)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(0x%x)\n", This, dwFlags);
+
+ return FACTWave_Stop(This->fact_wave, dwFlags);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_Pause(IXACT3Wave *iface, BOOL fPause)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(%u)\n", This, fPause);
+
+ return FACTWave_Pause(This->fact_wave, fPause);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_GetState(IXACT3Wave *iface, DWORD *pdwState)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(%p)\n", This, pdwState);
+
+ return FACTWave_GetState(This->fact_wave, pdwState);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_SetPitch(IXACT3Wave *iface, XACTPITCH pitch)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(%d)\n", This, pitch);
+
+ return FACTWave_SetPitch(This->fact_wave, pitch);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_SetVolume(IXACT3Wave *iface, XACTVOLUME volume)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(%f)\n", This, volume);
+
+ return FACTWave_SetVolume(This->fact_wave, volume);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_SetMatrixCoefficients(IXACT3Wave *iface,
+ UINT32 uSrcChannelCount, UINT32 uDstChannelCount,
+ float *pMatrixCoefficients)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(%u, %u, %p)\n", This, uSrcChannelCount, uDstChannelCount,
+ pMatrixCoefficients);
+
+ return FACTWave_SetMatrixCoefficients(This->fact_wave, uSrcChannelCount,
+ uDstChannelCount, pMatrixCoefficients);
+}
+
+static HRESULT WINAPI IXACT3WaveImpl_GetProperties(IXACT3Wave *iface,
+ XACT_WAVE_INSTANCE_PROPERTIES *pProperties)
+{
+ XACT3WaveImpl *This = impl_from_IXACT3Wave(iface);
+
+ TRACE("(%p)->(%p)\n", This, pProperties);
+
+ return FACTWave_GetProperties(This->fact_wave,
+ (FACTWaveInstanceProperties*) pProperties);
+}
+
+static const IXACT3WaveVtbl XACT3Wave_Vtbl =
+{
+ IXACT3WaveImpl_Destroy,
+ IXACT3WaveImpl_Play,
+ IXACT3WaveImpl_Stop,
+ IXACT3WaveImpl_Pause,
+ IXACT3WaveImpl_GetState,
+ IXACT3WaveImpl_SetPitch,
+ IXACT3WaveImpl_SetVolume,
+ IXACT3WaveImpl_SetMatrixCoefficients,
+ IXACT3WaveImpl_GetProperties
+};
+
typedef struct _XACT3WaveBankImpl {
IXACT3WaveBank IXACT3WaveBank_iface;
@@ -377,9 +491,36 @@ static HRESULT WINAPI IXACT3WaveBankImpl_Prepare(IXACT3WaveBank *iface,
XACTLOOPCOUNT nLoopCount, IXACT3Wave** ppWave)
{
XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
- FIXME("(%p)->(0x%x, %u, 0x%x, %u, %p): stub!\n", This, nWaveIndex, dwFlags,
+ XACT3WaveImpl *wave;
+ FACTWave *fwave;
+ UINT ret;
+
+ TRACE("(%p)->(0x%x, %u, 0x%x, %u, %p)\n", This, nWaveIndex, dwFlags,
dwPlayOffset, nLoopCount, ppWave);
- return E_NOTIMPL;
+
+ ret = FACTWaveBank_Prepare(This->fact_wavebank, nWaveIndex, dwFlags,
+ dwPlayOffset, nLoopCount, &fwave);
+ if(ret != 0)
+ {
+ ERR("Failed to CreateWave: %d\n", ret);
+ return E_FAIL;
+ }
+
+ wave = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wave));
+ if (!wave)
+ {
+ FACTWave_Destroy(fwave);
+ ERR("Failed to allocate XACT3WaveImpl!");
+ return E_OUTOFMEMORY;
+ }
+
+ wave->IXACT3Wave_iface.lpVtbl = &XACT3Wave_Vtbl;
+ wave->fact_wave = fwave;
+ *ppWave = (IXACT3Wave*)wave;
+
+ TRACE("Created Wave: %p\n", wave);
+
+ return S_OK;
}
static HRESULT WINAPI IXACT3WaveBankImpl_Play(IXACT3WaveBank *iface,
More information about the wine-cvs
mailing list