From 85cde828b222cb2f79f72ca264ac3db3c48b86cd Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 11 Jul 2009 23:21:09 +0000 Subject: [PATCH] - Implement retrieving position svn path=/trunk/; revision=41899 --- reactos/lib/drivers/sound/mmebuddy/mmewrap.c | 45 ++++++++++++++++++- .../lib/drivers/sound/mmebuddy/wave/format.c | 3 +- .../drivers/sound/mmebuddy/wave/wodMessage.c | 1 + 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/reactos/lib/drivers/sound/mmebuddy/mmewrap.c b/reactos/lib/drivers/sound/mmebuddy/mmewrap.c index 321efbb21a6..b78a8d78a11 100644 --- a/reactos/lib/drivers/sound/mmebuddy/mmewrap.c +++ b/reactos/lib/drivers/sound/mmebuddy/mmewrap.c @@ -121,7 +121,7 @@ MmeOpenWaveDevice( if ( ! MMSUCCESS(Result) ) return TranslateInternalMmResult(Result); - Result = SetWaveDeviceFormat(SoundDeviceInstance, Format, sizeof(WAVEFORMATEX)); + Result = SetWaveDeviceFormat(SoundDeviceInstance, DeviceId, Format, sizeof(WAVEFORMATEX)); if ( ! MMSUCCESS(Result) ) { /* TODO: Destroy sound instance */ @@ -204,3 +204,46 @@ MmeResetWavePlayback( return StopStreaming(SoundDeviceInstance); } + +MMRESULT +MmeGetPosition( + IN MMDEVICE_TYPE DeviceType, + IN DWORD DeviceId, + IN DWORD PrivateHandle, + IN MMTIME* Time, + IN DWORD Size) +{ + MMRESULT Result; + PSOUND_DEVICE_INSTANCE SoundDeviceInstance; + PSOUND_DEVICE SoundDevice; + PMMFUNCTION_TABLE FunctionTable; + + VALIDATE_MMSYS_PARAMETER( PrivateHandle ); + SoundDeviceInstance = (PSOUND_DEVICE_INSTANCE) PrivateHandle; + + if ( ! IsValidSoundDeviceInstance(SoundDeviceInstance) ) + return MMSYSERR_INVALHANDLE; + + Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice); + if ( ! MMSUCCESS(Result) ) + return TranslateInternalMmResult(Result); + + if ( Size != sizeof(MMTIME) ) + return MMSYSERR_INVALPARAM; + + Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable); + if ( ! MMSUCCESS(Result) ) + return TranslateInternalMmResult(Result); + + if ( FunctionTable->GetPos == NULL ) + { + /* This indicates bad practice, really! If you can open, why not close?! */ + return MMSYSERR_NOTSUPPORTED; + } + + /* Call the driver */ + Result = FunctionTable->GetPos(SoundDeviceInstance, Time); + + return Result; +} + diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/format.c b/reactos/lib/drivers/sound/mmebuddy/wave/format.c index 1b59c9ea86a..ecc5bbc1d9a 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/format.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/format.c @@ -53,6 +53,7 @@ QueryWaveDeviceFormatSupport( MMRESULT SetWaveDeviceFormat( IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, + IN DWORD DeviceId, IN LPWAVEFORMATEX Format, IN DWORD FormatSize) { @@ -87,5 +88,5 @@ SetWaveDeviceFormat( if ( ! FunctionTable->SetWaveFormat ) return MMSYSERR_NOTSUPPORTED; - return FunctionTable->SetWaveFormat(SoundDeviceInstance, Format, FormatSize); + return FunctionTable->SetWaveFormat(SoundDeviceInstance, DeviceId, Format, FormatSize); } diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/wodMessage.c b/reactos/lib/drivers/sound/mmebuddy/wave/wodMessage.c index 7c456f4260e..968a50e5cbf 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/wodMessage.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/wodMessage.c @@ -113,6 +113,7 @@ wodMessage( case WODM_GETPOS : { + Result = MmeGetPosition(WAVE_OUT_DEVICE_TYPE, DeviceId, PrivateHandle, (MMTIME*)Parameter1, Parameter2); break; } }