12 const GUID KSPROPSETID_Pin = {0x8C134960
L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}};
13 const GUID KSPROPSETID_Topology = {0x720D4AC0
L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
14 const GUID KSPROPSETID_Audio = {0x45FFAAA0
L, 0x6E1B, 0x11D0, {0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}};
29 DWORD NewIndex, OldIndex;
32 if (NewChannels > OldChannels)
43 NewLength = NewChannels * (BitsPerSample/8);
44 Skip = OldChannels * (BitsPerSample/8);
91 DataFormat.WaveFormatEx.wFormatTag = WaveFormatEx->wFormatTag;
92 DataFormat.WaveFormatEx.nSamplesPerSec = WaveFormatEx->nSamplesPerSec;
93 DataFormat.WaveFormatEx.nBlockAlign = WaveFormatEx->nBlockAlign;
102 DataFormat.WaveFormatEx.nChannels = WaveFormatEx->nChannels;
103 DataFormat.WaveFormatEx.nAvgBytesPerSec = WaveFormatEx->nAvgBytesPerSec;
104 DataFormat.WaveFormatEx.wBitsPerSample = WaveFormatEx->wBitsPerSample;
119 DWORD SampleFrequency,
121 DWORD MinimumBitsPerSample,
122 DWORD MaximumBitsPerSample,
123 DWORD MaximumChannels,
154 DataFormat->WaveFormatEx.nSamplesPerSec = SampleFrequency;
167 for(nBitsPerSample = MinimumBitsPerSample; nBitsPerSample <= MaximumBitsPerSample; nBitsPerSample += 8)
170 DataFormat->WaveFormatEx.nAvgBytesPerSec = (nBitsPerSample / 8) *
nChannels * SampleFrequency;
171 DataFormat->WaveFormatEx.wBitsPerSample = nBitsPerSample;
173 DPRINT(
"CurrentFormat: InFormat nChannels %u wBitsPerSample %u nSamplesPerSec %u\n",
174 nChannels, nBitsPerSample, SampleFrequency);
179 DPRINT(
"dwResult %x\n", dwResult);
185 WaveFormatOut->
cbSize = 0;
196 DPRINT(
"InFormat nChannels %u wBitsPerSample %u nSamplesPerSec %u\nOutFormat nChannels %u nBitsPerSample %u nSamplesPerSec %u\n",
245 PinConnect->
PinId = PinId;
309 DWORD Transferred = 0;
350 if ( BytesTransferred )
351 *BytesTransferred = Transferred;
414 DPRINT(
"SyncOverlappedDeviceIoControl failed with %lx\n",
Status);
421 *OutMultipleItem = MultipleItem;
484 DPRINT(
"SyncOverlappedDeviceIoControl failed with %lx\n",
Status);
505 DPRINT(
"SyncOverlappedDeviceIoControl failed with %lx\n",
Status);
512 *OutMultipleItem = MultipleItem;
542 for(dwIndex = 0; dwIndex < Item->
Count; dwIndex++)
561 DPRINT(
"MinimumBitsPerSample %u MaximumBitsPerSample %u MinimumSampleFrequency %u MaximumSampleFrequency %u\n",
568 dwResult =
OpenPin(hFilter, PinId, WaveFormatOut, hPin,
TRUE);
571 DPRINT(
"InFormat nChannels %u wBitsPerSample %u nSamplesPerSec %u\nOutFormat nChannels %u nBitsPerSample %u nSamplesPerSec %u\n",
572 WaveFormatEx->nChannels, WaveFormatEx->wBitsPerSample, WaveFormatEx->nSamplesPerSec,
573 WaveFormatOut->nChannels, WaveFormatOut->wBitsPerSample, WaveFormatOut->nSamplesPerSec);
IN CINT OUT PVOID IN ULONG OUT PULONG ResultLength
#define IOCTL_KS_PROPERTY
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesWritten
KSPIN_INTERFACE Interface
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG IoControlCode
KSDDKAPI DWORD NTAPI KsCreatePin(HANDLE FilterHandle, PKSPIN_CONNECT Connect, ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle)
#define KSPRIORITY_NORMAL
_In_ PSTORAGE_PROPERTY_ID PropertyId
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
const GUID KSPROPSETID_Topology
DWORD GetFilterPinCommunication(IN HANDLE hFilter, IN ULONG PinId, OUT PKSPIN_COMMUNICATION Communication)
ULONG MaximumBitsPerSample
#define KSINTERFACESETID_Standard
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG OutBufferSize
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
#define KSMEDIUMSETID_Standard
#define KSPROPERTY_TYPE_GET
#define KSPROPSETID_Connection
#define RtlMoveMemory(Destination, Source, Length)
static USHORT USHORT * NewLength
BOOL DoDataIntersection(HANDLE hFilter, DWORD PinId, DWORD SampleFrequency, LPWAVEFORMATEX WaveFormatEx, DWORD MinimumBitsPerSample, DWORD MaximumBitsPerSample, DWORD MaximumChannels, LPWAVEFORMATEX WaveFormatOut)
#define DSERR_OUTOFMEMORY
_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
enum KSPIN_COMMUNICATION * PKSPIN_COMMUNICATION
DWORD OpenPin(HANDLE hFilter, ULONG PinId, LPWAVEFORMATEX WaveFormatEx, PHANDLE hPin, BOOL bLoop)
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG InBufferSize
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
DWORD GetFilterPinCount(IN HANDLE hFilter, OUT PULONG NumPins)
ULONG MinimumSampleFrequency
BOOL CreateCompatiblePin(IN HANDLE hFilter, IN DWORD PinId, IN BOOL bLoop, IN LPWAVEFORMATEX WaveFormatEx, OUT LPWAVEFORMATEX WaveFormatOut, OUT PHANDLE hPin)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define FILE_ATTRIBUTE_NORMAL
DWORD SyncOverlappedDeviceIoControl(IN HANDLE Handle, IN DWORD IoControlCode, IN LPVOID InBuffer, IN DWORD InBufferSize, OUT LPVOID OutBuffer, IN DWORD OutBufferSize, OUT LPDWORD BytesTransferred OPTIONAL)
struct KSMULTIPLE_ITEM * PKSMULTIPLE_ITEM
IN PVOID IN PVOID IN USHORT IN USHORT Size
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define KSMEDIUM_TYPE_ANYINSTANCE
ULONG MaximumSampleFrequency
_In_ FILTER_INFORMATION_CLASS _In_ ULONG _Out_ PULONG BytesReturned
ULONG MinimumBitsPerSample
const GUID KSPROPSETID_Pin
DWORD GetFilterPinDataRanges(IN HANDLE hFilter, IN ULONG PinId, IN OUT PKSMULTIPLE_ITEM *OutMultipleItem)
#define FILE_FLAG_OVERLAPPED
DWORD OpenFilter(IN LPCWSTR lpFileName, IN PHANDLE OutHandle)
#define KSPROPERTY_TYPE_SET
DWORD GetFilterNodeProperty(IN HANDLE hFilter, IN ULONG PropertyId, OUT PKSMULTIPLE_ITEM *OutMultipleItem)
Property(long _type, long _tag, INREAL _value)
#define HeapFree(x, y, z)
enum KSPIN_DATAFLOW * PKSPIN_DATAFLOW
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
BOOL SetPinFormat(IN HANDLE hPin, IN LPWAVEFORMATEX WaveFormatEx)
const GUID KSPROPSETID_Audio
DWORD GetFilterPinDataFlow(IN HANDLE hFilter, IN ULONG PinId, OUT PKSPIN_DATAFLOW DataFlow)
PULONG MinorVersion OPTIONAL
VOID PerformChannelConversion(PUCHAR Buffer, ULONG BufferLength, PULONG BytesRead, ULONG OldChannels, ULONG NewChannels, ULONG BitsPerSample, PUCHAR Result, ULONG ResultLength, PULONG BytesWritten)