]> git.vomp.tv Git - vompclient-marten.git/blob - videowin.h
Preliminray OMX h264 playback stuff not finished yet
[vompclient-marten.git] / videowin.h
1 /*\r
2     Copyright 2004-2005 Chris Tallon\r
3 \r
4     This file is part of VOMP.\r
5 \r
6     VOMP is free software; you can redistribute it and/or modify\r
7     it under the terms of the GNU General Public License as published by\r
8     the Free Software Foundation; either version 2 of the License, or\r
9     (at your option) any later version.\r
10 \r
11     VOMP is distributed in the hope that it will be useful,\r
12     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14     GNU General Public License for more details.\r
15 \r
16     You should have received a copy of the GNU General Public License\r
17     along with VOMP; if not, write to the Free Software\r
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
19 */\r
20 \r
21 #ifndef VIDEOWIN_H\r
22 #define VIDEOWIN_H\r
23 \r
24 #include <stdio.h>\r
25 #include <string.h>\r
26 #include <winsock2.h>\r
27 #include <dshow.h>\r
28 #include <d3d9.h>\r
29 #include <vmr9.h>\r
30 #include <vector>\r
31 \r
32 #include "defines.h"\r
33 #include "video.h"\r
34 \r
35 //#define DS_DEBUG\r
36 #define NEW_DS_MECHANISMENS\r
37 \r
38 #ifdef NEW_DS_MECHANISMENS\r
39 struct VideoFilterDesc {\r
40     char * displayname;\r
41     char * friendlyname;\r
42     bool vmr9;\r
43     bool vmr9tested;\r
44 };\r
45 using namespace std;\r
46 typedef vector<VideoFilterDesc> VideoFilterDescList;\r
47 #endif\r
48 \r
49 class DsSourceFilter;\r
50 class DsAllocator;\r
51 \r
52 class VideoWin : public Video\r
53 {\r
54 public:\r
55         VideoWin();\r
56         virtual ~VideoWin();\r
57 \r
58         int init(UCHAR format);\r
59         int shutdown();\r
60 \r
61         int setFormat(UCHAR format);\r
62         int setConnection(UCHAR connection);\r
63         int setAspectRatio(UCHAR aspectRatio);   // This one does the pin 8 scart widescreen switching\r
64         UCHAR getAspectRatio(){return aspectRatio;};\r
65         UCHAR getMode(){return mode;};\r
66         UCHAR getPseudoTVsize() {return pseudotvsize;};\r
67         int setMode(UCHAR mode);\r
68         int setTVsize(UCHAR size);               // Is the TV a widescreen?\r
69         int setDefaultAspect();\r
70         int setSource();\r
71         int setPosition(int x, int y);\r
72         int sync();\r
73         int play();\r
74         int dsplay();\r
75         bool InIframemode() {return iframemode;};\r
76         int stop();\r
77         int dsstop();\r
78         int pause();\r
79         int dspause();\r
80         int unPause();\r
81         int dsunPause();\r
82         int fastForward();\r
83         int unFastForward();\r
84         int reset();\r
85         int dsreset();\r
86         int blank();\r
87         int signalOn();\r
88         int signalOff();\r
89         int attachFrameBuffer(); // What does this do?\r
90 //      ULONG timecodeToFrameNumber(ULLONG timecode);\r
91 //      ULLONG frameNumberToTimecode(ULONG framenumber);\r
92         ULLONG getCurrentTimestamp();\r
93 \r
94         bool loadOptionsfromServer(VDR* vdr);\r
95         bool saveOptionstoServer();\r
96         bool addOptionPagesToWTB(WTabBar *wtb);\r
97         bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);\r
98         bool handleOptionChanges(Option* option);\r
99 \r
100         //Writing Data to Videodevice\r
101         virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);\r
102         virtual UINT DeliverMediaSample(UCHAR* buffer, UINT *samplepos);\r
103         UINT DeliverMediaPacket(const MediaPacket packet, const UCHAR* buffer, UINT *samplepos);\r
104     virtual  bool dtsTimefix() {if (h264)return videoH264dtsfix; else return videompeg2dtsfix;}\r
105 \r
106         virtual bool supportsh264();\r
107 \r
108 \r
109         virtual bool supportsAc3();\r
110 \r
111         enum VideoPresenter {\r
112                 VMR9,\r
113                 EVR\r
114         } ;\r
115 \r
116 \r
117 \r
118 private:\r
119         MediaPacket mediapacket;\r
120 public:\r
121 \r
122         int getCurrentAudioMediaSample(IMediaSample** ms);\r
123         int DeliverAudioMediaSample();\r
124 \r
125         int getCurrentVideoMediaSample(IMediaSample** ms);\r
126         int DeliverVideoMediaSample();\r
127         int setAudioStreamType(UCHAR type);\r
128 \r
129         virtual long long SetStartOffset(long long curreftime, bool *rsync);\r
130         long long SetStartAudioOffset(long long curreftime, bool *rsync);\r
131         virtual void ResetTimeOffsets();\r
132 \r
133         void SetAudioState(bool state){audioon=state;};\r
134         void SetAudioVolume(long volume);\r
135 \r
136         void turnVideoOn(){videoon=true;};\r
137         void turnVideoOff(){videoon=false;};\r
138 \r
139         virtual bool displayIFrame(const UCHAR* buffer, UINT length);\r
140 \r
141         unsigned int getPosx() {return videoposx;};\r
142         unsigned int getPosy() {return videoposy;};\r
143         bool isVideoOn() {return videoon;};\r
144         bool isdsinited() {return dsinited;};\r
145         int lastAType() {return lastaudiomode;};\r
146         bool changeAType(int type,IMediaSample* ms);\r
147 \r
148 \r
149         const VideoFilterDescList *getVideoFilterList(int &selected);\r
150         bool selectVideoFilter(int filter);\r
151         DsSourceFilter* getSourceFilter() {return sourcefilter;};\r
152 \r
153         const VideoFilterDescList *getVideoH264FilterList(int &selected);\r
154         bool selectVideoH264Filter(int filter);\r
155 \r
156 \r
157 #ifdef DEV\r
158         int test();\r
159         int test2();\r
160 #endif\r
161 private:\r
162         int EnterIframePlayback();\r
163 #ifdef NEW_DS_MECHANISMENS\r
164         void dstest();  \r
165         void initFilterDatabase();\r
166         IBaseFilter *getVideoFilter();  \r
167         VideoFilterDescList videofilterlist;\r
168         int  videofilterselected;\r
169 \r
170         void initH264FilterDatabase();\r
171         IBaseFilter *getVideoH264Filter();  \r
172         VideoFilterDescList videoH264filterlist;\r
173         int  videoH264filterselected;\r
174     bool videoH264dtsfix;\r
175     bool videompeg2dtsfix;\r
176 #endif\r
177         int dsInitVideoFilter();\r
178         IMediaControl* dsmediacontrol;\r
179 \r
180         IGraphBuilder* dsgraphbuilder;\r
181         IMediaSample* cur_audio_media_sample;\r
182         IMediaSample* cur_video_media_sample;\r
183         IBaseFilter* dsrenderer;\r
184         IVMRSurfaceAllocatorNotify9  *dsvmrsurfnotify;\r
185         IReferenceClock *dsrefclock;\r
186         IMediaFilter* dsmediafilter;\r
187         IBasicAudio* dsbasicaudio;\r
188         REFERENCE_TIME cr_time;\r
189 \r
190         DsSourceFilter* sourcefilter;\r
191         DsAllocator* allocatorvmr;\r
192         HANDLE filtermutex;\r
193         void CleanupDS();\r
194         bool offsetnotset;\r
195         bool offsetvideonotset;\r
196         bool offsetaudionotset;\r
197         long long startoffset;\r
198         long long lastrefvideotime;\r
199         long long lastrefaudiotime;\r
200         bool dsinited;\r
201         bool firstsynched;\r
202         bool audioon;\r
203         bool videoon;\r
204         bool iframemode;\r
205         UCHAR pseudotvsize;\r
206         REFERENCE_TIME lastreftimeRT;\r
207         ULLONG lastreftimePTS;\r
208         unsigned int videoposx;\r
209         unsigned int videoposy;\r
210         int lastaudiomode;\r
211         int audiovolume;\r
212         UCHAR aud_type;\r
213         unsigned int vmrdeinterlacing; \r
214         VideoPresenter currentpresenter;\r
215 #ifdef DS_DEBUG\r
216         DWORD graphidentifier;\r
217 #endif\r
218 };\r
219 \r
220 #endif\r
221 \r
222 \r
223 \r