~etc-pgh-launchpad/wildpockets/trunk

« back to all changes in this revision

Viewing changes to directshow/videoctl.h

  • Committer: etc-pgh-launchpad at cmu
  • Date: 2010-11-30 20:56:30 UTC
  • Revision ID: etc-pgh-launchpad@lists.andrew.cmu.edu-20101130205630-0blbkcz28ovjl8wj
Committing the Wild Pockets code base to Launchpad.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//------------------------------------------------------------------------------
 
2
// File: VideoCtl.h
 
3
//
 
4
// Desc: DirectShow base classes.
 
5
//
 
6
// Copyright (c) Microsoft Corporation.  All rights reserved.
 
7
//------------------------------------------------------------------------------
 
8
 
 
9
 
 
10
#ifndef __VIDEOCTL__
 
11
#define __VIDEOCTL__
 
12
 
 
13
// These help with property page implementations. The first can be used to
 
14
// load any string from a resource file. The buffer to load into is passed
 
15
// as an input parameter. The same buffer is the return value if the string
 
16
// was found otherwise it returns TEXT(""). The GetDialogSize is passed the
 
17
// resource ID of a dialog box and returns the size of it in screen pixels
 
18
 
 
19
#define STR_MAX_LENGTH 256
 
20
TCHAR * WINAPI StringFromResource(TCHAR *pBuffer, int iResourceID);
 
21
 
 
22
#ifdef UNICODE
 
23
#define WideStringFromResource StringFromResource
 
24
char* WINAPI StringFromResource(char*pBuffer, int iResourceID);
 
25
#else
 
26
WCHAR * WINAPI WideStringFromResource(WCHAR *pBuffer, int iResourceID);
 
27
#endif
 
28
 
 
29
 
 
30
BOOL WINAPI GetDialogSize(int iResourceID,     // Dialog box resource identifier
 
31
                          DLGPROC pDlgProc,    // Pointer to dialog procedure
 
32
                          LPARAM lParam,       // Any user data wanted in pDlgProc
 
33
                          SIZE *pResult);      // Returns the size of dialog box
 
34
 
 
35
// Class that aggregates an IDirectDraw interface
 
36
 
 
37
class CAggDirectDraw : public IDirectDraw, public CUnknown
 
38
{
 
39
protected:
 
40
 
 
41
    LPDIRECTDRAW m_pDirectDraw;
 
42
 
 
43
public:
 
44
 
 
45
    DECLARE_IUNKNOWN
 
46
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
 
47
 
 
48
    // Constructor and destructor
 
49
 
 
50
    CAggDirectDraw(TCHAR *pName,LPUNKNOWN pUnk) :
 
51
        CUnknown(pName,pUnk),
 
52
        m_pDirectDraw(NULL) { };
 
53
 
 
54
    virtual CAggDirectDraw::~CAggDirectDraw() { };
 
55
 
 
56
    // Set the object we should be aggregating
 
57
    void SetDirectDraw(LPDIRECTDRAW pDirectDraw) {
 
58
        m_pDirectDraw = pDirectDraw;
 
59
    }
 
60
 
 
61
    // IDirectDraw methods
 
62
 
 
63
    STDMETHODIMP Compact();
 
64
    STDMETHODIMP CreateClipper(DWORD dwFlags,LPDIRECTDRAWCLIPPER *lplpDDClipper,IUnknown *pUnkOuter);
 
65
    STDMETHODIMP CreatePalette(DWORD dwFlags,LPPALETTEENTRY lpColorTable,LPDIRECTDRAWPALETTE *lplpDDPalette,IUnknown *pUnkOuter);
 
66
    STDMETHODIMP CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc,LPDIRECTDRAWSURFACE *lplpDDSurface,IUnknown *pUnkOuter);
 
67
    STDMETHODIMP DuplicateSurface(LPDIRECTDRAWSURFACE lpDDSurface,LPDIRECTDRAWSURFACE *lplpDupDDSurface);
 
