MMRESULT
WdmAudGetMixerCapabilties(
- IN ULONG DeviceId,
+ IN ULONG DeviceId,
LPMIXERCAPSW Capabilities)
{
if (MMixerGetCapabilities(&MixerContext, DeviceId, Capabilities) == MM_STATUS_SUCCESS)
MMRESULT
WdmAudGetLineInfo(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERLINEW MixLine,
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_ERROR;
MMRESULT
WdmAudGetLineControls(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERLINECONTROLSW MixControls,
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_ERROR;
MMRESULT
WdmAudSetControlDetails(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails,
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_ERROR;
MMRESULT
WdmAudGetControlDetails(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails,
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_ERROR;
MMRESULT
WdmAudQueryMixerInfoByMMixer(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
+ IN DWORD MixerId,
IN UINT uMsg,
IN LPVOID Parameter,
IN DWORD Flags)
LPMIXERLINEW MixLine;
LPMIXERLINECONTROLSW MixControls;
LPMIXERCONTROLDETAILS MixDetails;
+ HANDLE hMixer = NULL;
MixLine = (LPMIXERLINEW)Parameter;
MixControls = (LPMIXERLINECONTROLSW)Parameter;
/* FIXME param checks */
+ if (SoundDeviceInstance)
+ {
+ hMixer = SoundDeviceInstance->Handle;
+ }
+
switch(uMsg)
{
case MXDM_GETLINEINFO:
- return WdmAudGetLineInfo(SoundDeviceInstance->Handle, MixLine, Flags);
+ return WdmAudGetLineInfo(hMixer, MixerId, MixLine, Flags);
case MXDM_GETLINECONTROLS:
- return WdmAudGetLineControls(SoundDeviceInstance->Handle, MixControls, Flags);
+ return WdmAudGetLineControls(hMixer, MixerId, MixControls, Flags);
case MXDM_SETCONTROLDETAILS:
- return WdmAudSetControlDetails(SoundDeviceInstance->Handle, MixDetails, Flags);
- break;
+ return WdmAudSetControlDetails(hMixer, MixerId, MixDetails, Flags);
case MXDM_GETCONTROLDETAILS:
- return WdmAudGetControlDetails(SoundDeviceInstance->Handle, MixDetails, Flags);
- break;
+ return WdmAudGetControlDetails(hMixer, MixerId, MixDetails, Flags);
default:
+ DPRINT1("MixerId %lu, uMsg %lu, Parameter %p, Flags %lu\n", MixerId, uMsg, Parameter, Flags);
SND_ASSERT(0);
return MMSYSERR_NOTSUPPORTED;
}
MMRESULT
WdmAudGetLineInfo(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERLINEW MixLine,
IN ULONG Flags);
MMRESULT
WdmAudGetLineControls(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERLINECONTROLSW MixControls,
IN ULONG Flags);
MMRESULT
WdmAudSetControlDetails(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails,
IN ULONG Flags);
MMRESULT
WdmAudGetControlDetails(
IN HANDLE hMixer,
+ IN DWORD MixerId,
IN LPMIXERCONTROLDETAILS MixDetails,
IN ULONG Flags);
MMRESULT
WdmAudQueryMixerInfoByMMixer(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
+ IN DWORD MixerId,
IN UINT uMsg,
IN LPVOID Parameter,
IN DWORD Flags);
MMRESULT
WdmAudCleanupByMMixer();
-/* legacy.c */
-
-MMRESULT
-WdmAudCleanupByLegacy();
-
-MMRESULT
-WdmAudGetCapabilitiesByLegacy(
- IN PSOUND_DEVICE SoundDevice,
- IN DWORD DeviceId,
- OUT PVOID Capabilities,
- IN DWORD CapabilitiesSize);
-
-MMRESULT
-WdmAudOpenSoundDeviceByLegacy();
-
-MMRESULT
-WdmAudCloseSoundDeviceByLegacy(
- IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
- IN PVOID Handle);
-
-MMRESULT
-WdmAudGetDeviceInterfaceStringByLegacy(
- IN MMDEVICE_TYPE DeviceType,
- IN DWORD DeviceId,
- IN LPWSTR Interface,
- IN DWORD InterfaceLength,
- OUT DWORD * InterfaceSize);
-
-MMRESULT
-WdmAudSetMixerDeviceFormatByLegacy(
- IN PSOUND_DEVICE_INSTANCE Instance,
- IN DWORD DeviceId,
- IN PWAVEFORMATEX WaveFormat,
- IN DWORD WaveFormatSize);
-
-MMRESULT
-WdmAudQueryMixerInfoByLegacy(
- IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
- IN UINT uMsg,
- IN LPVOID Parameter,
- IN DWORD Flags);
-
-MMRESULT
-WdmAudSetWaveDeviceFormatByLegacy(
- IN PSOUND_DEVICE_INSTANCE Instance,
- IN DWORD DeviceId,
- IN PWAVEFORMATEX WaveFormat,
- IN DWORD WaveFormatSize);
-
-MMRESULT
-WdmAudSetWaveStateByLegacy(
- IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
- IN BOOL bStart);
-
-MMRESULT
-WdmAudResetStreamByLegacy(
- IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
- IN MMDEVICE_TYPE DeviceType,
- IN BOOLEAN bStartReset);
-
-MMRESULT
-WdmAudGetWavePositionByLegacy(
- IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
- IN MMTIME* Time);
-
-MMRESULT
-WriteFileEx_Committer2(
- IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
- IN PVOID OffsetPtr,
- IN DWORD Length,
- IN PSOUND_OVERLAPPED Overlap,
- IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine);
-
-MMRESULT
-WdmAudGetNumWdmDevsByLegacy(
- IN MMDEVICE_TYPE DeviceType,
- OUT DWORD* DeviceCount);
-
-DWORD
-WINAPI
-MixerEventThreadRoutine(
- LPVOID Parameter);
-
#endif
{ \
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; \
} \
}
typedef MMRESULT (*MMMIXERQUERY_FUNC) (
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
+ IN DWORD DeviceId,
IN UINT uMsg,
IN LPVOID Parameter,
IN DWORD Flags);
-
typedef MMRESULT (*MMWAVEQUERYFORMATSUPPORT_FUNC)(
IN struct _SOUND_DEVICE* Device,
IN PWAVEFORMATEX WaveFormat,
MMRESULT
MmeGetLineInfo(
+ IN UINT DeviceId,
IN UINT Message,
IN DWORD_PTR PrivateHandle,
IN DWORD_PTR Parameter1,
//SND_TRACE(L"Getting mixer info %u\n", Message);
+ if ( PrivateHandle == 0 )
+ {
+ Result = GetSoundDevice(MIXER_DEVICE_TYPE, DeviceId, &SoundDevice);
+
+ if ( ! MMSUCCESS(Result) )
+ return TranslateInternalMmResult(Result);
+
+ Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
+ if ( ! MMSUCCESS(Result) )
+ return TranslateInternalMmResult(Result);
+
+ Result = FunctionTable->QueryMixerInfo(NULL, DeviceId, Message, (LPVOID)Parameter1, Parameter2);
+ return Result;
+ }
+
VALIDATE_MMSYS_PARAMETER( PrivateHandle );
SoundDeviceInstance = (PSOUND_DEVICE_INSTANCE) PrivateHandle;
if ( ! FunctionTable->QueryMixerInfo )
return MMSYSERR_NOTSUPPORTED;
- Result = FunctionTable->QueryMixerInfo(SoundDeviceInstance, Message, (LPVOID)Parameter1, Parameter2);
+ Result = FunctionTable->QueryMixerInfo(SoundDeviceInstance, DeviceId, Message, (LPVOID)Parameter1, Parameter2);
return Result;
}
(LPWAVEOPENDESC) Parameter1, /* unused */
Parameter2,
(DWORD*) PrivateHandle);
-
+ VALIDATE_MMSYS_PARAMETER(*(DWORD_PTR*)PrivateHandle);
break;
}
case MXDM_GETCONTROLDETAILS :
{
- Result = MmeGetLineInfo(Message,
+ Result = MmeGetLineInfo(DeviceId,
+ Message,
PrivateHandle,
Parameter1,
Parameter2);
case MXDM_SETCONTROLDETAILS :
{
- Result = MmeGetLineInfo(Message,
+ Result = MmeGetLineInfo(DeviceId,
+ Message,
PrivateHandle,
Parameter1,
Parameter2);
case MXDM_GETLINECONTROLS :
{
- Result = MmeGetLineInfo(Message,
+ Result = MmeGetLineInfo(DeviceId,
+ Message,
PrivateHandle,
Parameter1,
Parameter2);
case MXDM_GETLINEINFO :
{
- Result = MmeGetLineInfo(Message,
+ Result = MmeGetLineInfo(DeviceId,
+ Message,
PrivateHandle,
Parameter1,
Parameter2);
if (Status != MM_STATUS_SUCCESS)
{
/* invalid context passed */
- DPRINT1("invalid context\n");
+ DPRINT1("invalid context\n");
return Status;
}
if (!MixerInfo)
{
/* invalid mixer id */
- DPRINT1("invalid mixer id %lu\n", MixerId);
+ DPRINT1("invalid mixer id %lu\n", MixerId);
return MM_STATUS_INVALID_PARAMETER;
}
MIXER_STATUS
MMixerGetLineInfo(
IN PMIXER_CONTEXT MixerContext,
- IN HANDLE MixerHandle,
- IN ULONG Flags,
+ IN HANDLE MixerHandle,
+ IN ULONG MixerId,
+ IN ULONG Flags,
OUT LPMIXERLINEW MixerLine)
{
MIXER_STATUS Status;
/* invalid context passed */
return Status;
}
+ if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+ {
+ /* caller passed mixer id */
+ MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+ if (!MixerHandle)
+ {
+ /* invalid parameter */
+ return MM_STATUS_INVALID_PARAMETER;
+ }
+ }
/* clear hmixer from flags */
Flags &=~MIXER_OBJECTF_HMIXER;
MMixerGetLineControls(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERLINECONTROLSW MixerLineControls)
{
return Status;
}
+ if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+ {
+ /* caller passed mixer id */
+ MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+ if (!MixerHandle)
+ {
+ /* invalid parameter */
+ return MM_STATUS_INVALID_PARAMETER;
+ }
+ }
+
Flags &= ~MIXER_OBJECTF_HMIXER;
if (Flags == MIXER_GETLINECONTROLSF_ALL)
MMixerSetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails)
{
return Status;
}
+ if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+ {
+ /* caller passed mixer id */
+ MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+ if (!MixerHandle)
+ {
+ /* invalid parameter */
+ return MM_STATUS_INVALID_PARAMETER;
+ }
+ }
+
/* get mixer info */
MixerInfo = (LPMIXER_INFO)MixerHandle;
MMixerGetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails)
{
return Status;
}
+ if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+ {
+ /* caller passed mixer id */
+ MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+ if (!MixerHandle)
+ {
+ /* invalid parameter */
+ return MM_STATUS_INVALID_PARAMETER;
+ }
+ }
+
/* get mixer info */
MixerInfo = (LPMIXER_INFO)MixerHandle;
MIXER_STATUS
MMixerGetLineInfo(
IN PMIXER_CONTEXT MixerContext,
- IN HANDLE MixerHandle,
+ IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERLINEW MixerLine);
MMixerGetLineControls(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERLINECONTROLSW MixerLineControls);
MMixerSetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails);
MMixerGetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
+ IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails);