📄 axextend.idl
字号:
ULONG cPins;
[size_is(cPins)] const REGFILTERPINS *rgPins;
};
[case(2)]
struct
{
ULONG cPins2;
[size_is(cPins2)] const REGFILTERPINS2 *rgPins2;
};
[default]
;
} ;
} REGFILTER2;
[
object,
uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375),
pointer_default(unique)
]
interface IFilterMapper2 : IUnknown {
import "unknwn.idl";
// create or rename ActiveMovie category
HRESULT CreateCategory
( [in] REFCLSID clsidCategory,
[in] DWORD dwCategoryMerit,
[in] LPCWSTR Description
);
HRESULT UnregisterFilter
( [in] const CLSID *pclsidCategory,
[in] const OLECHAR *szInstance,
[in] REFCLSID Filter // GUID of filter
);
// Register a filter, pins, and media types under a category.
HRESULT RegisterFilter
( [in] REFCLSID clsidFilter, // GUID of the filter
[in] LPCWSTR Name, // Descriptive name for the filter
// ppMoniker can be null. or *ppMoniker can contain the
// moniker where this filter data will be written;
// *ppMoniker will be set to null on return. or *ppMoniker
// can be null in which case the moniker will be returned
// with refcount.
[in, out] IMoniker **ppMoniker,
// can be null
[in] const CLSID *pclsidCategory,
// cannot be null
[in] const OLECHAR *szInstance,
// rest of filter and pin registration
[in] const REGFILTER2 *prf2
);
// Set *ppEnum to be an enumerator for filters matching the
// requirements.
HRESULT EnumMatchingFilters
( [out] IEnumMoniker **ppEnum // enumerator returned
, [in] DWORD dwFlags // 0
, [in] BOOL bExactMatch // don't match wildcards
, [in] DWORD dwMerit // at least this merit needed
, [in] BOOL bInputNeeded // need at least one input pin
, [in] DWORD cInputTypes // Number of input types to match
// Any match is OK
, [size_is(cInputTypes*2)] const GUID *pInputTypes // input major+subtype pair array
, [in] const REGPINMEDIUM *pMedIn // input medium
, [in] const CLSID *pPinCategoryIn // input pin category
, [in] BOOL bRender // must the input be rendered?
, [in] BOOL bOutputNeeded // need at least one output pin
, [in] DWORD cOutputTypes // Number of output types to match
// Any match is OK
, [size_is(cOutputTypes*2)] const GUID *pOutputTypes // output major+subtype pair array
, [in] const REGPINMEDIUM *pMedOut // output medium
, [in] const CLSID *pPinCategoryOut // output pin category
);
}
[
object,
uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375),
pointer_default(unique)
]
interface IFilterMapper3 : IFilterMapper2 {
// new interface to allow creating filters using the mapper's devenum instance
// primarily needed for out-of-proc access to a graph
HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum );
}
//========================================================================
//========================================================================
// Defines IQualityControl interface
//
// Defines quality messages and allows a quality manager to install itself
// as the sink for quality messages.
//========================================================================
//========================================================================
typedef enum tagQualityMessageType {
Famine,
Flood
} QualityMessageType;
typedef struct tagQuality {
QualityMessageType Type;
long Proportion; // milli-units. 1000 = no change
// for Flood:
// What proportion of the media samples currently
// coming through are required in the future.
// 800 means please drop another 20%
// For Famine:
// How much to "keep in" e.g. 800 means send me
// 20% less e.g. by dropping 20% of the samples.
// 1100 would mean "I'm coping, send me more".
REFERENCE_TIME Late;
// How much you need to catch up by
REFERENCE_TIME TimeStamp;
// The stream time when this was generated (probably
// corresponds to the start time on some sample).
} Quality;
typedef IQualityControl *PQUALITYCONTROL;
[
object,
uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IQualityControl : IUnknown {
// Notify the recipient that a quality change is requested.
// pSelf is the IBaseFilter* of the sender.
// this is sent from a filter
// to (the quality manager or) an upstream peer.
HRESULT Notify
( [in] IBaseFilter * pSelf,
[in] Quality q
);
// Notify the recipient that future quality messages are to be sent
// to iqc. If piqc is NULL then quality messages are to default back to
// the upstream peer.
// This is sent from the quality manager to a filter.
// The recipient should hold piqc as a WEAK reference,
// i.e. do not AddRef it, do not Release it.
HRESULT SetSink
( [in] IQualityControl * piqc
);
}
//=====================================================================
//=====================================================================
// Definitions required for overlay transport
//=====================================================================
//=====================================================================
// Used to communicate the colour that the IOverlay client wants the window
// painted in so that it can draw directly to the correct clipping region
// A colour key can be described in two alternate ways, the first is by a
// range of one or more (system) palette indices. The second is by defining
// a colour cube with two RGB values, any of which would be acceptable.
//
// The CK values are consistent with GDI PALETTEINDEX and PALETTERGB macros
enum { CK_NOCOLORKEY = 0x0, // No color key is required
CK_INDEX = 0x1, // Index into the current system palette
CK_RGB = 0x2 }; // Color key is an RGB value (or range)
typedef struct tagCOLORKEY {
DWORD KeyType; // Explains meaning of the structure
DWORD PaletteIndex; // Palette index if available
COLORREF LowColorValue; // Low colour space RGB value
COLORREF HighColorValue; // Defines the high RGB value
} COLORKEY;
// When a filter sets up an advise link it can ask that only certain types
// of notifications be sent, for example just palette changes. While this
// doesn't mean that the other notification call backs won't ever be called
// the IOverlay implementation may use this as an efficiency optimisation
enum { ADVISE_NONE = 0x0, // No notifications required
ADVISE_CLIPPING = 0x1, // Synchronous clip information
ADVISE_PALETTE = 0x2, // Palette change notifications
ADVISE_COLORKEY = 0x4, // Called when colour key changes
ADVISE_POSITION = 0x8, // Likewise when window moves etc
ADVISE_DISPLAY_CHANGE = 0x10 // Called on WM_DISPLAYCHANGE
};
const DWORD ADVISE_ALL = ADVISE_CLIPPING |
ADVISE_PALETTE |
ADVISE_COLORKEY |
ADVISE_POSITION;
const DWORD ADVISE_ALL2 = ADVISE_ALL |
ADVISE_DISPLAY_CHANGE;
// This isn't defined when you run IDL
cpp_quote("#ifndef _WINGDI_")
typedef struct _RGNDATAHEADER {
DWORD dwSize;
DWORD iType;
DWORD nCount;
DWORD nRgnSize;
RECT rcBound;
} RGNDATAHEADER;
typedef struct _RGNDATA {
RGNDATAHEADER rdh;
char Buffer[1];
} RGNDATA;
cpp_quote("#endif")
//=====================================================================
//=====================================================================
// Defines IOverlayNotify interface
//
// This interface gives asynchronous notifications of changes to the
// rendering window - such as changes to the exposed window area
//=====================================================================
//=====================================================================
[
object,
local,
uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IOverlayNotify : IUnknown {
// IOverlayNotify methods
// This notifies the filter of palette changes, the filter should copy
// the array of RGBQUADs if it needs to use them after returning. This
// is not called when the palette is actually changed in the display
// but at a short time after (in sync with WM_PALETTECHANGED messages)
HRESULT OnPaletteChange(
[in] DWORD dwColors, // Number of colours present
[in] const PALETTEENTRY *pPalette); // Array of palette colours
// This provides synchronous clip changes so that the client is called
// before the window is moved to freeze the video, and then when the
// window has stabilised it is called again to start playback again.
// If the window rect is all zero then the window is invisible, the
// filter must take a copy of the information if it wants to keep it
HRESULT OnClipChange(
[in] const RECT *pSourceRect, // Region of video to use
[in] const RECT *pDestinationRect, // Where video goes
[in] const RGNDATA *pRgnData); // Defines clipping information
HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey);
// The calls to OnClipChange happen in sync with the window. So it is
// called with an empty clip list before the window moves to freeze
// the video, and then when the window has stabilised it is called
// again with the new clip list. The OnPositionChange callback is for
// overlay cards that don't want the expense of synchronous clipping
// updates and just want to know when the source or destination video
// positions change. They will NOT be called in sync with the window
// but at some point after the window has changed (basicly in time
// with WM_SIZE etc messages received). This is therefore suitable
// for overlay cards that don't inlay their data to the frame buffer
// NOTE the destination is NOT clipped to the visible display area
HRESULT OnPositionChange([in] const RECT *pSourceRect,
[in] const RECT *pDestinationRect);
}
typedef IOverlayNotify *POVERLAYNOTIFY;
//=====================================================================
//=====================================================================
// Defines IOverlayNotify2 interface
//
// This interface gives asynchronous notifications of changes to the
// rendering window - such as changes to the exposed window area
// This is optionally supported by the advise sink for the purposes
// of accepting OnDisplayChange notification.
//=====================================================================
//=====================================================================
cpp_quote("#if !defined(HMONITOR_DECLARED) && !defined(HMONITOR) && (WINVER < 0x0500)")
cpp_quote("#define HMONITOR_DECLARED")
cpp_quote("#if 0")
typedef HANDLE HMONITOR;
cpp_quote("#endif")
cpp_quote("DECLARE_HANDLE(HMONITOR);")
cpp_quote("#endif")
[
object,
local,
uuid(680EFA10-D535-11D1-87C8-00A0C9223196),
pointer_default(unique)
]
interface IOverlayNotify2 : IOverlayNotify {
// IOverlayNotify2 methods
HRESULT OnDisplayChange( // ADVISE_DISPLAY_CHANGE
HMONITOR hMonitor);
}
typedef IOverlayNotify2 *POVERLAYNOTIFY2;
//=====================================================================
//=====================================================================
// Defines IOverlay interface
//
// This interface provides information so that a filter can write direct to
// the frame buffer while placing the video in the correct window position
//=====================================================================
//=====================================================================
[
object,
local,
uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IOverlay : IUnknown {
// IOverlay methods
HRESULT GetPalette(
[out] DWORD *pdwColors, // Number of colours present
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -