]> git.vomp.tv Git - vompclient.git/blob - videowin.h
Screenshot support for vector based osd on raspberry pi
[vompclient.git] / videowin.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 VIDEOWIN_H
22 #define VIDEOWIN_H
23
24 #include <stdio.h>
25 #include <string.h>
26 #include <winsock2.h>
27 #include <dshow.h>
28 #include <d3d9.h>
29 #include <vmr9.h>
30 #include <vector>
31
32 #include "defines.h"
33 #include "video.h"
34
35 //#define DS_DEBUG
36 #define NEW_DS_MECHANISMENS
37
38 #ifdef NEW_DS_MECHANISMENS
39 struct VideoFilterDesc {
40     char * displayname;
41     char * friendlyname;
42     bool vmr9;
43     bool vmr9tested;
44 };
45 using namespace std;
46 typedef vector<VideoFilterDesc> VideoFilterDescList;
47 #endif
48
49 class DsSourceFilter;
50 class DsAllocator;
51
52 class VideoWin : public Video
53 {
54 public:
55         VideoWin();
56         virtual ~VideoWin();
57
58         int init(UCHAR format);
59         int shutdown();
60
61         int setFormat(UCHAR format);
62         UCHAR getSupportedFormats() { return 0;};
63         UINT supportedTVsize() { return ASPECT4X3|ASPECT16X9;};
64         UCHAR supportedTVFormats() { return 0;};
65
66         int setConnection(UCHAR connection);
67         int setAspectRatio(UCHAR aspectRatio, int tparx,int tpary);   // This one does the pin 8 scart widescreen switching
68         UCHAR getAspectRatio(){return aspectRatio;};
69         UCHAR getMode(){return mode;};
70         UCHAR getPseudoTVsize() {return pseudotvsize;};
71         int setMode(UCHAR mode);
72         int setTVsize(UCHAR size);               // Is the TV a widescreen?
73         int setDefaultAspect();
74         int setSource();
75         int sync();
76         int play();
77         int dsplay();
78         bool InIframemode() {return iframemode;};
79         int stop();
80         int dsstop();
81         int pause();
82         int dspause();
83         int unPause();
84         int dsunPause();
85         int fastForward();
86         int unFastForward();
87         int reset();
88         int dsreset();
89         int blank();
90         int signalOn();
91         int signalOff();
92         int attachFrameBuffer(); // What does this do?
93 //      ULONG timecodeToFrameNumber(ULLONG timecode);
94 //      ULLONG frameNumberToTimecode(ULONG framenumber);
95         ULLONG getCurrentTimestamp();
96
97         bool loadOptionsfromServer(VDR* vdr);
98         bool saveOptionstoServer();
99         bool addOptionPagesToWTB(WTabBar *wtb);
100         bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
101         bool handleOptionChanges(Option* option);
102
103         //Writing Data to Videodevice
104         virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);
105         virtual UINT DeliverMediaSample(UCHAR* buffer, UINT *samplepos);
106         UINT DeliverMediaPacket(const MediaPacket packet, const UCHAR* buffer, UINT *samplepos);
107     virtual  bool dtsTimefix() {if (h264)return videoH264dtsfix; else return videompeg2dtsfix;}
108
109         virtual bool supportsh264();
110         virtual int getTeletextBufferFaktor(){return 4;};
111
112
113         virtual bool supportsAc3();
114
115         enum VideoPresenter {
116                 VMR9,
117                 EVR
118         } ;
119
120
121
122 private:
123         MediaPacket mediapacket;
124 public:
125
126         int getCurrentAudioMediaSample(IMediaSample** ms);
127         int DeliverAudioMediaSample();
128
129         int getCurrentVideoMediaSample(IMediaSample** ms);
130         int DeliverVideoMediaSample();
131         int setAudioStreamType(UCHAR type);
132
133         virtual long long SetStartOffset(long long curreftime, bool *rsync);
134         long long SetStartAudioOffset(long long curreftime, bool *rsync);
135         virtual void ResetTimeOffsets();
136
137         void SetAudioState(bool state){audioon=state;};
138         void SetAudioVolume(long volume);
139
140         void turnVideoOn(){videoon=true;};
141         void turnVideoOff(){videoon=false;};
142
143         virtual bool displayIFrame(const UCHAR* buffer, UINT length);
144
145         unsigned int getPosx() {return videoposx;};
146         unsigned int getPosy() {return videoposy;};
147         bool isVideoOn() {return videoon;};
148         bool isdsinited() {return dsinited;};
149         int lastAType() {return lastaudiomode;};
150         bool changeAType(int type,IMediaSample* ms);
151
152
153         const VideoFilterDescList *getVideoFilterList(int &selected);
154         bool selectVideoFilter(int filter);
155         DsSourceFilter* getSourceFilter() {return sourcefilter;};
156
157         const VideoFilterDescList *getVideoH264FilterList(int &selected);
158         bool selectVideoH264Filter(int filter);
159
160
161 #ifdef DEV
162         int test();
163         int test2();
164 #endif
165 protected:
166         int setPosition(int x, int y); // legacy api remove
167 #error Port the new api
168
169 private:
170         int EnterIframePlayback();
171 #ifdef NEW_DS_MECHANISMENS
172         void dstest();  
173         void initFilterDatabase();
174         IBaseFilter *getVideoFilter();  
175         VideoFilterDescList videofilterlist;
176         int  videofilterselected;
177
178         void initH264FilterDatabase();
179         IBaseFilter *getVideoH264Filter();  
180         VideoFilterDescList videoH264filterlist;
181         int  videoH264filterselected;
182     bool videoH264dtsfix;
183     bool videompeg2dtsfix;
184 #endif
185         int dsInitVideoFilter();
186         IMediaControl* dsmediacontrol;
187
188         IGraphBuilder* dsgraphbuilder;
189         IMediaSample* cur_audio_media_sample;
190         IMediaSample* cur_video_media_sample;
191         IBaseFilter* dsrenderer;
192         IVMRSurfaceAllocatorNotify9  *dsvmrsurfnotify;
193         IReferenceClock *dsrefclock;
194         IMediaFilter* dsmediafilter;
195         IBasicAudio* dsbasicaudio;
196         REFERENCE_TIME cr_time;
197
198         DsSourceFilter* sourcefilter;
199         DsAllocator* allocatorvmr;
200         HANDLE filtermutex;
201         void CleanupDS();
202         bool offsetnotset;
203         bool offsetvideonotset;
204         bool offsetaudionotset;
205         long long startoffset;
206         long long lastrefvideotime;
207         long long lastrefaudiotime;
208         bool dsinited;
209         bool firstsynched;
210         bool audioon;
211         bool videoon;
212         bool iframemode;
213         UCHAR pseudotvsize;
214         REFERENCE_TIME lastreftimeRT;
215         ULLONG lastreftimePTS;
216         unsigned int videoposx;
217         unsigned int videoposy;
218         int lastaudiomode;
219         int audiovolume;
220         UCHAR aud_type;
221         unsigned int vmrdeinterlacing; 
222         VideoPresenter currentpresenter;
223 #ifdef DS_DEBUG
224         DWORD graphidentifier;
225 #endif
226 };
227
228 #endif
229
230
231