[WDMAUD.DRV]

- Merge from audio branch
- Fix build 
[WDMAUD_KERNEL]
- Fix build 
- Update to new mmixer library interface

svn path=/trunk/; revision=50532
This commit is contained in:
Johannes Anderwald 2011-01-28 11:23:37 +00:00
parent c6b26fa452
commit 2b27c4f0de
5 changed files with 141 additions and 44 deletions

View file

@ -800,6 +800,7 @@ WdmAudResetStreamByLegacy(
MMRESULT MMRESULT
WdmAudQueryMixerInfoByLegacy( WdmAudQueryMixerInfoByLegacy(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
IN DWORD DeviceId,
IN UINT uMsg, IN UINT uMsg,
IN LPVOID Parameter, IN LPVOID Parameter,
IN DWORD Flags) IN DWORD Flags)
@ -819,6 +820,7 @@ WdmAudQueryMixerInfoByLegacy(
ZeroMemory(&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO)); ZeroMemory(&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO));
DeviceInfo.hDevice = Handle; DeviceInfo.hDevice = Handle;
DeviceInfo.DeviceIndex = DeviceId;
DeviceInfo.DeviceType = MIXER_DEVICE_TYPE; DeviceInfo.DeviceType = MIXER_DEVICE_TYPE;
DeviceInfo.Flags = Flags; DeviceInfo.Flags = Flags;

View file

