/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 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						\
	0x423c13a2,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1

#define STATIC_IID_IKsPinEx						\
	0x7bb38260,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e

#define STATIC_IID_IKsPin						\
	0xb61178d1,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1

#define STATIC_IID_IKsPinPipe						\
	0xe539cd90,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02

#define STATIC_IID_IKsDataTypeHandler					\
	0x5ffbaa02,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1

#define STATIC_IID_IKsDataTypeCompletion				\
	0x827D1A0E,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96

#define STATIC_IID_IKsInterfaceHandler					\
	0xD3ABC7E0,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96

#define STATIC_IID_IKsClockPropertySet					\
	0x5C5CBD84,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96

#define STATIC_IID_IKsAllocator						\
	0x8da64899,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a

#define STATIC_IID_IKsAllocatorEx					\
	0x091bb63a,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02

#ifndef STATIC_IID_IKsPropertySet
#define STATIC_IID_IKsPropertySet					\
	0x31EFAC30,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93
#endif

#define STATIC_IID_IKsTopology						\
	0x28F54683,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96

#ifndef STATIC_IID_IKsControl
#define STATIC_IID_IKsControl						\
	0x28F54685,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
#endif

#define STATIC_IID_IKsAggregateControl					\
	0x7F40EAC0,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96

#define STATIC_CLSID_Proxy						\
	0x17CCA71B,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
{
  __LONG32 cBuffers;
  __LONG32 cbBuffer;
  __LONG32 cbAlign;
  __LONG32 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__ */

