📄 vmr9.idl
字号:
HRESULT GetRenderingMode(
[out] DWORD* pMode
);
}
//=====================================================================
//
// IVMRAspectRatioControl9
//
//=====================================================================
[
object,
local,
uuid(00d96c29-bbde-4efc-9901-bb5036392146),
helpstring("IVMRAspectRatioControl9 Interface"),
pointer_default(unique)
]
interface IVMRAspectRatioControl9 : IUnknown
{
HRESULT GetAspectRatioMode(
[out] LPDWORD lpdwARMode
);
HRESULT SetAspectRatioMode(
[in] DWORD dwARMode
);
}
///////////////////////////////////////////////////////////////////////////////
//
// VMR Multimon configuration interface
//
///////////////////////////////////////////////////////////////////////////////
#define VMR9DEVICENAMELEN 32
#define VMR9DEVICEDESCRIPTIONLEN 512
typedef struct _VMR9MonitorInfo {
UINT uDevID;
RECT rcMonitor;
HMONITOR hMon;
DWORD dwFlags; // described in MONITORINFOEX, currently only MONITORINFOF_PRIMARY
wchar_t szDevice[VMR9DEVICENAMELEN];
wchar_t szDescription[VMR9DEVICEDESCRIPTIONLEN];
LARGE_INTEGER liDriverVersion;
DWORD dwVendorId;
DWORD dwDeviceId;
DWORD dwSubSysId;
DWORD dwRevision;
//
} VMR9MonitorInfo;
[
object,
local,
uuid(46c2e457-8ba0-4eef-b80b-0680f0978749),
helpstring("IVMRMonitorConfig9 Interface"),
pointer_default(unique)
]
interface IVMRMonitorConfig9 : IUnknown
{
// Use this method on a Multi-Monitor system to specify to the
// mixer filter which Direct Draw driver should be used when connecting
// to an upstream decoder filter.
//
HRESULT SetMonitor(
[in] UINT uDev
);
// Use this method to determine the direct draw object that will be used when
// connecting the mixer filter to an upstream decoder filter.
//
HRESULT GetMonitor(
[out] UINT *puDev
);
// Use this method on a multi-monitor system to specify to the
// mixer filter the default Direct Draw device to use when
// connecting to an upstream filter. The default direct draw device
// can be overriden for a particular connection by SetMonitor method
// described above.
//
HRESULT SetDefaultMonitor(
[in] UINT uDev
);
// Use this method on a multi-monitor system to determine which
// is the default direct draw device the overlay mixer filter
// will use when connecting to an upstream filter.
//
HRESULT GetDefaultMonitor(
[out] UINT* puDev
);
// Use this method to get a list of Direct Draw device GUIDs and thier
// associated monitor information that the mixer can use when
// connecting to an upstream decoder filter. Passing down a NULL pInfo
// parameter allows the app to determine the required array size (returned
// in pdwNumDevices). Otherwise, dwNumDevices returns the actual
// number of devices retrieved.
//
HRESULT GetAvailableMonitors(
[out, size_is(dwMaxInfoArraySize)] VMR9MonitorInfo* pInfo,
[in] DWORD dwMaxInfoArraySize, // in array members
[out] DWORD* pdwNumDevices // actual number of devices retrieved
);
};
//=====================================================================
//
// IVMRDeinterlaceControl
//
// New interfaced introduced into the WindowsXP SP1 release of the VMR.
// This interface allows applications to control the DX-VA deinterlacing
// support provided by the VMR.
//
// The VMR needs to be set into "mixing" mode for this interface to work.
//
// SetDeinterlaceMode is only effective for new connections made to the
// VMR. It should be noted that the graphics device driver may refuse
// to use the specified deinterlace mode, in which case 3 fallback
// policies are offered by the VMR, these being:
//
// 1. Fallback to the next best mode offered by the driver.
// 2. Fallback to the BOB deinterlace mode.
// 3. Fallback to the WEAVE deinterlace mode (ie. turn deinterlacing off).
//
//=====================================================================
typedef enum {
DeinterlacePref9_NextBest = 0x01,
DeinterlacePref9_BOB = 0x02,
DeinterlacePref9_Weave = 0x04,
DeinterlacePref9_Mask = 0x07
} VMR9DeinterlacePrefs;
typedef enum {
// the algorithm is unknown or proprietary
DeinterlaceTech9_Unknown = 0x0000,
// the algorithm creates the missing lines by repeating
// the line either above or below it - this method will look very jaggy and
// isn't recommended
DeinterlaceTech9_BOBLineReplicate = 0x0001,
// the algorithm creates the missing lines by vertically stretching each
// video field by a factor of two, for example by averaging two lines or
// using a [-1, 9, 9, -1]/16 filter across four lines.
// Slight vertical adjustments are made to ensure that the resulting image
// does not "bob" up and down.
DeinterlaceTech9_BOBVerticalStretch = 0x0002,
// the pixels in the missing line are recreated by a median filtering operation
DeinterlaceTech9_MedianFiltering = 0x0004,
// the pixels in the missing line are recreated by an edge filter.
// In this process, spatial directional filters are applied to determine
// the orientation of edges in the picture content, and missing
// pixels are created by filtering along (rather than across) the
// detected edges.
DeinterlaceTech9_EdgeFiltering = 0x0010,
// the pixels in the missing line are recreated by switching on a field by
// field basis between using either spatial or temporal interpolation
// depending on the amount of motion.
DeinterlaceTech9_FieldAdaptive = 0x0020,
// the pixels in the missing line are recreated by switching on a pixel by pixel
// basis between using either spatial or temporal interpolation depending on
// the amount of motion..
DeinterlaceTech9_PixelAdaptive = 0x0040,
// Motion Vector Steering identifies objects within a sequence of video
// fields. The missing pixels are recreated after first aligning the
// movement axes of the individual objects in the scene to make them
// parallel with the time axis.
DeinterlaceTech9_MotionVectorSteered = 0x0080
} VMR9DeinterlaceTech;
typedef struct _VMR9Frequency {
DWORD dwNumerator;
DWORD dwDenominator;
} VMR9Frequency;
typedef enum _VMR9_SampleFormat {
VMR9_SampleReserved = 1,
VMR9_SampleProgressiveFrame = 2,
VMR9_SampleFieldInterleavedEvenFirst = 3,
VMR9_SampleFieldInterleavedOddFirst = 4,
VMR9_SampleFieldSingleEven = 5,
VMR9_SampleFieldSingleOdd = 6,
} VMR9_SampleFormat;
typedef struct _VMR9VideoDesc {
DWORD dwSize;
DWORD dwSampleWidth;
DWORD dwSampleHeight;
VMR9_SampleFormat SampleFormat;
DWORD dwFourCC;
VMR9Frequency InputSampleFreq;
VMR9Frequency OutputFrameFreq;
} VMR9VideoDesc;
typedef struct _VMR9DeinterlaceCaps {
DWORD dwSize;
DWORD dwNumPreviousOutputFrames;
DWORD dwNumForwardRefSamples;
DWORD dwNumBackwardRefSamples;
VMR9DeinterlaceTech DeinterlaceTechnology;
} VMR9DeinterlaceCaps;
[
object,
local,
uuid(a215fb8d-13c2-4f7f-993c-003d6271a459),
helpstring("IVMRDeinterlaceControl9 Interface"),
pointer_default(unique)
]
interface IVMRDeinterlaceControl9 : IUnknown
{
//
// For the specified video description returns the
// number of deinterlacing modes available to the VMR.
// The deinterlacing modes are returned in descending
// quality order ie. the best quality mode is at
// lpdwNumDeinterlaceModes[0], the next best at
// lpdwNumDeinterlaceModes[1] and so on.
//
// To determine how big an array of guids to pass to the
// GetNumberOfDeinterlaceModes method call
// GetNumberOfDeinterlaceModes(lpVideoDescription, &dwNumModes, NULL);
//
HRESULT GetNumberOfDeinterlaceModes(
[in] VMR9VideoDesc* lpVideoDescription,
[in] [out] LPDWORD lpdwNumDeinterlaceModes,
[out] LPGUID lpDeinterlaceModes
);
//
// For the given video description get the capabilities of the
// specified de-interlace mode.
//
HRESULT GetDeinterlaceModeCaps(
[in] LPGUID lpDeinterlaceMode,
[in] VMR9VideoDesc* lpVideoDescription,
[out] VMR9DeinterlaceCaps* lpDeinterlaceCaps
);
//
// Get/Set the deinterlace mode that you would like the
// VMR to use when de-interlacing the specified stream.
// It should be noted that the VMR may not actually be able
// to use the requested deinterlace mode, in which case the
// the VMR will fall back to other de-interlace modes as specified
// by the de-interlace preferences (see SetDeinterlacePrefs below).
//
HRESULT GetDeinterlaceMode(
[in] DWORD dwStreamID,
[out] LPGUID lpDeinterlaceMode // returns GUID_NULL if SetDeinterlaceMode
); // has not been called yet.
HRESULT SetDeinterlaceMode(
[in] DWORD dwStreamID, // use 0xFFFFFFFF to set mode for all streams
[in] LPGUID lpDeinterlaceMode // GUID_NULL == turn deinterlacing off
);
HRESULT GetDeinterlacePrefs(
[out] LPDWORD lpdwDeinterlacePrefs
);
HRESULT SetDeinterlacePrefs(
[in] DWORD dwDeinterlacePrefs
);
//
// Get the DeinterlaceMode currently in use for the specified
// video stream (ie. pin). The returned GUID will be NULL if
// the de-interlacing h/w has not been created by the VMR at the
// time the function is called, or if the VMR determines that
// this stream should not or can be de-interlaced.
//
HRESULT GetActualDeinterlaceMode(
[in] DWORD dwStreamID,
[out] LPGUID lpDeinterlaceMode
);
};
//=====================================================================
//
// IVMRImageCompositor9
//
//=====================================================================
typedef struct _VMR9VideoStreamInfo {
IDirect3DSurface9* pddsVideoSurface;
DWORD dwWidth, dwHeight;
DWORD dwStrmID;
FLOAT fAlpha;
VMR9NormalizedRect rNormal;
REFERENCE_TIME rtStart;
REFERENCE_TIME rtEnd;
VMR9_SampleFormat SampleFormat;
} VMR9VideoStreamInfo;
[
local,
object,
local,
uuid(4a5c89eb-df51-4654-ac2a-e48e02bbabf6),
helpstring("IVMRImageCompositor9 Interface"),
pointer_default(unique)
]
interface IVMRImageCompositor9 : IUnknown
{
HRESULT InitCompositionDevice(
[in] IUnknown* pD3DDevice
);
HRESULT TermCompositionDevice(
[in] IUnknown* pD3DDevice
);
HRESULT SetStreamMediaType(
[in] DWORD dwStrmID,
[in] AM_MEDIA_TYPE* pmt,
[in] BOOL fTexture
);
HRESULT CompositeImage(
[in] IUnknown* pD3DDevice,
[in] IDirect3DSurface9* pddsRenderTarget,
[in] AM_MEDIA_TYPE* pmtRenderTarget,
[in] REFERENCE_TIME rtStart,
[in] REFERENCE_TIME rtEnd,
[in] D3DCOLOR dwClrBkGnd,
[in] VMR9VideoStreamInfo* pVideoStreamInfo,
[in] UINT cStreams
);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -