/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef __KSPROXY__ #define __KSPROXY__ #ifdef __cplusplus extern "C" { #endif #undef KSDDKAPI #ifdef _KSDDK_ #define KSDDKAPI #else #define KSDDKAPI DECLSPEC_IMPORT #endif #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 #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 #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_ 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 #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, Framing_Cache_ReadLast, Framing_Cache_ReadOrig, Framing_Cache_Write } FRAMING_CACHE_OPS; typedef struct { LONGLONG MinTotalNominator; LONGLONG MaxTotalNominator; LONGLONG TotalDenominator; } OPTIMAL_WEIGHT_TOTALS; typedef struct IPin IPin; typedef struct IKsPin IKsPin; typedef struct IKsAllocator IKsAllocator; typedef struct IKsAllocatorEx IKsAllocatorEx; #define AllocatorStrategy_DontCare 0 #define AllocatorStrategy_MinimizeNumberOfFrames 0x00000001 #define AllocatorStrategy_MinimizeFrameSize 0x00000002 #define AllocatorStrategy_MinimizeNumberOfAllocators 0x00000004 #define AllocatorStrategy_MaximizeSpeed 0x00000008 #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; 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; KS_FRAMING_RANGE PhysicalRange; KS_FRAMING_RANGE_WEIGHTED OptimalRange; KS_COMPRESSION Compression; } PIPE_TERMINATION; typedef struct _ALLOCATOR_PROPERTIES_EX { long cBuffers; long cbBuffer; long cbAlign; long cbPrefix; GUID MemoryType; GUID BusType; 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; IKsAllocatorEx *PrevSegment; ULONG CountNextSegments; IKsAllocatorEx **NextSegments; ULONG InsideFactors; ULONG NumberPins; } ALLOCATOR_PROPERTIES_EX; typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX; #ifdef __STREAMS__ struct 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; }; struct 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; }; struct 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; struct 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; }; struct IKsPinEx; #undef INTERFACE #define INTERFACE IKsPinEx DECLARE_INTERFACE_(IKsPinEx,IKsPin) { STDMETHOD_(VOID,KsNotifyError) (THIS_ IMediaSample *Sample, HRESULT hr ) PURE; }; struct 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; STDMETHOD_(PWCHAR,KsGetPinName) (THIS) PURE; STDMETHOD_(PWCHAR,KsGetFilterName) (THIS) PURE; }; struct IKsPinFactory; #undef INTERFACE #define INTERFACE IKsPinFactory DECLARE_INTERFACE_(IKsPinFactory,IUnknown) { STDMETHOD(KsPinFactory) (THIS_ ULONG *PinFactory ) PURE; }; typedef enum { KsIoOperation_Write, KsIoOperation_Read } KSIOOPERATION; struct IKsDataTypeHandler; #undef INTERFACE #define INTERFACE IKsDataTypeHandler DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown) { STDMETHOD(KsCompleteIoOperation) (THIS_ IMediaSample *Sample, PVOID StreamHeader, KSIOOPERATION IoOperation, WINBOOL 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; }; struct IKsDataTypeCompletion; #undef INTERFACE #define INTERFACE IKsDataTypeCompletion DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown) { STDMETHOD(KsCompleteMediaType) (THIS_ HANDLE FilterHandle, ULONG PinFactoryId, AM_MEDIA_TYPE *AmMediaType ) PURE; }; struct 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; }; typedef struct _KSSTREAM_SEGMENT { IKsInterfaceHandler *KsInterfaceHandler; IKsDataTypeHandler *KsDataTypeHandler; KSIOOPERATION IoOperation; HANDLE CompletionEvent; } KSSTREAM_SEGMENT; struct IKsObject; #undef INTERFACE #define INTERFACE IKsObject DECLARE_INTERFACE_(IKsObject,IUnknown) { STDMETHOD_(HANDLE,KsGetObjectHandle) (THIS) PURE; }; struct IKsQualityForwarder; #undef INTERFACE #define INTERFACE IKsQualityForwarder DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject) { STDMETHOD_(VOID,KsFlushClient) (THIS_ IKsPin *Pin ) PURE; }; struct 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); 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_ DEFINE_GUIDEX(IID_IKsPropertySet); #endif #ifndef _IKsControl_ DEFINE_GUIDEX(IID_IKsControl); #endif DEFINE_GUIDEX(IID_IKsAggregateControl); #ifndef _IKsTopology_ DEFINE_GUIDEX(IID_IKsTopology); #endif DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy); #define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy) #else /* _KS_ */ #ifndef _IKsPropertySet_ DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet); #endif DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy); #endif /* _KS_ */ #ifndef _IKsPropertySet_ #define _IKsPropertySet_ #define KSPROPERTY_SUPPORT_GET 1 #define KSPROPERTY_SUPPORT_SET 2 #ifdef DECLARE_INTERFACE_ struct IKsPropertySet; #undef INTERFACE #define INTERFACE IKsPropertySet DECLARE_INTERFACE_(IKsPropertySet,IUnknown) { STDMETHOD(Set) (THIS_ REFGUID PropSet, ULONG Id, LPVOID InstanceData, ULONG InstanceLength, LPVOID PropertyData, ULONG DataLength ) PURE; STDMETHOD(Get) (THIS_ REFGUID PropSet, ULONG Id, LPVOID InstanceData, ULONG InstanceLength, LPVOID PropertyData, ULONG DataLength, ULONG *BytesReturned ) PURE; STDMETHOD(QuerySupported) (THIS_ REFGUID PropSet, ULONG Id, ULONG *TypeSupport ) PURE; }; #endif /* DECLARE_INTERFACE_ */ #endif /* _IKsPropertySet_ */ #ifndef _IKsControl_ #define _IKsControl_ #ifdef DECLARE_INTERFACE_ struct IKsControl; #undef INTERFACE #define INTERFACE IKsControl DECLARE_INTERFACE_(IKsControl,IUnknown) { STDMETHOD(KsProperty) (THIS_ PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData, ULONG DataLength, ULONG *BytesReturned ) PURE; STDMETHOD(KsMethod) (THIS_ PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData, ULONG DataLength, ULONG *BytesReturned ) PURE; STDMETHOD(KsEvent) (THIS_ PKSEVENT Event, ULONG EventLength, LPVOID EventData, ULONG DataLength, ULONG *BytesReturned ) PURE; }; #endif /* DECLARE_INTERFACE_ */ #endif /* _IKsControl_ */ #ifdef DECLARE_INTERFACE_ struct IKsAggregateControl; #undef INTERFACE #define INTERFACE IKsAggregateControl DECLARE_INTERFACE_(IKsAggregateControl,IUnknown) { STDMETHOD(KsAddAggregate) (THIS_ REFGUID AggregateClass ) PURE; STDMETHOD(KsRemoveAggregate) (THIS_ REFGUID AggregateClass ) PURE; }; #endif /* DECLARE_INTERFACE_ */ #ifndef _IKsTopology_ #define _IKsTopology_ #ifdef DECLARE_INTERFACE_ struct IKsTopology; #undef INTERFACE #define INTERFACE IKsTopology DECLARE_INTERFACE_(IKsTopology,IUnknown) { STDMETHOD(CreateNodeInstance) (THIS_ ULONG NodeId, ULONG Flags, ACCESS_MASK DesiredAccess, IUnknown *UnkOuter, REFGUID InterfaceId, LPVOID *Interface ) PURE; }; #endif /* DECLARE_INTERFACE_ */ #endif /* _IKsTopology_ */ #ifdef __cplusplus } #endif #endif /* __KSPROXY__ */