[SYSAUDIO]
[reactos.git] / reactos / drivers / wdm / audio / sysaudio / sysaudio.h
1 #include <portcls.h>
2
3 typedef struct
4 {
5 HANDLE PinHandle; // handle to audio irp pin
6 ULONG References; // number of clients having a reference to this audio irp pin
7 }PIN_INFO;
8
9 typedef struct
10 {
11 LIST_ENTRY Entry; // device entry for KsAudioDeviceList
12 UNICODE_STRING DeviceName; // symbolic link of audio device
13
14 HANDLE Handle; // handle to audio device
15 PFILE_OBJECT FileObject; // file objecto to audio device
16
17 //PIN_INFO * Pins; // array of PIN_INFO
18 }KSAUDIO_DEVICE_ENTRY, *PKSAUDIO_DEVICE_ENTRY;
19
20 typedef struct
21 {
22 KSDEVICE_HEADER KsDeviceHeader; // ks streaming header - must always be first item in device extension
23 PDEVICE_OBJECT PhysicalDeviceObject; // pdo
24 PDEVICE_OBJECT NextDeviceObject; // lower device object
25 ULONG NumberOfKsAudioDevices; // number of audio devices
26
27 LIST_ENTRY KsAudioDeviceList; // audio device list
28 PVOID KsAudioNotificationEntry; // ks audio notification hook
29 PVOID EchoCancelNotificationEntry; // ks echo cancel notification hook
30 KSPIN_LOCK Lock; // audio device list mutex
31
32 PFILE_OBJECT KMixerFileObject; // mixer file object
33 HANDLE KMixerHandle; // mixer file handle
34
35 }SYSAUDIODEVEXT, *PSYSAUDIODEVEXT;
36
37 // struct DISPATCH_CONTEXT
38 //
39 // This structure is used to dispatch read / write / device io requests
40 // It is stored in the file object FsContext2 member
41 // Note: FsContext member is reserved for ks object header
42
43 typedef struct
44 {
45 KSOBJECT_HEADER ObjectHeader; // pin object header
46 HANDLE Handle; // audio irp pin handle
47 ULONG PinId; // pin id of device
48 PKSAUDIO_DEVICE_ENTRY AudioEntry; // pointer to audio device entry
49
50 HANDLE hMixerPin; // handle to mixer pin
51 }DISPATCH_CONTEXT, *PDISPATCH_CONTEXT;
52
53 NTSTATUS
54 SysAudioAllocateDeviceHeader(
55 IN SYSAUDIODEVEXT *DeviceExtension);
56
57 NTSTATUS
58 SysAudioRegisterDeviceInterfaces(
59 IN PDEVICE_OBJECT DeviceObject);
60
61 NTSTATUS
62 SysAudioRegisterNotifications(
63 IN PDRIVER_OBJECT DriverObject,
64 IN PDEVICE_OBJECT DeviceObject);
65
66 NTSTATUS
67 SysAudioHandleProperty(
68 PDEVICE_OBJECT DeviceObject,
69 PIRP Irp);
70
71 NTSTATUS
72 SysAudioOpenKMixer(
73 IN SYSAUDIODEVEXT *DeviceExtension);
74
75 NTSTATUS
76 OpenDevice(
77 IN PUNICODE_STRING DeviceName,
78 IN PHANDLE HandleOut,
79 IN PFILE_OBJECT * FileObjectOut);
80
81 PKSAUDIO_DEVICE_ENTRY
82 GetListEntry(
83 IN PLIST_ENTRY Head,
84 IN ULONG Index);
85
86 NTSTATUS
87 NTAPI
88 DispatchCreateSysAudioPin(
89 IN PDEVICE_OBJECT DeviceObject,
90 IN PIRP Irp);
91
92 ULONG
93 GetDeviceCount(
94 PSYSAUDIODEVEXT DeviceExtension,
95 BOOL WaveIn);
96
97 NTSTATUS
98 GetPinInstanceCount(
99 PKSAUDIO_DEVICE_ENTRY Entry,
100 PKSPIN_CINSTANCES PinInstances,
101 PKSPIN_CONNECT PinConnect);
102
103 NTSTATUS
104 ComputeCompatibleFormat(
105 IN PKSAUDIO_DEVICE_ENTRY Entry,
106 IN ULONG PinId,
107 IN PKSDATAFORMAT_WAVEFORMATEX ClientFormat,
108 OUT PKSDATAFORMAT_WAVEFORMATEX MixerFormat);
109
110 PVOID
111 AllocateItem(
112 IN POOL_TYPE PoolType,
113 IN SIZE_T NumberOfBytes);
114
115 VOID
116 FreeItem(
117 IN PVOID Item);
118