257 lines
10 KiB
C++
257 lines
10 KiB
C++
/*
|
|
|
|
Copyright (c) 1998-1999 Microsoft Corporation
|
|
|
|
*/
|
|
|
|
// tmvidrnd.h: Definition of the CVideoRenderTerminalE class
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_VIDEOOUTT_H__D1691429_B6CA_11D0_82A4_00AA00B5CA1B__INCLUDED_)
|
|
#define AFX_VIDEOOUTT_H__D1691429_B6CA_11D0_82A4_00AA00B5CA1B__INCLUDED_
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include "resource.h" // main symbols
|
|
|
|
//
|
|
// The CLSID that's used to create us.
|
|
//
|
|
|
|
EXTERN_C const CLSID CLSID_VideoWindowTerminal_PRIVATE;
|
|
|
|
#ifdef INSTANTIATE_GUIDS_NOW
|
|
|
|
// {AED6483E-3304-11d2-86F1-006008B0E5D2}
|
|
const CLSID CLSID_VideoWindowTerminal_PRIVATE =
|
|
{ 0xaed6483e, 0x3304, 0x11d2, { 0x86, 0xf1, 0x0, 0x60, 0x8, 0xb0, 0xe5, 0xd2 } };
|
|
|
|
#endif // INSTANTIATE_GUIDS_NOW
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
|
|
OUT IBaseFilter ** ppBaseFilter;
|
|
OUT HRESULT hr;
|
|
|
|
} CREATE_VIDEO_RENDER_FILTER_CONTEXT;
|
|
|
|
|
|
DWORD WINAPI WorkItemProcCreateVideoRenderFilter(LPVOID pVoid);
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVideoRenderTerminal
|
|
//
|
|
|
|
class CVideoRenderTerminal :
|
|
public CComCoClass<CVideoRenderTerminal, &CLSID_VideoWindowTerminal_PRIVATE>,
|
|
public CComDualImpl<IBasicVideo, &IID_IBasicVideo, &LIBID_QuartzTypeLib>,
|
|
public CComDualImpl<IVideoWindow, &IID_IVideoWindow, &LIBID_QuartzTypeLib>,
|
|
public IDrawVideoImage,
|
|
public ITPluggableTerminalInitialization,
|
|
public CSingleFilterTerminal,
|
|
public CMSPObjectSafetyImpl
|
|
{
|
|
public:
|
|
|
|
CVideoRenderTerminal()
|
|
:m_bThreadStarted(FALSE)
|
|
{
|
|
LOG((MSP_TRACE, "CVideoRenderTerminal::CVideoRenderTerminal - enter"));
|
|
|
|
m_lAutoShowCache = 0; // window invisible by default
|
|
m_TerminalType = TT_DYNAMIC; // this is a dynamic terminal
|
|
|
|
LOG((MSP_TRACE, "CVideoRenderTerminal::CVideoRenderTerminal - finish"));
|
|
}
|
|
|
|
~CVideoRenderTerminal();
|
|
|
|
|
|
|
|
// ITPluggableTerminalInitialization
|
|
STDMETHOD(InitializeDynamic) (
|
|
IN IID iidTerminalClass,
|
|
IN DWORD dwMediaType,
|
|
IN TERMINAL_DIRECTION Direction,
|
|
IN MSP_HANDLE htAddress
|
|
);
|
|
|
|
HRESULT FindTerminalPin(void);
|
|
|
|
BEGIN_COM_MAP(CVideoRenderTerminal)
|
|
COM_INTERFACE_ENTRY(ITPluggableTerminalInitialization)
|
|
COM_INTERFACE_ENTRY(IBasicVideo)
|
|
COM_INTERFACE_ENTRY(IVideoWindow)
|
|
COM_INTERFACE_ENTRY(IObjectSafety)
|
|
COM_INTERFACE_ENTRY(IDrawVideoImage)
|
|
COM_INTERFACE_ENTRY_CHAIN(CSingleFilterTerminal)
|
|
END_COM_MAP()
|
|
|
|
DECLARE_DEBUG_ADDREF_RELEASE(CVideoRenderTerminal)
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_VideoRenderTerminal)
|
|
|
|
// ITBasicVideo
|
|
public:
|
|
|
|
STDMETHOD(IsUsingDefaultDestination) (void);
|
|
STDMETHOD(IsUsingDefaultSource) (void);
|
|
STDMETHOD(GetCurrentImage) ( long *plBufferSize,
|
|
long *pDIBImage);
|
|
STDMETHOD(GetVideoPaletteEntries) ( long lStartIndex,
|
|
long lcEntries,
|
|
long *plcRetrieved,
|
|
long *plPalette);
|
|
STDMETHOD(GetVideoSize) ( long *plWidth,
|
|
long *plHeight);
|
|
STDMETHOD(SetDefaultDestinationPosition)(void);
|
|
STDMETHOD(GetDestinationPosition) ( long *plLeft,
|
|
long *plTop,
|
|
long *plWidth,
|
|
long *plHeight);
|
|
STDMETHOD(SetDestinationPosition) ( long lLeft,
|
|
long lTop,
|
|
long lWidth,
|
|
long lHeight);
|
|
STDMETHOD(SetDefaultSourcePosition) (void);
|
|
STDMETHOD(GetSourcePosition) ( long *plLeft,
|
|
long *plTop,
|
|
long *plWidth,
|
|
long *plHeight);
|
|
STDMETHOD(SetSourcePosition) ( long lLeft,
|
|
long lTop,
|
|
long lWidth,
|
|
long lHeight);
|
|
STDMETHOD(get_DestinationHeight) (OUT long *pVal);
|
|
STDMETHOD(put_DestinationHeight) (IN long newVal);
|
|
STDMETHOD(get_DestinationTop) (OUT long *pVal);
|
|
STDMETHOD(put_DestinationTop) (IN long newVal);
|
|
STDMETHOD(get_DestinationWidth) (OUT long *pVal);
|
|
STDMETHOD(put_DestinationWidth) (IN long newVal);
|
|
STDMETHOD(get_DestinationLeft) (OUT long *pVal);
|
|
STDMETHOD(put_DestinationLeft) (IN long newVal);
|
|
STDMETHOD(get_SourceHeight) (OUT long *pVal);
|
|
STDMETHOD(put_SourceHeight) (IN long newVal);
|
|
STDMETHOD(get_SourceTop) (OUT long *pVal);
|
|
STDMETHOD(put_SourceTop) (IN long newVal);
|
|
STDMETHOD(get_SourceWidth) (OUT long *pVal);
|
|
STDMETHOD(put_SourceWidth) (IN long newVal);
|
|
STDMETHOD(get_SourceLeft) (OUT long *pVal);
|
|
STDMETHOD(put_SourceLeft) (IN long newVal);
|
|
STDMETHOD(get_VideoHeight) (OUT long *pVal);
|
|
STDMETHOD(get_VideoWidth) (OUT long *pVal);
|
|
STDMETHOD(get_BitErrorRate) (OUT long *pVal);
|
|
STDMETHOD(get_BitRate) (OUT long *pVal);
|
|
STDMETHOD(get_AvgTimePerFrame) (OUT REFTIME *pVal);
|
|
|
|
// IVideoWindow methods
|
|
public:
|
|
|
|
STDMETHOD(put_Caption) (THIS_ BSTR strCaption);
|
|
STDMETHOD(get_Caption) (THIS_ BSTR FAR* strCaption);
|
|
STDMETHOD(put_WindowStyle) (THIS_ long WindowStyle);
|
|
STDMETHOD(get_WindowStyle) (THIS_ long FAR* WindowStyle);
|
|
STDMETHOD(put_WindowStyleEx) (THIS_ long WindowStyleEx);
|
|
STDMETHOD(get_WindowStyleEx) (THIS_ long FAR* WindowStyleEx);
|
|
STDMETHOD(put_AutoShow) (THIS_ long AutoShow);
|
|
STDMETHOD(get_AutoShow) (THIS_ long FAR* AutoShow);
|
|
STDMETHOD(put_WindowState) (THIS_ long WindowState);
|
|
STDMETHOD(get_WindowState) (THIS_ long FAR* WindowState);
|
|
STDMETHOD(put_BackgroundPalette)(THIS_ long BackgroundPalette);
|
|
STDMETHOD(get_BackgroundPalette)(THIS_ long FAR* pBackgroundPalette);
|
|
STDMETHOD(put_Visible) (THIS_ long Visible);
|
|
STDMETHOD(get_Visible) (THIS_ long FAR* pVisible);
|
|
STDMETHOD(put_Left) (THIS_ long Left);
|
|
STDMETHOD(get_Left) (THIS_ long FAR* pLeft);
|
|
STDMETHOD(put_Width) (THIS_ long Width);
|
|
STDMETHOD(get_Width) (THIS_ long FAR* pWidth);
|
|
STDMETHOD(put_Top) (THIS_ long Top);
|
|
STDMETHOD(get_Top) (THIS_ long FAR* pTop);
|
|
STDMETHOD(put_Height) (THIS_ long Height);
|
|
STDMETHOD(get_Height) (THIS_ long FAR* pHeight);
|
|
STDMETHOD(put_Owner) (THIS_ OAHWND Owner);
|
|
STDMETHOD(get_Owner) (THIS_ OAHWND FAR* Owner);
|
|
STDMETHOD(put_MessageDrain) (THIS_ OAHWND Drain);
|
|
STDMETHOD(get_MessageDrain) (THIS_ OAHWND FAR* Drain);
|
|
STDMETHOD(get_BorderColor) (THIS_ long FAR* Color);
|
|
STDMETHOD(put_BorderColor) (THIS_ long Color);
|
|
STDMETHOD(get_FullScreenMode) (THIS_ long FAR* FullScreenMode);
|
|
STDMETHOD(put_FullScreenMode) (THIS_ long FullScreenMode);
|
|
STDMETHOD(SetWindowForeground) (THIS_ long Focus);
|
|
STDMETHOD(NotifyOwnerMessage) (THIS_ OAHWND hwnd,
|
|
long uMsg,
|
|
LONG_PTR wParam,
|
|
LONG_PTR lParam);
|
|
STDMETHOD(SetWindowPosition) (THIS_ long Left,
|
|
long Top,
|
|
long Width,
|
|
long Height);
|
|
STDMETHOD(GetWindowPosition) (THIS_ long FAR* pLeft,
|
|
long FAR* pTop,
|
|
long FAR* pWidth,
|
|
long FAR* pHeight);
|
|
STDMETHOD(GetMinIdealImageSize) (THIS_ long FAR* pWidth,
|
|
long FAR* pHeight);
|
|
STDMETHOD(GetMaxIdealImageSize) (THIS_ long FAR* pWidth,
|
|
long FAR* pHeight);
|
|
STDMETHOD(GetRestorePosition) (THIS_ long FAR* pLeft,
|
|
long FAR* pTop,
|
|
long FAR* pWidth,
|
|
long FAR* pHeight);
|
|
STDMETHOD(HideCursor) (THIS_ long HideCursor);
|
|
STDMETHOD(IsCursorHidden) (THIS_ long FAR* CursorHidden);
|
|
|
|
// IDrawVideoImage
|
|
public:
|
|
|
|
STDMETHOD(DrawVideoImageBegin)(void);
|
|
STDMETHOD(DrawVideoImageEnd) (void);
|
|
STDMETHOD(DrawVideoImageDraw) (IN HDC hdc,
|
|
IN LPRECT lprcSrc,
|
|
IN LPRECT lprcDst);
|
|
|
|
// Implementation
|
|
private:
|
|
|
|
//
|
|
// Data members
|
|
//
|
|
|
|
CComPtr<IBasicVideo> m_pIBasicVideo;
|
|
CComPtr<IVideoWindow> m_pIVideoWindow;
|
|
CComPtr<IDrawVideoImage> m_pIDrawVideoImage;
|
|
long m_lAutoShowCache;
|
|
|
|
|
|
BOOL m_bThreadStarted;
|
|
|
|
public:
|
|
|
|
//
|
|
// Methods
|
|
//
|
|
|
|
|
|
// CBaseTerminal required overrides
|
|
|
|
STDMETHODIMP CompleteConnectTerminal(void);
|
|
|
|
virtual HRESULT AddFiltersToGraph(void);
|
|
|
|
virtual DWORD GetSupportedMediaTypes(void)
|
|
{
|
|
return (DWORD) TAPIMEDIATYPE_VIDEO;
|
|
}
|
|
};
|
|
|
|
#endif // !defined(AFX_VIDEOOUTT_H__D1691429_B6CA_11D0_82A4_00AA00B5CA1B__INCLUDED_)
|