dyngraph.idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:12k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //------------------------------------------------------------------------------
  2. // File: DynGraph.idl
  3. //
  4. // Desc: Dynamic graph interfaces.
  5. //
  6. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8. interface IPinConnection;
  9. interface IPinFlowControl;
  10. interface IGraphConfig;
  11. interface IGraphConfigCallback;
  12. //--------------------------------------------------------------------
  13. //
  14. //  IPinConnection - supported by input pins
  15. //
  16. //--------------------------------------------------------------------
  17. [
  18.         local,
  19.         object,
  20.         uuid(4a9a62d3-27d4-403d-91e9-89f540e55534),
  21.         pointer_default(unique)
  22. ]
  23. interface IPinConnection : IUnknown {
  24.     //  Do you accept this type chane in your current state?
  25.     HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt);
  26.     //  Set event when EndOfStream receive - do NOT pass it on
  27.     //  This condition is cancelled by a flush or Stop
  28.     HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent);
  29.     //  Are you an 'end pin'
  30.     HRESULT IsEndPin();
  31.     HRESULT DynamicDisconnect();
  32. };
  33. //--------------------------------------------------------------------
  34. //
  35. //  IPinFlowControl - supported by output pins
  36. //
  37. //--------------------------------------------------------------------
  38. [
  39.         local,
  40.         object,
  41.         uuid(c56e9858-dbf3-4f6b-8119-384af2060deb),
  42.         pointer_default(unique)
  43. ]
  44. interface IPinFlowControl : IUnknown {
  45.     //  Block processing on this pin
  46.     HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent);
  47. }
  48. //  block flags
  49. enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS {
  50.     AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001, //  0 means unblock
  51. };
  52. //  Reconnect flags
  53. typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS {
  54.     AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,
  55.     AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,
  56.     AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004
  57. } AM_GRAPH_CONFIG_RECONNECT_FLAGS;
  58. // RemoveFilterEx flags
  59. enum _REM_FILTER_FLAGS {
  60.     REMFILTERF_LEAVECONNECTED = 0x00000001
  61. };
  62. typedef enum _AM_FILTER_FLAGS {
  63.      AM_FILTER_FLAGS_REMOVABLE = 0x00000001
  64.  } AM_FILTER_FLAGS;
  65. //--------------------------------------------------------------------
  66. //
  67. //  IGraphConfig
  68. //
  69. //--------------------------------------------------------------------
  70. [
  71.         local,
  72.         object,
  73.         uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88),
  74.         pointer_default(unique)
  75. ]
  76. interface IGraphConfig : IUnknown {
  77.     HRESULT Reconnect([in] IPin *pOutputPin, 
  78.                       [in] IPin *pInputPin,
  79.                       [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  80.                       [in] IBaseFilter *pUsingFilter, // can be NULL
  81.                       [in] HANDLE hAbortEvent,
  82.                       [in] DWORD dwFlags);
  83.     HRESULT Reconfigure([in] IGraphConfigCallback *pCallback,
  84.                         [in] PVOID pvContext,
  85.                         [in] DWORD dwFlags,
  86.                         [in] HANDLE hAbortEvent);
  87.      
  88.     HRESULT AddFilterToCache([in] IBaseFilter *pFilter);
  89.     HRESULT EnumCacheFilter([out] IEnumFilters **pEnum);
  90.     HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter);
  91.     //  Get the start time associated with the last Run() call
  92.     //  If the graph is not running returns VFW_E_WRONG_STATE
  93.     HRESULT GetStartTime([out] REFERENCE_TIME *prtStart);
  94.     HRESULT PushThroughData(
  95.         [in] IPin *pOutputPin,
  96.         [in] IPinConnection *pConnection,
  97.         [in] HANDLE hEventAbort);
  98.     HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags);
  99.     HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags);
  100.     HRESULT RemoveFilterEx( [in] IBaseFilter *pFilter, DWORD Flags );
  101. }
  102. //--------------------------------------------------------------------
  103. //
  104. //  IGraphConfigCallback
  105. //
  106. //--------------------------------------------------------------------
  107. [
  108.         local,
  109.         object,
  110.         uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375),
  111.         pointer_default(unique)
  112. ]
  113. interface IGraphConfigCallback : IUnknown
  114. {
  115.     HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags);
  116. }
  117. // Filter Chain Definition
  118. // 
  119. //  Filter chains have the following properties:
  120. // 
  121. // - Each filter chain has one or more filters.
  122. // 
  123. // - Each filter in a filter chain has at most one connected input pin and one 
  124. //   connected output pin.  For example, filters A, C, D, F, G, H, I, J and K
  125. //   (see the diagram below) can be in a filter chain because each one has at 
  126. //   most one connected input pin and one connected output pin.
  127. // 
  128. // - Any filter in a chain is reachable by any other filter in the chain.  
  129. //   For example, in the filter chain F-G-H, F can reach H by following the F-
  130. //   G connection to G and then following the G-H connection to H.  Filters F 
  131. //   and J cannot be in the same filter chain because J is not reachable from 
  132. //   F.  Anotherwords, there no sequence of connected filters between F and J.
  133. //
  134. // - The start filter is the only filter in the filter chain who's input 
  135. //   pin is not connected to another filter in the chain.  For instance, F is 
  136. //   the start filter in F-G-H because F's input pin is connected to E and E 
  137. //   is not in the filter chain.  G's input pin is connected to F and H's is 
  138. //   connected to G.  Both F and G are in the filter chain.
  139. //
  140. // - The end filter is the only filter in the filter chain who's output pin 
  141. //   is not connected to another filter in the chain.  For example, in the 
  142. //   filter chain J-K, K is the end filter because K's output pin is 
  143. //   connected to L.  J's output pin is connected to K and K is in the J-K 
  144. //   filter chain.
  145. //
  146. //
  147. //            --->|---|    |---|--->                   
  148. //                | C |--->| D |
  149. // |---|    |---|--->|---|    |---|--->|---|    |---|    |---|    |---|
  150. // | A |--->| B |                      | E |--->| F |--->| G |--->| H |
  151. // |---|    |---|--->|---|------------>|---|    |---|    |---|    |---|
  152. //                   | I |--->
  153. //               --->|---|--->
  154. // 
  155. // |---|    |---|    |---|
  156. // | J |--->| K |--->| L |
  157. // |---|    |---|    |---|
  158. // 
  159. //              Example Filter Graph
  160. // 
  161. // 
  162. // 
  163. // IFilterChain Methods Documentation
  164. // 
  165. // HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  166. // 
  167. //      StartChain() switches all the filters in the chain into the running state
  168. // If one of the filters will not switch to the running state, then all the filters 
  169. // in the chain are stopped.  This method can only be called if the filter graph is 
  170. // running.
  171. // 
  172. // Parameters:
  173. // - pStartFilter [in]
  174. //      The first filter in the filter chain.  Note that this can be the same 
  175. // filter as pEndFilter .
  176. // 
  177. // - pEndFilter [in]
  178. //      The last filter in the filter chain.  Note that this can be the same 
  179. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain extends 
  180. // from pStartFilter to the last downstream filter which can be in a filter chain.
  181. // For example, IFilterChain::StartChain( A, NULL ) would start filter A.   
  182. // IFilterChain::StartChain( G, NULL ) would start filters G and H.  
  183. // IFilterChain::StartChain( C, NULL ) would start filters C and D.  Finally, 
  184. // IFilterChain::StartChain( E, NULL ) would fail because E cannot be in a 
  185. // filter chain (see the Filter Chain Definition section for more information).
  186. // 
  187. // Return Value:
  188. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  189. // information on interpreting HRESULTs.
  190. // 
  191. // 
  192. // 
  193. // 
  194. // HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  195. // 
  196. //      PauseChain() switches all the filters in a chain to the paused state.  If it cannot
  197. // switch one of the filtres into the paused state, all the filters in the chain are
  198. // stopped.  This method can only be called if the filter graph is paused.
  199. // 
  200. // Parameters:
  201. // - pStartFilter [in]
  202. //      The first filter in the filter chain.  Note that this can be the same 
  203. //  filter as pEndFilter . 
  204. // 
  205. // - pEndFilter [in]
  206. //      The last filter in the filter chain.  Note that this can be the same 
  207. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain extends 
  208. // from pStartFilter to the last downstream filter which can be in a filter chain.
  209. // For example, IFilterChain::StopChain( A, NULL ) would stop filter A.   
  210. // IFilterChain::StopChain( G, NULL ) would stop filters G and H.  
  211. // IFilterChain::StopChain( C, NULL ) would stop filters C and D.  Finally, 
  212. // IFilterChain::StopChain( E, NULL ) would fail because E cannot be in a filter 
  213. // chain (see the Filter Chain Definition section for more information).
  214. // 
  215. // 
  216. // Return Value:
  217. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  218. // information on interpreting HRESULTs.
  219. // 
  220. // 
  221. // 
  222. // HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  223. // 
  224. //  StopChain() switches all the filters in chain to the stopped state.
  225. // 
  226. // Parameters:
  227. // - pStartFilter [in]
  228. //      The first filter in the filter chain.  Note that this can be the same 
  229. //  filter as pEndFilter . 
  230. // 
  231. // - pEndFilter [in]
  232. //      The last filter in the filter chain.  Note that this can be the same 
  233. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain extends 
  234. // from pStartFilter to the last downstream filter which can be in a filter chain.
  235. // For example, IFilterChain::StopChain( A, NULL ) would stop filter A.   
  236. // IFilterChain::StopChain( G, NULL ) would stop filters G and H.  
  237. // IFilterChain::StopChain( C, NULL ) would stop filters C and D.  Finally, 
  238. // IFilterChain::StopChain( E, NULL ) would fail because E cannot be in a filter 
  239. // chain (see the Filter Chain Definition section for more information).
  240. // 
  241. // 
  242. // Return Value:
  243. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  244. // information on interpreting HRESULTs.
  245. // 
  246. // 
  247. // 
  248. // 
  249. // 
  250. // HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  251. // 
  252. //      RemoveChain() removes every filter in a chain from the filter graph.  
  253. // The filters can be removed while the graph is running.
  254. // 
  255. // Parameters:
  256. // - pStartFilter [in]
  257. //      The first filter in the filter chain.  Note that this can be the same 
  258. // filter as pEndFilter .
  259. // 
  260. // - pEndFilter [in]
  261. //      The last filter in the filter chain.  Note that this can be the same 
  262. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain 
  263. // extends from pStartFilter to the last downstream filter which can be in a 
  264. // filter chain.  For example, IFilterChain::RemoveChain( A, NULL ) would remove 
  265. // filter A from the filter graph.   IFilterChain::RemoveChain( G, NULL ) would 
  266. // remove filters G and H.  IFilterChain::RemoveChain( C, NULL ) would remove 
  267. // filters C and D.  Finally, IFilterChain::RemoveChain( E, NULL ) would fail 
  268. // because E cannot be in a filter chain (see the Filter Chain Definition 
  269. // section for more information).
  270. // 
  271. // 
  272. // Return Value:
  273. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  274. // information on interpreting HRESULTs.
  275. // 
  276. // 
  277. [
  278.     local,
  279.     object,
  280.     uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29),
  281.     pointer_default(unique)
  282. ]
  283. interface IFilterChain : IUnknown
  284. {
  285.     HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  286.     HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  287.     HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  288.     HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  289. }