mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
397 lines
9.6 KiB
397 lines
9.6 KiB
//=====================================================================
|
|
//
|
|
// vmrp.h
|
|
//
|
|
// Private header for Video Mixing Renderer
|
|
//
|
|
// Copyright (C) 2000 by Microsoft Corporation. All rights reserved.
|
|
//
|
|
//=====================================================================
|
|
|
|
#ifndef __INC_VMRP__
|
|
#define __INC_VMRP__
|
|
|
|
#include "dxva.h"
|
|
|
|
#define MAX_MIXER_PINS 16
|
|
#define MAX_MIXER_STREAMS (MAX_MIXER_PINS)
|
|
#define MIN_BUFFERS_TO_ALLOCATE 1
|
|
|
|
#define MAX_ALLOWED_BUFFER 64
|
|
#define EXTRA_OVERLAY_BUFFERS 2
|
|
#define EXTRA_OFFSCREEN_BUFFERS 1 // should really be 1 but as yet
|
|
// most graphics drivers don't like
|
|
// back buffers when the overlay is
|
|
// not being requested too.
|
|
|
|
|
|
//
|
|
// Private intel mixer render target, IMC3
|
|
//
|
|
#define MixerPref_RenderTargetIntelIMC3 0x00008100
|
|
|
|
#ifndef __RELEASE_DEFINED
|
|
#define __RELEASE_DEFINED
|
|
template<typename T>
|
|
__inline void RELEASE( T* &p )
|
|
{
|
|
if( p ) {
|
|
p->Release();
|
|
p = NULL;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifndef CHECK_HR
|
|
#define CHECK_HR(expr) do { if (FAILED(expr)) __leave; } while(0);
|
|
#endif
|
|
|
|
#if defined(DEBUG)
|
|
#define ISBADREADPTR(p) (IsBadReadPtr( (p), (sizeof(*p))))
|
|
#define ISBADWRITEPTR(p) (IsBadWritePtr( (p), (sizeof(*p))))
|
|
#define ISBADREADARRAY(p,c) (IsBadReadPtr( (p), (c)*(sizeof(*p))))
|
|
#define ISBADWRITEARRAY(p,c) (IsBadWritePtr( (p), (c)*(sizeof(*p))))
|
|
#else
|
|
#define ISBADREADPTR(p) (NULL==(p))
|
|
#define ISBADWRITEPTR(p) (NULL==(p))
|
|
#define ISBADREADARRAY(p,c) (NULL==(p))
|
|
#define ISBADWRITEARRAY(p,c) (NULL==(p))
|
|
#endif
|
|
|
|
#define ISWINDOW(hwnd) (IsWindow(hwnd))
|
|
#define ISBADREADWRITEPTR(p) (ISBADREADPTR(p)||ISBADWRITEPTR(p))
|
|
#define ISBADREADWRITEARRAY(p,c) (ISBADREADARRAY(p,c)||ISBADWRITEARRAY(p,c))
|
|
|
|
// Debug helper
|
|
#ifdef DEBUG
|
|
class CDispPixelFormat : public CDispBasic
|
|
{
|
|
public:
|
|
CDispPixelFormat(const DDPIXELFORMAT *pFormat)
|
|
{
|
|
wsprintf(m_String, TEXT(" Flags(0x%8.8X) bpp(%d) 4CC(%4.4hs)"),
|
|
pFormat->dwFlags,
|
|
pFormat->dwRGBBitCount,
|
|
pFormat->dwFlags & DDPF_FOURCC ?
|
|
(CHAR *)&pFormat->dwFourCC : "None");
|
|
}
|
|
// Implement cast to (LPCTSTR) as parameter to logger
|
|
operator LPCTSTR()
|
|
{
|
|
return (LPCTSTR)m_pString;
|
|
};
|
|
};
|
|
#endif // DEBUG
|
|
|
|
|
|
/* -------------------------------------------------------------------------
|
|
** VMR file persist helpers
|
|
** -------------------------------------------------------------------------
|
|
*/
|
|
struct VMRStreamInfo {
|
|
float alpha;
|
|
DWORD zOrder;
|
|
NORMALIZEDRECT rect;
|
|
};
|
|
|
|
struct VMRFilterInfo {
|
|
DWORD dwSize;
|
|
DWORD dwNumPins;
|
|
VMRStreamInfo StreamInfo[MAX_MIXER_STREAMS];
|
|
};
|
|
|
|
|
|
// internal interfaces used by the VMR
|
|
// interface IImageSyncNotifyEvent;
|
|
// interface IImageSyncControl;
|
|
// interface IImageSync;
|
|
// interface IVMRMixerControl;
|
|
// interface IVMRMixerStream;
|
|
|
|
|
|
//
|
|
// 1DBCA562-5C92-474a-A276-382079164970),
|
|
//
|
|
DEFINE_GUID(IID_IImageSyncNotifyEvent,
|
|
0x1DBCA562, 0x5C92, 0x474a, 0xA2, 0x76, 0x38, 0x20, 0x79, 0x16, 0x49, 0x70);
|
|
|
|
DECLARE_INTERFACE_(IImageSyncNotifyEvent, IUnknown)
|
|
{
|
|
STDMETHOD (NotifyEvent)(THIS_
|
|
long EventCode,
|
|
LONG_PTR EventParam1,
|
|
LONG_PTR EventParam2
|
|
) PURE;
|
|
};
|
|
|
|
|
|
typedef enum {
|
|
ImageSync_State_Stopped,
|
|
ImageSync_State_Cued,
|
|
ImageSync_State_Playing
|
|
} ImageSequenceState;
|
|
|
|
|
|
//
|
|
// A67F6A0D-883B-44ce-AA93-87BA3017E19C
|
|
//
|
|
DEFINE_GUID(IID_IImageSyncControl,
|
|
0xA67F6A0D, 0x883B, 0x44ce, 0xAA, 0x93, 0x87, 0xBA, 0x30, 0x17, 0xE1, 0x9C);
|
|
|
|
DECLARE_INTERFACE_(IImageSyncControl, IUnknown)
|
|
{
|
|
// ============================================================
|
|
// Synchronisation control
|
|
// ============================================================
|
|
|
|
STDMETHOD (SetImagePresenter)(THIS_
|
|
IVMRImagePresenter* lpImagePresenter,
|
|
DWORD_PTR dwUserID
|
|
) PURE;
|
|
|
|
STDMETHOD (SetReferenceClock)(THIS_
|
|
IReferenceClock* lpRefClock
|
|
) PURE;
|
|
|
|
STDMETHOD (SetEventNotify)(THIS_
|
|
IImageSyncNotifyEvent* lpEventNotify
|
|
) PURE;
|
|
|
|
|
|
// ============================================================
|
|
// Image sequence control
|
|
// ============================================================
|
|
|
|
STDMETHOD (CueImageSequence)(THIS_
|
|
) PURE;
|
|
|
|
STDMETHOD (BeginImageSequence)(THIS_
|
|
REFERENCE_TIME* baseTime
|
|
) PURE;
|
|
|
|
STDMETHOD (EndImageSequence)(THIS_
|
|
) PURE;
|
|
|
|
STDMETHOD (GetImageSequenceState)(THIS_
|
|
DWORD dwMSecsTimeOut,
|
|
DWORD* lpdwState
|
|
) PURE;
|
|
|
|
STDMETHOD (BeginFlush)(THIS_
|
|
) PURE;
|
|
|
|
STDMETHOD (EndFlush)(THIS_
|
|
) PURE;
|
|
|
|
STDMETHOD (EndOfStream)(THIS_
|
|
) PURE;
|
|
|
|
STDMETHOD (ResetEndOfStream)(THIS_
|
|
) PURE;
|
|
|
|
STDMETHOD (SetAbortSignal)(THIS_
|
|
BOOL bAbort
|
|
) PURE;
|
|
|
|
STDMETHOD (GetAbortSignal)(THIS_
|
|
BOOL* lpbAbort
|
|
) PURE;
|
|
|
|
STDMETHOD (RuntimeAbortPlayback)(THIS_
|
|
) PURE;
|
|
|
|
// ============================================================
|
|
// Frame stepping
|
|
// ============================================================
|
|
|
|
STDMETHOD (FrameStep)(THIS_
|
|
DWORD nFramesToStep,
|
|
DWORD dwStepFlags
|
|
) PURE;
|
|
|
|
STDMETHOD (CancelFrameStep)(THIS_
|
|
) PURE;
|
|
};
|
|
|
|
//
|
|
// a38cc06e-5926-48df-9926-571458145e80
|
|
//
|
|
DEFINE_GUID(IID_IImageSync,
|
|
0xa38cc06e, 0x5926, 0x48df, 0x99, 0x26, 0x57, 0x14, 0x58, 0x14, 0x5e, 0x80);
|
|
|
|
DECLARE_INTERFACE_(IImageSync, IUnknown)
|
|
{
|
|
STDMETHOD (Receive)(THIS_
|
|
VMRPRESENTATIONINFO* lpPresInfo
|
|
) PURE;
|
|
|
|
STDMETHOD (GetQualityControlMessage)(THIS_
|
|
Quality* pQualityMsg
|
|
) PURE;
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Mixer interfaces
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
// 56949f22-aa07-4061-bb8c-10159d8f92e5
|
|
//
|
|
DEFINE_GUID(IID_IVMRMixerControlInternal,
|
|
0x56949f22, 0xaa07, 0x4061, 0xbb, 0x8c, 0x10, 0x15, 0x9d, 0x8f, 0x92, 0xe5);
|
|
|
|
DECLARE_INTERFACE_(IVMRMixerControlInternal, IUnknown)
|
|
{
|
|
STDMETHOD (SetImageCompositor)(THIS_
|
|
IVMRImageCompositor* lpVMRImgCompositor
|
|
) PURE;
|
|
|
|
STDMETHOD (SetBackEndAllocator)(THIS_
|
|
IVMRSurfaceAllocator* lpAllocator,
|
|
DWORD_PTR dwUserID
|
|
) PURE;
|
|
|
|
STDMETHOD (SetBackEndImageSync)(THIS_
|
|
IImageSync* lpImageSync
|
|
) PURE;
|
|
|
|
STDMETHOD (SetNumberOfStreams)(THIS_
|
|
DWORD dwMaxStreams
|
|
) PURE;
|
|
|
|
STDMETHOD (GetNumberOfStreams)(THIS_
|
|
DWORD* pdwMaxStreams
|
|
) PURE;
|
|
|
|
STDMETHOD (DisplayModeChanged)(THIS_) PURE;
|
|
|
|
STDMETHOD (WaitForMixerIdle)(THIS_
|
|
DWORD dwTimeOut
|
|
) PURE;
|
|
|
|
STDMETHOD (SetBackgroundColor)(THIS_
|
|
COLORREF clrBorder
|
|
) PURE;
|
|
|
|
STDMETHOD (GetBackgroundColor)(THIS_
|
|
COLORREF* lpClrBorder
|
|
) PURE;
|
|
|
|
STDMETHOD (SetMixingPrefs)(THIS_
|
|
DWORD dwMixerPrefs
|
|
) PURE;
|
|
|
|
STDMETHOD (GetMixingPrefs)(THIS_
|
|
DWORD* pdwMixerPrefs
|
|
) PURE;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef enum {
|
|
VMR_SF_NONE = 0x00000000,
|
|
VMR_SF_TEXTURE = 0x00000001,
|
|
} VMR_SF_Flags;
|
|
|
|
//
|
|
// 43062408-3d55-43cc-9415-0daf218db422
|
|
//
|
|
DEFINE_GUID(IID_IVMRMixerStream,
|
|
0x43062408, 0x3d55, 0x43cc, 0x94, 0x15, 0x0d, 0xaf, 0x21, 0x8d, 0xb4, 0x22);
|
|
|
|
DECLARE_INTERFACE_(IVMRMixerStream, IUnknown)
|
|
{
|
|
STDMETHOD (QueueStreamMediaSample)(THIS_
|
|
DWORD dwStreamID,
|
|
IMediaSample* lpSample
|
|
) PURE;
|
|
|
|
STDMETHOD (BeginFlush)(THIS_
|
|
DWORD dwStreamID
|
|
) PURE;
|
|
|
|
STDMETHOD (EndFlush)(THIS_
|
|
DWORD dwStreamID
|
|
) PURE;
|
|
|
|
STDMETHOD (SetStreamMediaType)(THIS_
|
|
DWORD dwStreamID,
|
|
AM_MEDIA_TYPE* pmt,
|
|
DWORD dwSurfFlags,
|
|
LPGUID lpDeinterlaceGUID,
|
|
DXVA_DeinterlaceCaps* lpCaps
|
|
) PURE;
|
|
|
|
STDMETHOD (SetStreamActiveState)(THIS_
|
|
DWORD dwStreamID,
|
|
BOOL fActive
|
|
) PURE;
|
|
|
|
STDMETHOD (GetStreamActiveState)(THIS_
|
|
DWORD dwStreamID,
|
|
BOOL* lpfActive
|
|
) PURE;
|
|
|
|
STDMETHOD (SetStreamColorKey)(THIS_
|
|
DWORD dwStreamID,
|
|
LPDDCOLORKEY lpClrKey
|
|
) PURE;
|
|
|
|
STDMETHOD (GetStreamColorKey)(THIS_
|
|
DWORD dwStreamID,
|
|
LPDDCOLORKEY lpClrKey
|
|
) PURE;
|
|
|
|
STDMETHOD (SetStreamAlpha)(THIS_
|
|
DWORD dwStreamID,
|
|
float Alpha
|
|
) PURE;
|
|
|
|
STDMETHOD (GetStreamAlpha)(THIS_
|
|
DWORD dwStreamID,
|
|
float* pAlpha
|
|
) PURE;
|
|
|
|
STDMETHOD (SetStreamZOrder)(THIS_
|
|
DWORD dwStreamID,
|
|
DWORD dwZ
|
|
) PURE;
|
|
|
|
STDMETHOD (GetStreamZOrder)(THIS_
|
|
DWORD dwStreamID,
|
|
DWORD* pdwZ
|
|
) PURE;
|
|
|
|
STDMETHOD (SetStreamOutputRect)(THIS_
|
|
DWORD dwStreamID,
|
|
const NORMALIZEDRECT *pRect
|
|
) PURE;
|
|
|
|
STDMETHOD (GetStreamOutputRect)(THIS_
|
|
DWORD dwStreamID,
|
|
NORMALIZEDRECT* pRect
|
|
) PURE;
|
|
};
|
|
|
|
|
|
//
|
|
// ede80b5c-bad6-4623-b537-65 58 6c 9f 8d fd
|
|
//
|
|
DEFINE_GUID(IID_IVMRFilterConfigInternal,
|
|
0xede80b5c, 0xbad6, 0x4623, 0xb5, 0x37, 0x65, 0x58, 0x6c, 0x9f, 0x8d, 0xfd);
|
|
|
|
DECLARE_INTERFACE_(IVMRFilterConfigInternal, IUnknown)
|
|
{
|
|
STDMETHOD (GetAspectRatioModePrivate)(THIS_
|
|
LPDWORD lpdwARMode
|
|
) PURE;
|
|
|
|
STDMETHOD (SetAspectRatioModePrivate)(THIS_
|
|
DWORD dwARMode
|
|
) PURE;
|
|
};
|
|
#endif
|