]> git.vomp.tv Git - vompclient-marten.git/blob - videowin.h
Live radio EPG fix
[vompclient-marten.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     ~VideoWin();
57
58     int init(UCHAR format);
59     int shutdown();
60
61     int setFormat(UCHAR format);
62     int setConnection(UCHAR connection);
63     int setAspectRatio(UCHAR aspectRatio);   // This one does the pin 8 scart widescreen switching
64   UCHAR getAspectRatio(){return aspectRatio;};
65   UCHAR getMode(){return mode;};
66   UCHAR getPseudoTVsize() {return pseudotvsize;};
67   int setMode(UCHAR mode);
68     int setTVsize(UCHAR size);               // Is the TV a widescreen?
69     int setDefaultAspect();
70     int setSource();
71     int setPosition(int x, int y);
72     int sync();
73     int play();
74   int dsplay();
75   bool InIframemode() {return iframemode;};
76     int stop();
77   int dsstop();
78     int pause();
79   int dspause();
80     int unPause();
81   int dsunPause();
82     int fastForward();
83     int unFastForward();
84     int reset();
85   int dsreset();
86     int blank();
87     int signalOn();
88     int signalOff();
89     int attachFrameBuffer(); // What does this do?
90     ULONG timecodeToFrameNumber(ULLONG timecode);
91   ULLONG frameNumberToTimecode(ULONG framenumber);
92     ULLONG getCurrentTimestamp();
93
94     bool loadOptionsfromServer(VDR* vdr);
95     bool saveOptionstoServer();
96     bool addOptionPagesToWTB(WTabBar *wtb);
97     bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
98     bool handleOptionChanges(Option* option);
99
100     //Writing Data to Videodevice
101     virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);
102     virtual UINT DeliverMediaSample(const UCHAR* buffer, UINT *samplepos);
103     UINT DeliverMediaPacket(MediaPacket packet, const UCHAR* buffer, UINT *samplepos);
104
105
106
107     virtual bool supportsAc3();
108  
109     
110   private:
111     MediaPacket mediapacket;
112   public:
113
114     int getCurrentAudioMediaSample(IMediaSample** ms);
115     int DeliverAudioMediaSample();
116
117     int getCurrentVideoMediaSample(IMediaSample** ms);
118     int DeliverVideoMediaSample();
119     int setAudioStreamType(UCHAR type);
120
121     virtual long long SetStartOffset(long long curreftime, bool *rsync);
122     long long SetStartAudioOffset(long long curreftime, bool *rsync);
123   virtual void ResetTimeOffsets();
124
125     void SetAudioState(bool state){audioon=state;};
126   void SetAudioVolume(long volume);
127
128     void turnVideoOn(){videoon=true;};
129     void turnVideoOff(){videoon=false;};
130
131     virtual void displayIFrame(const UCHAR* buffer, UINT length);
132
133   unsigned int getPosx() {return videoposx;};
134   unsigned int getPosy() {return videoposy;};
135   bool isVideoOn() {return videoon;};
136   bool isdsinited() {return dsinited;};
137   int lastAType() {return lastaudiomode;};
138   bool changeAType(int type,IMediaSample* ms);
139
140
141   const VideoFilterDescList *getVideoFilterList(int &selected);
142   bool selectVideoFilter(int filter);
143   DsSourceFilter* getSourceFilter() {return sourcefilter;};
144
145 #ifdef DEV
146     int test();
147     int test2();
148 #endif
149 private:
150   int EnterIframePlayback();
151 #ifdef NEW_DS_MECHANISMENS
152   void dstest();  
153    void initFilterDatabase();
154   IBaseFilter *getVideoFilter();  VideoFilterDescList videofilterlist;
155   int  videofilterselected;
156 #endif
157   int dsInitVideoFilter();
158   IMediaControl* dsmediacontrol;
159
160   IGraphBuilder* dsgraphbuilder;
161   IMediaSample* cur_audio_media_sample;
162   IMediaSample* cur_video_media_sample;
163   IBaseFilter* dsvmrrenderer;
164   IVMRSurfaceAllocatorNotify9  *dsvmrsurfnotify;
165   IReferenceClock *dsrefclock;
166   IMediaFilter* dsmediafilter;
167   IBasicAudio* dsbasicaudio;
168   REFERENCE_TIME cr_time;
169
170   DsSourceFilter* sourcefilter;
171   DsAllocator* allocatorvmr;
172   HANDLE filtermutex;
173   void CleanupDS();
174   bool offsetnotset;
175   bool offsetvideonotset;
176   bool offsetaudionotset;
177   long long startoffset;
178   long long lastrefvideotime;
179   long long lastrefaudiotime;
180   bool dsinited;
181   bool firstsynched;
182   bool audioon;
183   bool videoon;
184   bool iframemode;
185   UCHAR pseudotvsize;
186   REFERENCE_TIME lastreftimeRT;
187   ULLONG lastreftimePTS;
188   unsigned int videoposx;
189   unsigned int videoposy;
190   int lastaudiomode;
191   int audiovolume;
192   UCHAR aud_type;
193   unsigned int vmrdeinterlacing; 
194 #ifdef DS_DEBUG
195   DWORD graphidentifier;
196 #endif
197 };
198
199 #endif
200
201
202