]> git.vomp.tv Git - vompclient.git/blob - osdwin.h
Rewritten vomp discovery protocol
[vompclient.git] / osdwin.h
1 /*
2     Copyright 2004-2005 Chris Tallon
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 OSDWIN_H
22 #define OSDWIN_H
23
24 #include <stdio.h>
25
26 #include "osd.h"
27 #include "defines.h"
28 #include "log.h"
29 #include "threadwin.h"
30 #include <winsock2.h>
31 #include <d3d9.h>
32 #include <Dxva2api.h>
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 class DsAllocator;
44
45
46
47 class OsdWin : public Osd, public ThreadWin
48 {
49   public:
50     OsdWin();
51     ~OsdWin();
52
53     int init(void* device);
54     int shutdown();
55
56     int getFD();
57
58     void screenShot(char* fileName);
59
60         void threadMethod();
61     void threadPostStopCleanup();
62
63         LPDIRECT3DDEVICE9 getD3dDev() ;
64         LPDIRECT3D9 getD3d() ;
65         // This function is called from the WinMain function in order to get Screen updates
66         void Render();
67         void RenderDS(LPDIRECT3DSURFACE9 present);
68         void BeginPainting();
69         void EndPainting();
70         void setExternalDriving(DsAllocator* dsall,DWORD width, DWORD height);
71         void Blank();
72     DWORD getFilterCaps();
73     DWORD getFilterType(){return filter_type;};
74     void setFilterType(D3DTEXTUREFILTERTYPE type) {filter_type=type;};
75
76
77
78         
79
80         enum EVR_state {
81                 EVR_pres_off=0,
82                 EVR_pres_started,
83                 EVR_pres_pause
84         };
85
86         void SetEVRStatus(EVR_state new_state){evrstate=new_state;};
87         
88         IDirect3DDeviceManager9 * getD3dMan() {return d3ddevman;};
89         bool IsEvrSupported() {return evrsupported;};
90         HWND getWindow() {return window;};
91
92 private:
93         void LockDevice();
94         void UnlockDevice();
95
96           LPDIRECT3D9 d3d;
97           LPDIRECT3DDEVICE9 d3ddevice;
98 //        LPDIRECT3DVERTEXBUFFER9 d3dvb;
99           LPDIRECT3DSURFACE9 d3drtsurf;
100           LPDIRECT3DSWAPCHAIN9 swappy;
101           LPDIRECT3DSURFACE9 swapsurf;
102           DsAllocator* dsallocator;
103         // This indicates, that currently a video is played, thus the osd updates are driven by the Directshow Filtersystem
104         bool external_driving;
105         HANDLE d3dmutex;
106         DWORD lastrendertime;
107         void InternalRendering(LPDIRECT3DSURFACE9 present);
108         bool DoLost();
109         LPDIRECT3DVERTEXBUFFER9 InitVertexBuffer(DWORD width, DWORD height);
110         OSDVERTEX osdvertices[4];
111         HANDLE event;
112         D3DTEXTUREFILTERTYPE filter_type;
113         EVR_state evrstate;
114         bool evrsupported;
115         HWND window;
116
117         UINT dxvatoken;
118         IDirect3DDeviceManager9 *d3ddevman;
119         HANDLE  dxvadevicehandle;
120 };
121
122 #endif