11 const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
70 reinterpret_cast<IUnknown*>(*Output)->AddRef();
95 m_Handle = KsObject->KsGetObjectHandle();
128 if (
SUCCEEDED(pPin->QueryPinInfo(&PinInfo)))
131 PinInfo.pFilter->Release();
146 IKsDataTypeHandler *KsDataTypeHandler,
149 KSIOOPERATION IoOperation,
150 PKSSTREAM_SEGMENT *OutStreamSegment)
159 if (*SampleCount == 0 || *SampleCount < 0)
163 *OutStreamSegment =
NULL;
187 StreamSegment->
StreamSegment.KsDataTypeHandler = KsDataTypeHandler;
188 StreamSegment->
StreamSegment.KsInterfaceHandler = (IKsInterfaceHandler*)
this;
195 if (KsDataTypeHandler)
198 KsDataTypeHandler->KsQueryExtendedSize(&ExtendedSize);
203 KsDataTypeHandler->AddRef();
247 hr = KsDataTypeHandler->KsPrepareIoOperation(SampleList[
Index], (CurStreamHeader + 1), IoOperation);
279 if (SampleList[
Index]->IsDiscontinuity() ==
S_OK)
282 if (SampleList[
Index]->IsPreroll() ==
S_OK)
285 if (SampleList[
Index]->IsSyncPoint() ==
S_OK)
300 if (IoOperation == KsIoOperation_Write)
317 m_Pin->KsIncrementPendingIoCount();
330 *OutStreamSegment = (PKSSTREAM_SEGMENT)StreamSegment;
336 *OutStreamSegment = (PKSSTREAM_SEGMENT)StreamSegment;
346 PKSSTREAM_SEGMENT InStreamSegment)
403 if (bOverlapped && StreamSegment->
StreamSegment.IoOperation == KsIoOperation_Read)
433 if (StreamSegment->
StreamSegment.IoOperation == KsIoOperation_Read)
441 else if (StreamSegment->
StreamSegment.IoOperation == KsIoOperation_Write)
460 m_Pin->KsDecrementPendingIoCount();
463 m_Pin->KsMediaSamplesCompleted(InStreamSegment);
#define IOCTL_KS_WRITE_STREAM
VOID WINAPI CoTaskMemFree(LPVOID ptr)
struct KSSTREAM_SEGMENT_EXT * PKSSTREAM_SEGMENT_EXT
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID
#define IOCTL_KS_READ_STREAM
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
struct KSSTREAM_HEADER * PKSSTREAM_HEADER
STDMETHODIMP_(ULONG) AddRef()
virtual ~CKsInterfaceHandler()
#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
_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
_In_ PVOID _Out_ BOOLEAN * Stop
void WINAPI SHIM_OBJ_NAME() OutputDebugStringW(LPCWSTR lpOutputString)
HRESULT STDMETHODCALLTYPE KsProcessMediaSamples(IKsDataTypeHandler *KsDataTypeHandler, IMediaSample **SampleList, PLONG SampleCount, KSIOOPERATION IoOperation, PKSSTREAM_SEGMENT *StreamSegment)
HRESULT STDMETHODCALLTYPE KsSetPin(IKsPin *KsPin)
KSSTREAM_SEGMENT StreamSegment
PKSSTREAM_HEADER StreamHeader
#define MAKE_HRESULT(sev, fac, code)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
_In_ WDFCOLLECTION _In_ ULONG Index
#define STDMETHODCALLTYPE
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define InterlockedDecrement
IMediaSample * MediaSample[64]
HRESULT WINAPI CKsInterfaceHandler_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv)
#define KSSTREAM_HEADER_OPTIONSF_PREROLL
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 InterlockedIncrement
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static ULONG WINAPI AddRef(IStream *iface)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
HRESULT STDMETHODCALLTYPE KsCompleteIo(PKSSTREAM_SEGMENT StreamSegment)
UINT(* handler)(MSIPACKAGE *)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY
STDMETHODIMP_(ULONG) Release()
#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT