mirror of
https://github.com/reactos/reactos.git
synced 2024-08-31 15:55:41 +00:00
- Implement MIXER_GETLINEINFOF_COMPONENTTYPE for WdmAudGetLineInfo
- Implement MIXER_GETLINECONTROLSF_ONEBYID for WdmAudGetLineControls - Clear MIXER_OBJECTF_HMIXER from Flags - Fix a bug SetGetVolumeControlDetails which fixes retrieving current volume level (verified by sndvol32.exe from XP / mmsys.cpl ReactOS) svn path=/trunk/; revision=43315
This commit is contained in:
parent
d4e6ed42ab
commit
88c42f36e6
|
@ -96,9 +96,12 @@ GetMixerControlById(
|
||||||
{
|
{
|
||||||
if (MixerLineSrc->LineControls[Index].dwControlID == dwControlID)
|
if (MixerLineSrc->LineControls[Index].dwControlID == dwControlID)
|
||||||
{
|
{
|
||||||
*MixerLine = MixerLineSrc;
|
if (MixerLine)
|
||||||
*MixerControl = &MixerLineSrc->LineControls[Index];
|
*MixerLine = MixerLineSrc;
|
||||||
*NodeId = MixerLineSrc->NodeIds[Index];
|
if (MixerControl)
|
||||||
|
*MixerControl = &MixerLineSrc->LineControls[Index];
|
||||||
|
if (NodeId)
|
||||||
|
*NodeId = MixerLineSrc->NodeIds[Index];
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,7 +111,28 @@ GetMixerControlById(
|
||||||
return STATUS_NOT_FOUND;
|
return STATUS_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LPMIXERLINE_EXT
|
||||||
|
GetSourceMixerLineByComponentType(
|
||||||
|
LPMIXER_INFO MixerInfo,
|
||||||
|
DWORD dwComponentType)
|
||||||
|
{
|
||||||
|
PLIST_ENTRY Entry;
|
||||||
|
LPMIXERLINE_EXT MixerLineSrc;
|
||||||
|
|
||||||
|
/* get first entry */
|
||||||
|
Entry = MixerInfo->LineList.Flink;
|
||||||
|
|
||||||
|
while(Entry != &MixerInfo->LineList)
|
||||||
|
{
|
||||||
|
MixerLineSrc = (LPMIXERLINE_EXT)CONTAINING_RECORD(Entry, MIXERLINE_EXT, Entry);
|
||||||
|
if (MixerLineSrc->Line.dwComponentType == dwComponentType)
|
||||||
|
return MixerLineSrc;
|
||||||
|
|
||||||
|
Entry = Entry->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
LPMIXERLINE_EXT
|
LPMIXERLINE_EXT
|
||||||
GetSourceMixerLineByLineId(
|
GetSourceMixerLineByLineId(
|
||||||
|
@ -1761,6 +1785,8 @@ WdmAudGetLineInfo(
|
||||||
/* get device extension */
|
/* get device extension */
|
||||||
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
|
||||||
|
|
||||||
if (DeviceInfo->Flags == MIXER_GETLINEINFOF_DESTINATION)
|
if (DeviceInfo->Flags == MIXER_GETLINEINFOF_DESTINATION)
|
||||||
{
|
{
|
||||||
if ((ULONG)DeviceInfo->hDevice >= DeviceExtension->MixerInfoCount)
|
if ((ULONG)DeviceInfo->hDevice >= DeviceExtension->MixerInfoCount)
|
||||||
|
@ -1822,7 +1848,21 @@ WdmAudGetLineInfo(
|
||||||
RtlCopyMemory(&DeviceInfo->u.MixLine, &MixerLineSrc->Line, sizeof(MIXERLINEW));
|
RtlCopyMemory(&DeviceInfo->u.MixLine, &MixerLineSrc->Line, sizeof(MIXERLINEW));
|
||||||
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
}
|
}
|
||||||
|
else if (DeviceInfo->Flags == MIXER_GETLINEINFOF_COMPONENTTYPE)
|
||||||
|
{
|
||||||
|
if ((ULONG)DeviceInfo->hDevice >= DeviceExtension->MixerInfoCount)
|
||||||
|
{
|
||||||
|
/* invalid parameter */
|
||||||
|
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
MixerLineSrc = GetSourceMixerLineByComponentType(&DeviceExtension->MixerInfo[(ULONG)DeviceInfo->hDevice], DeviceInfo->u.MixLine.dwComponentType);
|
||||||
|
ASSERT(MixerLineSrc);
|
||||||
|
|
||||||
|
/* copy cached data */
|
||||||
|
RtlCopyMemory(&DeviceInfo->u.MixLine, &MixerLineSrc->Line, sizeof(MIXERLINEW));
|
||||||
|
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
|
}
|
||||||
|
|
||||||
DPRINT1("Flags %x\n", DeviceInfo->Flags);
|
DPRINT1("Flags %x\n", DeviceInfo->Flags);
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
|
@ -1841,12 +1881,16 @@ WdmAudGetLineControls(
|
||||||
IN PWDMAUD_CLIENT ClientInfo)
|
IN PWDMAUD_CLIENT ClientInfo)
|
||||||
{
|
{
|
||||||
LPMIXERLINE_EXT MixerLineSrc;
|
LPMIXERLINE_EXT MixerLineSrc;
|
||||||
|
LPMIXERCONTROLW MixerControl;
|
||||||
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
|
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
|
||||||
ULONG Index;
|
ULONG Index;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
/* get device extension */
|
/* get device extension */
|
||||||
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
|
||||||
|
|
||||||
if (DeviceInfo->Flags == MIXER_GETLINECONTROLSF_ALL)
|
if (DeviceInfo->Flags == MIXER_GETLINECONTROLSF_ALL)
|
||||||
{
|
{
|
||||||
if ((ULONG)DeviceInfo->hDevice >= DeviceExtension->MixerInfoCount)
|
if ((ULONG)DeviceInfo->hDevice >= DeviceExtension->MixerInfoCount)
|
||||||
|
@ -1887,6 +1931,22 @@ WdmAudGetLineControls(
|
||||||
DPRINT1("DeviceInfo->u.MixControls.dwControlType %x not found in Line %x cControls %u \n", DeviceInfo->u.MixControls.dwControlType, DeviceInfo->u.MixControls.dwLineID, MixerLineSrc->Line.cControls);
|
DPRINT1("DeviceInfo->u.MixControls.dwControlType %x not found in Line %x cControls %u \n", DeviceInfo->u.MixControls.dwControlType, DeviceInfo->u.MixControls.dwLineID, MixerLineSrc->Line.cControls);
|
||||||
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, sizeof(WDMAUD_DEVICE_INFO));
|
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
}
|
}
|
||||||
|
else if (DeviceInfo->Flags == MIXER_GETLINECONTROLSF_ONEBYID)
|
||||||
|
{
|
||||||
|
if ((ULONG)DeviceInfo->hDevice >= DeviceExtension->MixerInfoCount)
|
||||||
|
{
|
||||||
|
/* invalid parameter */
|
||||||
|
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = GetMixerControlById(&DeviceExtension->MixerInfo[(ULONG)DeviceInfo->hDevice], DeviceInfo->u.MixControls.dwControlID, NULL, &MixerControl, NULL);
|
||||||
|
if (NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
RtlMoveMemory(DeviceInfo->u.MixControls.pamxctrl, MixerControl, sizeof(MIXERCONTROLW));
|
||||||
|
}
|
||||||
|
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
//DbgBreakPoint();
|
//DbgBreakPoint();
|
||||||
|
@ -2042,7 +2102,7 @@ SetGetVolumeControlDetails(
|
||||||
{
|
{
|
||||||
for(Index = 0; Index < VolumeData->ValuesCount; Index++)
|
for(Index = 0; Index < VolumeData->ValuesCount; Index++)
|
||||||
{
|
{
|
||||||
if (VolumeData->Values[Index] < Value)
|
if (VolumeData->Values[Index] > Value)
|
||||||
{
|
{
|
||||||
/* FIXME SEH */
|
/* FIXME SEH */
|
||||||
Input->dwValue = VolumeData->InputSteppingDelta * Index;
|
Input->dwValue = VolumeData->InputSteppingDelta * Index;
|
||||||
|
@ -2069,6 +2129,8 @@ WdmAudSetControlDetails(
|
||||||
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
|
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
|
||||||
|
|
||||||
DPRINT("cbStruct %u Expected %u dwControlID %u cChannels %u cMultipleItems %u cbDetails %u paDetails %p Flags %x\n",
|
DPRINT("cbStruct %u Expected %u dwControlID %u cChannels %u cMultipleItems %u cbDetails %u paDetails %p Flags %x\n",
|
||||||
DeviceInfo->u.MixDetails.cbStruct, sizeof(MIXERCONTROLDETAILS), DeviceInfo->u.MixDetails.dwControlID, DeviceInfo->u.MixDetails.cChannels, DeviceInfo->u.MixDetails.cMultipleItems, DeviceInfo->u.MixDetails.cbDetails, DeviceInfo->u.MixDetails.paDetails, DeviceInfo->Flags);
|
DeviceInfo->u.MixDetails.cbStruct, sizeof(MIXERCONTROLDETAILS), DeviceInfo->u.MixDetails.dwControlID, DeviceInfo->u.MixDetails.cChannels, DeviceInfo->u.MixDetails.cMultipleItems, DeviceInfo->u.MixDetails.cbDetails, DeviceInfo->u.MixDetails.paDetails, DeviceInfo->Flags);
|
||||||
|
|
||||||
|
@ -2119,6 +2181,8 @@ WdmAudGetControlDetails(
|
||||||
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
|
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DeviceInfo->Flags &= ~MIXER_OBJECTF_HMIXER;
|
||||||
|
|
||||||
DPRINT("cbStruct %u Expected %u dwControlID %u cChannels %u cMultipleItems %u cbDetails %u paDetails %p Flags %x\n",
|
DPRINT("cbStruct %u Expected %u dwControlID %u cChannels %u cMultipleItems %u cbDetails %u paDetails %p Flags %x\n",
|
||||||
DeviceInfo->u.MixDetails.cbStruct, sizeof(MIXERCONTROLDETAILS), DeviceInfo->u.MixDetails.dwControlID, DeviceInfo->u.MixDetails.cChannels, DeviceInfo->u.MixDetails.cMultipleItems, DeviceInfo->u.MixDetails.cbDetails, DeviceInfo->u.MixDetails.paDetails, DeviceInfo->Flags);
|
DeviceInfo->u.MixDetails.cbStruct, sizeof(MIXERCONTROLDETAILS), DeviceInfo->u.MixDetails.dwControlID, DeviceInfo->u.MixDetails.cChannels, DeviceInfo->u.MixDetails.cMultipleItems, DeviceInfo->u.MixDetails.cbDetails, DeviceInfo->u.MixDetails.paDetails, DeviceInfo->Flags);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue