]> git.vomp.tv Git - vompclient.git/blob - windowsosd.h
Fix text corruption on channel list when returning from live TV
[vompclient.git] / windowsosd.h
1 /*
2         Copyright 2004-2005 Marten Richter
3
4         This file is part of VOMP.
5
6         VOMP is free software; you can redistribute it and/or modify
7         it under the terms of the GNU General Public License as published by
8         the Free Software Foundation; either version 2 of the License, or
9         (at your option) any later version.
10
11         VOMP is distributed in the hope that it will be useful,
12         but WITHOUT ANY WARRANTY; without even the implied warranty of
13         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14         GNU General Public License for more details.
15
16         You should have received a copy of the GNU General Public License
17         along with VOMP; if not, write to the Free Software
18         Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19 */
20
21 #ifndef WINDOWSOSD_H
22 #define WINDOWSOSD_H
23
24 #include <winsock2.h>
25 #include <d3d9.h>
26 #include <Dxva2api.h>
27 #include "threadwin.h"
28
29 #define  BACKBUFFER_WIDTH 1920
30 #define  BACKBUFFER_HEIGHT 1080
31
32 class DsAllocator;
33
34 struct OSDVERTEX
35 {
36         FLOAT x, y, z, rhw;
37         DWORD c;
38         FLOAT u, v;
39 };
40
41 #define D3DFVF_OSDVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE| D3DFVF_TEX1)
42
43
44 // This class defines all necessary interfaces
45 // for windows osd to communicate with other windows base classes
46
47 class WindowsOsd : public ThreadWin {
48 public:
49         WindowsOsd();
50         virtual ~WindowsOsd();
51
52         bool IsEvrSupported() { return evrsupported; };
53         void setExternalDriving(DsAllocator* dsall, DWORD width, DWORD height);
54
55
56         DWORD getFilterType(){ return filter_type; };
57         void setFilterType(D3DTEXTUREFILTERTYPE type) { filter_type = type; };
58
59         LPDIRECT3DDEVICE9 getD3dDev();
60         LPDIRECT3D9 getD3d();
61         IDirect3DDeviceManager9 * getD3dMan() { return d3ddevman; };
62         DWORD getFilterCaps();
63         HWND getWindow() { return window; };
64         void setWindow(HWND twnd) { window = twnd; };
65
66         // This function is called  in order to get Screen updates
67         void Render();
68         void RenderDS(LPDIRECT3DSURFACE9 present);
69         void Blank();
70         void BeginPainting();
71         void EndPainting();
72
73         virtual int isInitialized()=0;
74
75         void threadMethod();
76         void threadPostStopCleanup();
77
78
79         enum EVR_state {
80                 EVR_pres_off = 0,
81                 EVR_pres_started,
82                 EVR_pres_pause
83         };
84
85         void SetEVRStatus(EVR_state new_state){ evrstate = new_state; };
86 protected:
87
88         int createDirect3D9Objects();
89         void shutdownDirect3D9Objects();
90         void startRenderLoop();
91         void stopRenderLoop();
92         void InternalRendering(LPDIRECT3DSURFACE9 present);
93         bool DoLost();
94         virtual void lostDestroyObjects()=0;
95         virtual void lostRecreateObjects()=0;
96
97         virtual void getTextureCoordinates(FLOAT*, FLOAT*)=0;
98
99         virtual void updateOsd() {};
100
101         void LockDevice();
102         void UnlockDevice();
103         
104         virtual LPDIRECT3DTEXTURE9 getNextOsdTexture()=0;
105
106         LPDIRECT3DVERTEXBUFFER9 InitVertexBuffer(DWORD width, DWORD height);
107         LPDIRECT3DVERTEXBUFFER9 InitBackgroundVertexBuffer(DWORD width, DWORD height);
108         
109
110         bool evrsupported;
111         EVR_state evrstate;
112         D3DTEXTUREFILTERTYPE filter_type;
113 #ifdef WINDOWS_LEGACY
114         LPDIRECT3D9 d3d;
115         LPDIRECT3DDEVICE9 d3ddevice;
116 #else
117         LPDIRECT3D9EX d3d;
118         LPDIRECT3DDEVICE9EX d3ddevice;
119 #endif
120         LPDIRECT3DSWAPCHAIN9 swappy;
121         LPDIRECT3DSURFACE9 swapsurf;
122         LPDIRECT3DSURFACE9 d3drtsurf;
123
124         UINT dxvatoken;
125         IDirect3DDeviceManager9 *d3ddevman;
126         HANDLE  dxvadevicehandle;
127
128         DsAllocator* dsallocator;
129
130         bool external_driving;
131         HANDLE d3dmutex;
132         HANDLE event;
133         DWORD lastrendertime;
134         DWORD lastosdrendertime;
135         HWND window;
136
137 };
138
139
140
141 #endif