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