📄 axextend.idl
字号:
[out] PALETTEENTRY **ppPalette); // Where to put palette data
HRESULT SetPalette(
[in] DWORD dwColors, // Number of colours present
[in] PALETTEENTRY *pPalette); // Colours to use for palette
// If you change the colour key through SetColorKey then all the advise
// links will receive an OnColorKeyChange callback with the new colour
HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey);
HRESULT GetColorKey([out] COLORKEY *pColorKey);
HRESULT SetColorKey([in,out] COLORKEY *pColorKey);
HRESULT GetWindowHandle([out] HWND *pHwnd);
// The IOverlay implementation allocates the memory for the clipping
// rectangles as it can be variable in length. The filter calling
// this method should free the memory when it is finished with it
HRESULT GetClipList([out] RECT *pSourceRect,
[out] RECT *pDestinationRect,
[out] RGNDATA **ppRgnData);
// Returns the current video source and destination
HRESULT GetVideoPosition([out] RECT *pSourceRect,
[out] RECT *pDestinationRect);
HRESULT Advise(
[in] IOverlayNotify *pOverlayNotify, // Notification interface
[in] DWORD dwInterests); // Callbacks interested in
HRESULT Unadvise(); // Stop the callbacks now
}
typedef IOverlay *POVERLAY;
//=====================================================================
//=====================================================================
// control related interfaces (others are defined in control.odl)
//=====================================================================
//=====================================================================
//=====================================================================
//=====================================================================
// Defines IMediaEventSink interface
//
// Exposed by filtergraph. Called by filters to notify events. Will be
// passed on to application by the IMediaControl event methods.
//=====================================================================
//=====================================================================
[
object,
uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IMediaEventSink : IUnknown {
// notify an event. will be queued, but not delivered to
// the application on this thread.
HRESULT Notify(
[in] long EventCode,
[in] LONG_PTR EventParam1,
[in] LONG_PTR EventParam2
);
}
typedef IMediaEventSink *PMEDIAEVENTSINK;
//=====================================================================
//=====================================================================
// Defines IFileSourceFilter interface
//
// Exposed by source filters to set the file name and media type.
//=====================================================================
//=====================================================================
[
object,
uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IFileSourceFilter : IUnknown {
// Load a file and assign it the given media type
HRESULT Load(
[in] LPCOLESTR pszFileName, // Pointer to absolute path of file to open
[in, unique] const AM_MEDIA_TYPE *pmt // Media type of file - can be NULL
);
// Get the currently loaded file name
HRESULT GetCurFile(
[out] LPOLESTR *ppszFileName, // Pointer to the path for the current file
[out] AM_MEDIA_TYPE *pmt // Pointer to the media type
);
}
typedef IFileSourceFilter *PFILTERFILESOURCE;
//=====================================================================
//=====================================================================
// Defines IFileSinkFilter interface
//
// Exposed by renderers to set the output file name.
//=====================================================================
//=====================================================================
[
object,
uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6),
pointer_default(unique)
]
interface IFileSinkFilter : IUnknown {
// Output to this file. default is to open the existing file
HRESULT SetFileName(
[in] LPCOLESTR pszFileName, // Pointer to absolute path of output file
[in, unique] const AM_MEDIA_TYPE *pmt // Media type of file - can be NULL
);
// Get the current file name
HRESULT GetCurFile(
[out] LPOLESTR *ppszFileName, // Pointer to the path for the current file
[out] AM_MEDIA_TYPE *pmt // Pointer to the media type
);
}
typedef IFileSinkFilter *PFILTERFILESINK;
[
object,
uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86),
pointer_default(unique)
]
interface IFileSinkFilter2 : IFileSinkFilter {
HRESULT SetMode(
[in] DWORD dwFlags // AM_FILESINK_FLAGS
);
HRESULT GetMode(
[out] DWORD *pdwFlags // AM_FILESINK_FLAGS
);
}
typedef IFileSinkFilter2 *PFILESINKFILTER2;
typedef enum {
// create a new file
AM_FILE_OVERWRITE = 0x00000001,
} AM_FILESINK_FLAGS;
//
// Intelligent connectivity for filters - an interface supported by
// filter graphs (since it is an extension to IFilterGraph) that supports
// building of graphs by automatic selection and connection of appropriate
// filters
[
object,
uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IGraphBuilder : IFilterGraph {
// Connect these two pins directly or indirectly, using transform filters
// if necessary.
HRESULT Connect
( [in] IPin * ppinOut, // the output pin
[in] IPin * ppinIn // the input pin
);
// Connect this output pin directly or indirectly, using transform filters
// if necessary to something that will render it.
HRESULT Render
( [in] IPin * ppinOut // the output pin
);
// Build a filter graph that will render this file using this play list.
// If lpwstrPlayList is NULL then it will use the default play list
// which will typically render the whole file.
HRESULT RenderFile
( [in] LPCWSTR lpcwstrFile,
[in, unique] LPCWSTR lpcwstrPlayList
);
// Add to the filter graph a source filter for this file. This would
// be the same source filter that would be added by calling Render.
// This call gives you more control over building
// the rest of the graph, e.g. AddFilter(<a renderer of your choice>)
// and then Connect the two.
// The IBaseFilter* interface exposed by the source filter is returned
// in ppFilter, addrefed already for you
// The filter will be known by the name lpcwstrFIlterName
// nn this filter graph,
HRESULT AddSourceFilter
( [in] LPCWSTR lpcwstrFileName,
[in, unique] LPCWSTR lpcwstrFilterName,
[out] IBaseFilter* *ppFilter
);
// If this call is made then trace information will be written to the
// file showing the actions taken in attempting to perform an operation.
HRESULT SetLogFile
( [in] DWORD_PTR hFile // open file handle e.g. from CreateFile
);
// Request that the graph builder should return as soon as possible from
// its current task.
// Note that it is possible fot the following to occur in the following
// sequence:
// Operation begins; Abort is requested; Operation completes normally.
// This would be normal whenever the quickest way to finish an operation
// was to simply continue to the end.
HRESULT Abort();
// Return S_OK if the curent operation is to continue,
// return S_FALSE if the current operation is to be aborted.
// This method can be called as a callback from a filter which is doing
// some operation at the request of the graph.
HRESULT ShouldOperationContinue();
}
//
// New capture graph builder
[
object,
uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5),
pointer_default(unique)
]
interface ICaptureGraphBuilder : IUnknown {
// Use this filtergraph
HRESULT SetFiltergraph(
[in] IGraphBuilder *pfg);
// what filtergraph are you using?
// *ppfg->Release() when you're done with it
HRESULT GetFiltergraph(
[out] IGraphBuilder **ppfg);
// creates a rendering section in the filtergraph consisting of a MUX
// of some filetype, and a file writer (and connects them together)
// *ppf->Release() when you're done with it
// *ppSink->Release() when you're done with it
HRESULT SetOutputFileName(
[in] const GUID *pType, // type of file to write, eg. MEDIASUBTYPE_Avi
[in] LPCOLESTR lpstrFile, // filename given to file writer
[out] IBaseFilter **ppf, // returns pointer to the MUX
[out] IFileSinkFilter **ppSink);// queried from file writer
// Looks for an interface on the filter and on the output pin of the given
// category. (Categories: CAPTURE/PREVIEW/VIDEOPORT/VBI etc. or
// NULL for "don't care".
// It will also look upstream and downstream of
// the pin for the interface, to find interfaces on renderers, MUXES, TV
// Tuners, etc.
// Call *ppint->Release() when you're done with it
[local] HRESULT FindInterface(
[in, unique] const GUID *pCategory, // can be NULL for all pins
[in] IBaseFilter *pf,
[in] REFIID riid,
[out] void **ppint);
[call_as(FindInterface)] HRESULT RemoteFindInterface(
[in, unique] const GUID *pCategory, // can be NULL for all pins
[in] IBaseFilter *pf,
[in] REFIID riid,
[out] IUnknown **ppint);
// Connects the pin of the given category of the source filter to the
// rendering filter, optionally through another filter (compressor?)
// For a non-NULL category, it will instantiate and connect additional
// required filters upstream too, like TV Tuners and Crossbars.
// If there is only one output pin on the source, use a NULL
// category. You can also have pSource be a pin
HRESULT RenderStream(
[in] const GUID *pCategory, // can be NULL if only one output pin
[in] IUnknown *pSource, // filter or pin
[in] IBaseFilter *pfCompressor,
[in] IBaseFilter *pfRenderer); // can be NULL
// Sends IAMStreamControl messages to the pin of the desired category, eg.
// "capture" or "preview"
// REFERENCE_TIME=NULL means NOW
// REFERENCE_TIME=MAX_TIME means never, or cancel previous request
// NULL controls all capture filters in the graph - you will get one
// notification for each filter with a pin of that category found
// returns S_FALSE if stop will be signalled before last sample is
// rendered.
// return a FAILURE code if the filter does not support IAMStreamControl
HRESULT ControlStream(
[in] const GUID *pCategory,
[in] IBaseFilter *pFilter,
[in] REFERENCE_TIME *pstart,
[in] REFERENCE_TIME *pstop,
[in] WORD wStartCookie, // high word reserved
[in] WORD wStopCookie); // high word reserved
// creates a pre-allocated file of a given size in bytes
HRESULT AllocCapFile(
[in] LPCOLESTR lpstr,
[in] DWORDLONG dwlSize);
// Copies the valid file data out of the old, possibly huge old capture
// file into a shorter new file.
// Return S_FALSE from your progress function to abort capture, S_OK to
// continue
HRESULT CopyCaptureFile(
[in] LPOLESTR lpwstrOld,
[in] LPOLESTR lpwstrNew,
[in] int fAllowEscAbort, // pressing ESC will abort?
[in] IAMCopyCaptureFileProgress *pCallback); // implement this to
// get progress
}
//
// Capture graph builder "CopyCapturedFile" progress callback
[
object,
uuid(670d1d20-a068-11d0-b3f0-00aa003761c5),
pointer_default(unique)
]
interface IAMCopyCaptureFileProgress : IUnknown {
// If you support this interface somewhere, this function will be called
// periodically while ICaptureGraphBuilder::CopyCaptureFile is executing
// to let you know the progress
//
// Return S_OK from this function to continue. Return S_FALSE to abort the
// copy
HRESULT Progress(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -