home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / ksproxy.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  22KB  |  848 lines

  1. /*++
  2.  
  3. Copyright (C) Microsoft Corporation, 1996 - 1999
  4.  
  5. Module Name:
  6.  
  7.     ksproxy.h
  8.  
  9. Abstract:
  10.  
  11.     Interface definitions for WDM-CSA proxy filters.
  12.  
  13. --*/
  14.  
  15. #ifndef __KSPROXY__
  16. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  17. #define __KSPROXY__
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. #undef KSDDKAPI
  24. #ifdef _KSDDK_
  25. #define KSDDKAPI
  26. #else // !_KSDDK_
  27. #define KSDDKAPI DECLSPEC_IMPORT
  28. #endif // _KSDDK_
  29.  
  30. #define STATIC_IID_IKsObject\
  31.     0x423c13a2L, 0x2070, 0x11d0, 0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1
  32.  
  33. #define STATIC_IID_IKsPinEx\
  34.     0x7bb38260L, 0xd19c, 0x11d2, 0xb3, 0x8a, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e
  35.  
  36. #define STATIC_IID_IKsPin\
  37.     0xb61178d1L, 0xa2d9, 0x11cf, 0x9e, 0x53, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1
  38.     
  39. #define STATIC_IID_IKsPinPipe\
  40.     0xe539cd90L, 0xa8b4, 0x11d1, 0x81, 0x89, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
  41.  
  42. #define STATIC_IID_IKsDataTypeHandler\
  43.     0x5ffbaa02L, 0x49a3, 0x11d0, 0x9f, 0x36, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1
  44.  
  45. #define STATIC_IID_IKsDataTypeCompletion\
  46.     0x827D1A0EL, 0x0F73, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  47.  
  48. #define STATIC_IID_IKsInterfaceHandler\
  49.     0xD3ABC7E0L, 0x9A61, 0x11D0, 0xA4, 0x0D, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  50.  
  51. #define STATIC_IID_IKsClockPropertySet\
  52.     0x5C5CBD84L, 0xE755, 0x11D0, 0xAC, 0x18, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  53.  
  54. #define STATIC_IID_IKsAllocator\
  55.     0x8da64899L, 0xc0d9, 0x11d0, 0x84, 0x13, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
  56.     
  57. #define STATIC_IID_IKsAllocatorEx\
  58.     0x091bb63aL, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
  59.     
  60.  
  61. #ifndef STATIC_IID_IKsPropertySet
  62. #define STATIC_IID_IKsPropertySet\
  63.     0x31EFAC30L, 0x515C, 0x11d0, 0xA9, 0xAA, 0x00, 0xAA, 0x00, 0x61, 0xBE, 0x93
  64. #endif // STATIC_IID_IKsPropertySet
  65.  
  66. #define STATIC_IID_IKsTopology\
  67.     0x28F54683L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  68.  
  69. #ifndef STATIC_IID_IKsControl
  70. #define STATIC_IID_IKsControl\
  71.     0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  72. #endif // STATIC_IID_IKsControl
  73.  
  74. #define STATIC_IID_IKsAggregateControl\
  75.     0x7F40EAC0L, 0x3947, 0x11D2, 0x87, 0x4E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  76.  
  77. #define STATIC_CLSID_Proxy \
  78.     0x17CCA71BL, 0xECD7, 0x11D0, 0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  79.  
  80. #ifdef _KS_
  81.  
  82. #if !defined(__cplusplus) || _MSC_VER < 1100
  83. DEFINE_GUIDEX(IID_IKsObject);
  84.  
  85. DEFINE_GUIDEX(IID_IKsPin);
  86.  
  87. DEFINE_GUIDEX(IID_IKsPinEx);
  88.  
  89. DEFINE_GUIDEX(IID_IKsPinPipe);
  90.  
  91. DEFINE_GUIDEX(IID_IKsDataTypeHandler);
  92.  
  93. DEFINE_GUIDEX(IID_IKsDataTypeCompletion);
  94.  
  95. DEFINE_GUIDEX(IID_IKsInterfaceHandler);
  96.  
  97. DEFINE_GUIDEX(IID_IKsClockPropertySet);
  98.  
  99. DEFINE_GUIDEX(IID_IKsAllocator);
  100.  
  101. DEFINE_GUIDEX(IID_IKsAllocatorEx);
  102.  
  103. #define IID_IKsQualityForwarder KSCATEGORY_QUALITY
  104. #endif // !defined(__cplusplus) || _MSC_VER < 1100
  105.  
  106. #define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY
  107.  
  108. typedef enum {
  109.     KsAllocatorMode_User,
  110.     KsAllocatorMode_Kernel
  111. } KSALLOCATORMODE;
  112.  
  113.  
  114. typedef enum {
  115.     FramingProp_Uninitialized,
  116.     FramingProp_None,
  117.     FramingProp_Old,
  118.     FramingProp_Ex
  119. } FRAMING_PROP;
  120.  
  121. typedef FRAMING_PROP *PFRAMING_PROP;
  122.  
  123.  
  124. typedef enum {
  125.     Framing_Cache_Update,     // request to bypass cache when read/write
  126.     Framing_Cache_ReadLast,
  127.     Framing_Cache_ReadOrig,
  128.     Framing_Cache_Write
  129. } FRAMING_CACHE_OPS;
  130.  
  131.  
  132. typedef struct {
  133.     LONGLONG     MinTotalNominator;  
  134.     LONGLONG     MaxTotalNominator;
  135.     LONGLONG     TotalDenominator;
  136. } OPTIMAL_WEIGHT_TOTALS;
  137.  
  138. // forward declaration
  139. typedef struct IPin IPin;
  140. typedef struct IKsPin IKsPin;
  141. typedef struct IKsAllocator IKsAllocator;
  142. typedef struct IKsAllocatorEx IKsAllocatorEx;
  143.  
  144.                       
  145. //
  146. // allocators strategy is defined by graph manager
  147. //
  148. #define AllocatorStrategy_DontCare                      0
  149.  
  150. //
  151. // what to optimize
  152. //
  153. #define AllocatorStrategy_MinimizeNumberOfFrames        0x00000001
  154. #define AllocatorStrategy_MinimizeFrameSize             0x00000002
  155. #define AllocatorStrategy_MinimizeNumberOfAllocators    0x00000004
  156. #define AllocatorStrategy_MaximizeSpeed                 0x00000008 
  157.  
  158. //
  159. // factors (flags) defining the Pipes properties
  160. //
  161. #define PipeFactor_None                   0
  162. #define PipeFactor_UserModeUpstream       0x00000001
  163. #define PipeFactor_UserModeDownstream     0x00000002
  164. #define PipeFactor_MemoryTypes            0x00000004
  165. #define PipeFactor_Flags                  0x00000008
  166. #define PipeFactor_PhysicalRanges         0x00000010
  167. #define PipeFactor_OptimalRanges          0x00000020
  168. #define PipeFactor_FixedCompression       0x00000040
  169. #define PipeFactor_UnknownCompression     0x00000080
  170.  
  171. #define PipeFactor_Buffers                0x00000100
  172. #define PipeFactor_Align                  0x00000200
  173.  
  174. #define PipeFactor_PhysicalEnd            0x00000400
  175. #define PipeFactor_LogicalEnd             0x00000800
  176.  
  177.  
  178.  
  179. typedef enum {
  180.     PipeState_DontCare,
  181.     PipeState_RangeNotFixed,
  182.     PipeState_RangeFixed,
  183.     PipeState_CompressionUnknown,
  184.     PipeState_Finalized
  185. } PIPE_STATE;
  186.  
  187.  
  188. //
  189. // pipe dimensions relative to BeginPin.
  190. //
  191.  
  192. typedef struct _PIPE_DIMENSIONS {
  193.     KS_COMPRESSION    AllocatorPin;
  194.     KS_COMPRESSION    MaxExpansionPin;
  195.     KS_COMPRESSION    EndPin;
  196. } PIPE_DIMENSIONS, *PPIPE_DIMENSIONS;
  197.  
  198.  
  199. typedef enum {
  200.     Pipe_Allocator_None,
  201.     Pipe_Allocator_FirstPin,
  202.     Pipe_Allocator_LastPin,
  203.     Pipe_Allocator_MiddlePin
  204. } PIPE_ALLOCATOR_PLACE;
  205.  
  206. typedef PIPE_ALLOCATOR_PLACE  *PPIPE_ALLOCATOR_PLACE;
  207.  
  208.  
  209. typedef enum {
  210.     KS_MemoryTypeDontCare = 0,
  211.     KS_MemoryTypeKernelPaged,
  212.     KS_MemoryTypeKernelNonPaged,
  213.     KS_MemoryTypeDeviceHostMapped,
  214.     KS_MemoryTypeDeviceSpecific,
  215.     KS_MemoryTypeUser,
  216.     KS_MemoryTypeAnyHost
  217. } KS_LogicalMemoryType;
  218.  
  219. typedef KS_LogicalMemoryType  *PKS_LogicalMemoryType;
  220.  
  221.  
  222.  
  223. typedef struct _PIPE_TERMINATION {
  224.     ULONG                       Flags;
  225.     ULONG                       OutsideFactors;
  226.     ULONG                       Weigth;            // outside weight
  227.     KS_FRAMING_RANGE            PhysicalRange;
  228.     KS_FRAMING_RANGE_WEIGHTED   OptimalRange;      
  229.     KS_COMPRESSION              Compression;       // relative to the connected pin on a neighboring filter.
  230. } PIPE_TERMINATION;
  231.  
  232.  
  233. //
  234. // extended allocator properties 
  235. //
  236. typedef struct _ALLOCATOR_PROPERTIES_EX
  237.     {
  238.     long cBuffers;
  239.     long cbBuffer;
  240.     long cbAlign;
  241.     long cbPrefix;
  242. // new part
  243.     GUID                       MemoryType;         
  244.     GUID                       BusType;            // one of the buses this pipe is using
  245.     PIPE_STATE                 State;                        
  246.     PIPE_TERMINATION           Input;                        
  247.     PIPE_TERMINATION           Output;                       
  248.     ULONG                      Strategy;
  249.     ULONG                      Flags;              
  250.     ULONG                      Weight;
  251.     KS_LogicalMemoryType       LogicalMemoryType;
  252.     PIPE_ALLOCATOR_PLACE       AllocatorPlace;
  253.     PIPE_DIMENSIONS            Dimensions;
  254.     KS_FRAMING_RANGE           PhysicalRange;      // on allocator pin
  255.     IKsAllocatorEx*            PrevSegment;        // doubly-linked list of KS allocators
  256.     ULONG                      CountNextSegments;  // possible multiple dependent pipes
  257.     IKsAllocatorEx**           NextSegments;
  258.     ULONG                      InsideFactors;      // existing factors (different from "don't care")
  259.     ULONG                      NumberPins;                   
  260. } ALLOCATOR_PROPERTIES_EX;
  261.  
  262. typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;
  263.  
  264.  
  265. #ifdef __STREAMS__
  266.  
  267. struct DECLSPEC_UUID("5C5CBD84-E755-11D0-AC18-00A0C9223196") IKsClockPropertySet;
  268. #undef INTERFACE
  269. #define INTERFACE IKsClockPropertySet
  270. DECLARE_INTERFACE_(IKsClockPropertySet, IUnknown)
  271. {
  272.     STDMETHOD(KsGetTime)(
  273.         THIS_
  274.         LONGLONG* Time
  275.     ) PURE;
  276.     STDMETHOD(KsSetTime)(
  277.         THIS_
  278.         LONGLONG Time
  279.     ) PURE;
  280.     STDMETHOD(KsGetPhysicalTime)(
  281.         THIS_
  282.         LONGLONG* Time
  283.     ) PURE;
  284.     STDMETHOD(KsSetPhysicalTime)(
  285.         THIS_
  286.         LONGLONG Time
  287.     ) PURE;
  288.     STDMETHOD(KsGetCorrelatedTime)(
  289.         THIS_
  290.         KSCORRELATED_TIME* CorrelatedTime
  291.     ) PURE;
  292.     STDMETHOD(KsSetCorrelatedTime)(
  293.         THIS_
  294.         KSCORRELATED_TIME* CorrelatedTime
  295.     ) PURE;
  296.     STDMETHOD(KsGetCorrelatedPhysicalTime)(
  297.         THIS_
  298.         KSCORRELATED_TIME* CorrelatedTime
  299.     ) PURE;
  300.     STDMETHOD(KsSetCorrelatedPhysicalTime)(
  301.         THIS_
  302.         KSCORRELATED_TIME* CorrelatedTime
  303.     ) PURE;
  304.     STDMETHOD(KsGetResolution)(
  305.         THIS_
  306.         KSRESOLUTION* Resolution
  307.     ) PURE;
  308.     STDMETHOD(KsGetState)(
  309.         THIS_
  310.         KSSTATE* State
  311.     ) PURE;
  312. };
  313.  
  314.  
  315. interface DECLSPEC_UUID("8da64899-c0d9-11d0-8413-0000f822fe8a") IKsAllocator;
  316. #undef INTERFACE
  317. #define INTERFACE IKsAllocator
  318. DECLARE_INTERFACE_(IKsAllocator, IUnknown)
  319. {
  320.     STDMETHOD_(HANDLE, KsGetAllocatorHandle)(
  321.         THIS
  322.     ) PURE;
  323.     STDMETHOD_(KSALLOCATORMODE, KsGetAllocatorMode)(
  324.         THIS
  325.     ) PURE;
  326.     STDMETHOD(KsGetAllocatorStatus)(
  327.         THIS_
  328.         PKSSTREAMALLOCATOR_STATUS AllocatorStatus
  329.     ) PURE;
  330.     STDMETHOD_(VOID, KsSetAllocatorMode)(
  331.         THIS_
  332.         KSALLOCATORMODE Mode
  333.     ) PURE;
  334. };
  335.  
  336. interface DECLSPEC_UUID("091bb63a-603f-11d1-b067-00a0c9062802") IKsAllocatorEx;
  337. #undef INTERFACE
  338. #define INTERFACE IKsAllocatorEx
  339. DECLARE_INTERFACE_(IKsAllocatorEx, IKsAllocator)
  340. {
  341.     STDMETHOD_(PALLOCATOR_PROPERTIES_EX, KsGetProperties)(
  342.         THIS
  343.     ) PURE;
  344.     STDMETHOD_(VOID, KsSetProperties)(
  345.         THIS_
  346.         PALLOCATOR_PROPERTIES_EX 
  347.     ) PURE;
  348.     STDMETHOD_(VOID, KsSetAllocatorHandle)(
  349.         THIS_
  350.         HANDLE AllocatorHandle
  351.     ) PURE;
  352.     STDMETHOD_(HANDLE, KsCreateAllocatorAndGetHandle)(
  353.         THIS_
  354.         IKsPin*   KsPin
  355.     ) PURE;
  356. };  
  357.  
  358. typedef enum {
  359.     KsPeekOperation_PeekOnly,
  360.     KsPeekOperation_AddRef
  361. } KSPEEKOPERATION;
  362.  
  363. typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;
  364.  
  365. interface DECLSPEC_UUID("b61178d1-a2d9-11cf-9e53-00aa00a216a1") IKsPin;
  366.  
  367. #undef INTERFACE
  368. #define INTERFACE IKsPin
  369. DECLARE_INTERFACE_(IKsPin, IUnknown)
  370. {
  371.     STDMETHOD(KsQueryMediums)(
  372.         THIS_
  373.         PKSMULTIPLE_ITEM* MediumList
  374.     ) PURE;
  375.     STDMETHOD(KsQueryInterfaces)(
  376.         THIS_
  377.         PKSMULTIPLE_ITEM* InterfaceList
  378.     ) PURE;
  379.     STDMETHOD(KsCreateSinkPinHandle)(
  380.         THIS_
  381.         KSPIN_INTERFACE& Interface,
  382.         KSPIN_MEDIUM& Medium
  383.     ) PURE;
  384.     STDMETHOD(KsGetCurrentCommunication)(
  385.         THIS_
  386.         KSPIN_COMMUNICATION *Communication,
  387.         KSPIN_INTERFACE *Interface,
  388.         KSPIN_MEDIUM *Medium
  389.     ) PURE;
  390.     STDMETHOD(KsPropagateAcquire)(
  391.         THIS
  392.     ) PURE;
  393.     STDMETHOD(KsDeliver)(
  394.         THIS_
  395.         IMediaSample* Sample,
  396.         ULONG Flags
  397.     ) PURE;
  398.     STDMETHOD(KsMediaSamplesCompleted)(
  399.         THIS_
  400.         PKSSTREAM_SEGMENT StreamSegment
  401.     ) PURE;
  402.     STDMETHOD_(IMemAllocator *, KsPeekAllocator)(
  403.         THIS_
  404.         KSPEEKOPERATION Operation
  405.     ) PURE;
  406.     STDMETHOD(KsReceiveAllocator)(
  407.         THIS_
  408.         IMemAllocator *MemAllocator
  409.     ) PURE;
  410.     STDMETHOD(KsRenegotiateAllocator)(
  411.         THIS
  412.     ) PURE;
  413.     STDMETHOD_(LONG, KsIncrementPendingIoCount)(
  414.         THIS
  415.     ) PURE;
  416.     STDMETHOD_(LONG, KsDecrementPendingIoCount)(
  417.         THIS
  418.     ) PURE;
  419.     STDMETHOD(KsQualityNotify)(
  420.         THIS_
  421.         ULONG Proportion,
  422.         REFERENCE_TIME TimeDelta
  423.     ) PURE;
  424. };
  425.  
  426. interface DECLSPEC_UUID("7bb38260-d19c-11d2-b38a-00a0c95ec22e") IKsPinEx;
  427. #undef INTERFACE
  428. #define INTERFACE IKsPinEx
  429. DECLARE_INTERFACE_(IKsPinEx, IKsPin)
  430. {
  431.     STDMETHOD_(VOID, KsNotifyError)(
  432.         THIS_
  433.         IMediaSample* Sample,
  434.         HRESULT hr
  435.     ) PURE;        
  436. };
  437.                          
  438. interface DECLSPEC_UUID("e539cd90-a8b4-11d1-8189-00a0c9062802") IKsPinPipe;
  439. #undef INTERFACE
  440. #define INTERFACE IKsPinPipe
  441. DECLARE_INTERFACE_(IKsPinPipe, IUnknown)
  442. {
  443.     STDMETHOD(KsGetPinFramingCache)(
  444.         THIS_
  445.         PKSALLOCATOR_FRAMING_EX *FramingEx,
  446.         PFRAMING_PROP FramingProp,
  447.         FRAMING_CACHE_OPS Option
  448.     ) PURE;
  449.     STDMETHOD(KsSetPinFramingCache)(
  450.         THIS_
  451.         PKSALLOCATOR_FRAMING_EX FramingEx,
  452.         PFRAMING_PROP FramingProp,
  453.         FRAMING_CACHE_OPS Option
  454.     ) PURE;
  455.     STDMETHOD_(IPin*, KsGetConnectedPin)(
  456.         THIS
  457.     ) PURE;
  458.     STDMETHOD_(IKsAllocatorEx*, KsGetPipe)(
  459.         THIS_
  460.         KSPEEKOPERATION Operation
  461.     ) PURE;
  462.     STDMETHOD(KsSetPipe)(
  463.         THIS_
  464.         IKsAllocatorEx *KsAllocator
  465.     ) PURE;
  466.     STDMETHOD_(ULONG, KsGetPipeAllocatorFlag)(
  467.         THIS
  468.     ) PURE;
  469.     STDMETHOD(KsSetPipeAllocatorFlag)(
  470.         THIS_
  471.         ULONG Flag
  472.     ) PURE;
  473.     STDMETHOD_(GUID, KsGetPinBusCache)(
  474.         THIS
  475.     ) PURE;
  476.     STDMETHOD(KsSetPinBusCache)(
  477.         THIS_
  478.         GUID Bus
  479.     ) PURE;
  480. //
  481. // very useful methods for tracing.
  482. //
  483.     STDMETHOD_(PWCHAR, KsGetPinName)(
  484.         THIS
  485.     ) PURE;
  486.     STDMETHOD_(PWCHAR, KsGetFilterName)(
  487.         THIS
  488.     ) PURE;
  489. };
  490.  
  491.  
  492. interface DECLSPEC_UUID("CD5EBE6B-8B6E-11D1-8AE0-00A0C9223196") IKsPinFactory;
  493. #undef INTERFACE
  494. #define INTERFACE IKsPinFactory
  495. DECLARE_INTERFACE_(IKsPinFactory, IUnknown)
  496. {
  497.     STDMETHOD(KsPinFactory)(
  498.         THIS_
  499.         ULONG* PinFactory
  500.     ) PURE;
  501. };
  502.  
  503. typedef enum {
  504.     KsIoOperation_Write,
  505.     KsIoOperation_Read
  506. } KSIOOPERATION;
  507.  
  508. interface DECLSPEC_UUID("5ffbaa02-49a3-11d0-9f36-00aa00a216a1") IKsDataTypeHandler;
  509. #undef INTERFACE
  510. #define INTERFACE IKsDataTypeHandler
  511. DECLARE_INTERFACE_(IKsDataTypeHandler, IUnknown)
  512. {
  513.     STDMETHOD(KsCompleteIoOperation)(
  514.         THIS_
  515.         IMediaSample *Sample,
  516.         PVOID StreamHeader,
  517.         KSIOOPERATION IoOperation,
  518.         BOOL Cancelled
  519.     ) PURE;
  520.     STDMETHOD(KsIsMediaTypeInRanges)(
  521.         THIS_
  522.         PVOID DataRanges
  523.         ) PURE;
  524.     STDMETHOD(KsPrepareIoOperation)(
  525.         THIS_
  526.         IMediaSample *Sample,
  527.         PVOID StreamHeader,
  528.         KSIOOPERATION IoOperation
  529.     ) PURE;
  530.     STDMETHOD(KsQueryExtendedSize)(
  531.         THIS_
  532.         ULONG* ExtendedSize
  533.     ) PURE;
  534.     STDMETHOD(KsSetMediaType)(
  535.         THIS_
  536.         const AM_MEDIA_TYPE* AmMediaType
  537.     ) PURE;
  538. };
  539.  
  540. interface DECLSPEC_UUID("827D1A0E-0F73-11D2-B27A-00A0C9223196") IKsDataTypeCompletion;
  541. #undef INTERFACE
  542. #define INTERFACE IKsDataTypeCompletion
  543. DECLARE_INTERFACE_(IKsDataTypeCompletion, IUnknown)
  544. {
  545.     STDMETHOD(KsCompleteMediaType)(
  546.         THIS_
  547.         HANDLE FilterHandle,
  548.         ULONG PinFactoryId,
  549.         AM_MEDIA_TYPE* AmMediaType
  550.     ) PURE;
  551. };
  552.  
  553. interface DECLSPEC_UUID("D3ABC7E0-9A61-11d0-A40D-00A0C9223196") IKsInterfaceHandler;
  554. #undef INTERFACE
  555. #define INTERFACE IKsInterfaceHandler
  556. DECLARE_INTERFACE_(IKsInterfaceHandler, IUnknown)
  557. {
  558.     STDMETHOD(KsSetPin)(
  559.         THIS_
  560.         IKsPin *KsPin
  561.     ) PURE;
  562.     STDMETHOD(KsProcessMediaSamples)(
  563.         THIS_
  564.         IKsDataTypeHandler *KsDataTypeHandler,
  565.         IMediaSample** SampleList,
  566.         PLONG SampleCount,
  567.         KSIOOPERATION IoOperation,
  568.         PKSSTREAM_SEGMENT *StreamSegment
  569.     ) PURE;
  570.     STDMETHOD(KsCompleteIo)(
  571.         THIS_
  572.         PKSSTREAM_SEGMENT StreamSegment
  573.     ) PURE;
  574. };
  575.  
  576.  
  577. //
  578. // This structure definition is the common header required by the proxy to 
  579. // dispatch the stream segment to the interface handler.  Interface handlers 
  580. // will create extended structures to include other information such as 
  581. // media samples, extended header size and so on.
  582. //
  583.  
  584. typedef struct _KSSTREAM_SEGMENT {
  585.     IKsInterfaceHandler     *KsInterfaceHandler;
  586.     IKsDataTypeHandler      *KsDataTypeHandler;
  587.     KSIOOPERATION           IoOperation;
  588.     HANDLE                  CompletionEvent;
  589.     
  590. } KSSTREAM_SEGMENT;
  591.  
  592. interface DECLSPEC_UUID("423c13a2-2070-11d0-9ef7-00aa00a216a1") IKsObject;
  593. #undef INTERFACE
  594. #define INTERFACE IKsObject
  595. DECLARE_INTERFACE_(IKsObject, IUnknown)
  596. {
  597.     STDMETHOD_(HANDLE, KsGetObjectHandle)(
  598.         THIS
  599.     ) PURE;
  600. };
  601.  
  602. interface DECLSPEC_UUID("97ebaacb-95bd-11d0-a3ea-00a0c9223196") IKsQualityForwarder;
  603. #undef INTERFACE
  604. #define INTERFACE IKsQualityForwarder
  605. DECLARE_INTERFACE_(IKsQualityForwarder, IKsObject)
  606. {
  607.     STDMETHOD_(VOID, KsFlushClient)(
  608.         THIS_
  609.         IKsPin* Pin
  610.     ) PURE;
  611. };
  612.  
  613. KSDDKAPI
  614. HRESULT
  615. WINAPI
  616. KsResolveRequiredAttributes(
  617.     PKSDATARANGE DataRange,
  618.     PKSMULTIPLE_ITEM Attributes OPTIONAL
  619.     );
  620.  
  621. KSDDKAPI
  622. HRESULT
  623. WINAPI
  624. KsOpenDefaultDevice(
  625.     REFGUID Category,
  626.     ACCESS_MASK Access,
  627.     PHANDLE DeviceHandle
  628.     );
  629. KSDDKAPI
  630. HRESULT
  631. WINAPI
  632. KsSynchronousDeviceControl(
  633.     HANDLE      Handle,
  634.     ULONG       IoControl,
  635.     PVOID       InBuffer,
  636.     ULONG       InLength,
  637.     PVOID       OutBuffer,
  638.     ULONG       OutLength,
  639.     PULONG      BytesReturned
  640.     );
  641. KSDDKAPI
  642. HRESULT
  643. WINAPI
  644. KsGetMultiplePinFactoryItems(
  645.     HANDLE  FilterHandle,
  646.     ULONG   PinFactoryId,
  647.     ULONG   PropertyId,
  648.     PVOID*  Items
  649.     );
  650. KSDDKAPI
  651. HRESULT
  652. WINAPI
  653. KsGetMediaTypeCount(
  654.     HANDLE      FilterHandle,
  655.     ULONG       PinFactoryId,
  656.     ULONG*      MediaTypeCount
  657.     );
  658. KSDDKAPI
  659. HRESULT
  660. WINAPI
  661. KsGetMediaType(
  662.     int         Position,
  663.     AM_MEDIA_TYPE* AmMediaType,
  664.     HANDLE      FilterHandle,
  665.     ULONG       PinFactoryId
  666.     );
  667.  
  668. #endif // __STREAMS__
  669.  
  670. #ifndef _IKsPropertySet_
  671. #if !defined(__cplusplus) || _MSC_VER < 1100
  672. DEFINE_GUIDEX(IID_IKsPropertySet);
  673. #endif // !defined(__cplusplus) || _MSC_VER < 1100
  674. #endif // _IKsPropertySet_
  675.  
  676. #ifndef _IKsControl_
  677. #if !defined(__cplusplus) || _MSC_VER < 1100
  678. DEFINE_GUIDEX(IID_IKsControl);
  679. #endif // !defined(__cplusplus) || _MSC_VER < 1100
  680. #endif // _IKsControl_
  681.  
  682. #if !defined(__cplusplus) || _MSC_VER < 1100
  683. DEFINE_GUIDEX(IID_IKsAggregateControl);
  684. #endif // !defined(__cplusplus) || _MSC_VER < 1100
  685.  
  686. #ifndef _IKsTopology_
  687. #if !defined(__cplusplus) || _MSC_VER < 1100
  688. DEFINE_GUIDEX(IID_IKsTopology);
  689. #endif // !defined(__cplusplus) || _MSC_VER < 1100
  690. #endif // _IKsTopology_
  691.  
  692. DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196", CLSID_Proxy);
  693. #define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)
  694.  
  695. #else // !_KS_
  696.  
  697. #ifndef _IKsPropertySet_
  698. #if !defined(__cplusplus) || _MSC_VER < 1100
  699. DEFINE_GUID(IID_IKsPropertySet, STATIC_IID_IKsPropertySet);
  700. #endif // !defined(__cplusplus) || _MSC_VER < 1100
  701. #endif // _IKsPropertySet_
  702.  
  703. #if !defined(__cplusplus) || _MSC_VER < 1100
  704. DEFINE_GUID(CLSID_Proxy, STATIC_CLSID_Proxy);
  705. #else  // defined(__cplusplus) && _MSC_VER >= 1100
  706. DECLSPEC_UUID("17CCA71B-ECD7-11D0-B908-00A0C9223196") CLSID_Proxy;
  707. #endif  // defined(__cplusplus) && _MSC_VER >= 1100
  708.  
  709. #endif // !_KS_
  710.  
  711. #ifndef _IKsPropertySet_
  712. #define _IKsPropertySet_
  713.  
  714. #define KSPROPERTY_SUPPORT_GET 1
  715. #define KSPROPERTY_SUPPORT_SET 2
  716.  
  717. #ifdef DECLARE_INTERFACE_
  718.  
  719. interface DECLSPEC_UUID("31EFAC30-515C-11d0-A9AA-00aa0061be93") IKsPropertySet;
  720. #undef INTERFACE
  721. #define INTERFACE IKsPropertySet
  722. DECLARE_INTERFACE_(IKsPropertySet, IUnknown)
  723. {
  724.     STDMETHOD(Set)(
  725.         THIS_
  726.         IN REFGUID PropSet,
  727.         IN ULONG Id,
  728.         IN LPVOID InstanceData,
  729.         IN ULONG InstanceLength,
  730.         IN LPVOID PropertyData,
  731.         IN ULONG DataLength
  732.     ) PURE;
  733.  
  734.     STDMETHOD(Get)(
  735.         THIS_
  736.         IN REFGUID PropSet,
  737.         IN ULONG Id,
  738.         IN LPVOID InstanceData,
  739.         IN ULONG InstanceLength,
  740.         OUT LPVOID PropertyData,
  741.         IN ULONG DataLength,
  742.         OUT ULONG* BytesReturned
  743.     ) PURE;
  744.  
  745.     STDMETHOD(QuerySupported)(
  746.         THIS_
  747.         IN REFGUID PropSet,
  748.         IN ULONG Id,
  749.         OUT ULONG* TypeSupport
  750.     ) PURE;
  751. };
  752.  
  753. #endif // DECLARE_INTERFACE_
  754.  
  755. #endif // _IKsPropertySet_
  756.  
  757. #ifndef _IKsControl_
  758. #define _IKsControl_
  759.  
  760. #ifdef DECLARE_INTERFACE_
  761.  
  762. interface DECLSPEC_UUID("28F54685-06FD-11D2-B27A-00A0C9223196") IKsControl;
  763. #undef INTERFACE
  764. #define INTERFACE IKsControl
  765. DECLARE_INTERFACE_(IKsControl, IUnknown)
  766. {
  767.     STDMETHOD(KsProperty)(
  768.         THIS_
  769.         IN PKSPROPERTY Property,
  770.         IN ULONG PropertyLength,
  771.         IN OUT LPVOID PropertyData,
  772.         IN ULONG DataLength,
  773.         OUT ULONG* BytesReturned
  774.     ) PURE;
  775.     STDMETHOD(KsMethod)(
  776.         THIS_
  777.         IN PKSMETHOD Method,
  778.         IN ULONG MethodLength,
  779.         IN OUT LPVOID MethodData,
  780.         IN ULONG DataLength,
  781.         OUT ULONG* BytesReturned
  782.     ) PURE;
  783.     STDMETHOD(KsEvent)(
  784.         THIS_
  785.         IN PKSEVENT Event OPTIONAL,
  786.         IN ULONG EventLength,
  787.         IN OUT LPVOID EventData,
  788.         IN ULONG DataLength,
  789.         OUT ULONG* BytesReturned
  790.     ) PURE;
  791. };
  792.  
  793. #endif // DECLARE_INTERFACE_
  794.  
  795. #endif // _IKsControl_
  796.  
  797.  
  798. #ifdef DECLARE_INTERFACE_
  799.  
  800. interface DECLSPEC_UUID("7F40EAC0-3947-11D2-874E-00A0C9223196") IKsAggregateControl;
  801. #undef INTERFACE
  802. #define INTERFACE IKsAggregateControl
  803. DECLARE_INTERFACE_(IKsAggregateControl, IUnknown)
  804. {
  805.     STDMETHOD(KsAddAggregate)(
  806.         THIS_
  807.         IN REFGUID AggregateClass
  808.     ) PURE;
  809.     STDMETHOD(KsRemoveAggregate)(
  810.         THIS_
  811.         IN REFGUID AggregateClass
  812.     ) PURE;
  813. };
  814.  
  815. #endif // DECLARE_INTERFACE_
  816.  
  817. #ifndef _IKsTopology_
  818. #define _IKsTopology_
  819.  
  820. #ifdef DECLARE_INTERFACE_
  821.  
  822. interface DECLSPEC_UUID("28F54683-06FD-11D2-B27A-00A0C9223196") IKsTopology;
  823. #undef INTERFACE
  824. #define INTERFACE IKsTopology
  825. DECLARE_INTERFACE_(IKsTopology, IUnknown)
  826. {
  827.     STDMETHOD(CreateNodeInstance)(
  828.         THIS_
  829.         IN ULONG NodeId,
  830.         IN ULONG Flags,
  831.         IN ACCESS_MASK DesiredAccess,
  832.         IN IUnknown* UnkOuter OPTIONAL,
  833.         IN REFGUID InterfaceId,
  834.         OUT LPVOID* Interface
  835.     ) PURE;
  836. };
  837.  
  838. #endif // DECLARE_INTERFACE_
  839.  
  840. #endif // _IKsTopology_
  841.  
  842. #ifdef __cplusplus
  843. }
  844. #endif // __cplusplus
  845.  
  846. #pragma option pop /*P_O_Pop*/
  847. #endif // __KSPROXY__
  848.