You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
858 lines
21 KiB
858 lines
21 KiB
/*++ |
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved. |
|
|
|
Module Name: |
|
|
|
ksproxy.h |
|
|
|
Abstract: |
|
|
|
Interface definitions for WDM-CSA proxy filters. |
|
|
|
--*/ |
|
|
|
#ifndef __KSPROXY__ |
|
#define __KSPROXY__ |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#undef KSDDKAPI |
|
#ifdef _KSDDK_ |
|
#define KSDDKAPI |
|
#else // !_KSDDK_ |
|
#define KSDDKAPI DECLSPEC_IMPORT |
|
#endif // _KSDDK_ |
|
|
|
#define STATIC_IID_IKsObject\ |
|
0x423c13a2L, 0x2070, 0x11d0, 0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1 |
|
|
|
#define STATIC_IID_IKsPinEx\ |
|
0x7bb38260L, 0xd19c, 0x11d2, 0xb3, 0x8a, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e |
|
|
|
#define STATIC_IID_IKsPin\ |
|
0xb61178d1L, 0xa2d9, 0x11cf, 0x9e, 0x53, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1 |
|
|
|
#define STATIC_IID_IKsPinPipe\ |
|
0xe539cd90L, 0xa8b4, 0x11d1, 0x81, 0x89, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 |
|
|
|
#define STATIC_IID_IKsDataTypeHandler\ |
|
0x5ffbaa02L, 0x49a3, 0x11d0, 0x9f, 0x36, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1 |
|
|
|
#define STATIC_IID_IKsDataTypeCompletion\ |
|
0x827D1A0EL, 0x0F73, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
|
|
#define STATIC_IID_IKsInterfaceHandler\ |
|
0xD3ABC7E0L, 0x9A61, 0x11D0, 0xA4, 0x0D, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
|
|
#define STATIC_IID_IKsClockPropertySet\ |
|
0x5C5CBD84L, 0xE755, 0x11D0, 0xAC, 0x18, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
|
|
#define STATIC_IID_IKsAllocator\ |
|
0x8da64899L, 0xc0d9, 0x11d0, 0x84, 0x13, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a |
|
|
|
#define STATIC_IID_IKsAllocatorEx\ |
|
0x091bb63aL, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02 |
|
|
|
|
|
#ifndef STATIC_IID_IKsPropertySet |
|
#define STATIC_IID_IKsPropertySet\ |
|
0x31EFAC30L, 0x515C, 0x11d0, 0xA9, 0xAA, 0x00, 0xAA, 0x00, 0x61, 0xBE, 0x93 |
|
#endif // STATIC_IID_IKsPropertySet |
|
|
|
#define STATIC_IID_IKsTopology\ |
|
0x28F54683L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
|
|
#ifndef STATIC_IID_IKsControl |
|
#define STATIC_IID_IKsControl\ |
|
0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
#endif // STATIC_IID_IKsControl |
|
|
|
#define STATIC_IID_IKsAggregateControl\ |
|
0x7F40EAC0L, 0x3947, 0x11D2, 0x87, 0x4E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
|
|
#define STATIC_CLSID_Proxy \ |
|
0x17CCA71BL, 0xECD7, 0x11D0, 0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 |
|
|
|
#ifdef _KS_ |
|
|
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUIDEX(IID_IKsObject); |
|
|
|
DEFINE_GUIDEX(IID_IKsPin); |
|
|
|
DEFINE_GUIDEX(IID_IKsPinEx); |
|
|
|
DEFINE_GUIDEX(IID_IKsPinPipe); |
|
|
|
DEFINE_GUIDEX(IID_IKsDataTypeHandler); |
|
|
|
DEFINE_GUIDEX(IID_IKsDataTypeCompletion); |
|
|
|
DEFINE_GUIDEX(IID_IKsInterfaceHandler); |
|
|
|
DEFINE_GUIDEX(IID_IKsClockPropertySet); |
|
|
|
DEFINE_GUIDEX(IID_IKsAllocator); |
|
|
|
DEFINE_GUIDEX(IID_IKsAllocatorEx); |
|
|
|
#define IID_IKsQualityForwarder KSCATEGORY_QUALITY |
|
#endif // !defined(__cplusplus) || _MSC_VER < 1100 |
|
|
|
#define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY |
|
|
|
typedef enum { |
|
KsAllocatorMode_User, |
|
KsAllocatorMode_Kernel |
|
} KSALLOCATORMODE; |
|
|
|
|
|
typedef enum { |
|
FramingProp_Uninitialized, |
|
FramingProp_None, |
|
FramingProp_Old, |
|
FramingProp_Ex |
|
} FRAMING_PROP; |
|
|
|
typedef FRAMING_PROP *PFRAMING_PROP; |
|
|
|
|
|
typedef enum { |
|
Framing_Cache_Update, // request to bypass cache when read/write |
|
Framing_Cache_ReadLast, |
|
Framing_Cache_ReadOrig, |
|
Framing_Cache_Write |
|
} FRAMING_CACHE_OPS; |
|
|
|
|
|
typedef struct { |
|
LONGLONG MinTotalNominator; |
|
LONGLONG MaxTotalNominator; |
|
LONGLONG TotalDenominator; |
|
} OPTIMAL_WEIGHT_TOTALS; |
|
|
|
// forward declaration |
|
typedef struct IPin IPin; |
|
typedef struct IKsPin IKsPin; |
|
typedef struct IKsAllocator IKsAllocator; |
|
typedef struct IKsAllocatorEx IKsAllocatorEx; |
|
|
|
|
|
// |
|
// allocators strategy is defined by graph manager |
|
// |
|
#define AllocatorStrategy_DontCare 0 |
|
|
|
// |
|
// what to optimize |
|
// |
|
#define AllocatorStrategy_MinimizeNumberOfFrames 0x00000001 |
|
#define AllocatorStrategy_MinimizeFrameSize 0x00000002 |
|
#define AllocatorStrategy_MinimizeNumberOfAllocators 0x00000004 |
|
#define AllocatorStrategy_MaximizeSpeed 0x00000008 |
|
|
|
// |
|
// factors (flags) defining the Pipes properties |
|
// |
|
#define PipeFactor_None 0 |
|
#define PipeFactor_UserModeUpstream 0x00000001 |
|
#define PipeFactor_UserModeDownstream 0x00000002 |
|
#define PipeFactor_MemoryTypes 0x00000004 |
|
#define PipeFactor_Flags 0x00000008 |
|
#define PipeFactor_PhysicalRanges 0x00000010 |
|
#define PipeFactor_OptimalRanges 0x00000020 |
|
#define PipeFactor_FixedCompression 0x00000040 |
|
#define PipeFactor_UnknownCompression 0x00000080 |
|
|
|
#define PipeFactor_Buffers 0x00000100 |
|
#define PipeFactor_Align 0x00000200 |
|
|
|
#define PipeFactor_PhysicalEnd 0x00000400 |
|
#define PipeFactor_LogicalEnd 0x00000800 |
|
|
|
|
|
|
|
typedef enum { |
|
PipeState_DontCare, |
|
PipeState_RangeNotFixed, |
|
PipeState_RangeFixed, |
|
PipeState_CompressionUnknown, |
|
PipeState_Finalized |
|
} PIPE_STATE; |
|
|
|
|
|
// |
|
// pipe dimensions relative to BeginPin. |
|
// |
|
|
|
typedef struct _PIPE_DIMENSIONS { |
|
KS_COMPRESSION AllocatorPin; |
|
KS_COMPRESSION MaxExpansionPin; |
|
KS_COMPRESSION EndPin; |
|
} PIPE_DIMENSIONS, *PPIPE_DIMENSIONS; |
|
|
|
|
|
typedef enum { |
|
Pipe_Allocator_None, |
|
Pipe_Allocator_FirstPin, |
|
Pipe_Allocator_LastPin, |
|
Pipe_Allocator_MiddlePin |
|
} PIPE_ALLOCATOR_PLACE; |
|
|
|
typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE; |
|
|
|
|
|
typedef enum { |
|
KS_MemoryTypeDontCare = 0, |
|
KS_MemoryTypeKernelPaged, |
|
KS_MemoryTypeKernelNonPaged, |
|
KS_MemoryTypeDeviceHostMapped, |
|
KS_MemoryTypeDeviceSpecific, |
|
KS_MemoryTypeUser, |
|
KS_MemoryTypeAnyHost |
|
} KS_LogicalMemoryType; |
|
|
|
typedef KS_LogicalMemoryType *PKS_LogicalMemoryType; |
|
|
|
|
|
|
|
typedef struct _PIPE_TERMINATION { |
|
ULONG Flags; |
|
ULONG OutsideFactors; |
|
ULONG Weigth; // outside weight |
|
KS_FRAMING_RANGE PhysicalRange; |
|
KS_FRAMING_RANGE_WEIGHTED OptimalRange; |
|
KS_COMPRESSION Compression; // relative to the connected pin on a neighboring filter. |
|
} PIPE_TERMINATION; |
|
|
|
|
|
// |
|
// extended allocator properties |
|
// |
|
typedef struct _ALLOCATOR_PROPERTIES_EX |
|
{ |
|
long cBuffers; |
|
long cbBuffer; |
|
long cbAlign; |
|
long cbPrefix; |
|
// new part |
|
GUID MemoryType; |
|
GUID BusType; // one of the buses this pipe is using |
|
PIPE_STATE State; |
|
PIPE_TERMINATION Input; |
|
PIPE_TERMINATION Output; |
|
ULONG Strategy; |
|
ULONG Flags; |
|
ULONG Weight; |
|
KS_LogicalMemoryType LogicalMemoryType; |
|
PIPE_ALLOCATOR_PLACE AllocatorPlace; |
|
PIPE_DIMENSIONS Dimensions; |
|
KS_FRAMING_RANGE PhysicalRange; // on allocator pin |
|
IKsAllocatorEx* PrevSegment; // doubly-linked list of KS allocators |
|
ULONG CountNextSegments; // possible multiple dependent pipes |
|
IKsAllocatorEx** NextSegments; |
|
ULONG InsideFactors; // existing factors (different from "don't care") |
|
ULONG NumberPins; |
|
} ALLOCATOR_PROPERTIES_EX; |
|
|
|
typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX; |
|
|
|
|
|
#ifdef __STREAMS__ |
|
|
|
struct DECLSPEC_UUID("5C5CBD84-E755-11D0-AC18-00A0C9223196") IKsClockPropertySet; |
|
#undef INTERFACE |
|
#define INTERFACE IKsClockPropertySet |
|
DECLARE_INTERFACE_(IKsClockPropertySet, IUnknown) |
|
{ |
|
STDMETHOD(KsGetTime)( |
|
THIS_ |
|
LONGLONG* Time |
|
) PURE; |
|
STDMETHOD(KsSetTime)( |
|
THIS_ |
|
LONGLONG Time |
|
) PURE; |
|
STDMETHOD(KsGetPhysicalTime)( |
|
THIS_ |
|
LONGLONG* Time |
|
) PURE; |
|
STDMETHOD(KsSetPhysicalTime)( |
|
THIS_ |
|
LONGLONG Time |
|
) PURE; |
|
STDMETHOD(KsGetCorrelatedTime)( |
|
THIS_ |
|
KSCORRELATED_TIME* CorrelatedTime |
|
) PURE; |
|
STDMETHOD(KsSetCorrelatedTime)( |
|
THIS_ |
|
KSCORRELATED_TIME* CorrelatedTime |
|
) PURE; |
|
STDMETHOD(KsGetCorrelatedPhysicalTime)( |
|
THIS_ |
|
KSCORRELATED_TIME* CorrelatedTime |
|
) PURE; |
|
STDMETHOD(KsSetCorrelatedPhysicalTime)( |
|
THIS_ |
|
KSCORRELATED_TIME* CorrelatedTime |
|
) PURE; |
|
STDMETHOD(KsGetResolution)( |
|
THIS_ |
|
KSRESOLUTION* Resolution |
|
) PURE; |
|
STDMETHOD(KsGetState)( |
|
THIS_ |
|
KSSTATE* State |
|
) PURE; |
|
}; |
|
|
|
|
|
interface DECLSPEC_UUID("8da64899-c0d9-11d0-8413-0000f822fe8a") IKsAllocator; |
|
#undef INTERFACE |
|
#define INTERFACE IKsAllocator |
|
DECLARE_INTERFACE_(IKsAllocator, IUnknown) |
|
{ |
|
STDMETHOD_(HANDLE, KsGetAllocatorHandle)( |
|
THIS |
|
) PURE; |
|
STDMETHOD_(KSALLOCATORMODE, KsGetAllocatorMode)( |
|
THIS |
|
) PURE; |
|
STDMETHOD(KsGetAllocatorStatus)( |
|
THIS_ |
|
PKSSTREAMALLOCATOR_STATUS AllocatorStatus |
|
) PURE; |
|
STDMETHOD_(VOID, KsSetAllocatorMode)( |
|
THIS_ |
|
KSALLOCATORMODE Mode |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("091bb63a-603f-11d1-b067-00a0c9062802") IKsAllocatorEx; |
|
#undef INTERFACE |
|
#define INTERFACE IKsAllocatorEx |
|
DECLARE_INTERFACE_(IKsAllocatorEx, IKsAllocator) |
|
{ |
|
STDMETHOD_(PALLOCATOR_PROPERTIES_EX, KsGetProperties)( |
|
THIS |
|
) PURE; |
|
STDMETHOD_(VOID, KsSetProperties)( |
|
THIS_ |
|
PALLOCATOR_PROPERTIES_EX |
|
) PURE; |
|
STDMETHOD_(VOID, KsSetAllocatorHandle)( |
|
THIS_ |
|
HANDLE AllocatorHandle |
|
) PURE; |
|
STDMETHOD_(HANDLE, KsCreateAllocatorAndGetHandle)( |
|
THIS_ |
|
IKsPin* KsPin |
|
) PURE; |
|
}; |
|
|
|
typedef enum { |
|
KsPeekOperation_PeekOnly, |
|
KsPeekOperation_AddRef |
|
} KSPEEKOPERATION; |
|
|
|
typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT; |
|
|
|
interface DECLSPEC_UUID("b61178d1-a2d9-11cf-9e53-00aa00a216a1") IKsPin; |
|
|
|
#undef INTERFACE |
|
#define INTERFACE IKsPin |
|
DECLARE_INTERFACE_(IKsPin, IUnknown) |
|
{ |
|
STDMETHOD(KsQueryMediums)( |
|
THIS_ |
|
PKSMULTIPLE_ITEM* MediumList |
|
) PURE; |
|
STDMETHOD(KsQueryInterfaces)( |
|
THIS_ |
|
PKSMULTIPLE_ITEM* InterfaceList |
|
) PURE; |
|
STDMETHOD(KsCreateSinkPinHandle)( |
|
THIS_ |
|
KSPIN_INTERFACE& Interface, |
|
KSPIN_MEDIUM& Medium |
|
) PURE; |
|
STDMETHOD(KsGetCurrentCommunication)( |
|
THIS_ |
|
KSPIN_COMMUNICATION *Communication, |
|
KSPIN_INTERFACE *Interface, |
|
KSPIN_MEDIUM *Medium |
|
) PURE; |
|
STDMETHOD(KsPropagateAcquire)( |
|
THIS |
|
) PURE; |
|
STDMETHOD(KsDeliver)( |
|
THIS_ |
|
IMediaSample* Sample, |
|
ULONG Flags |
|
) PURE; |
|
STDMETHOD(KsMediaSamplesCompleted)( |
|
THIS_ |
|
PKSSTREAM_SEGMENT StreamSegment |
|
) PURE; |
|
STDMETHOD_(IMemAllocator *, KsPeekAllocator)( |
|
THIS_ |
|
KSPEEKOPERATION Operation |
|
) PURE; |
|
STDMETHOD(KsReceiveAllocator)( |
|
THIS_ |
|
IMemAllocator *MemAllocator |
|
) PURE; |
|
STDMETHOD(KsRenegotiateAllocator)( |
|
THIS |
|
) PURE; |
|
STDMETHOD_(LONG, KsIncrementPendingIoCount)( |
|
THIS |
|
) PURE; |
|
STDMETHOD_(LONG, KsDecrementPendingIoCount)( |
|
THIS |
|
) PURE; |
|
STDMETHOD(KsQualityNotify)( |
|
THIS_ |
|
ULONG Proportion, |
|
REFERENCE_TIME TimeDelta |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("7bb38260-d19c-11d2-b38a-00a0c95ec22e") IKsPinEx; |
|
#undef INTERFACE |
|
#define INTERFACE IKsPinEx |
|
DECLARE_INTERFACE_(IKsPinEx, IKsPin) |
|
{ |
|
STDMETHOD_(VOID, KsNotifyError)( |
|
THIS_ |
|
IMediaSample* Sample, |
|
HRESULT hr |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("e539cd90-a8b4-11d1-8189-00a0c9062802") IKsPinPipe; |
|
#undef INTERFACE |
|
#define INTERFACE IKsPinPipe |
|
DECLARE_INTERFACE_(IKsPinPipe, IUnknown) |
|
{ |
|
STDMETHOD(KsGetPinFramingCache)( |
|
THIS_ |
|
PKSALLOCATOR_FRAMING_EX *FramingEx, |
|
PFRAMING_PROP FramingProp, |
|
FRAMING_CACHE_OPS Option |
|
) PURE; |
|
STDMETHOD(KsSetPinFramingCache)( |
|
THIS_ |
|
PKSALLOCATOR_FRAMING_EX FramingEx, |
|
PFRAMING_PROP FramingProp, |
|
FRAMING_CACHE_OPS Option |
|
) PURE; |
|
STDMETHOD_(IPin*, KsGetConnectedPin)( |
|
THIS |
|
) PURE; |
|
STDMETHOD_(IKsAllocatorEx*, KsGetPipe)( |
|
THIS_ |
|
KSPEEKOPERATION Operation |
|
) PURE; |
|
STDMETHOD(KsSetPipe)( |
|
THIS_ |
|
IKsAllocatorEx *KsAllocator |
|
) PURE; |
|
STDMETHOD_(ULONG, KsGetPipeAllocatorFlag)( |
|
THIS |
|
) PURE; |
|
STDMETHOD(KsSetPipeAllocatorFlag)( |
|
THIS_ |
|
ULONG Flag |
|
) PURE; |
|
STDMETHOD_(GUID, KsGetPinBusCache)( |
|
THIS |
|
) PURE; |
|
STDMETHOD(KsSetPinBusCache)( |
|
THIS_ |
|
GUID Bus |
|
) PURE; |
|
// |
|
// very useful methods for tracing. |
|
// |
|
STDMETHOD_(PWCHAR, KsGetPinName)( |
|
THIS |
|
) PURE; |
|
STDMETHOD_(PWCHAR, KsGetFilterName)( |
|
THIS |
|
) PURE; |
|
}; |
|
|
|
|
|
interface DECLSPEC_UUID("CD5EBE6B-8B6E-11D1-8AE0-00A0C9223196") IKsPinFactory; |
|
#undef INTERFACE |
|
#define INTERFACE IKsPinFactory |
|
DECLARE_INTERFACE_(IKsPinFactory, IUnknown) |
|
{ |
|
STDMETHOD(KsPinFactory)( |
|
THIS_ |
|
ULONG* PinFactory |
|
) PURE; |
|
}; |
|
|
|
typedef enum { |
|
KsIoOperation_Write, |
|
KsIoOperation_Read |
|
} KSIOOPERATION; |
|
|
|
interface DECLSPEC_UUID("5ffbaa02-49a3-11d0-9f36-00aa00a216a1") IKsDataTypeHandler; |
|
#undef INTERFACE |
|
#define INTERFACE IKsDataTypeHandler |
|
DECLARE_INTERFACE_(IKsDataTypeHandler, IUnknown) |
|
{ |
|
STDMETHOD(KsCompleteIoOperation)( |
|
THIS_ |
|
IMediaSample *Sample, |
|
PVOID StreamHeader, |
|
KSIOOPERATION IoOperation, |
|
BOOL Cancelled |
|
) PURE; |
|
STDMETHOD(KsIsMediaTypeInRanges)( |
|
THIS_ |
|
PVOID DataRanges |
|
) PURE; |
|
STDMETHOD(KsPrepareIoOperation)( |
|
THIS_ |
|
IMediaSample *Sample, |
|
PVOID StreamHeader, |
|
KSIOOPERATION IoOperation |
|
) PURE; |
|
STDMETHOD(KsQueryExtendedSize)( |
|
THIS_ |
|
ULONG* ExtendedSize |
|
) PURE; |
|
STDMETHOD(KsSetMediaType)( |
|
THIS_ |
|
const AM_MEDIA_TYPE* AmMediaType |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("827D1A0E-0F73-11D2-B27A-00A0C9223196") IKsDataTypeCompletion; |
|
#undef INTERFACE |
|
#define INTERFACE IKsDataTypeCompletion |
|
DECLARE_INTERFACE_(IKsDataTypeCompletion, IUnknown) |
|
{ |
|
STDMETHOD(KsCompleteMediaType)( |
|
THIS_ |
|
HANDLE FilterHandle, |
|
ULONG PinFactoryId, |
|
AM_MEDIA_TYPE* AmMediaType |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("D3ABC7E0-9A61-11d0-A40D-00A0C9223196") IKsInterfaceHandler; |
|
#undef INTERFACE |
|
#define INTERFACE IKsInterfaceHandler |
|
DECLARE_INTERFACE_(IKsInterfaceHandler, IUnknown) |
|
{ |
|
STDMETHOD(KsSetPin)( |
|
THIS_ |
|
IKsPin *KsPin |
|
) PURE; |
|
STDMETHOD(KsProcessMediaSamples)( |
|
THIS_ |
|
IKsDataTypeHandler *KsDataTypeHandler, |
|
IMediaSample** SampleList, |
|
PLONG SampleCount, |
|
KSIOOPERATION IoOperation, |
|
PKSSTREAM_SEGMENT *StreamSegment |
|
) PURE; |
|
STDMETHOD(KsCompleteIo)( |
|
THIS_ |
|
PKSSTREAM_SEGMENT StreamSegment |
|
) PURE; |
|
}; |
|
|
|
|
|
// |
|
// This structure definition is the common header required by the proxy to |
|
// dispatch the stream segment to the interface handler. Interface handlers |
|
// will create extended structures to include other information such as |
|
// media samples, extended header size and so on. |
|
// |
|
|
|
typedef struct _KSSTREAM_SEGMENT { |
|
IKsInterfaceHandler *KsInterfaceHandler; |
|
IKsDataTypeHandler *KsDataTypeHandler; |
|
KSIOOPERATION IoOperation; |
|
HANDLE CompletionEvent; |
|
|
|
} KSSTREAM_SEGMENT; |
|
|
|
interface DECLSPEC_UUID("423c13a2-2070-11d0-9ef7-00aa00a216a1") IKsObject; |
|
#undef INTERFACE |
|
#define INTERFACE IKsObject |
|
DECLARE_INTERFACE_(IKsObject, IUnknown) |
|
{ |
|
STDMETHOD_(HANDLE, KsGetObjectHandle)( |
|
THIS |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("97ebaacb-95bd-11d0-a3ea-00a0c9223196") IKsQualityForwarder; |
|
#undef INTERFACE |
|
#define INTERFACE IKsQualityForwarder |
|
DECLARE_INTERFACE_(IKsQualityForwarder, IKsObject) |
|
{ |
|
STDMETHOD_(VOID, KsFlushClient)( |
|
THIS_ |
|
IKsPin* Pin |
|
) PURE; |
|
}; |
|
|
|
interface DECLSPEC_UUID("412bd695-f84b-46c1-ac73-54196dbc8fa7") IKsNotifyEvent; |
|
#undef INTERFACE |
|
#define INTERFACE IKsNotifyEvent |
|
DECLARE_INTERFACE_(IKsNotifyEvent, IUnknown) |
|
{ |
|
STDMETHOD(KsNotifyEvent)( |
|
THIS_ |
|
ULONG Event, |
|
ULONG_PTR lParam1, |
|
ULONG_PTR lParam2 |
|
) PURE; |
|
}; |
|
|
|
KSDDKAPI |
|
HRESULT |
|
WINAPI |
|
KsResolveRequiredAttributes( |
|
PKSDATARANGE DataRange, |
|
PKSMULTIPLE_ITEM Attributes OPTIONAL |
|
); |
|
|
|
KSDDKAPI |
|
HRESULT |
|
WINAPI |
|
KsOpenDefaultDevice( |
|
REFGUID Category, |
|
ACCESS_MASK Access, |
|
PHANDLE DeviceHandle |
|
); |
|
KSDDKAPI |
|
HRESULT |
|
WINAPI |
|
KsSynchronousDeviceControl( |
|
HANDLE Handle, |
|
ULONG IoControl, |
|
PVOID InBuffer, |
|
ULONG InLength, |
|
PVOID OutBuffer, |
|
ULONG OutLength, |
|
PULONG BytesReturned |
|
); |
|
KSDDKAPI |
|
HRESULT |
|
WINAPI |
|
KsGetMultiplePinFactoryItems( |
|
HANDLE FilterHandle, |
|
ULONG PinFactoryId, |
|
ULONG PropertyId, |
|
PVOID* Items |
|
); |
|
KSDDKAPI |
|
HRESULT |
|
WINAPI |
|
KsGetMediaTypeCount( |
|
HANDLE FilterHandle, |
|
ULONG PinFactoryId, |
|
ULONG* MediaTypeCount |
|
); |
|
KSDDKAPI |
|
HRESULT |
|
WINAPI |
|
KsGetMediaType( |
|
int Position, |
|
AM_MEDIA_TYPE* AmMediaType, |
|
HANDLE FilterHandle, |
|
ULONG PinFactoryId |
|
); |
|
|
|
#endif // __STREAMS__ |
|
|
|
#ifndef _IKsPropertySet_ |
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUIDEX(IID_IKsPropertySet); |
|
#endif // !defined(__cplusplus) || _MSC_VER < 1100 |
|
#endif // _IKsPropertySet_ |
|
|
|
#ifndef _IKsControl_ |
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUIDEX(IID_IKsControl); |
|
#endif // !defined(__cplusplus) || _MSC_VER < 1100 |
|
#endif // _IKsControl_ |
|
|
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUIDEX(IID_IKsAggregateControl); |
|
#endif // !defined(__cplusplus) || _MSC_VER < 1100 |
|
|
|
#ifndef _IKsTopology_ |
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUIDEX(IID_IKsTopology); |
|
#endif // !defined(__cplusplus) || _MSC_VER < 1100 |
|
#endif // _IKsTopology_ |
|
|
|
DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196", CLSID_Proxy); |
|
#define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy) |
|
|
|
#else // !_KS_ |
|
|
|
#ifndef _IKsPropertySet_ |
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUID(IID_IKsPropertySet, STATIC_IID_IKsPropertySet); |
|
#endif // !defined(__cplusplus) || _MSC_VER < 1100 |
|
#endif // _IKsPropertySet_ |
|
|
|
#if !defined(__cplusplus) || _MSC_VER < 1100 |
|
DEFINE_GUID(CLSID_Proxy, STATIC_CLSID_Proxy); |
|
#else // defined(__cplusplus) && _MSC_VER >= 1100 |
|
DECLSPEC_UUID("17CCA71B-ECD7-11D0-B908-00A0C9223196") CLSID_Proxy; |
|
#endif // defined(__cplusplus) && _MSC_VER >= 1100 |
|
|
|
#endif // !_KS_ |
|
|
|
#ifndef _IKsPropertySet_ |
|
#define _IKsPropertySet_ |
|
|
|
#define KSPROPERTY_SUPPORT_GET 1 |
|
#define KSPROPERTY_SUPPORT_SET 2 |
|
|
|
#ifdef DECLARE_INTERFACE_ |
|
|
|
interface DECLSPEC_UUID("31EFAC30-515C-11d0-A9AA-00aa0061be93") IKsPropertySet; |
|
#undef INTERFACE |
|
#define INTERFACE IKsPropertySet |
|
DECLARE_INTERFACE_(IKsPropertySet, IUnknown) |
|
{ |
|
STDMETHOD(Set)( |
|
THIS_ |
|
IN REFGUID PropSet, |
|
IN ULONG Id, |
|
IN LPVOID InstanceData, |
|
IN ULONG InstanceLength, |
|
IN LPVOID PropertyData, |
|
IN ULONG DataLength |
|
) PURE; |
|
|
|
STDMETHOD(Get)( |
|
THIS_ |
|
IN REFGUID PropSet, |
|
IN ULONG Id, |
|
IN LPVOID InstanceData, |
|
IN ULONG InstanceLength, |
|
OUT LPVOID PropertyData, |
|
IN ULONG DataLength, |
|
OUT ULONG* BytesReturned |
|
) PURE; |
|
|
|
STDMETHOD(QuerySupported)( |
|
THIS_ |
|
IN REFGUID PropSet, |
|
IN ULONG Id, |
|
OUT ULONG* TypeSupport |
|
) PURE; |
|
}; |
|
|
|
#endif // DECLARE_INTERFACE_ |
|
|
|
#endif // _IKsPropertySet_ |
|
|
|
#ifndef _IKsControl_ |
|
#define _IKsControl_ |
|
|
|
#ifdef DECLARE_INTERFACE_ |
|
|
|
interface DECLSPEC_UUID("28F54685-06FD-11D2-B27A-00A0C9223196") IKsControl; |
|
#undef INTERFACE |
|
#define INTERFACE IKsControl |
|
DECLARE_INTERFACE_(IKsControl, IUnknown) |
|
{ |
|
STDMETHOD(KsProperty)( |
|
THIS_ |
|
IN PKSPROPERTY Property, |
|
IN ULONG PropertyLength, |
|
IN OUT LPVOID PropertyData, |
|
IN ULONG DataLength, |
|
OUT ULONG* BytesReturned |
|
) PURE; |
|
STDMETHOD(KsMethod)( |
|
THIS_ |
|
IN PKSMETHOD Method, |
|
IN ULONG MethodLength, |
|
IN OUT LPVOID MethodData, |
|
IN ULONG DataLength, |
|
OUT ULONG* BytesReturned |
|
) PURE; |
|
STDMETHOD(KsEvent)( |
|
THIS_ |
|
IN PKSEVENT Event OPTIONAL, |
|
IN ULONG EventLength, |
|
IN OUT LPVOID EventData, |
|
IN ULONG DataLength, |
|
OUT ULONG* BytesReturned |
|
) PURE; |
|
}; |
|
|
|
#endif // DECLARE_INTERFACE_ |
|
|
|
#endif // _IKsControl_ |
|
|
|
|
|
#ifdef DECLARE_INTERFACE_ |
|
|
|
interface DECLSPEC_UUID("7F40EAC0-3947-11D2-874E-00A0C9223196") IKsAggregateControl; |
|
#undef INTERFACE |
|
#define INTERFACE IKsAggregateControl |
|
DECLARE_INTERFACE_(IKsAggregateControl, IUnknown) |
|
{ |
|
STDMETHOD(KsAddAggregate)( |
|
THIS_ |
|
IN REFGUID AggregateClass |
|
) PURE; |
|
STDMETHOD(KsRemoveAggregate)( |
|
THIS_ |
|
IN REFGUID AggregateClass |
|
) PURE; |
|
}; |
|
|
|
#endif // DECLARE_INTERFACE_ |
|
|
|
#ifndef _IKsTopology_ |
|
#define _IKsTopology_ |
|
|
|
#ifdef DECLARE_INTERFACE_ |
|
|
|
interface DECLSPEC_UUID("28F54683-06FD-11D2-B27A-00A0C9223196") IKsTopology; |
|
#undef INTERFACE |
|
#define INTERFACE IKsTopology |
|
DECLARE_INTERFACE_(IKsTopology, IUnknown) |
|
{ |
|
STDMETHOD(CreateNodeInstance)( |
|
THIS_ |
|
IN ULONG NodeId, |
|
IN ULONG Flags, |
|
IN ACCESS_MASK DesiredAccess, |
|
IN IUnknown* UnkOuter OPTIONAL, |
|
IN REFGUID InterfaceId, |
|
OUT LPVOID* Interface |
|
) PURE; |
|
}; |
|
|
|
#endif // DECLARE_INTERFACE_ |
|
|
|
#endif // _IKsTopology_ |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif // __cplusplus |
|
|
|
#endif // __KSPROXY__
|
|
|