//------------------------------------------------------------------------------ // File: DynGraph.idl // // Desc: Dynamic graph interfaces // // Copyright (c) 1999-2002, Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ interface IPinConnection; interface IPinFlowControl; interface IGraphConfig; interface IGraphConfigCallback; //-------------------------------------------------------------------- // // IPinConnection - supported by input pins // //-------------------------------------------------------------------- [ local, object, uuid(4a9a62d3-27d4-403d-91e9-89f540e55534), pointer_default(unique) ] interface IPinConnection : IUnknown { // Do you accept this type chane in your current state? HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt); // Set event when EndOfStream receive - do NOT pass it on // This condition is cancelled by a flush or Stop HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent); // Are you an 'end pin' HRESULT IsEndPin(); HRESULT DynamicDisconnect(); }; //-------------------------------------------------------------------- // // IPinFlowControl - supported by output pins // //-------------------------------------------------------------------- [ local, object, uuid(c56e9858-dbf3-4f6b-8119-384af2060deb), pointer_default(unique) ] interface IPinFlowControl : IUnknown { // Block processing on this pin HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent); } // block flags enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS { AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001, // 0 means unblock }; // Reconnect flags typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS { AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001, AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002, AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004 } AM_GRAPH_CONFIG_RECONNECT_FLAGS; // RemoveFilterEx flags enum _REM_FILTER_FLAGS { REMFILTERF_LEAVECONNECTED = 0x00000001 }; typedef enum _AM_FILTER_FLAGS { AM_FILTER_FLAGS_REMOVABLE = 0x00000001 } AM_FILTER_FLAGS; //-------------------------------------------------------------------- // // IGraphConfig // //-------------------------------------------------------------------- [ local, object, uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88), pointer_default(unique) ] interface IGraphConfig : IUnknown { HRESULT Reconnect([in] IPin *pOutputPin, [in] IPin *pInputPin, [in] const AM_MEDIA_TYPE *pmtFirstConnection, [in] IBaseFilter *pUsingFilter, // can be NULL [in] HANDLE hAbortEvent, [in] DWORD dwFlags); HRESULT Reconfigure([in] IGraphConfigCallback *pCallback, [in] PVOID pvContext, [in] DWORD dwFlags, [in] HANDLE hAbortEvent); HRESULT AddFilterToCache([in] IBaseFilter *pFilter); HRESULT EnumCacheFilter([out] IEnumFilters **pEnum); HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter); // Get the start time associated with the last Run() call // If the graph is not running returns VFW_E_WRONG_STATE HRESULT GetStartTime([out] REFERENCE_TIME *prtStart); HRESULT PushThroughData( [in] IPin *pOutputPin, [in] IPinConnection *pConnection, [in] HANDLE hEventAbort); HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags); HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags); HRESULT RemoveFilterEx( [in] IBaseFilter *pFilter, DWORD Flags ); } //-------------------------------------------------------------------- // // IGraphConfigCallback // //-------------------------------------------------------------------- [ local, object, uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375), pointer_default(unique) ] interface IGraphConfigCallback : IUnknown { HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags); } // Filter Chain Definition // // Filter chains have the following properties: // // - Each filter chain has one or more filters. // // - Each filter in a filter chain has at most one connected input pin and one // connected output pin. For example, filters A, C, D, F, G, H, I, J and K // (see the diagram below) can be in a filter chain because each one has at // most one connected input pin and one connected output pin. // // - Any filter in a chain is reachable by any other filter in the chain. // For example, in the filter chain F-G-H, F can reach H by following the F- // G connection to G and then following the G-H connection to H. Filters F // and J cannot be in the same filter chain because J is not reachable from // F. Anotherwords, there no sequence of connected filters between F and J. // // - The start filter is the only filter in the filter chain who's input // pin is not connected to another filter in the chain. For instance, F is // the start filter in F-G-H because F's input pin is connected to E and E // is not in the filter chain. G's input pin is connected to F and H's is // connected to G. Both F and G are in the filter chain. // // - The end filter is the only filter in the filter chain who's output pin // is not connected to another filter in the chain. For example, in the // filter chain J-K, K is the end filter because K's output pin is // connected to L. J's output pin is connected to K and K is in the J-K // filter chain. // // // --->|---| |---|---> // | C |--->| D | // |---| |---|--->|---| |---|--->|---| |---| |---| |---| // | A |--->| B | | E |--->| F |--->| G |--->| H | // |---| |---|--->|---|------------>|---| |---| |---| |---| // | I |---> // --->|---|---> // // |---| |---| |---| // | J |--->| K |--->| L | // |---| |---| |---| // // Example Filter Graph // // // // IFilterChain Methods Documentation // // HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); // // StartChain() switches all the filters in the chain into the running state // If one of the filters will not switch to the running state, then all the filters // in the chain are stopped. This method can only be called if the filter graph is // running. // // Parameters: // - pStartFilter [in] // The first filter in the filter chain. Note that this can be the same // filter as pEndFilter . // // - pEndFilter [in] // The last filter in the filter chain. Note that this can be the same // filter as pStartFilter. If pEndFilter is NULL then the filter chain extends // from pStartFilter to the last downstream filter which can be in a filter chain. // For example, IFilterChain::StartChain( A, NULL ) would start filter A. // IFilterChain::StartChain( G, NULL ) would start filters G and H. // IFilterChain::StartChain( C, NULL ) would start filters C and D. Finally, // IFilterChain::StartChain( E, NULL ) would fail because E cannot be in a // filter chain (see the Filter Chain Definition section for more information). // // Return Value: // An HRESULT. See the Direct Show SDK and COM SDK documentation for more // information on interpreting HRESULTs. // // // // // HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); // // PauseChain() switches all the filters in a chain to the paused state. If it cannot // switch one of the filtres into the paused state, all the filters in the chain are // stopped. This method can only be called if the filter graph is paused. // // Parameters: // - pStartFilter [in] // The first filter in the filter chain. Note that this can be the same // filter as pEndFilter . // // - pEndFilter [in] // The last filter in the filter chain. Note that this can be the same // filter as pStartFilter. If pEndFilter is NULL then the filter chain extends // from pStartFilter to the last downstream filter which can be in a filter chain. // For example, IFilterChain::StopChain( A, NULL ) would stop filter A. // IFilterChain::StopChain( G, NULL ) would stop filters G and H. // IFilterChain::StopChain( C, NULL ) would stop filters C and D. Finally, // IFilterChain::StopChain( E, NULL ) would fail because E cannot be in a filter // chain (see the Filter Chain Definition section for more information). // // // Return Value: // An HRESULT. See the Direct Show SDK and COM SDK documentation for more // information on interpreting HRESULTs. // // // // HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); // // StopChain() switches all the filters in chain to the stopped state. // // Parameters: // - pStartFilter [in] // The first filter in the filter chain. Note that this can be the same // filter as pEndFilter . // // - pEndFilter [in] // The last filter in the filter chain. Note that this can be the same // filter as pStartFilter. If pEndFilter is NULL then the filter chain extends // from pStartFilter to the last downstream filter which can be in a filter chain. // For example, IFilterChain::StopChain( A, NULL ) would stop filter A. // IFilterChain::StopChain( G, NULL ) would stop filters G and H. // IFilterChain::StopChain( C, NULL ) would stop filters C and D. Finally, // IFilterChain::StopChain( E, NULL ) would fail because E cannot be in a filter // chain (see the Filter Chain Definition section for more information). // // // Return Value: // An HRESULT. See the Direct Show SDK and COM SDK documentation for more // information on interpreting HRESULTs. // // // // // // HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); // // RemoveChain() removes every filter in a chain from the filter graph. // The filters can be removed while the graph is running. // // Parameters: // - pStartFilter [in] // The first filter in the filter chain. Note that this can be the same // filter as pEndFilter . // // - pEndFilter [in] // The last filter in the filter chain. Note that this can be the same // filter as pStartFilter. If pEndFilter is NULL then the filter chain // extends from pStartFilter to the last downstream filter which can be in a // filter chain. For example, IFilterChain::RemoveChain( A, NULL ) would remove // filter A from the filter graph. IFilterChain::RemoveChain( G, NULL ) would // remove filters G and H. IFilterChain::RemoveChain( C, NULL ) would remove // filters C and D. Finally, IFilterChain::RemoveChain( E, NULL ) would fail // because E cannot be in a filter chain (see the Filter Chain Definition // section for more information). // // // Return Value: // An HRESULT. See the Direct Show SDK and COM SDK documentation for more // information on interpreting HRESULTs. // // [ local, object, uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29), pointer_default(unique) ] interface IFilterChain : IUnknown { HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter ); }