@ -9,6 +9,18 @@
#include "wdmaud.h" #include "wdmaud.h"
typedef struct
{
KSSTREAM_HEADER Header;
HANDLE hDevice;
PSOUND_OVERLAPPED Overlap;
LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine;
DWORD IoCtl;
}IO_PACKET, *LPIO_PACKET;
BOOL MMixerLibraryInitialized = FALSE;
PVOID Alloc(ULONG NumBytes); PVOID Alloc(ULONG NumBytes);
MIXER_STATUS Close(HANDLE hDevice); MIXER_STATUS Close(HANDLE hDevice);
@ -110,7 +122,7 @@ Free(PVOID Block)
VOID VOID
Copy(PVOID Src, PVOID Dst, ULONG NumBytes) Copy(PVOID Src, PVOID Dst, ULONG NumBytes)
{ {
CopyMemory(Src, Dst, NumBytes); RtlMoveMemory(Src, Dst, NumBytes);
} }
MIXER_STATUS MIXER_STATUS
@ -282,7 +294,6 @@ Enum(
HeapFree(GetProcessHeap(), 0, DetailData); HeapFree(GetProcessHeap(), 0, DetailData);
return MM_STATUS_NO_MEMORY; return MM_STATUS_NO_MEMORY;
} }
DPRINT1("DeviceName %S\n", DetailData->DevicePath);
wcscpy(*DeviceName, DetailData->DevicePath); wcscpy(*DeviceName, DetailData->DevicePath);
HeapFree(GetProcessHeap(), 0, DetailData); HeapFree(GetProcessHeap(), 0, DetailData);
@ -324,6 +335,13 @@ WdmAudInitUserModeMixer()
HDEVINFO DeviceHandle; HDEVINFO DeviceHandle;
MIXER_STATUS Status; MIXER_STATUS Status;
if (MMixerLibraryInitialized)
{
/* library is already initialized */
return TRUE;
}
/* create a device list */ /* create a device list */
DeviceHandle = SetupDiGetClassDevs(&CategoryGuid, DeviceHandle = SetupDiGetClassDevs(&CategoryGuid,
NULL, NULL,
@ -350,6 +368,9 @@ WdmAudInitUserModeMixer()
return FALSE; return FALSE;
} }
/* library is now initialized */
MMixerLibraryInitialized = TRUE;
/* completed successfully */ /* completed successfully */
return TRUE; return TRUE;
} }
@ -363,7 +384,7 @@ WdmAudCleanupByMMixer()
MMRESULT MMRESULT
WdmAudGetMixerCapabilties( WdmAudGetMixerCapabilties(
IN ULONG DeviceId, IN ULONG DeviceId,
LPMIXERCAPSW Capabilities) LPMIXERCAPSW Capabilities)
{ {
if (MMixerGetCapabilities(&MixerContext, DeviceId, Capabilities) == MM_STATUS_SUCCESS) if (MMixerGetCapabilities(&MixerContext, DeviceId, Capabilities) == MM_STATUS_SUCCESS)
@ -375,10 +396,11 @@ WdmAudGetMixerCapabilties(
MMRESULT MMRESULT
WdmAudGetLineInfo( WdmAudGetLineInfo(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERLINEW MixLine, IN LPMIXERLINEW MixLine,
IN ULONG Flags) IN ULONG Flags)
{ {
if (MMixerGetLineInfo(&MixerContext, hMixer, Flags, MixLine) == MM_STATUS_SUCCESS) if (MMixerGetLineInfo(&MixerContext, hMixer, MixerId, Flags, MixLine) == MM_STATUS_SUCCESS)
return MMSYSERR_NOERROR; return MMSYSERR_NOERROR;
return MMSYSERR_ERROR; return MMSYSERR_ERROR;
@ -387,10 +409,11 @@ WdmAudGetLineInfo(
MMRESULT MMRESULT
WdmAudGetLineControls( WdmAudGetLineControls(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERLINECONTROLSW MixControls, IN LPMIXERLINECONTROLSW MixControls,
IN ULONG Flags) IN ULONG Flags)
{ {
if (MMixerGetLineControls(&MixerContext, hMixer, Flags, MixControls) == MM_STATUS_SUCCESS) if (MMixerGetLineControls(&MixerContext, hMixer, MixerId, Flags, MixControls) == MM_STATUS_SUCCESS)
return MMSYSERR_NOERROR; return MMSYSERR_NOERROR;
return MMSYSERR_ERROR; return MMSYSERR_ERROR;
@ -399,10 +422,11 @@ WdmAudGetLineControls(
MMRESULT MMRESULT
WdmAudSetControlDetails( WdmAudSetControlDetails(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails, IN LPMIXERCONTROLDETAILS MixDetails,
IN ULONG Flags) IN ULONG Flags)
{ {
if (MMixerSetControlDetails(&MixerContext, hMixer, Flags, MixDetails) == MM_STATUS_SUCCESS) if (MMixerSetControlDetails(&MixerContext, hMixer, MixerId, Flags, MixDetails) == MM_STATUS_SUCCESS)
return MMSYSERR_NOERROR; return MMSYSERR_NOERROR;
return MMSYSERR_ERROR; return MMSYSERR_ERROR;
@ -412,10 +436,11 @@ WdmAudSetControlDetails(
MMRESULT MMRESULT
WdmAudGetControlDetails( WdmAudGetControlDetails(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails, IN LPMIXERCONTROLDETAILS MixDetails,
IN ULONG Flags) IN ULONG Flags)
{ {
if (MMixerGetControlDetails(&MixerContext, hMixer, Flags, MixDetails) == MM_STATUS_SUCCESS) if (MMixerGetControlDetails(&MixerContext, hMixer, MixerId, Flags, MixDetails) == MM_STATUS_SUCCESS)
return MMSYSERR_NOERROR; return MMSYSERR_NOERROR;
return MMSYSERR_ERROR; return MMSYSERR_ERROR;
@ -589,6 +614,7 @@ WdmAudGetNumWdmDevsByMMixer(
MMRESULT MMRESULT
WdmAudQueryMixerInfoByMMixer( WdmAudQueryMixerInfoByMMixer(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
IN DWORD MixerId,
IN UINT uMsg, IN UINT uMsg,
IN LPVOID Parameter, IN LPVOID Parameter,
IN DWORD Flags) IN DWORD Flags)
@ -596,6 +622,7 @@ WdmAudQueryMixerInfoByMMixer(
LPMIXERLINEW MixLine; LPMIXERLINEW MixLine;
LPMIXERLINECONTROLSW MixControls; LPMIXERLINECONTROLSW MixControls;
LPMIXERCONTROLDETAILS MixDetails; LPMIXERCONTROLDETAILS MixDetails;
HANDLE hMixer = NULL;
MixLine = (LPMIXERLINEW)Parameter; MixLine = (LPMIXERLINEW)Parameter;
MixControls = (LPMIXERLINECONTROLSW)Parameter; MixControls = (LPMIXERLINECONTROLSW)Parameter;
@ -603,19 +630,23 @@ WdmAudQueryMixerInfoByMMixer(
/* FIXME param checks */ /* FIXME param checks */
if (SoundDeviceInstance)
{
hMixer = SoundDeviceInstance->Handle;
}
switch(uMsg) switch(uMsg)
{ {
case MXDM_GETLINEINFO: case MXDM_GETLINEINFO:
return WdmAudGetLineInfo(SoundDeviceInstance->Handle, MixLine, Flags); return WdmAudGetLineInfo(hMixer, MixerId, MixLine, Flags);
case MXDM_GETLINECONTROLS: case MXDM_GETLINECONTROLS:
return WdmAudGetLineControls(SoundDeviceInstance->Handle, MixControls, Flags); return WdmAudGetLineControls(hMixer, MixerId, MixControls, Flags);
case MXDM_SETCONTROLDETAILS: case MXDM_SETCONTROLDETAILS:
return WdmAudSetControlDetails(SoundDeviceInstance->Handle, MixDetails, Flags); return WdmAudSetControlDetails(hMixer, MixerId, MixDetails, Flags);
break;
case MXDM_GETCONTROLDETAILS: case MXDM_GETCONTROLDETAILS:
return WdmAudGetControlDetails(SoundDeviceInstance->Handle, MixDetails, Flags); return WdmAudGetControlDetails(hMixer, MixerId, MixDetails, Flags);
break;
default: default:
DPRINT1("MixerId %lu, uMsg %lu, Parameter %p, Flags %lu\n", MixerId, uMsg, Parameter, Flags);
SND_ASSERT(0); SND_ASSERT(0);
return MMSYSERR_NOTSUPPORTED; return MMSYSERR_NOTSUPPORTED;
} }
@ -633,6 +664,25 @@ WdmAudGetDeviceInterfaceStringByMMixer(
return MMSYSERR_NOTSUPPORTED; return MMSYSERR_NOTSUPPORTED;
} }
VOID
CALLBACK
MixerEventCallback(
IN PVOID MixerEventContext,
IN HANDLE hMixer,
IN ULONG NotificationType,
IN ULONG Value)
{
PSOUND_DEVICE_INSTANCE Instance = (PSOUND_DEVICE_INSTANCE)MixerEventContext;
DriverCallback(Instance->WinMM.ClientCallback,
HIWORD(Instance->WinMM.Flags),
Instance->WinMM.Handle,
NotificationType,
Instance->WinMM.ClientCallbackInstanceData,
(DWORD_PTR)Value,
0);
}
MMRESULT MMRESULT
WdmAudSetMixerDeviceFormatByMMixer( WdmAudSetMixerDeviceFormatByMMixer(
IN PSOUND_DEVICE_INSTANCE Instance, IN PSOUND_DEVICE_INSTANCE Instance,
@ -640,11 +690,7 @@ WdmAudSetMixerDeviceFormatByMMixer(
IN PWAVEFORMATEX WaveFormat, IN PWAVEFORMATEX WaveFormat,
IN DWORD WaveFormatSize) IN DWORD WaveFormatSize)
{ {
Instance->hNotifyEvent = CreateEventW(NULL, FALSE, FALSE, NULL); if (MMixerOpen(&MixerContext, DeviceId, (PVOID)Instance, MixerEventCallback, &Instance->Handle) == MM_STATUS_SUCCESS)
if ( ! Instance->hNotifyEvent )
return MMSYSERR_NOMEM;
if (MMixerOpen(&MixerContext, DeviceId, Instance->hNotifyEvent, NULL /* FIXME */, &Instance->Handle) == MM_STATUS_SUCCESS)
return MMSYSERR_NOERROR; return MMSYSERR_NOERROR;
return MMSYSERR_BADDEVICEID; return MMSYSERR_BADDEVICEID;
@ -706,7 +752,19 @@ WdmAudResetStreamByMMixer(
IN MMDEVICE_TYPE DeviceType, IN MMDEVICE_TYPE DeviceType,
IN BOOLEAN bStartReset) IN BOOLEAN bStartReset)
{ {
/* FIXME */ MIXER_STATUS Status;
if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
{
Status = MMixerSetWaveResetState(&MixerContext, SoundDeviceInstance->Handle, bStartReset);
if (Status == MM_STATUS_SUCCESS)
{
/* completed successfully */
return MMSYSERR_NOERROR;
}
}
return MMSYSERR_NOTSUPPORTED; return MMSYSERR_NOTSUPPORTED;
} }
@ -719,6 +777,29 @@ WdmAudGetWavePositionByMMixer(
return MMSYSERR_NOTSUPPORTED; return MMSYSERR_NOTSUPPORTED;
} }
DWORD
WINAPI
IoStreamingThread(
LPVOID lpParameter)
{
DWORD Length;
MMRESULT Result;
LPIO_PACKET Packet = (LPIO_PACKET)lpParameter;
Result = SyncOverlappedDeviceIoControl(Packet->hDevice,
Packet->IoCtl,
NULL,
0,
&Packet->Header,
sizeof(KSSTREAM_HEADER),
&Length);
Packet->CompletionRoutine(ERROR_SUCCESS, Packet->Header.DataUsed, (LPOVERLAPPED)Packet->Overlap);
HeapFree(GetProcessHeap(), 0, Packet);
return 0;
}
MMRESULT MMRESULT
WdmAudCommitWaveBufferByMMixer( WdmAudCommitWaveBufferByMMixer(
IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
@ -727,10 +808,11 @@ WdmAudCommitWaveBufferByMMixer(
IN PSOUND_OVERLAPPED Overlap, IN PSOUND_OVERLAPPED Overlap,
IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine) IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine)
{ {
KSSTREAM_HEADER Packet;
PSOUND_DEVICE SoundDevice; PSOUND_DEVICE SoundDevice;
MMDEVICE_TYPE DeviceType; MMDEVICE_TYPE DeviceType;
MMRESULT Result; MMRESULT Result;
LPIO_PACKET Packet;
HANDLE hThread;
Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice); Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
@ -742,31 +824,37 @@ WdmAudCommitWaveBufferByMMixer(
Result = GetSoundDeviceType(SoundDevice, &DeviceType); Result = GetSoundDeviceType(SoundDevice, &DeviceType);
SND_ASSERT( Result == MMSYSERR_NOERROR ); SND_ASSERT( Result == MMSYSERR_NOERROR );
Packet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IO_PACKET));
if ( ! Packet )
{
/* no memory */
return MMSYSERR_NOMEM;
}
/* setup stream packet */ /* setup stream packet */
ZeroMemory(&Packet, sizeof(KSSTREAM_HEADER)); Packet->Header.Size = sizeof(KSSTREAM_HEADER);
Packet.Size = sizeof(KSSTREAM_HEADER); Packet->Header.PresentationTime.Numerator = 1;
Packet.PresentationTime.Numerator = 1; Packet->Header.PresentationTime.Denominator = 1;
Packet.PresentationTime.Denominator = 1; Packet->Header.Data = OffsetPtr;
Packet.Data = OffsetPtr; Packet->Header.FrameExtent = Length;
Packet.FrameExtent = Length; Packet->hDevice = SoundDeviceInstance->Handle;
Packet->Overlap = Overlap;
Packet->CompletionRoutine = CompletionRoutine;
Packet->IoCtl = (DeviceType == WAVE_OUT_DEVICE_TYPE ? IOCTL_KS_WRITE_STREAM : IOCTL_KS_READ_STREAM);
if (DeviceType == WAVE_OUT_DEVICE_TYPE) if (DeviceType == WAVE_OUT_DEVICE_TYPE)
{ {
Packet.DataUsed = Length; Packet->Header.DataUsed = Length;
} }
Result = SyncOverlappedDeviceIoControl(SoundDeviceInstance->Handle, hThread = CreateThread(NULL, 0, IoStreamingThread, (LPVOID)Packet, 0, NULL);
IOCTL_KS_WRITE_STREAM, if (hThread == NULL)
NULL, {
0, /* error */
&Packet, return MMSYSERR_ERROR;
sizeof(KSSTREAM_HEADER), }
&Length);
/* HACK: CloseHandle(hThread);
* don't call completion routine directly
*/
CompletionRoutine(ERROR_SUCCESS, Length, (LPOVERLAPPED)Overlap);
return MMSYSERR_NOERROR; return MMSYSERR_NOERROR;
} }

View file

@ -70,24 +70,28 @@ WdmAudCloseSoundDeviceByMMixer(
MMRESULT MMRESULT
WdmAudGetLineInfo( WdmAudGetLineInfo(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERLINEW MixLine, IN LPMIXERLINEW MixLine,
IN ULONG Flags); IN ULONG Flags);
MMRESULT MMRESULT
WdmAudGetLineControls( WdmAudGetLineControls(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERLINECONTROLSW MixControls, IN LPMIXERLINECONTROLSW MixControls,
IN ULONG Flags); IN ULONG Flags);
MMRESULT MMRESULT
WdmAudSetControlDetails( WdmAudSetControlDetails(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails, IN LPMIXERCONTROLDETAILS MixDetails,
IN ULONG Flags); IN ULONG Flags);
MMRESULT MMRESULT
WdmAudGetControlDetails( WdmAudGetControlDetails(
IN HANDLE hMixer, IN HANDLE hMixer,
IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails, IN LPMIXERCONTROLDETAILS MixDetails,
IN ULONG Flags); IN ULONG Flags);
@ -116,6 +120,7 @@ WdmAudSetMixerDeviceFormatByMMixer(
MMRESULT MMRESULT
WdmAudQueryMixerInfoByMMixer( WdmAudQueryMixerInfoByMMixer(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
IN DWORD DeviceId,
IN UINT uMsg, IN UINT uMsg,
IN LPVOID Parameter, IN LPVOID Parameter,
IN DWORD Flags); IN DWORD Flags);
@ -185,6 +190,7 @@ WdmAudSetMixerDeviceFormatByLegacy(
MMRESULT MMRESULT
WdmAudQueryMixerInfoByLegacy( WdmAudQueryMixerInfoByLegacy(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
IN DWORD DeviceId,
IN UINT uMsg, IN UINT uMsg,
IN LPVOID Parameter, IN LPVOID Parameter,
IN DWORD Flags); IN DWORD Flags);

View file

@ -319,6 +319,7 @@ FreeEventData(IN PVOID EventData)
} }
VOID VOID
CALLBACK
EventCallback( EventCallback(
IN PVOID MixerEventContext, IN PVOID MixerEventContext,
IN HANDLE hMixer, IN HANDLE hMixer,
@ -474,7 +475,7 @@ WdmAudGetControlDetails(
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER; DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
/* query mmixer library */ /* query mmixer library */
Status = MMixerGetControlDetails(&MixerContext, DeviceInfo->hDevice, DeviceInfo->Flags, &DeviceInfo->u.MixDetails); Status = MMixerGetControlDetails(&MixerContext, DeviceInfo->hDevice, DeviceInfo->DeviceIndex, DeviceInfo->Flags, &DeviceInfo->u.MixDetails);
if (Status == MM_STATUS_SUCCESS) if (Status == MM_STATUS_SUCCESS)
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO)); return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
@ -496,7 +497,7 @@ WdmAudGetLineInfo(
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER; DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
/* query mixer library */ /* query mixer library */
Status = MMixerGetLineInfo(&MixerContext, DeviceInfo->hDevice, DeviceInfo->Flags, &DeviceInfo->u.MixLine); Status = MMixerGetLineInfo(&MixerContext, DeviceInfo->hDevice, DeviceInfo->DeviceIndex, DeviceInfo->Flags, &DeviceInfo->u.MixLine);
if (Status == MM_STATUS_SUCCESS) if (Status == MM_STATUS_SUCCESS)
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO)); return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
@ -518,7 +519,7 @@ WdmAudGetLineControls(
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER; DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
/* query mixer library */ /* query mixer library */
Status = MMixerGetLineControls(&MixerContext, DeviceInfo->hDevice, DeviceInfo->Flags, &DeviceInfo->u.MixControls); Status = MMixerGetLineControls(&MixerContext, DeviceInfo->hDevice, DeviceInfo->DeviceIndex, DeviceInfo->Flags, &DeviceInfo->u.MixControls);
if (Status == MM_STATUS_SUCCESS) if (Status == MM_STATUS_SUCCESS)
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO)); return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
@ -542,7 +543,7 @@ WdmAudSetControlDetails(
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER; DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
/* query mixer library */ /* query mixer library */
Status = MMixerSetControlDetails(&MixerContext, DeviceInfo->hDevice, DeviceInfo->Flags, &DeviceInfo->u.MixDetails); Status = MMixerSetControlDetails(&MixerContext, DeviceInfo->hDevice, DeviceInfo->DeviceIndex, DeviceInfo->Flags, &DeviceInfo->u.MixDetails);
if (Status == MM_STATUS_SUCCESS) if (Status == MM_STATUS_SUCCESS)
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO)); return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));

View file

@ -135,7 +135,7 @@
{ \ { \
if ( ! (parameter_condition) ) \ if ( ! (parameter_condition) ) \
{ \ { \
SND_ERR(L"FAILED parameter check: %hS\n", #parameter_condition); \ SND_ERR(L"FAILED parameter check: %hS at File %S Line %lu\n", #parameter_condition, __FILE__, __LINE__); \
return MMSYSERR_INVALPARAM; \ return MMSYSERR_INVALPARAM; \
} \ } \
} }
@ -199,11 +199,11 @@ typedef MMRESULT (*WAVE_COMMIT_FUNC)(
typedef MMRESULT (*MMMIXERQUERY_FUNC) ( typedef MMRESULT (*MMMIXERQUERY_FUNC) (
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
IN DWORD DeviceId,
IN UINT uMsg, IN UINT uMsg,
IN LPVOID Parameter, IN LPVOID Parameter,
IN DWORD Flags); IN DWORD Flags);
typedef MMRESULT (*MMWAVEQUERYFORMATSUPPORT_FUNC)( typedef MMRESULT (*MMWAVEQUERYFORMATSUPPORT_FUNC)(
IN struct _SOUND_DEVICE* Device, IN struct _SOUND_DEVICE* Device,
IN PWAVEFORMATEX WaveFormat, IN PWAVEFORMATEX WaveFormat,