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 {
45 typedef std::vector<VideoFilterDesc> VideoFilterDescList;
51 class VideoWin : public Video
57 int init(UCHAR format);
60 int setFormat(UCHAR format);
61 UCHAR getSupportedFormats() { return 0;};
62 UINT supportedTVsize() { return ASPECT4X3|ASPECT16X9;};
63 UCHAR supportedTVFormats() { return 0;};
65 int setConnection(UCHAR connection);
66 int setAspectRatio(UCHAR aspectRatio, int tparx,int tpary); // This one does the pin 8 scart widescreen switching
67 UCHAR getAspectRatio(){return aspectRatio;};
68 UCHAR getMode(){return mode;};
69 UCHAR getPseudoTVsize() {return pseudotvsize;};
70 int setMode(UCHAR mode);
71 int setTVsize(UCHAR size); // Is the TV a widescreen?
72 int setDefaultAspect();
77 bool InIframemode() {return iframemode;};
91 int attachFrameBuffer(); // What does this do?
92 // ULONG timecodeToFrameNumber(ULLONG timecode);
93 // ULLONG frameNumberToTimecode(ULONG framenumber);
94 ULLONG getCurrentTimestamp();
96 bool loadOptionsFromServer(VDR* vdr);
97 bool saveOptionstoServer();
98 bool addOptionPagesToWTB(WTabBar *wtb);
99 bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
100 bool handleOptionChanges(Option* option);
102 //Writing Data to Videodevice
103 virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);
104 virtual UINT DeliverMediaSample(UCHAR* buffer, UINT *samplepos);
105 UINT DeliverMediaPacket(const MediaPacket packet, const UCHAR* buffer, UINT *samplepos);
106 virtual bool dtsTimefix() {if (h264)return videoH264dtsfix; else return videompeg2dtsfix;}
108 virtual bool supportsh264();
109 virtual int getTeletextBufferFaktor(){return 4;};
112 virtual bool supportsAc3();
114 enum VideoPresenter {
122 MediaPacket mediapacket;
125 int getCurrentAudioMediaSample(IMediaSample** ms);
126 int DeliverAudioMediaSample();
128 int getCurrentVideoMediaSample(IMediaSample** ms);
129 int DeliverVideoMediaSample();
130 int setAudioStreamType(UCHAR type);
132 virtual long long SetStartOffset(long long curreftime, bool *rsync);
133 long long SetStartAudioOffset(long long curreftime, bool *rsync);
134 virtual void ResetTimeOffsets();
136 void SetAudioState(bool state){audioon=state;};
137 void SetAudioVolume(long volume);
139 void turnVideoOn(){videoon=true;};
140 void turnVideoOff(){videoon=false;};
142 virtual bool displayIFrame(const UCHAR* buffer, UINT length);
144 const VideoDisplay & getVideoDisplay() { return vd; };
145 bool isVideoOn() {return videoon;};
146 bool isdsinited() {return dsinited;};
147 int lastAType() {return lastaudiomode;};
148 bool changeAType(int type,IMediaSample* ms);
151 const VideoFilterDescList *getVideoFilterList(int &selected);
152 bool selectVideoFilter(int filter);
153 DsSourceFilter* getSourceFilter() {return sourcefilter;};
155 const VideoFilterDescList *getVideoH264FilterList(int &selected);
156 bool selectVideoH264Filter(int filter);
164 bool setVideoDisplay(VideoDisplay display) { vd = display; return true; };
170 int EnterIframePlayback();
171 #ifdef NEW_DS_MECHANISMENS
173 void initFilterDatabase();
174 IBaseFilter *getVideoFilter();
175 VideoFilterDescList videofilterlist;
176 int videofilterselected;
178 void initH264FilterDatabase();
179 IBaseFilter *getVideoH264Filter();
180 VideoFilterDescList videoH264filterlist;
181 int videoH264filterselected;
182 bool videoH264dtsfix;
183 bool videompeg2dtsfix;
185 int dsInitVideoFilter();
186 IMediaControl* dsmediacontrol;
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;
198 DsSourceFilter* sourcefilter;
199 DsAllocator* allocatorvmr;
203 bool offsetvideonotset;
204 bool offsetaudionotset;
205 long long startoffset;
206 long long lastrefvideotime;
207 long long lastrefaudiotime;
214 REFERENCE_TIME lastreftimeRT;
215 ULLONG lastreftimePTS;
219 unsigned int vmrdeinterlacing;
220 VideoPresenter currentpresenter;
222 DWORD graphidentifier;