summaryrefslogtreecommitdiffstats
path: root/thirdparties/win32/include/directshow/winctrl.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparties/win32/include/directshow/winctrl.h')
-rw-r--r--thirdparties/win32/include/directshow/winctrl.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/thirdparties/win32/include/directshow/winctrl.h b/thirdparties/win32/include/directshow/winctrl.h
new file mode 100644
index 0000000..f18ba82
--- /dev/null
+++ b/thirdparties/win32/include/directshow/winctrl.h
@@ -0,0 +1,224 @@
+//------------------------------------------------------------------------------
+// File: WinCtrl.h
+//
+// Desc: DirectShow base classes - defines classes for video control
+// interfaces.
+//
+// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
+//------------------------------------------------------------------------------
+
+
+#ifndef __WINCTRL__
+#define __WINCTRL__
+
+#define ABSOL(x) (x < 0 ? -x : x)
+#define NEGAT(x) (x > 0 ? -x : x)
+
+// Helper
+BOOL WINAPI PossiblyEatMessage(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+class CBaseControlWindow : public CBaseVideoWindow, public CBaseWindow
+{
+protected:
+
+ CBaseFilter *m_pFilter; // Pointer to owning media filter
+ CBasePin *m_pPin; // Controls media types for connection
+ CCritSec *m_pInterfaceLock; // Externally defined critical section
+ COLORREF m_BorderColour; // Current window border colour
+ BOOL m_bAutoShow; // What happens when the state changes
+ HWND m_hwndOwner; // Owner window that we optionally have
+ HWND m_hwndDrain; // HWND to post any messages received
+ BOOL m_bCursorHidden; // Should we hide the window cursor
+
+public:
+
+ // Internal methods for other objects to get information out
+
+ HRESULT DoSetWindowStyle(long Style,long WindowLong);
+ HRESULT DoGetWindowStyle(__out long *pStyle,long WindowLong);
+ BOOL IsAutoShowEnabled() { return m_bAutoShow; };
+ COLORREF GetBorderColour() { return m_BorderColour; };
+ HWND GetOwnerWindow() { return m_hwndOwner; };
+ BOOL IsCursorHidden() { return m_bCursorHidden; };
+
+ inline BOOL PossiblyEatMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+ return ::PossiblyEatMessage(m_hwndDrain, uMsg, wParam, lParam);
+ }
+
+ // Derived classes must call this to set the pin the filter is using
+ // We don't have the pin passed in to the constructor (as we do with
+ // the CBaseFilter object) because filters typically create the
+ // pins dynamically when requested in CBaseFilter::GetPin. This can
+ // not be called from our constructor because is is a virtual method
+
+ void SetControlWindowPin(CBasePin *pPin) {
+ m_pPin = pPin;
+ }
+
+public:
+
+ CBaseControlWindow(__inout CBaseFilter *pFilter, // Owning media filter
+ __in CCritSec *pInterfaceLock, // Locking object
+ __in_opt LPCTSTR pName, // Object description
+ __inout_opt LPUNKNOWN pUnk, // Normal COM ownership
+ __inout HRESULT *phr); // OLE return code
+
+ // These are the properties we support
+
+ STDMETHODIMP put_Caption(__in BSTR strCaption);
+ STDMETHODIMP get_Caption(__out BSTR *pstrCaption);
+ STDMETHODIMP put_AutoShow(long AutoShow);
+ STDMETHODIMP get_AutoShow(__out long *AutoShow);
+ STDMETHODIMP put_WindowStyle(long WindowStyle);
+ STDMETHODIMP get_WindowStyle(__out long *pWindowStyle);
+ STDMETHODIMP put_WindowStyleEx(long WindowStyleEx);
+ STDMETHODIMP get_WindowStyleEx(__out long *pWindowStyleEx);
+ STDMETHODIMP put_WindowState(long WindowState);
+ STDMETHODIMP get_WindowState(__out long *pWindowState);
+ STDMETHODIMP put_BackgroundPalette(long BackgroundPalette);
+ STDMETHODIMP get_BackgroundPalette(__out long *pBackgroundPalette);
+ STDMETHODIMP put_Visible(long Visible);
+ STDMETHODIMP get_Visible(__out long *pVisible);
+ STDMETHODIMP put_Left(long Left);
+ STDMETHODIMP get_Left(__out long *pLeft);
+ STDMETHODIMP put_Width(long Width);
+ STDMETHODIMP get_Width(__out long *pWidth);
+ STDMETHODIMP put_Top(long Top);
+ STDMETHODIMP get_Top(__out long *pTop);
+ STDMETHODIMP put_Height(long Height);
+ STDMETHODIMP get_Height(__out long *pHeight);
+ STDMETHODIMP put_Owner(OAHWND Owner);
+ STDMETHODIMP get_Owner(__out OAHWND *Owner);
+ STDMETHODIMP put_MessageDrain(OAHWND Drain);
+ STDMETHODIMP get_MessageDrain(__out OAHWND *Drain);
+ STDMETHODIMP get_BorderColor(__out long *Color);
+ STDMETHODIMP put_BorderColor(long Color);
+ STDMETHODIMP get_FullScreenMode(__out long *FullScreenMode);
+ STDMETHODIMP put_FullScreenMode(long FullScreenMode);
+
+ // And these are the methods
+
+ STDMETHODIMP SetWindowForeground(long Focus);
+ STDMETHODIMP NotifyOwnerMessage(OAHWND hwnd,long uMsg,LONG_PTR wParam,LONG_PTR lParam);
+ STDMETHODIMP GetMinIdealImageSize(__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP GetMaxIdealImageSize(__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP SetWindowPosition(long Left,long Top,long Width,long Height);
+ STDMETHODIMP GetWindowPosition(__out long *pLeft,__out long *pTop,__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP GetRestorePosition(__out long *pLeft,__out long *pTop,__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP HideCursor(long HideCursor);
+ STDMETHODIMP IsCursorHidden(__out long *CursorHidden);
+};
+
+// This class implements the IBasicVideo interface
+
+class CBaseControlVideo : public CBaseBasicVideo
+{
+protected:
+
+ CBaseFilter *m_pFilter; // Pointer to owning media filter
+ CBasePin *m_pPin; // Controls media types for connection
+ CCritSec *m_pInterfaceLock; // Externally defined critical section
+
+public:
+
+ // Derived classes must provide these for the implementation
+
+ virtual HRESULT IsDefaultTargetRect() PURE;
+ virtual HRESULT SetDefaultTargetRect() PURE;
+ virtual HRESULT SetTargetRect(RECT *pTargetRect) PURE;
+ virtual HRESULT GetTargetRect(RECT *pTargetRect) PURE;
+ virtual HRESULT IsDefaultSourceRect() PURE;
+ virtual HRESULT SetDefaultSourceRect() PURE;
+ virtual HRESULT SetSourceRect(RECT *pSourceRect) PURE;
+ virtual HRESULT GetSourceRect(RECT *pSourceRect) PURE;
+ virtual HRESULT GetStaticImage(__inout long *pBufferSize,__out_bcount_part(*pBufferSize, *pBufferSize) long *pDIBImage) PURE;
+
+ // Derived classes must override this to return a VIDEOINFO representing
+ // the video format. We cannot call IPin ConnectionMediaType to get this
+ // format because various filters dynamically change the type when using
+ // DirectDraw such that the format shows the position of the logical
+ // bitmap in a frame buffer surface, so the size might be returned as
+ // 1024x768 pixels instead of 320x240 which is the real video dimensions
+
+ __out virtual VIDEOINFOHEADER *GetVideoFormat() PURE;
+
+ // Helper functions for creating memory renderings of a DIB image
+
+ HRESULT GetImageSize(__in VIDEOINFOHEADER *pVideoInfo,
+ __out LONG *pBufferSize,
+ __in RECT *pSourceRect);
+
+ HRESULT CopyImage(IMediaSample *pMediaSample,
+ __in VIDEOINFOHEADER *pVideoInfo,
+ __inout LONG *pBufferSize,
+ __out_bcount_part(*pBufferSize, *pBufferSize) BYTE *pVideoImage,
+ __in RECT *pSourceRect);
+
+ // Override this if you want notifying when the rectangles change
+ virtual HRESULT OnUpdateRectangles() { return NOERROR; };
+ virtual HRESULT OnVideoSizeChange();
+
+ // Derived classes must call this to set the pin the filter is using
+ // We don't have the pin passed in to the constructor (as we do with
+ // the CBaseFilter object) because filters typically create the
+ // pins dynamically when requested in CBaseFilter::GetPin. This can
+ // not be called from our constructor because is is a virtual method
+
+ void SetControlVideoPin(__inout CBasePin *pPin) {
+ m_pPin = pPin;
+ }
+
+ // Helper methods for checking rectangles
+ virtual HRESULT CheckSourceRect(__in RECT *pSourceRect);
+ virtual HRESULT CheckTargetRect(__in RECT *pTargetRect);
+
+public:
+
+ CBaseControlVideo(__inout CBaseFilter *pFilter, // Owning media filter
+ __in CCritSec *pInterfaceLock, // Serialise interface
+ __in_opt LPCTSTR pName, // Object description
+ __inout_opt LPUNKNOWN pUnk, // Normal COM ownership
+ __inout HRESULT *phr); // OLE return code
+
+ // These are the properties we support
+
+ STDMETHODIMP get_AvgTimePerFrame(__out REFTIME *pAvgTimePerFrame);
+ STDMETHODIMP get_BitRate(__out long *pBitRate);
+ STDMETHODIMP get_BitErrorRate(__out long *pBitErrorRate);
+ STDMETHODIMP get_VideoWidth(__out long *pVideoWidth);
+ STDMETHODIMP get_VideoHeight(__out long *pVideoHeight);
+ STDMETHODIMP put_SourceLeft(long SourceLeft);
+ STDMETHODIMP get_SourceLeft(__out long *pSourceLeft);
+ STDMETHODIMP put_SourceWidth(long SourceWidth);
+ STDMETHODIMP get_SourceWidth(__out long *pSourceWidth);
+ STDMETHODIMP put_SourceTop(long SourceTop);
+ STDMETHODIMP get_SourceTop(__out long *pSourceTop);
+ STDMETHODIMP put_SourceHeight(long SourceHeight);
+ STDMETHODIMP get_SourceHeight(__out long *pSourceHeight);
+ STDMETHODIMP put_DestinationLeft(long DestinationLeft);
+ STDMETHODIMP get_DestinationLeft(__out long *pDestinationLeft);
+ STDMETHODIMP put_DestinationWidth(long DestinationWidth);
+ STDMETHODIMP get_DestinationWidth(__out long *pDestinationWidth);
+ STDMETHODIMP put_DestinationTop(long DestinationTop);
+ STDMETHODIMP get_DestinationTop(__out long *pDestinationTop);
+ STDMETHODIMP put_DestinationHeight(long DestinationHeight);
+ STDMETHODIMP get_DestinationHeight(__out long *pDestinationHeight);
+
+ // And these are the methods
+
+ STDMETHODIMP GetVideoSize(__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP SetSourcePosition(long Left,long Top,long Width,long Height);
+ STDMETHODIMP GetSourcePosition(__out long *pLeft,__out long *pTop,__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP GetVideoPaletteEntries(long StartIndex,long Entries,__out long *pRetrieved,__out_ecount_part(Entries, *pRetrieved) long *pPalette);
+ STDMETHODIMP SetDefaultSourcePosition();
+ STDMETHODIMP IsUsingDefaultSource();
+ STDMETHODIMP SetDestinationPosition(long Left,long Top,long Width,long Height);
+ STDMETHODIMP GetDestinationPosition(__out long *pLeft,__out long *pTop,__out long *pWidth,__out long *pHeight);
+ STDMETHODIMP SetDefaultDestinationPosition();
+ STDMETHODIMP IsUsingDefaultDestination();
+ STDMETHODIMP GetCurrentImage(__inout long *pBufferSize,__out_bcount_part(*pBufferSize, *pBufferSize) long *pVideoImage);
+};
+
+#endif // __WINCTRL__
+
OpenPOWER on IntegriCloud