68
    STDMETHODIMP EnumDisplayModes(DWORD dwSurfaceDescCount,LPDDSURFACEDESC lplpDDSurfaceDescList,LPVOID lpContext,LPDDENUMMODESCALLBACK lpEnumCallback);
 
69
    STDMETHODIMP EnumSurfaces(DWORD dwFlags,LPDDSURFACEDESC lpDDSD,LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpEnumCallback);
 
70
    STDMETHODIMP FlipToGDISurface();
 
71
    STDMETHODIMP GetCaps(LPDDCAPS lpDDDriverCaps,LPDDCAPS lpDDHELCaps);
 
72
    STDMETHODIMP GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
 
73
    STDMETHODIMP GetFourCCCodes(LPDWORD lpNumCodes,LPDWORD lpCodes);
 
74
    STDMETHODIMP GetGDISurface(LPDIRECTDRAWSURFACE *lplpGDIDDSurface);
 
75
    STDMETHODIMP GetMonitorFrequency(LPDWORD lpdwFrequency);
 
76
    STDMETHODIMP GetScanLine(LPDWORD lpdwScanLine);
 
77
    STDMETHODIMP GetVerticalBlankStatus(LPBOOL lpblsInVB);
 
78
    STDMETHODIMP Initialize(GUID *lpGUID);
 
79
    STDMETHODIMP RestoreDisplayMode();
 
80
    STDMETHODIMP SetCooperativeLevel(HWND hWnd,DWORD dwFlags);
 
81
    STDMETHODIMP SetDisplayMode(DWORD dwWidth,DWORD dwHeight,DWORD dwBpp);
 
82
    STDMETHODIMP WaitForVerticalBlank(DWORD dwFlags,HANDLE hEvent);
 
83
};
 
84
 
 
85
 
 
86
// Class that aggregates an IDirectDrawSurface interface
 
87
 
 
88
class CAggDrawSurface : public IDirectDrawSurface, public CUnknown
 
89
{
 
90
protected:
 
91
 
 
92
    LPDIRECTDRAWSURFACE m_pDirectDrawSurface;
 
93
 
 
94
public:
 
95
 
 
96
    DECLARE_IUNKNOWN
 
97
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
 
98
 
 
99
    // Constructor and destructor
 
100
 
 
101
    CAggDrawSurface(TCHAR *pName,LPUNKNOWN pUnk) :
 
102
        CUnknown(pName,pUnk),
 
103
        m_pDirectDrawSurface(NULL) { };
 
104
 
 
105
    virtual ~CAggDrawSurface() { };
 
106
 
 
107
    // Set the object we should be aggregating
 
108
    void SetDirectDrawSurface(LPDIRECTDRAWSURFACE pDirectDrawSurface) {
 
109
        m_pDirectDrawSurface = pDirectDrawSurface;
 
110
    }
 
111
 
 
112
    // IDirectDrawSurface methods
 
113
 
 
114
    STDMETHODIMP AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface);
 
115
    STDMETHODIMP AddOverlayDirtyRect(LPRECT lpRect);
 
116
    STDMETHODIMP Blt(LPRECT lpDestRect,LPDIRECTDRAWSURFACE lpDDSrcSurface,LPRECT lpSrcRect,DWORD dwFlags,LPDDBLTFX lpDDBltFx);
 
117
    STDMETHODIMP BltBatch(LPDDBLTBATCH lpDDBltBatch,DWORD dwCount,DWORD dwFlags);
 
118
    STDMETHODIMP BltFast(DWORD dwX,DWORD dwY,LPDIRECTDRAWSURFACE lpDDSrcSurface,LPRECT lpSrcRect,DWORD dwTrans);
 
119
    STDMETHODIMP DeleteAttachedSurface(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSAttachedSurface);
 
120
    STDMETHODIMP EnumAttachedSurfaces(LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback);
 
121
    STDMETHODIMP EnumOverlayZOrders(DWORD dwFlags,LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpfnCallback);
 
122
    STDMETHODIMP Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,DWORD dwFlags);
 
123
    STDMETHODIMP GetAttachedSurface(LPDDSCAPS lpDDSCaps,LPDIRECTDRAWSURFACE *lplpDDAttachedSurface);
 
