summaryrefslogtreecommitdiffstats
path: root/dxsdk/Include/DShowIDL/dyngraph.idl
diff options
context:
space:
mode:
Diffstat (limited to 'dxsdk/Include/DShowIDL/dyngraph.idl')
-rw-r--r--dxsdk/Include/DShowIDL/dyngraph.idl318
1 files changed, 318 insertions, 0 deletions
diff --git a/dxsdk/Include/DShowIDL/dyngraph.idl b/dxsdk/Include/DShowIDL/dyngraph.idl
new file mode 100644
index 00000000..569def6e
--- /dev/null
+++ b/dxsdk/Include/DShowIDL/dyngraph.idl
@@ -0,0 +1,318 @@
+//------------------------------------------------------------------------------
+// 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 );
+}
+
+
+
+