[AUDIO-BRINGUP]

- Pass audio device id to wdmaud.drv callback functions
- Extend VALIDATE_MMSYS_PARAMETER macro
- Handle case when the caller does not pass handle of mixer, but a device id
- Pass device id to mmixer library
- Remove dead code
- MS sndvol32.exe now gets further, but crashes in user32 IntCallMessageProc

svn path=/branches/audio-bringup/; revision=49931
This commit is contained in:
Johannes Anderwald 2010-12-03 16:49:33 +00:00
parent 6c8e7899a9
commit 6cee9e1837
6 changed files with 114 additions and 107 deletions

View file

@ -20,6 +20,7 @@
MMRESULT
MmeGetLineInfo(
IN UINT DeviceId,
IN UINT Message,
IN DWORD_PTR PrivateHandle,
IN DWORD_PTR Parameter1,
@ -32,6 +33,21 @@ MmeGetLineInfo(
//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;
@ -46,7 +62,7 @@ MmeGetLineInfo(
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;
}
@ -100,7 +116,7 @@ mxdMessage(
(LPWAVEOPENDESC) Parameter1, /* unused */
Parameter2,
(DWORD*) PrivateHandle);
VALIDATE_MMSYS_PARAMETER(*(DWORD_PTR*)PrivateHandle);
break;
}
@ -113,7 +129,8 @@ mxdMessage(
case MXDM_GETCONTROLDETAILS :
{
Result = MmeGetLineInfo(Message,
Result = MmeGetLineInfo(DeviceId,
Message,
PrivateHandle,
Parameter1,
Parameter2);
@ -123,7 +140,8 @@ mxdMessage(
case MXDM_SETCONTROLDETAILS :
{
Result = MmeGetLineInfo(Message,
Result = MmeGetLineInfo(DeviceId,
Message,
PrivateHandle,
Parameter1,
Parameter2);
@ -133,7 +151,8 @@ mxdMessage(
case MXDM_GETLINECONTROLS :
{
Result = MmeGetLineInfo(Message,
Result = MmeGetLineInfo(DeviceId,
Message,
PrivateHandle,
Parameter1,
Parameter2);
@ -143,7 +162,8 @@ mxdMessage(
case MXDM_GETLINEINFO :
{
Result = MmeGetLineInfo(Message,
Result = MmeGetLineInfo(DeviceId,
Message,
PrivateHandle,
Parameter1,
Parameter2);

View file

@ -89,7 +89,7 @@ MMixerOpen(
if (Status != MM_STATUS_SUCCESS)
{
/* invalid context passed */
DPRINT1("invalid context\n");
DPRINT1("invalid context\n");
return Status;
}
@ -98,7 +98,7 @@ MMixerOpen(
if (!MixerInfo)
{
/* invalid mixer id */
DPRINT1("invalid mixer id %lu\n", MixerId);
DPRINT1("invalid mixer id %lu\n", MixerId);
return MM_STATUS_INVALID_PARAMETER;
}
@ -115,8 +115,9 @@ MMixerOpen(
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;
@ -131,6 +132,17 @@ MMixerGetLineInfo(
/* 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;
@ -220,6 +232,7 @@ MIXER_STATUS
MMixerGetLineControls(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERLINECONTROLSW MixerLineControls)
{
@ -238,6 +251,18 @@ MMixerGetLineControls(
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)
@ -312,6 +337,7 @@ MIXER_STATUS
MMixerSetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails)
{
@ -330,6 +356,18 @@ MMixerSetControlDetails(
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;
@ -362,6 +400,7 @@ MIXER_STATUS
MMixerGetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails)
{
@ -380,6 +419,18 @@ MMixerGetControlDetails(
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;

View file

@ -149,7 +149,8 @@ MMixerOpen(
MIXER_STATUS
MMixerGetLineInfo(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERLINEW MixerLine);
@ -157,6 +158,7 @@ MIXER_STATUS
MMixerGetLineControls(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERLINECONTROLSW MixerLineControls);
@ -164,6 +166,7 @@ MIXER_STATUS
MMixerSetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails);
@ -171,6 +174,7 @@ MIXER_STATUS
MMixerGetControlDetails(
IN PMIXER_CONTEXT MixerContext,
IN HANDLE MixerHandle,
IN ULONG MixerId,
IN ULONG Flags,
OUT LPMIXERCONTROLDETAILS MixerControlDetails);