#define DEFINE_GETCAPS_FUNCTYPE(func_typename, caps_type) \
typedef MMRESULT (*func_typename)( \
IN struct _SOUND_DEVICE* SoundDevice, \
+ IN DWORD DeviceId, \
OUT caps_type Capabilities, \
IN DWORD CapabilitiesSize);
typedef MMRESULT (*MMWAVESETFORMAT_FUNC)(
IN struct _SOUND_DEVICE_INSTANCE* Instance,
+ IN DWORD DeviceId,
IN PWAVEFORMATEX WaveFormat,
IN DWORD WaveFormatSize);
IN PVOID Buffer,
IN DWORD Length);
+typedef MMRESULT(*MMGETPOS_FUNC)(
+ IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
+ IN MMTIME* Time);
+
typedef struct _MMFUNCTION_TABLE
{
union
WAVE_COMMIT_FUNC CommitWaveBuffer;
+ MMGETPOS_FUNC GetPos;
+
// Redundant
//MMWAVEHEADER_FUNC PrepareWaveHeader;
//MMWAVEHEADER_FUNC UnprepareWaveHeader;
//PWAVEHDR CurrentWaveHeader;
DWORD OutstandingBuffers;
DWORD LoopsRemaining;
+ DWORD FrameSize;
+ DWORD BufferCount;
} SOUND_DEVICE_INSTANCE, *PSOUND_DEVICE_INSTANCE;
/* This lives in WAVEHDR.reserved */
VOID
NotifyMmeClient(
IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
- IN DWORD Message,
- IN DWORD Parameter);
+ IN UINT Message,
+ IN DWORD_PTR Parameter);
MMRESULT
MmeGetSoundDeviceCapabilities(
IN MMDEVICE_TYPE DeviceType,
IN DWORD DeviceId,
- IN PVOID Capabilities,
+ IN DWORD_PTR Capabilities,
IN DWORD CapabilitiesSize);
MMRESULT
MmeOpenWaveDevice(
IN MMDEVICE_TYPE DeviceType,
- IN DWORD DeviceId,
+ IN UINT DeviceId,
IN LPWAVEOPENDESC OpenParameters,
IN DWORD Flags,
- OUT DWORD* PrivateHandle);
+ OUT SIZE_T* PrivateHandle);
MMRESULT
MmeCloseDevice(
- IN DWORD PrivateHandle);
+ IN DWORD_PTR PrivateHandle);
+
+MMRESULT
+MmeGetPosition(
+ IN MMDEVICE_TYPE DeviceType,
+ IN DWORD DeviceId,
+ IN DWORD PrivateHandle,
+ IN MMTIME* Time,
+ IN DWORD Size);
+
#define MmePrepareWaveHeader(private_handle, header) \
PrepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
MMRESULT
MmeResetWavePlayback(
- IN DWORD PrivateHandle);
+ IN SIZE_T PrivateHandle);
/*
MMRESULT
GetSoundDeviceCapabilities(
IN PSOUND_DEVICE SoundDevice,
+ IN DWORD DeviceId,
OUT PVOID Capabilities,
IN DWORD CapabilitiesSize);
MMRESULT
SetWaveDeviceFormat(
IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
+ IN DWORD DeviceId,
IN LPWAVEFORMATEX Format,
IN DWORD FormatSize);