124
    STDMETHODIMP GetBltStatus(DWORD dwFlags);
 
125
    STDMETHODIMP GetCaps(LPDDSCAPS lpDDSCaps);
 
126
    STDMETHODIMP GetClipper(LPDIRECTDRAWCLIPPER *lplpDDClipper);
 
127
    STDMETHODIMP GetColorKey(DWORD dwFlags,LPDDCOLORKEY lpDDColorKey);
 
128
    STDMETHODIMP GetDC(HDC *lphDC);
 
129
    STDMETHODIMP GetFlipStatus(DWORD dwFlags);
 
130
    STDMETHODIMP GetOverlayPosition(LPLONG lpdwX,LPLONG lpdwY);
 
131
    STDMETHODIMP GetPalette(LPDIRECTDRAWPALETTE *lplpDDPalette);
 
132
    STDMETHODIMP GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat);
 
133
    STDMETHODIMP GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc);
 
134
    STDMETHODIMP Initialize(LPDIRECTDRAW lpDD,LPDDSURFACEDESC lpDDSurfaceDesc);
 
135
    STDMETHODIMP IsLost();
 
136
    STDMETHODIMP Lock(LPRECT lpDestRect,LPDDSURFACEDESC lpDDSurfaceDesc,DWORD dwFlags,HANDLE hEvent);
 
137
    STDMETHODIMP ReleaseDC(HDC hDC);
 
138
    STDMETHODIMP Restore();
 
139
    STDMETHODIMP SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper);
 
140
    STDMETHODIMP SetColorKey(DWORD dwFlags,LPDDCOLORKEY lpDDColorKey);
 
141
    STDMETHODIMP SetOverlayPosition(LONG dwX,LONG dwY);
 
142
    STDMETHODIMP SetPalette(LPDIRECTDRAWPALETTE lpDDPalette);
 
143
    STDMETHODIMP Unlock(LPVOID lpSurfaceData);
 
144
    STDMETHODIMP UpdateOverlay(LPRECT lpSrcRect,LPDIRECTDRAWSURFACE lpDDDestSurface,LPRECT lpDestRect,DWORD dwFlags,LPDDOVERLAYFX lpDDOverlayFX);
 
145
    STDMETHODIMP UpdateOverlayDisplay(DWORD dwFlags);
 
146
    STDMETHODIMP UpdateOverlayZOrder(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSReference);
 
147
};
 
148
 
 
149
 
 
150
// DirectShow must work on multiple platforms.  In particular, it also runs on
 
151
// Windows NT 3.51 which does not have DirectDraw capabilities. The filters
 
152
// cannot therefore link statically to the DirectDraw library. To make their
 
153
// lives that little bit easier we provide this class that manages loading
 
154
// and unloading the library and creating the initial IDirectDraw interface
 
155
 
 
156
typedef DWORD (WINAPI *PGETFILEVERSIONINFOSIZE)(LPTSTR,LPDWORD);
 
157
typedef BOOL (WINAPI *PGETFILEVERSIONINFO)(LPTSTR,DWORD,DWORD,LPVOID);
 
158
typedef BOOL (WINAPI *PVERQUERYVALUE)(LPVOID,LPTSTR,LPVOID,PUINT);
 
159
 
 
160
class CLoadDirectDraw
 
161
{
 
162
    LPDIRECTDRAW m_pDirectDraw;     // The DirectDraw driver instance
 
163
    HINSTANCE m_hDirectDraw;        // Handle to the loaded library
 
164
 
 
165
public:
 
166
 
 
167
    CLoadDirectDraw();
 
168
    ~CLoadDirectDraw();
 
169
 
 
170
    HRESULT LoadDirectDraw(LPSTR szDevice);
 
171
    void ReleaseDirectDraw();
 
172
    HRESULT IsDirectDrawLoaded();
 
173
    LPDIRECTDRAW GetDirectDraw();
 
174
    BOOL IsDirectDrawVersion1();
 
175
};
 
176
 
 
177
#endif // __VIDEOCTL__
 
178