14 const GUID KSPROPSETID_Connection = {0x1D58C920
L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
15 const GUID KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = {0x05589f81
L, 0xc356, 0x11ce, {0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a}};
16 const GUID KSDATAFORMAT_SUBTYPE_PCM = {0x00000001
L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
17 const GUID KSDATAFORMAT_TYPE_AUDIO = {0x73647561
L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
18 const GUID KSINTERFACESETID_Standard = {0x1A8766A0
L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
19 const GUID KSMEDIUMSETID_Standard = {0x4747B320
L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
30 #define AUDIO_TEST_RANGE (5) 91 ListHead = &MixerList->WaveInList;
93 ListHead = &MixerList->WaveOutList;
98 while(
Entry != ListHead)
102 if (
Index == DeviceIndex)
104 *OutWaveInfo = WaveInfo;
155 PinProperty.
PinId = PinId;
182 *OutMultipleItem = MultipleItem;
207 *OutDataRangeAudio = DataRangeAudio;
291 if (DataRangeAudio->MinimumSampleFrequency <= SampleFrequency && DataRangeAudio->MaximumSampleFrequency >= SampleFrequency)
294 if (DataRangeAudio->MinimumBitsPerSample <= 8 && DataRangeAudio->MaximumBitsPerSample >= 8)
298 if (DataRangeAudio->MaximumChannels > 1)
305 if (DataRangeAudio->MinimumBitsPerSample <= 16 && DataRangeAudio->MaximumBitsPerSample >= 16)
311 if (DataRangeAudio->MaximumChannels > 1)
322 WaveInfo->u.InCaps.dwFormats =
Result;
324 WaveInfo->u.OutCaps.dwFormats =
Result;
351 DPRINT1(
"Implement support for multiple pins\n");
356 WaveInfo->
DeviceId = MixerData->DeviceId;
357 WaveInfo->
PinId = Pins[0];
424 MixerList->WaveInListCount++;
429 MixerList->WaveOutListCount++;
#define WAVE_FORMAT_48S16
VOID MMixerInitializeDataFormat(IN PKSDATAFORMAT_WAVEFORMATEX DataFormat, LPWAVEFORMATEX WaveFormatEx)
#define IOCTL_KS_PROPERTY
const GUID KSPROPSETID_Connection
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
MIXER_STATUS MMixerSetWaveStatus(IN PMIXER_CONTEXT MixerContext, IN HANDLE PinHandle, IN KSSTATE State)
_In_ ULONG _In_ ULONG _In_ ULONG Length
KSDDKAPI DWORD NTAPI KsCreatePin(HANDLE FilterHandle, PKSPIN_CONNECT Connect, ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle)
MIXER_STATUS MMixerGetWaveInfoByIndexAndType(IN PMIXER_LIST MixerList, IN ULONG DeviceIndex, IN ULONG bWaveInType, OUT LPWAVE_INFO *OutWaveInfo)
#define WAVE_FORMAT_96S08
WCHAR szPname[MAXPNAMELEN]
struct WAVE_INFO * LPWAVE_INFO
const GUID KSDATAFORMAT_TYPE_AUDIO
MIXER_STATUS MMixerGetAudioPinDataRanges(IN PMIXER_CONTEXT MixerContext, IN HANDLE hDevice, IN ULONG PinId, IN OUT PKSMULTIPLE_ITEM *OutMultipleItem)
#define WAVE_FORMAT_48S08
PKSPIN_CONNECT MMixerAllocatePinConnect(IN PMIXER_CONTEXT MixerContext, ULONG DataFormatSize)
MIXER_STATUS MMixerWaveOutCapabilities(IN PMIXER_CONTEXT MixerContext, IN ULONG DeviceIndex, OUT LPWAVEOUTCAPSW Caps)
ULONG MaximumBitsPerSample
MIXER_STATUS MMixerInitializeWaveInfo(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN LPWSTR DeviceName, IN ULONG bWaveIn, IN ULONG PinCount, IN PULONG Pins)
LPMIXER_DATA MMixerGetDataByDeviceId(IN PMIXER_LIST MixerList, IN ULONG DeviceId)
#define InsertTailList(ListHead, Entry)
ULONG MMixerGetWaveOutCount(IN PMIXER_CONTEXT MixerContext)
_In_ const GUID _In_ ULONG PinCount
#define KSPROPERTY_TYPE_GET
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
#define IOCTL_KS_RESET_STATE
#define IsEqualGUIDAligned(guid1, guid2)
MIXER_STATUS MMixerOpenWave(IN PMIXER_CONTEXT MixerContext, IN ULONG DeviceIndex, IN ULONG bWaveIn, IN LPWAVEFORMATEX WaveFormat, IN PIN_CREATE_CALLBACK CreateCallback, IN PVOID Context, OUT PHANDLE PinHandle)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
MIXER_STATUS MMixerVerifyContext(IN PMIXER_CONTEXT MixerContext)
MIXER_CONTEXT MixerContext
PMIXER_DEVICE_CONTROL Control
const GUID KSDATAFORMAT_SUBTYPE_PCM
#define WAVE_FORMAT_96S16
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define WAVE_FORMAT_48M16
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
MIXER_STATUS MMixerFindAudioDataRange(PKSMULTIPLE_ITEM MultipleItem, PKSDATARANGE_AUDIO *OutDataRangeAudio)
MIXER_STATUS MMixerSetWaveResetState(IN PMIXER_CONTEXT MixerContext, IN HANDLE PinHandle, IN ULONG bBegin)
struct _LIST_ENTRY * Flink
VOID MMixerCheckFormat(IN PKSDATARANGE_AUDIO DataRangeAudio, IN LPWAVE_INFO WaveInfo, IN ULONG bInput)
_In_ WDFCOLLECTION _In_ ULONG Index
MIXER_STATUS MMixerWaveInCapabilities(IN PMIXER_CONTEXT MixerContext, IN ULONG DeviceIndex, OUT LPWAVEINCAPSW Caps)
ULONG MinimumSampleFrequency
const GUID KSMEDIUMSETID_Standard
WCHAR szPname[MAXPNAMELEN]
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
MIXER_STATUS(* PIN_CREATE_CALLBACK)(IN PVOID Context, IN ULONG DeviceId, IN ULONG PinId, IN HANDLE hFilter, IN PKSPIN_CONNECT PinConnect, IN ACCESS_MASK DesiredAccess, OUT PHANDLE PinHandle)
static AUDIO_RANGE TestRange[AUDIO_TEST_RANGE]
MIXER_STATUS MMixerOpenWavePin(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN ULONG DeviceId, IN ULONG PinId, IN LPWAVEFORMATEX WaveFormatEx, IN ACCESS_MASK DesiredAccess, IN PIN_CREATE_CALLBACK CreateCallback, IN PVOID Context, OUT PHANDLE PinHandle)
union KSDATAFORMAT * PKSDATARANGE
#define WAVE_FORMAT_96M08
ULONG MaximumSampleFrequency
const GUID KSINTERFACESETID_Standard
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
ULONG MinimumBitsPerSample
struct MIXER_LIST * PMIXER_LIST
#define WAVE_FORMAT_96M16
const GUID KSDATAFORMAT_SPECIFIER_WAVEFORMATEX
MIXER_STATUS MMixerGetWaveDevicePath(IN PMIXER_CONTEXT MixerContext, IN ULONG bWaveIn, IN ULONG DeviceId, OUT LPWSTR *DevicePath)
#define KSPROPERTY_TYPE_SET
base of all file and directory entries
#define WAVE_FORMAT_48M08
ULONG MMixerGetWaveInCount(IN PMIXER_CONTEXT MixerContext)
VOID MMixerInitializePinConnect(IN OUT PKSPIN_CONNECT PinConnect, IN ULONG PinId)