2 Copyright 2004-2005 Chris Tallon
4 This file is part of VOMP.
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.
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.
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.
36 #define NEW_DS_MECHANISMENS
38 #ifdef NEW_DS_MECHANISMENS
39 struct VideoFilterDesc {
46 typedef vector<VideoFilterDesc> VideoFilterDescList;
52 class VideoWin : public Video
58 int init(UCHAR format);
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();
71 int setPosition(int x, int y);
75 bool InIframemode() {return iframemode;};
89 int attachFrameBuffer(); // What does this do?
90 // ULONG timecodeToFrameNumber(ULLONG timecode);
91 // ULLONG frameNumberToTimecode(ULONG framenumber);
92 ULLONG getCurrentTimestamp();
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);
100 //Writing Data to Videodevice
101 virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);
102 virtual UINT DeliverMediaSample(UCHAR* buffer, UINT *samplepos);
103 UINT DeliverMediaPacket(const MediaPacket packet, const UCHAR* buffer, UINT *samplepos);
104 virtual bool dtsTimefix() {if (h264)return videoH264dtsfix; else return videompeg2dtsfix;}
106 virtual bool supportsh264();
109 virtual bool supportsAc3();
111 enum VideoPresenter {
119 MediaPacket mediapacket;
122 int getCurrentAudioMediaSample(IMediaSample** ms);
123 int DeliverAudioMediaSample();
125 int getCurrentVideoMediaSample(IMediaSample** ms);
126 int DeliverVideoMediaSample();
127 int setAudioStreamType(UCHAR type);
129 virtual long long SetStartOffset(long long curreftime, bool *rsync);
130 long long SetStartAudioOffset(long long curreftime, bool *rsync);
131 virtual void ResetTimeOffsets();
133 void SetAudioState(bool state){audioon=state;};
134 void SetAudioVolume(long volume);
136 void turnVideoOn(){videoon=true;};
137 void turnVideoOff(){videoon=false;};
139 virtual void displayIFrame(const UCHAR* buffer, UINT length);
141 unsigned int getPosx() {return videoposx;};
142 unsigned int getPosy() {return videoposy;};
143 bool isVideoOn() {return videoon;};
144 bool isdsinited() {return dsinited;};
145 int lastAType() {return lastaudiomode;};
146 bool changeAType(int type,IMediaSample* ms);
149 const VideoFilterDescList *getVideoFilterList(int &selected);
150 bool selectVideoFilter(int filter);
151 DsSourceFilter* getSourceFilter() {return sourcefilter;};
153 const VideoFilterDescList *getVideoH264FilterList(int &selected);
154 bool selectVideoH264Filter(int filter);
162 int EnterIframePlayback();
163 #ifdef NEW_DS_MECHANISMENS
165 void initFilterDatabase();
166 IBaseFilter *getVideoFilter();
167 VideoFilterDescList videofilterlist;
168 int videofilterselected;
170 void initH264FilterDatabase();
171 IBaseFilter *getVideoH264Filter();
172 VideoFilterDescList videoH264filterlist;
173 int videoH264filterselected;
174 bool videoH264dtsfix;
175 bool videompeg2dtsfix;
177 int dsInitVideoFilter();
178 IMediaControl* dsmediacontrol;
180 IGraphBuilder* dsgraphbuilder;
181 IMediaSample* cur_audio_media_sample;
182 IMediaSample* cur_video_media_sample;
183 IBaseFilter* dsrenderer;
184 IVMRSurfaceAllocatorNotify9 *dsvmrsurfnotify;
185 IReferenceClock *dsrefclock;
186 IMediaFilter* dsmediafilter;
187 IBasicAudio* dsbasicaudio;
188 REFERENCE_TIME cr_time;
190 DsSourceFilter* sourcefilter;
191 DsAllocator* allocatorvmr;
195 bool offsetvideonotset;
196 bool offsetaudionotset;
197 long long startoffset;
198 long long lastrefvideotime;
199 long long lastrefaudiotime;
206 REFERENCE_TIME lastreftimeRT;
207 ULLONG lastreftimePTS;
208 unsigned int videoposx;
209 unsigned int videoposy;
213 unsigned int vmrdeinterlacing;
214 VideoPresenter currentpresenter;
216 DWORD graphidentifier;