📄 axextend.idl
字号:
//------------------------------------------------------------------------------
// File: AXExtend.idl
//
// Desc: Extended streaming interface definitions for the ActiveMovie
// streaming and synchronization architecture. Core streaming
// interfaces are in AXCore.idl, and control interfaces for the
// type library are in Control.odl.
//
// Copyright (c) 1992 - 2000, Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
// include after unknwn.idl, objidl.idl and axcore.idl
// forward declarations - these are the interfaces declared in this file
interface IEnumRegFilters;
interface IFileSourceFilter;
interface IFileSinkFilter;
interface IFileSinkFilter2;
interface IGraphBuilder;
interface ICaptureGraphBuilder;
interface ICaptureGraphBuilder2;
interface IAMCopyCaptureFileProgress;
interface IFilterMapper;
interface IFilterMapper2;
interface IMediaEventSink;
interface IOverlay;
interface IOverlayNotify;
interface IOverlayNotify2;
interface IQualityControl;
interface ISeekingPassThru;
interface IAMStreamConfig;
interface IAMDevMemoryAllocator;
interface IAMDevMemoryControl;
interface IConfigInterleaving;
interface IConfigAviMux;
interface IAMVideoCompression;
interface IAMVfwCaptureDialogs;
interface IAMVfwCompressDialogs;
interface IAMDroppedFrames;
interface IAMAudioInputMixer;
interface IAMBufferNegotiation;
interface IAMAnalogVideoDecoder;
interface IAMVideoProcAmp;
interface IAMAnalogVideoEncoder;
interface IAMCameraControl;
interface IAMCrossbar;
interface IAMTVTuner;
interface IKsPropertySet;
interface IAMPhysicalPinInfo;
interface IAMExtDevice;
interface IAMExtTransport;
interface IAMTimecodeReader;
interface IAMTimecodeGenerator;
interface IAMTimecodeDisplay;
interface IDrawVideoImage;
interface IDecimateVideoImage;
interface IAMVideoDecimationProperties;
interface IAMPushSource;
interface IAMAudioRendererStats;
interface IAMLatency;
interface IAMGraphStreams;
interface IAMOverlayFX;
interface IAMOpenProgress;
interface IMpeg2Demultiplexer ;
interface IMPEG2StreamIdMap ;
interface IEnumStreamIdMap ;
interface IAMClockSlave ;
interface IEncoderAPI;
interface IVideoEncoder;
interface IAMGraphBuilderCallback;
//==========================================================================
//==========================================================================
// IEnumRegFilters interface -- enumerates registered filters.
// enumerator interface returned from IFilterMapper::EnumMatchingFilters().
// based on IEnum pseudo-template
//==========================================================================
//==========================================================================
typedef struct {
CLSID Clsid; // class id of the filter
LPWSTR Name; // name of filter
} REGFILTER;
[
object,
uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
// The point of the mapper is to avoid loading filters. By looking in the
// registry we can reduce the number of filters which must be loaded and tried.
// This enumerator returns descriptors of filters (including the GUIDs that
// CoCreateInstance can instantiate). The filters themselves are not loaded.
interface IEnumRegFilters : IUnknown {
import "unknwn.idl";
// The caller must use CoTaskMemFree to free each REGFILTER* returned
// in the array.
HRESULT Next
( [in] ULONG cFilters, // place this many filters...
[out] REGFILTER ** apRegFilter, // ...in this array of REGFILTER*
[out] ULONG * pcFetched // actual count passed returned here
);
// I can't think why anyone would want to skip, so it's not implemented.
// (anyone who thinks they know what they would be skipping over is probably
// missing some piece of the jigsaw). This ALWAYS returns E_NOTIMPL.
HRESULT Skip(
[in] ULONG cFilters
);
HRESULT Reset(void);
// No cloning either - also ALWAYS returns E_NOTIMPL.
HRESULT Clone(
[out] IEnumRegFilters **ppEnum
);
}
typedef IEnumRegFilters *PENUMREGFILTERS;
//========================================================================
//========================================================================
// abstraction representing the registered information about filters.
// This allows properties of filters to be looked up without loading them.
//========================================================================
//========================================================================
[
object,
uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770),
pointer_default(unique)
]
interface IFilterMapper : IUnknown {
import "unknwn.idl";
//==========================================================================
// Registration functions.
// A filter should be registered before any other use.
// The registration can be NON_VOLATILE (i.e. permanent, do once ever)
// or VOLATILE (once per boot of the system).
// UnregisterFilter (obviously) removes the registration.
// The action of any of the other calls on unregistered filters is undefined.
// it will either work or you'll get an error, but I'm not saying which.
//==========================================================================
// Four predefined values controling the order in which filters are tried
// for intelligent graph building. Intermediate values are legal.
// Any value <=MERIT_DO_NOT_USE will mean that the filter will never
// be tried by the filtergrah to automatically complete a connection.
enum { MERIT_PREFERRED = 0x800000,
MERIT_NORMAL = 0x600000,
MERIT_UNLIKELY = 0x400000,
MERIT_DO_NOT_USE = 0x200000,
MERIT_SW_COMPRESSOR = 0x100000,
MERIT_HW_COMPRESSOR = 0x100050
};
// Register a filter
HRESULT RegisterFilter
( [in] CLSID clsid, // GUID of the filter
[in] LPCWSTR Name, // Descriptive name for the filter
[in] DWORD dwMerit // DO_NOT_USE, UNLIKELY, NORMAL or PREFERRED.
);
// Register an identifiable instance of a filter. This deals with cases
// such as two similar sound cards which are driven by the same driver,
// but we want to choose which oif these cards the sound will come out of.
// This is not needed if there is only one instance of the filter
// (e.g. there is only one sound card in the machine) or if all instances
// of the filter are equivalent.
// The filter itself must have already been registered // ??? Is that true?
HRESULT RegisterFilterInstance
( [in] CLSID clsid, // GUID of the filter
[in] LPCWSTR Name, // Descriptive name of instance.
[out] CLSID *MRId // Returned Media Resource Id. A
// locally unique id for this instance
// of this filter
);
HRESULT RegisterPin
( [in] CLSID Filter, // GUID of filter
[in] LPCWSTR Name, // Name of the pin
[in] BOOL bRendered, // The filter renders this input
[in] BOOL bOutput, // TRUE if this is an Output pin
[in] BOOL bZero, // TRUE if OK for zero instances of pin
// In this case you will have to Create
// a pin to have even one instance
[in] BOOL bMany, // TRUE if OK for many instances of pin
[in] CLSID ConnectsToFilter, // Filter it connects to if it has
// subterranean connection, else NULL
[in] LPCWSTR ConnectsToPin // Name of pin it connects to
// NULL for output pins
);
HRESULT RegisterPinType
( [in] CLSID clsFilter, // GUID of filter
[in] LPCWSTR strName, // Descriptive name of the pin
[in] CLSID clsMajorType, // Major type of the data stream
[in] CLSID clsSubType // Sub type of the data stream
);
HRESULT UnregisterFilter
( [in] CLSID Filter // GUID of filter
);
HRESULT UnregisterFilterInstance
( [in] CLSID MRId // Media Resource Id of this instance
);
HRESULT UnregisterPin
( [in] CLSID Filter, // GUID of filter
[in] LPCWSTR Name // Name of the pin
);
// Set *ppEnum to be an enumerator for filters matching the requirements.
HRESULT EnumMatchingFilters
( [out] IEnumRegFilters **ppEnum // enumerator returned
, [in] DWORD dwMerit // at least this merit needed
, [in] BOOL bInputNeeded // need at least one input pin
, [in] CLSID clsInMaj // input major type
, [in] CLSID clsInSub // input sub type
, [in] BOOL bRender // must the input be rendered?
, [in] BOOL bOututNeeded // need at least one output pin
, [in] CLSID clsOutMaj // output major type
, [in] CLSID clsOutSub // output sub type
);
}
// structure used to identify media types a pin handles. Used for
// registration through IFilterMapper and IFilterMapper2
//
typedef struct
{
const CLSID * clsMajorType;
const CLSID * clsMinorType;
} REGPINTYPES;
// describes pin for filter registration. Used for registration
// through IFilterMapper and IFilterMapper2
//
typedef struct
{
LPWSTR strName;
// The filter renders this input
BOOL bRendered;
// This is an Output pin
BOOL bOutput;
// OK to have zero instances of pin In this case you will have to
// Create a pin to have even one instance
BOOL bZero;
// OK to create many instance of pin
BOOL bMany;
const CLSID * clsConnectsToFilter;
const WCHAR * strConnectsToPin;
UINT nMediaTypes;
const REGPINTYPES * lpMediaType;
} REGFILTERPINS;
// mediums (as defined in the Windows NT DDK) for registration with
// IFilterMapper2
//
typedef struct
{
CLSID clsMedium;
DWORD dw1;
DWORD dw2;
} REGPINMEDIUM;
// flags for dwFlags in REFILTERPINS2
enum
{
// OK to have zero instances of pin In this case you will have to
// Create a pin to have even one instance
REG_PINFLAG_B_ZERO = 0x1,
// The filter renders this input
REG_PINFLAG_B_RENDERER = 0x2,
// OK to create many instance of pin
REG_PINFLAG_B_MANY = 0x4,
// This is an Output pin
REG_PINFLAG_B_OUTPUT = 0x8
};
// describes pin for filter registration through IFilterMapper2
typedef struct
{
// combination of REG_PINFLAG flags
DWORD dwFlags;
// number of instances of the pin if known
UINT cInstances;
UINT nMediaTypes;
[size_is(nMediaTypes)] const REGPINTYPES * lpMediaType;
UINT nMediums;
[size_is(nMediums)] const REGPINMEDIUM *lpMedium;
// pin category (for Kernel Streaming pins) as defined in the
// Windows NT DDK
const CLSID *clsPinCategory;
} REGFILTERPINS2;
// describes filter for registration through IFilterMapper2
typedef struct
{
DWORD dwVersion; // 1 or 2
DWORD dwMerit;
/* unnamed union */
[switch_is(dwVersion)] [switch_type(DWORD)] union
{
[case(1)]
struct
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -