]> git.vomp.tv Git - vompclient.git/blob - videowin.h
New code from Marten
[vompclient.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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 \r
31 #include "defines.h"\r
32 #include "video.h"\r
33 \r
34 //#define DS_DEBUG\r
35 \r
36 class DsSourceFilter;\r
37 class DsAllocator;\r
38 \r
39 class VideoWin : public Video\r
40 {\r
41   public:\r
42     VideoWin();\r
43     ~VideoWin();\r
44 \r
45     int init(UCHAR format);\r
46     int shutdown();\r
47 \r
48     int setFormat(UCHAR format);\r
49     int setConnection(UCHAR connection);\r
50     int setAspectRatio(UCHAR aspectRatio);   // This one does the pin 8 scart widescreen switching\r
51   UCHAR getAspectRatio(){return aspectRatio;};\r
52   UCHAR getMode(){return mode;};\r
53   UCHAR getPseudoTVsize() {return pseudotvsize;};\r
54   int setMode(UCHAR mode);\r
55     int setTVsize(UCHAR size);               // Is the TV a widescreen?\r
56     int setDefaultAspect();\r
57     int setSource();\r
58     int setPosition(int x, int y);\r
59     int sync();\r
60     int play();\r
61         int dsplay();\r
62     int stop();\r
63         int dsstop();\r
64     int pause();\r
65         int dspause();\r
66     int unPause();\r
67         int dsunPause();\r
68     int fastForward();\r
69     int unFastForward();\r
70     int reset();\r
71         int dsreset();\r
72     int blank();\r
73     int signalOn();\r
74     int signalOff();\r
75     int attachFrameBuffer(); // What does this do?\r
76     ULONG timecodeToFrameNumber(ULLONG timecode);\r
77   ULLONG frameNumberToTimecode(ULONG framenumber);\r
78     ULLONG getCurrentTimestamp();\r
79 \r
80     //Writing Data to Videodevice\r
81     virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);\r
82     virtual UINT DeliverMediaSample(const UCHAR* buffer, UINT *samplepos);\r
83     UINT DeliverMediaPacket(MediaPacket packet, const UCHAR* buffer, UINT *samplepos);\r
84   private:\r
85     MediaPacket mediapacket;\r
86   public:\r
87 \r
88     int getCurrentAudioMediaSample(IMediaSample** ms);\r
89     int DeliverAudioMediaSample();\r
90 \r
91     int getCurrentVideoMediaSample(IMediaSample** ms);\r
92     int DeliverVideoMediaSample();\r
93 \r
94     virtual long long SetStartOffset(long long curreftime, bool *rsync);\r
95     long long SetStartAudioOffset(long long curreftime, bool *rsync);\r
96   virtual void ResetTimeOffsets();\r
97 \r
98     void SetAudioState(bool state){audioon=state;};\r
99         void SetAudioVolume(long volume);\r
100 \r
101     void turnVideoOn(){videoon=true;};\r
102     void turnVideoOff(){videoon=false;};\r
103 \r
104   unsigned int getPosx() {return videoposx;};\r
105   unsigned int getPosy() {return videoposy;};\r
106   bool isVideoOn() {return videoon;};\r
107 \r
108 #ifdef DEV\r
109     int test();\r
110     int test2();\r
111 #endif\r
112 private:\r
113   IMediaControl* dsmediacontrol;\r
114 \r
115   IGraphBuilder* dsgraphbuilder;\r
116   IMediaSample* cur_audio_media_sample;\r
117   IMediaSample* cur_video_media_sample;\r
118   IBaseFilter* dsvmrrenderer;\r
119   IVMRSurfaceAllocatorNotify9  *dsvmrsurfnotify;\r
120   IReferenceClock *dsrefclock;\r
121   IMediaFilter* dsmediafilter;\r
122   IBasicAudio* dsbasicaudio;\r
123   REFERENCE_TIME cr_time;\r
124 \r
125   DsSourceFilter* sourcefilter;\r
126   DsAllocator* allocatorvmr;\r
127   HANDLE filtermutex;\r
128   void CleanupDS();\r
129   bool offsetnotset;\r
130   bool offsetvideonotset;\r
131   bool offsetaudionotset;\r
132   long long startoffset;\r
133   long long lastrefvideotime;\r
134   long long lastrefaudiotime;\r
135 \r
136   bool firstsynched;\r
137   bool audioon;\r
138   bool videoon;\r
139   UCHAR pseudotvsize;\r
140   REFERENCE_TIME lastreftimeRT;\r
141   ULLONG lastreftimePTS;\r
142   unsigned int videoposx;\r
143   unsigned int videoposy;\r
144 #ifdef DS_DEBUG\r
145   DWORD graphidentifier;\r
146 #endif\r
147 };\r
148 \r
149 #endif\r
150 \r
151 \r