1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef __KSPROXY__
7 #define __KSPROXY__
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #undef KSDDKAPI
14 #ifdef _KSDDK_
15 #define KSDDKAPI
16 #else
17 #define KSDDKAPI DECLSPEC_IMPORT
18 #endif
19 
20 #define STATIC_IID_IKsObject						\
21 	0x423c13a2,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1
22 
23 #define STATIC_IID_IKsPinEx						\
24 	0x7bb38260,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e
25 
26 #define STATIC_IID_IKsPin						\
27 	0xb61178d1,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1
28 
29 #define STATIC_IID_IKsPinPipe						\
30 	0xe539cd90,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02
31 
32 #define STATIC_IID_IKsDataTypeHandler					\
33 	0x5ffbaa02,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1
34 
35 #define STATIC_IID_IKsDataTypeCompletion				\
36 	0x827D1A0E,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
37 
38 #define STATIC_IID_IKsInterfaceHandler					\
39 	0xD3ABC7E0,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96
40 
41 #define STATIC_IID_IKsClockPropertySet					\
42 	0x5C5CBD84,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96
43 
44 #define STATIC_IID_IKsAllocator						\
45 	0x8da64899,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a
46 
47 #define STATIC_IID_IKsAllocatorEx					\
48 	0x091bb63a,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
49 
50 #ifndef STATIC_IID_IKsPropertySet
51 #define STATIC_IID_IKsPropertySet					\
52 	0x31EFAC30,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93
53 #endif
54 
55 #define STATIC_IID_IKsTopology						\
56 	0x28F54683,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
57 
58 #ifndef STATIC_IID_IKsControl
59 #define STATIC_IID_IKsControl						\
60 	0x28F54685,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
61 #endif
62 
63 #define STATIC_IID_IKsAggregateControl					\
64 	0x7F40EAC0,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96
65 
66 #define STATIC_CLSID_Proxy						\
67 	0x17CCA71B,0xECD7,0x11D0,0xB9,0x08,0x00,0xA0,0xC9,0x22,0x31,0x96
68 
69 #ifdef _KS_
70 
71 DEFINE_GUIDEX(IID_IKsObject);
72 
73 DEFINE_GUIDEX(IID_IKsPin);
74 
75 DEFINE_GUIDEX(IID_IKsPinEx);
76 
77 DEFINE_GUIDEX(IID_IKsPinPipe);
78 
79 DEFINE_GUIDEX(IID_IKsDataTypeHandler);
80 
81 DEFINE_GUIDEX(IID_IKsDataTypeCompletion);
82 
83 DEFINE_GUIDEX(IID_IKsInterfaceHandler);
84 
85 DEFINE_GUIDEX(IID_IKsClockPropertySet);
86 
87 DEFINE_GUIDEX(IID_IKsAllocator);
88 
89 DEFINE_GUIDEX(IID_IKsAllocatorEx);
90 
91 #define IID_IKsQualityForwarder KSCATEGORY_QUALITY
92 #define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY
93 
94 typedef enum {
95   KsAllocatorMode_User,
96   KsAllocatorMode_Kernel
97 } KSALLOCATORMODE;
98 
99 typedef enum {
100   FramingProp_Uninitialized,
101   FramingProp_None,
102   FramingProp_Old,
103   FramingProp_Ex
104 } FRAMING_PROP;
105 
106 typedef FRAMING_PROP *PFRAMING_PROP;
107 
108 typedef enum {
109   Framing_Cache_Update,
110   Framing_Cache_ReadLast,
111   Framing_Cache_ReadOrig,
112   Framing_Cache_Write
113 } FRAMING_CACHE_OPS;
114 
115 typedef struct {
116   LONGLONG MinTotalNominator;
117   LONGLONG MaxTotalNominator;
118   LONGLONG TotalDenominator;
119 } OPTIMAL_WEIGHT_TOTALS;
120 
121 typedef struct IPin IPin;
122 typedef struct IKsPin IKsPin;
123 typedef struct IKsAllocator IKsAllocator;
124 typedef struct IKsAllocatorEx IKsAllocatorEx;
125 
126 #define AllocatorStrategy_DontCare			0
127 #define AllocatorStrategy_MinimizeNumberOfFrames	0x00000001
128 #define AllocatorStrategy_MinimizeFrameSize		0x00000002
129 #define AllocatorStrategy_MinimizeNumberOfAllocators	0x00000004
130 #define AllocatorStrategy_MaximizeSpeed			0x00000008
131 
132 #define PipeFactor_None					0
133 #define PipeFactor_UserModeUpstream			0x00000001
134 #define PipeFactor_UserModeDownstream			0x00000002
135 #define PipeFactor_MemoryTypes				0x00000004
136 #define PipeFactor_Flags				0x00000008
137 #define PipeFactor_PhysicalRanges			0x00000010
138 #define PipeFactor_OptimalRanges			0x00000020
139 #define PipeFactor_FixedCompression			0x00000040
140 #define PipeFactor_UnknownCompression			0x00000080
141 
142 #define PipeFactor_Buffers				0x00000100
143 #define PipeFactor_Align				0x00000200
144 #define PipeFactor_PhysicalEnd				0x00000400
145 #define PipeFactor_LogicalEnd				0x00000800
146 
147 typedef enum {
148   PipeState_DontCare,
149   PipeState_RangeNotFixed,
150   PipeState_RangeFixed,
151   PipeState_CompressionUnknown,
152   PipeState_Finalized
153 } PIPE_STATE;
154 
155 typedef struct _PIPE_DIMENSIONS {
156   KS_COMPRESSION AllocatorPin;
157   KS_COMPRESSION MaxExpansionPin;
158   KS_COMPRESSION EndPin;
159 } PIPE_DIMENSIONS,*PPIPE_DIMENSIONS;
160 
161 typedef enum {
162   Pipe_Allocator_None,
163   Pipe_Allocator_FirstPin,
164   Pipe_Allocator_LastPin,
165   Pipe_Allocator_MiddlePin
166 } PIPE_ALLOCATOR_PLACE;
167 
168 typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE;
169 
170 typedef enum {
171   KS_MemoryTypeDontCare = 0,
172   KS_MemoryTypeKernelPaged,
173   KS_MemoryTypeKernelNonPaged,
174   KS_MemoryTypeDeviceHostMapped,
175   KS_MemoryTypeDeviceSpecific,
176   KS_MemoryTypeUser,
177   KS_MemoryTypeAnyHost
178 } KS_LogicalMemoryType;
179 
180 typedef KS_LogicalMemoryType *PKS_LogicalMemoryType;
181 
182 typedef struct _PIPE_TERMINATION {
183   ULONG Flags;
184   ULONG OutsideFactors;
185   ULONG Weigth;
186   KS_FRAMING_RANGE PhysicalRange;
187   KS_FRAMING_RANGE_WEIGHTED OptimalRange;
188   KS_COMPRESSION Compression;
189 } PIPE_TERMINATION;
190 
191 typedef struct _ALLOCATOR_PROPERTIES_EX
192 {
193   __LONG32 cBuffers;
194   __LONG32 cbBuffer;
195   __LONG32 cbAlign;
196   __LONG32 cbPrefix;
197 
198   GUID MemoryType;
199   GUID BusType;
200   PIPE_STATE State;
201   PIPE_TERMINATION Input;
202   PIPE_TERMINATION Output;
203   ULONG Strategy;
204   ULONG Flags;
205   ULONG Weight;
206   KS_LogicalMemoryType LogicalMemoryType;
207   PIPE_ALLOCATOR_PLACE AllocatorPlace;
208   PIPE_DIMENSIONS Dimensions;
209   KS_FRAMING_RANGE PhysicalRange;
210   IKsAllocatorEx *PrevSegment;
211   ULONG CountNextSegments;
212   IKsAllocatorEx **NextSegments;
213   ULONG InsideFactors;
214   ULONG NumberPins;
215 } ALLOCATOR_PROPERTIES_EX;
216 
217 typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;
218 
219 #ifdef __STREAMS__
220 
221 struct IKsClockPropertySet;
222 
223 #ifdef __CRT_UUID_DECL
224 __CRT_UUID_DECL(IKsClockPropertySet,0x5c5cbd84,0xe755,0x11d0,0xac,0x18,0x00,0xa0,0xc9,0x22,0x31,0x96);
225 #endif
226 
227 #undef INTERFACE
228 #define INTERFACE IKsClockPropertySet
DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)229 DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)
230 {
231   STDMETHOD(KsGetTime)			(THIS_
232 						LONGLONG *Time
233 					) PURE;
234   STDMETHOD(KsSetTime)			(THIS_
235 						LONGLONG Time
236 					) PURE;
237   STDMETHOD(KsGetPhysicalTime)		(THIS_
238 						LONGLONG *Time
239 					) PURE;
240   STDMETHOD(KsSetPhysicalTime)		(THIS_
241 						LONGLONG Time
242 					) PURE;
243   STDMETHOD(KsGetCorrelatedTime)	(THIS_
244 						KSCORRELATED_TIME *CorrelatedTime
245 					) PURE;
246   STDMETHOD(KsSetCorrelatedTime)	(THIS_
247 						KSCORRELATED_TIME *CorrelatedTime
248 					) PURE;
249   STDMETHOD(KsGetCorrelatedPhysicalTime)(THIS_
250 						KSCORRELATED_TIME *CorrelatedTime
251 					) PURE;
252   STDMETHOD(KsSetCorrelatedPhysicalTime)(THIS_
253 						KSCORRELATED_TIME *CorrelatedTime
254 					) PURE;
255   STDMETHOD(KsGetResolution)		(THIS_
256 						KSRESOLUTION *Resolution
257 					) PURE;
258   STDMETHOD(KsGetState)			(THIS_
259 						KSSTATE *State
260 					) PURE;
261 };
262 
263 struct IKsAllocator;
264 
265 #ifdef __CRT_UUID_DECL
266 __CRT_UUID_DECL(IKsAllocator,0x8da64899,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a);
267 #endif
268 
269 #undef INTERFACE
270 #define INTERFACE IKsAllocator
DECLARE_INTERFACE_(IKsAllocator,IUnknown)271 DECLARE_INTERFACE_(IKsAllocator,IUnknown)
272 {
273   STDMETHOD_(HANDLE,KsGetAllocatorHandle)(THIS) PURE;
274   STDMETHOD_(KSALLOCATORMODE,KsGetAllocatorMode)(THIS) PURE;
275   STDMETHOD(KsGetAllocatorStatus)	(THIS_
276 						PKSSTREAMALLOCATOR_STATUS AllocatorStatus
277 					) PURE;
278   STDMETHOD_(VOID,KsSetAllocatorMode)	(THIS_
279 						KSALLOCATORMODE Mode
280 					) PURE;
281 };
282 
283 struct IKsAllocatorEx;
284 
285 #ifdef __CRT_UUID_DECL
286 __CRT_UUID_DECL(IKsAllocatorEx,0x091bb63a,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02);
287 #endif
288 
289 #undef INTERFACE
290 #define INTERFACE IKsAllocatorEx
DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)291 DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)
292 {
293   STDMETHOD_(PALLOCATOR_PROPERTIES_EX,KsGetProperties)(THIS) PURE;
294   STDMETHOD_(VOID,KsSetProperties)	(THIS_
295 						PALLOCATOR_PROPERTIES_EX
296 					) PURE;
297   STDMETHOD_(VOID,KsSetAllocatorHandle)	(THIS_
298 						HANDLE AllocatorHandle
299 					) PURE;
300   STDMETHOD_(HANDLE,KsCreateAllocatorAndGetHandle)(THIS_
301 						IKsPin *KsPin
302 					) PURE;
303 };
304 
305 typedef enum {
306   KsPeekOperation_PeekOnly,
307   KsPeekOperation_AddRef
308 } KSPEEKOPERATION;
309 
310 typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;
311 struct IKsPin;
312 
313 #ifdef __CRT_UUID_DECL
314 __CRT_UUID_DECL(IKsPin,0xb61178d1,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1);
315 #endif
316 
317 #undef INTERFACE
318 #define INTERFACE IKsPin
DECLARE_INTERFACE_(IKsPin,IUnknown)319 DECLARE_INTERFACE_(IKsPin,IUnknown)
320 {
321   STDMETHOD(KsQueryMediums)		(THIS_
322 						PKSMULTIPLE_ITEM *MediumList
323 					) PURE;
324   STDMETHOD(KsQueryInterfaces)		(THIS_
325 						PKSMULTIPLE_ITEM *InterfaceList
326 					) PURE;
327   STDMETHOD(KsCreateSinkPinHandle)	(THIS_
328 						KSPIN_INTERFACE& Interface,
329 						KSPIN_MEDIUM& Medium
330 					) PURE;
331   STDMETHOD(KsGetCurrentCommunication)	(THIS_
332 						KSPIN_COMMUNICATION *Communication,
333 						KSPIN_INTERFACE *Interface,
334 						KSPIN_MEDIUM *Medium
335 					) PURE;
336   STDMETHOD(KsPropagateAcquire)		(THIS) PURE;
337   STDMETHOD(KsDeliver)			(THIS_
338 						IMediaSample *Sample,
339 						ULONG Flags
340 					) PURE;
341   STDMETHOD(KsMediaSamplesCompleted)	(THIS_
342 						PKSSTREAM_SEGMENT StreamSegment
343 					) PURE;
344   STDMETHOD_(IMemAllocator *,KsPeekAllocator)(THIS_
345 						KSPEEKOPERATION Operation
346 					) PURE;
347   STDMETHOD(KsReceiveAllocator)		(THIS_
348 						IMemAllocator *MemAllocator
349 					) PURE;
350   STDMETHOD(KsRenegotiateAllocator)	(THIS) PURE;
351   STDMETHOD_(LONG,KsIncrementPendingIoCount)(THIS) PURE;
352   STDMETHOD_(LONG,KsDecrementPendingIoCount)(THIS) PURE;
353   STDMETHOD(KsQualityNotify)		(THIS_
354 						ULONG Proportion,
355 						REFERENCE_TIME TimeDelta
356 					) PURE;
357 };
358 
359 struct IKsPinEx;
360 
361 #ifdef __CRT_UUID_DECL
362 __CRT_UUID_DECL(IKsPinEx,0x7bb38260,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e);
363 #endif
364 
365 #undef INTERFACE
366 #define INTERFACE IKsPinEx
DECLARE_INTERFACE_(IKsPinEx,IKsPin)367 DECLARE_INTERFACE_(IKsPinEx,IKsPin)
368 {
369   STDMETHOD_(VOID,KsNotifyError)	(THIS_
370 						IMediaSample *Sample,
371 						HRESULT hr
372 					) PURE;
373 };
374 
375 struct IKsPinPipe;
376 
377 #ifdef __CRT_UUID_DECL
378 __CRT_UUID_DECL(IKsPinPipe,0xe539cd90,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02);
379 #endif
380 
381 #undef INTERFACE
382 #define INTERFACE IKsPinPipe
DECLARE_INTERFACE_(IKsPinPipe,IUnknown)383 DECLARE_INTERFACE_(IKsPinPipe,IUnknown)
384 {
385   STDMETHOD(KsGetPinFramingCache)	(THIS_
386 						PKSALLOCATOR_FRAMING_EX *FramingEx,
387 						PFRAMING_PROP FramingProp,
388 						FRAMING_CACHE_OPS Option
389 					) PURE;
390   STDMETHOD(KsSetPinFramingCache)	(THIS_
391 						PKSALLOCATOR_FRAMING_EX FramingEx,
392 						PFRAMING_PROP FramingProp,
393 						FRAMING_CACHE_OPS Option
394 					) PURE;
395   STDMETHOD_(IPin*,KsGetConnectedPin)	(THIS) PURE;
396   STDMETHOD_(IKsAllocatorEx*,KsGetPipe)	(THIS_
397 						KSPEEKOPERATION Operation
398 					) PURE;
399   STDMETHOD(KsSetPipe)			(THIS_
400 						IKsAllocatorEx *KsAllocator
401 					) PURE;
402   STDMETHOD_(ULONG,KsGetPipeAllocatorFlag)(THIS) PURE;
403   STDMETHOD(KsSetPipeAllocatorFlag)	(THIS_
404 						ULONG Flag
405 					) PURE;
406   STDMETHOD_(GUID,KsGetPinBusCache)	(THIS) PURE;
407   STDMETHOD(KsSetPinBusCache)		(THIS_
408 						GUID Bus
409 					) PURE;
410   STDMETHOD_(PWCHAR,KsGetPinName)	(THIS) PURE;
411   STDMETHOD_(PWCHAR,KsGetFilterName)	(THIS) PURE;
412 };
413 
414 struct IKsPinFactory;
415 
416 #ifdef __CRT_UUID_DECL
417 __CRT_UUID_DECL(IKsPinFactory,0xcd5ebe6b,0x8b6e,0x11d1,0x8a,0xe0,0x00,0xa0,0xc9,0x22,0x31,0x96);
418 #endif
419 
420 #undef INTERFACE
421 #define INTERFACE IKsPinFactory
DECLARE_INTERFACE_(IKsPinFactory,IUnknown)422 DECLARE_INTERFACE_(IKsPinFactory,IUnknown)
423 {
424   STDMETHOD(KsPinFactory)		(THIS_
425 						ULONG *PinFactory
426 					) PURE;
427 };
428 
429 typedef enum {
430   KsIoOperation_Write,
431   KsIoOperation_Read
432 } KSIOOPERATION;
433 
434 struct IKsDataTypeHandler;
435 
436 #ifdef __CRT_UUID_DECL
437 __CRT_UUID_DECL(IKsDataTypeHandler,0x5ffbaa02,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1);
438 #endif
439 
440 #undef INTERFACE
441 #define INTERFACE IKsDataTypeHandler
DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)442 DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)
443 {
444   STDMETHOD(KsCompleteIoOperation)	(THIS_
445 						IMediaSample *Sample,
446 						PVOID StreamHeader,
447 						KSIOOPERATION IoOperation,
448 						WINBOOL Cancelled
449 					) PURE;
450   STDMETHOD(KsIsMediaTypeInRanges)	(THIS_
451 						PVOID DataRanges
452 					) PURE;
453   STDMETHOD(KsPrepareIoOperation)	(THIS_
454 						IMediaSample *Sample,
455 						PVOID StreamHeader,
456 						KSIOOPERATION IoOperation
457 					) PURE;
458   STDMETHOD(KsQueryExtendedSize)	(THIS_
459 						ULONG *ExtendedSize
460 					) PURE;
461   STDMETHOD(KsSetMediaType)		(THIS_
462 						const AM_MEDIA_TYPE *AmMediaType
463 					) PURE;
464 };
465 
466 struct IKsDataTypeCompletion;
467 
468 #ifdef __CRT_UUID_DECL
469 __CRT_UUID_DECL(IKsDataTypeCompletion,0x827d1a0e,0x0f73,0x11d2,0xb2,0x7a,0x00,0xa0,0xc9,0x22,0x31,0x96);
470 #endif
471 
472 #undef INTERFACE
473 #define INTERFACE IKsDataTypeCompletion
DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)474 DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)
475 {
476   STDMETHOD(KsCompleteMediaType)	(THIS_
477 						HANDLE FilterHandle,
478 						ULONG PinFactoryId,
479 						AM_MEDIA_TYPE *AmMediaType
480 					) PURE;
481 };
482 
483 struct IKsInterfaceHandler;
484 
485 #ifdef __CRT_UUID_DECL
486 __CRT_UUID_DECL(IKsInterfaceHandler,0xd3abc7e0,0x9a61,0x11d0,0xa4,0x0d,0x00,0xa0,0xc9,0x22,0x31,0x96);
487 #endif
488 
489 #undef INTERFACE
490 #define INTERFACE IKsInterfaceHandler
DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)491 DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)
492 {
493   STDMETHOD(KsSetPin)			(THIS_
494 						IKsPin *KsPin
495 					) PURE;
496   STDMETHOD(KsProcessMediaSamples)	(THIS_
497 						IKsDataTypeHandler *KsDataTypeHandler,
498 						IMediaSample **SampleList,
499 						PLONG SampleCount,
500 						KSIOOPERATION IoOperation,
501 						PKSSTREAM_SEGMENT *StreamSegment
502 					) PURE;
503   STDMETHOD(KsCompleteIo)		(THIS_
504 						PKSSTREAM_SEGMENT StreamSegment
505 					) PURE;
506 };
507 
508 typedef struct _KSSTREAM_SEGMENT {
509   IKsInterfaceHandler *KsInterfaceHandler;
510   IKsDataTypeHandler *KsDataTypeHandler;
511   KSIOOPERATION IoOperation;
512   HANDLE CompletionEvent;
513 } KSSTREAM_SEGMENT;
514 
515 struct IKsObject;
516 
517 #ifdef __CRT_UUID_DECL
518 __CRT_UUID_DECL(IKsObject,0x423c13a2,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1);
519 #endif
520 
521 #undef INTERFACE
522 #define INTERFACE IKsObject
DECLARE_INTERFACE_(IKsObject,IUnknown)523 DECLARE_INTERFACE_(IKsObject,IUnknown)
524 {
525   STDMETHOD_(HANDLE,KsGetObjectHandle)	(THIS) PURE;
526 };
527 
528 struct IKsQualityForwarder;
529 
530 #ifdef __CRT_UUID_DECL
531 __CRT_UUID_DECL(IKsQualityForwarder,0x97ebaacb,0x95bd,0x11d0,0xa3,0xea,0x00,0xa0,0xc9,0x22,0x31,0x96);
532 #endif
533 
534 #undef INTERFACE
535 #define INTERFACE IKsQualityForwarder
DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)536 DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)
537 {
538   STDMETHOD_(VOID,KsFlushClient)	(THIS_
539 						IKsPin *Pin
540 					) PURE;
541 };
542 
543 struct IKsNotifyEvent;
544 
545 #ifdef __CRT_UUID_DECL
546 __CRT_UUID_DECL(IKsNotifyEvent,0x412bd695,0xf84b,0x46c1,0xac,0x73,0x54,0x19,0x6d,0xbc,0x8f,0xa7);
547 #endif
548 
549 #undef INTERFACE
550 #define INTERFACE IKsNotifyEvent
DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)551 DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)
552 {
553   STDMETHOD(KsNotifyEvent)		(THIS_
554 						ULONG Event,
555 						ULONG_PTR lParam1,
556 						ULONG_PTR lParam2
557 					) PURE;
558 };
559 
560 KSDDKAPI HRESULT WINAPI KsResolveRequiredAttributes(PKSDATARANGE DataRange,PKSMULTIPLE_ITEM Attributes);
561 KSDDKAPI HRESULT WINAPI KsOpenDefaultDevice(REFGUID Category,ACCESS_MASK Access,PHANDLE DeviceHandle);
562 KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle,ULONG IoControl,PVOID InBuffer,ULONG InLength,PVOID OutBuffer,ULONG OutLength,PULONG BytesReturned);
563 KSDDKAPI HRESULT WINAPI KsGetMultiplePinFactoryItems(HANDLE FilterHandle,ULONG PinFactoryId,ULONG PropertyId,PVOID *Items);
564 KSDDKAPI HRESULT WINAPI KsGetMediaTypeCount(HANDLE FilterHandle,ULONG PinFactoryId,ULONG *MediaTypeCount);
565 KSDDKAPI HRESULT WINAPI KsGetMediaType(int Position,AM_MEDIA_TYPE *AmMediaType,HANDLE FilterHandle,ULONG PinFactoryId);
566 #endif /* __STREAMS__ */
567 
568 #ifndef _IKsPropertySet_
569 DEFINE_GUIDEX(IID_IKsPropertySet);
570 #endif
571 
572 #ifndef _IKsControl_
573 DEFINE_GUIDEX(IID_IKsControl);
574 #endif
575 
576 DEFINE_GUIDEX(IID_IKsAggregateControl);
577 #ifndef _IKsTopology_
578 DEFINE_GUIDEX(IID_IKsTopology);
579 #endif
580 DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy);
581 #define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)
582 
583 #else /* _KS_ */
584 
585 #ifndef _IKsPropertySet_
586 DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet);
587 #endif
588 
589 DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy);
590 
591 #endif /* _KS_ */
592 
593 #ifndef _IKsPropertySet_
594 #define _IKsPropertySet_
595 #define KSPROPERTY_SUPPORT_GET 1
596 #define KSPROPERTY_SUPPORT_SET 2
597 
598 #ifdef DECLARE_INTERFACE_
599 struct IKsPropertySet;
600 #undef INTERFACE
601 #define INTERFACE IKsPropertySet
DECLARE_INTERFACE_(IKsPropertySet,IUnknown)602 DECLARE_INTERFACE_(IKsPropertySet,IUnknown)
603 {
604   STDMETHOD(Set)			(THIS_
605 						REFGUID PropSet,
606 						ULONG Id,
607 						LPVOID InstanceData,
608 						ULONG InstanceLength,
609 						LPVOID PropertyData,
610 						ULONG DataLength
611 					) PURE;
612   STDMETHOD(Get)			(THIS_
613 						REFGUID PropSet,
614 						ULONG Id,
615 						LPVOID InstanceData,
616 						ULONG InstanceLength,
617 						LPVOID PropertyData,
618 						ULONG DataLength,
619 						ULONG *BytesReturned
620 					) PURE;
621   STDMETHOD(QuerySupported)		(THIS_
622 						REFGUID PropSet,
623 						ULONG Id,
624 						ULONG *TypeSupport
625 					) PURE;
626 };
627 #endif /* DECLARE_INTERFACE_ */
628 #endif /* _IKsPropertySet_ */
629 
630 #ifndef _IKsControl_
631 #define _IKsControl_
632 #ifdef DECLARE_INTERFACE_
633 struct IKsControl;
634 #undef INTERFACE
635 #define INTERFACE IKsControl
DECLARE_INTERFACE_(IKsControl,IUnknown)636 DECLARE_INTERFACE_(IKsControl,IUnknown)
637 {
638   STDMETHOD(KsProperty)			(THIS_
639 						PKSPROPERTY Property,
640 						ULONG PropertyLength,
641 						LPVOID PropertyData,
642 						ULONG DataLength,
643 						ULONG *BytesReturned
644 					) PURE;
645   STDMETHOD(KsMethod)			(THIS_
646 						PKSMETHOD Method,
647 						ULONG MethodLength,
648 						LPVOID MethodData,
649 						ULONG DataLength,
650 						ULONG *BytesReturned
651 					) PURE;
652   STDMETHOD(KsEvent)			(THIS_
653 						PKSEVENT Event,
654 						ULONG EventLength,
655 						LPVOID EventData,
656 						ULONG DataLength,
657 						ULONG *BytesReturned
658 					) PURE;
659 };
660 #endif /* DECLARE_INTERFACE_ */
661 #endif /* _IKsControl_ */
662 
663 #ifdef DECLARE_INTERFACE_
664 struct IKsAggregateControl;
665 #undef INTERFACE
666 #define INTERFACE IKsAggregateControl
DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)667 DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)
668 {
669   STDMETHOD(KsAddAggregate)		(THIS_
670 						REFGUID AggregateClass
671 					) PURE;
672   STDMETHOD(KsRemoveAggregate)		(THIS_
673 						REFGUID AggregateClass
674 					) PURE;
675 };
676 #endif /* DECLARE_INTERFACE_ */
677 
678 #ifndef _IKsTopology_
679 #define _IKsTopology_
680 #ifdef DECLARE_INTERFACE_
681 struct IKsTopology;
682 #undef INTERFACE
683 #define INTERFACE IKsTopology
DECLARE_INTERFACE_(IKsTopology,IUnknown)684 DECLARE_INTERFACE_(IKsTopology,IUnknown)
685 {
686   STDMETHOD(CreateNodeInstance)		(THIS_
687 						ULONG NodeId,
688 						ULONG Flags,
689 						ACCESS_MASK DesiredAccess,
690 						IUnknown *UnkOuter,
691 						REFGUID InterfaceId,
692 						LPVOID *Interface
693 					) PURE;
694 };
695 #endif /* DECLARE_INTERFACE_ */
696 #endif /* _IKsTopology_ */
697 
698 #ifdef __cplusplus
699 }
700 #endif
701 
702 #endif /* __KSPROXY__ */
703 
704