- Implement enumerating mixer source and destination lines

svn path=/trunk/; revision=43224
This commit is contained in:
Johannes Anderwald 2009-09-29 12:26:48 +00:00
parent 3f5443deba
commit 83836038f7
4 changed files with 1089 additions and 143 deletions

View file

@ -319,9 +319,11 @@ WdmAudControlDeviceType(
KSPIN_DATAFLOW DataFlow;
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
if (DeviceInfo->DeviceType == MIXER_DEVICE_TYPE)
{
DeviceInfo->DeviceCount = GetNumOfMixerDevices(DeviceObject);
DeviceInfo->DeviceCount = DeviceExtension->MixerInfoCount;
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
}
@ -336,7 +338,7 @@ WdmAudControlDeviceType(
Pin.Property.Id = KSPROPERTY_SYSAUDIO_DEVICE_COUNT;
Pin.Property.Flags = KSPROPERTY_TYPE_GET;
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
Status = KsSynchronousIoControlDevice(DeviceExtension->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&Pin, sizeof(KSPROPERTY), (PVOID)&Count, sizeof(ULONG), &BytesReturned);
if (!NT_SUCCESS(Status))
{
@ -706,9 +708,11 @@ WdmAudCapabilities(
DPRINT("WdmAudCapabilities entered\n");
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
if (DeviceInfo->DeviceType == MIXER_DEVICE_TYPE)
{
Status = WdmAudMixerCapabilities(DeviceObject, DeviceInfo, ClientInfo);
Status = WdmAudMixerCapabilities(DeviceObject, DeviceInfo, ClientInfo, DeviceExtension);
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
}
@ -727,7 +731,7 @@ WdmAudCapabilities(
RtlZeroMemory(&ComponentId, sizeof(KSCOMPONENTID));
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
Status = KsSynchronousIoControlDevice(DeviceExtension->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PinProperty, sizeof(KSP_PIN), (PVOID)&ComponentId, sizeof(KSCOMPONENTID), &BytesReturned);
if (NT_SUCCESS(Status))
{

View file

@ -76,6 +76,9 @@ WdmAudInstallDevice(
return Status;
}
Status = WdmAudMixerInitialize(DeviceObject);
DPRINT("WdmAudMixerInitialize Status %x\n", Status);
DeviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE;
DeviceObject->Flags &= ~ DO_DEVICE_INITIALIZING;

File diff suppressed because it is too large Load diff

View file

@ -8,6 +8,7 @@
#define NDEBUG
#include <debug.h>
#include <ksmedia.h>
#include <mmreg.h>
#include <mmsystem.h>
#include <stdlib.h>
#include <stdio.h>
@ -32,6 +33,29 @@ typedef struct
}WDMAUD_CLIENT, *PWDMAUD_CLIENT;
typedef struct
{
LIST_ENTRY Entry;
ULONG PinId;
PFILE_OBJECT FileObject;
MIXERLINEW Line;
LPMIXERCONTROLW LineControls;
}MIXERLINE_SOURCE, *LPMIXERLINE_SOURCE;
typedef struct
{
HANDLE hMixer;
PFILE_OBJECT MixerFileObject;
MIXERCAPSW MixCaps;
MIXERLINEW DestinationLine;
LIST_ENTRY SourceLineList;
}MIXER_INFO, *LPMIXER_INFO;
typedef struct
{
LIST_ENTRY Entry;
@ -51,6 +75,10 @@ typedef struct
HANDLE hSysAudio;
PFILE_OBJECT FileObject;
ULONG MixerInfoCount;
LPMIXER_INFO MixerInfo;
}WDMAUD_DEVICE_EXTENSION, *PWDMAUD_DEVICE_EXTENSION;
typedef struct
@ -118,7 +146,8 @@ NTSTATUS
WdmAudMixerCapabilities(
IN PDEVICE_OBJECT DeviceObject,
IN PWDMAUD_DEVICE_INFO DeviceInfo,
IN PWDMAUD_CLIENT ClientInfo);
IN PWDMAUD_CLIENT ClientInfo,
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
NTSTATUS
NTAPI
@ -160,6 +189,9 @@ WdmAudGetControlDetails(
IN PWDMAUD_DEVICE_INFO DeviceInfo,
IN PWDMAUD_CLIENT ClientInfo);
NTSTATUS
WdmAudMixerInitialize(
IN PDEVICE_OBJECT DeviceObject);
#endif