Mercurial > mplayer.hg
annotate mplayer.c @ 3266:ff90589b635f
Fixed single buffering problems and -vo mga compatibility by number of buffers
author | nick |
---|---|
date | Sun, 02 Dec 2001 12:21:13 +0000 |
parents | b59502557e39 |
children | ac7ded58b6df |
rev | line source |
---|---|
1237 | 1 // AVI & MPEG Player v0.18 (C) 2000-2001. by A'rpi/ESP-team |
1 | 2 |
1430 | 3 #include <stdio.h> |
4 #include <stdlib.h> | |
5 #include <string.h> | |
6 #include <unistd.h> | |
1428
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
7 |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
8 #include <sys/ioctl.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
9 #include <sys/mman.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
10 #include <sys/types.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
11 #include <sys/wait.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
12 #include <sys/time.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
13 #include <sys/stat.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
14 |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
15 #include <signal.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
16 #include <time.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
17 #include <fcntl.h> |
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
18 |
1430 | 19 #include "version.h" |
20 #include "config.h" | |
1584 | 21 |
1564 | 22 #include "mp_msg.h" |
1 | 23 |
1584 | 24 #define HELP_MP_DEFINE_STATIC |
25 #include "help_mp.h" | |
26 | |
147 | 27 #include "cfgparser.h" |
151 | 28 #include "cfg-mplayer-def.h" |
147 | 29 |
1422 | 30 #ifdef USE_SUB |
258 | 31 #include "subreader.h" |
2557 | 32 void find_sub(subtitle* subtitles,int key); |
1422 | 33 #endif |
258 | 34 |
1422 | 35 #ifdef USE_LIBVO2 |
36 #include "libvo2/libvo2.h" | |
37 #else | |
36 | 38 #include "libvo/video_out.h" |
2550 | 39 extern void* mDisplay; // Display* mDisplay; |
1422 | 40 #endif |
41 | |
2897 | 42 #ifdef USE_LIBVO2 |
43 #include "libvo2/sub.h" | |
44 #else | |
220 | 45 #include "libvo/sub.h" |
2897 | 46 #endif |
36 | 47 |
955 | 48 #include "libao2/audio_out.h" |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3180
diff
changeset
|
49 #include "libao2/audio_plugin.h" |
955 | 50 |
1 | 51 #include "libmpeg2/mpeg2.h" |
52 #include "libmpeg2/mpeg2_internal.h" | |
53 | |
303 | 54 #include "codec-cfg.h" |
175 | 55 |
492 | 56 #include "dvdauth.h" |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
57 #ifdef USE_DVDREAD |
560
28ae99036574
Separated dvdsub code to be able to work with it easier
lgb
parents:
557
diff
changeset
|
58 #include "spudec.h" |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
59 #endif |
492 | 60 |
1 | 61 #include "linux/getch2.h" |
62 #include "linux/keycodes.h" | |
63 #include "linux/timer.h" | |
64 #include "linux/shmem.h" | |
65 | |
2272 | 66 #include "cpudetect.h" |
67 | |
1 | 68 #ifdef HAVE_LIRC |
69 #include "lirc_mp.h" | |
70 #endif | |
71 | |
2036 | 72 #ifdef HAVE_NEW_GUI |
73 #include "Gui/mplayer/play.h" | |
74 #endif | |
75 | |
362 | 76 int verbose=0; |
1448 | 77 int quiet=0; |
1 | 78 |
398 | 79 #define ABS(x) (((x)>=0)?(x):(-(x))) |
80 | |
3015 | 81 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
82 #include <linux/rtc.h> |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
83 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
84 |
2941
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
85 #ifdef USE_TV |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
86 #include "libmpdemux/tv.h" |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
87 |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
88 extern int tv_param_on; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
89 extern tvi_handle_t *tv_handler; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
90 #endif |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
91 |
258 | 92 //**************************************************************************// |
93 // Config file | |
94 //**************************************************************************// | |
95 | |
2557 | 96 static int cfg_inc_verbose(struct config *conf){ ++verbose; return 0;} |
153 | 97 |
162 | 98 static int cfg_include(struct config *conf, char *filename){ |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
99 return parse_config_file(conf, filename); |
162 | 100 } |
101 | |
2557 | 102 #include "get_path.c" |
178 | 103 |
1 | 104 //**************************************************************************// |
442 | 105 //**************************************************************************// |
106 // Input media streaming & demultiplexer: | |
107 //**************************************************************************// | |
108 | |
1289 | 109 static int max_framesize=0; |
110 | |
578 | 111 #include "stream.h" |
587
8511095c5283
stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents:
578
diff
changeset
|
112 #include "demuxer.h" |
442 | 113 #include "stheader.h" |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
114 #include "parse_es.h" |
1 | 115 |
2563 | 116 #include "dec_audio.h" |
117 #include "dec_video.h" | |
118 | |
2567 | 119 #if 0 |
1015 | 120 extern picture_t *picture; // exported from libmpeg2/decode.c |
442 | 121 |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
122 int frameratecode2framerate[16] = { |
780 | 123 0, |
124 // Official mpeg1/2 framerates: | |
125 24000*10000/1001, 24*10000,25*10000, 30000*10000/1001, 30*10000,50*10000,60000*10000/1001, 60*10000, | |
126 // libmpeg3's "Unofficial economy rates": | |
127 1*10000,5*10000,10*10000,12*10000,15*10000,0,0 | |
112 | 128 }; |
2567 | 129 #endif |
112 | 130 |
111 | 131 //**************************************************************************// |
1 | 132 //**************************************************************************// |
133 | |
112 | 134 // Common FIFO functions, and keyboard/event FIFO code |
135 #include "fifo.c" | |
136 | |
1 | 137 //**************************************************************************// |
138 | |
1422 | 139 #ifdef USE_LIBVO2 |
140 static vo2_handle_t *video_out=NULL; | |
141 #else | |
1 | 142 static vo_functions_t *video_out=NULL; |
1422 | 143 #endif |
1289 | 144 static ao_functions_t *audio_out=NULL; |
1 | 145 |
2557 | 146 // benchmark: |
1291 | 147 double video_time_usage=0; |
148 double vout_time_usage=0; | |
1289 | 149 static double audio_time_usage=0; |
150 static int total_time_usage_start=0; | |
151 static int benchmark=0; | |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
152 |
2557 | 153 // static int play_in_bg=0; |
606 | 154 |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
155 // options: |
1496 | 156 static int auto_quality=0; |
157 static int output_quality=0; | |
1439 | 158 |
1709 | 159 int use_gui=0; |
160 | |
1439 | 161 int osd_level=2; |
2557 | 162 |
163 // seek: | |
937 | 164 char *seek_to_sec=NULL; |
1428
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
165 off_t seek_to_byte=0; |
2436 | 166 off_t step_sec=0; |
2557 | 167 int loop_times=-1; |
168 float rel_seek_secs=0; | |
169 int abs_seek_pos=0; | |
170 | |
171 // codecs: | |
442 | 172 int has_audio=1; |
1286
543a94b241a2
Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents:
1285
diff
changeset
|
173 char *audio_codec=NULL; // override audio codec |
543a94b241a2
Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents:
1285
diff
changeset
|
174 char *video_codec=NULL; // override video codec |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
175 int audio_family=-1; // override audio codec family |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
176 int video_family=-1; // override video codec family |
1285
202d9e2dc202
-vcodec option (maybe some other name would be better though) to select between driver types without editing codecs.conf. mplayer will default to normal codec search loop if it does not find codec for the specified driver type. config range checking for the parameter (an integer) should be cleaned, IMHO
lgb
parents:
1255
diff
changeset
|
177 |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
178 // IMHO this stuff is no longer of use, or is there a special |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
179 // reason why dshow should be completely disabled? - atmos :: |
1327
b12e1817bcc2
some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents:
1302
diff
changeset
|
180 // yes, people without working c++ compiler can disable it - A'rpi |
626 | 181 #ifdef USE_DIRECTSHOW |
182 int allow_dshow=1; | |
183 #else | |
184 int allow_dshow=0; | |
185 #endif | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
186 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
187 // streaming: |
1496 | 188 static int audio_id=-1; |
189 static int video_id=-1; | |
190 static int dvdsub_id=-1; | |
191 static int vcd_track=0; | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
192 |
2353 | 193 // cache2: |
2557 | 194 static int stream_cache_size=0; |
2353 | 195 #ifdef USE_STREAM_CACHE |
196 extern int cache_fill_status; | |
197 #else | |
198 #define cache_fill_status 0 | |
199 #endif | |
200 | |
2557 | 201 // dump: |
3257 | 202 static char *stream_dump_name="stream.dump"; |
2557 | 203 static int stream_dump_type=0; |
204 | |
205 // A-V sync: | |
1498 | 206 static float default_max_pts_correction=-1;//0.01f; |
207 static float max_pts_correction=0;//default_max_pts_correction; | |
2557 | 208 static float c_total=0; |
209 static float audio_delay=0; | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
210 |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
211 static int dapsync=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
212 static int softsleep=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
213 |
2557 | 214 static float force_fps=0; |
215 static int force_srate=0; | |
216 static int frame_dropping=0; // option 0=no drop 1= drop vo 2= drop decode | |
217 static int play_n_frames=-1; | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
218 |
1 | 219 // screen info: |
220 char* video_driver=NULL; //"mga"; // default | |
956
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
221 char* audio_driver=NULL; |
1496 | 222 static int fullscreen=0; |
223 static int vidmode=0; | |
224 static int softzoom=0; | |
225 static int flip=-1; | |
226 static int screen_size_x=0;//SCREEN_SIZE_X; | |
227 static int screen_size_y=0;//SCREEN_SIZE_Y; | |
228 static int screen_size_xy=0; | |
3139 | 229 static float movie_aspect=-1.0; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
230 |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
231 char* playlist_file; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
232 |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
233 // sub: |
212 | 234 char *font_name=NULL; |
215 | 235 float font_factor=0.75; |
258 | 236 char *sub_name=NULL; |
237 float sub_delay=0; | |
238 float sub_fps=0; | |
510 | 239 int sub_auto = 1; |
1255
94f2853ec6f4
-dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents:
1250
diff
changeset
|
240 /*DSP!!char *dsp=NULL;*/ |
723 | 241 |
1183 | 242 extern char *vo_subdevice; |
243 extern char *ao_subdevice; | |
1156 | 244 |
2321 | 245 static stream_t* stream=NULL; |
246 | |
1856 | 247 static char* current_module=NULL; // for debugging |
248 | |
249 static unsigned int inited_flags=0; | |
250 #define INITED_VO 1 | |
251 #define INITED_AO 2 | |
252 #define INITED_GUI 4 | |
253 #define INITED_GETCH2 8 | |
254 #define INITED_LIRC 16 | |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
255 #define INITED_SPUDEC 32 |
2321 | 256 #define INITED_STREAM 64 |
1856 | 257 #define INITED_ALL 0xFFFF |
258 | |
259 void uninit_player(unsigned int mask){ | |
260 mask=inited_flags&mask; | |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
261 #ifdef USE_DVDREAD |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
262 if (mask&INITED_SPUDEC){ |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
263 inited_flags&=~INITED_SPUDEC; |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
264 current_module="uninit_spudec"; |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
265 spudec_free(vo_spudec); |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
266 } |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
267 #endif |
1856 | 268 if(mask&INITED_VO){ |
269 inited_flags&=~INITED_VO; | |
270 current_module="uninit_vo"; | |
271 #ifdef USE_LIBVO2 | |
272 vo2_close(video_out); | |
273 #else | |
274 video_out->uninit(); | |
275 #endif | |
276 } | |
277 | |
278 if(mask&INITED_AO){ | |
279 inited_flags&=~INITED_AO; | |
280 current_module="uninit_ao"; | |
281 audio_out->uninit(); | |
282 } | |
283 | |
284 if(mask&INITED_GETCH2){ | |
285 inited_flags&=~INITED_GETCH2; | |
286 current_module="uninit_getch2"; | |
287 // restore terminal: | |
288 getch2_disable(); | |
289 } | |
290 | |
291 #ifdef HAVE_NEW_GUI | |
292 if(mask&INITED_GUI){ | |
293 inited_flags&=~INITED_GUI; | |
294 current_module="uninit_gui"; | |
295 mplDone(); | |
296 } | |
297 #endif | |
298 | |
2321 | 299 if(mask&INITED_STREAM){ |
300 inited_flags&=~INITED_STREAM; | |
301 current_module="uninit_stream"; | |
302 if(stream) free_stream(stream); | |
303 stream=NULL; | |
304 } | |
305 | |
1856 | 306 #ifdef HAVE_LIRC |
307 if(mask&INITED_LIRC){ | |
308 inited_flags&=~INITED_LIRC; | |
309 current_module="uninit_lirc"; | |
310 lirc_mp_cleanup(); | |
311 } | |
312 #endif | |
313 | |
1863 | 314 current_module=NULL; |
315 | |
1856 | 316 } |
317 | |
1156 | 318 void exit_player(char* how){ |
319 total_time_usage_start=GetTimer()-total_time_usage_start; | |
320 | |
1856 | 321 uninit_player(INITED_ALL); |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
322 |
1856 | 323 current_module="exit_player"; |
1156 | 324 |
1583 | 325 if(how) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Exiting,how); |
1567 | 326 mp_msg(MSGT_CPLAYER,MSGL_V,"max framesize was %d bytes\n",max_framesize); |
1156 | 327 if(benchmark){ |
328 double tot=video_time_usage+vout_time_usage+audio_time_usage; | |
329 double total_time_usage=(float)total_time_usage_start*0.000001; | |
1567 | 330 mp_msg(MSGT_CPLAYER,MSGL_INFO,"BENCHMARKs: V:%8.3fs VO:%8.3fs A:%8.3fs Sys:%8.3fs = %8.3fs\n", |
1156 | 331 video_time_usage,vout_time_usage,audio_time_usage, |
332 total_time_usage-tot,total_time_usage); | |
333 if(total_time_usage>0.0) | |
1567 | 334 mp_msg(MSGT_CPLAYER,MSGL_INFO,"BENCHMARK%%: V:%8.4f%% VO:%8.4f%% A:%8.4f%% Sys:%8.4f%% = %8.4f%%\n", |
1156 | 335 100.0*video_time_usage/total_time_usage, |
336 100.0*vout_time_usage/total_time_usage, | |
337 100.0*audio_time_usage/total_time_usage, | |
338 100.0*(total_time_usage-tot)/total_time_usage, | |
339 100.0); | |
340 } | |
1639 | 341 |
1156 | 342 exit(1); |
343 } | |
344 | |
345 void exit_sighandler(int x){ | |
346 static int sig_count=0; | |
347 ++sig_count; | |
348 if(sig_count==2) exit(1); | |
349 if(sig_count>2){ | |
350 // can't stop :( | |
351 kill(getpid(),SIGKILL); | |
352 } | |
1583 | 353 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_IntBySignal,x, |
1156 | 354 current_module?current_module:"unknown" |
355 ); | |
356 exit_player(NULL); | |
357 } | |
358 | |
2557 | 359 //extern void write_avi_header_1(FILE *f,int fcc,float fps,int width,int height); |
1439 | 360 |
459 | 361 #include "mixer.h" |
147 | 362 #include "cfg-mplayer.h" |
1 | 363 |
723 | 364 void parse_cfgfiles( void ) |
365 { | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
366 char *conffile; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
367 int conffile_fd; |
147 | 368 if (parse_config_file(conf, "/etc/mplayer.conf") < 0) |
369 exit(1); | |
178 | 370 if ((conffile = get_path("")) == NULL) { |
1583 | 371 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoHomeDir); |
147 | 372 } else { |
178 | 373 mkdir(conffile, 0777); |
374 free(conffile); | |
375 if ((conffile = get_path("config")) == NULL) { | |
1583 | 376 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_GetpathProblem); |
178 | 377 } else { |
378 if ((conffile_fd = open(conffile, O_CREAT | O_EXCL | O_WRONLY, 0666)) != -1) { | |
1582 | 379 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CreatingCfgFile, conffile); |
178 | 380 write(conffile_fd, default_config, strlen(default_config)); |
381 close(conffile_fd); | |
382 } | |
383 if (parse_config_file(conf, conffile) < 0) | |
384 exit(1); | |
385 free(conffile); | |
151 | 386 } |
1 | 387 } |
388 } | |
389 | |
1983 | 390 int main(int argc,char* argv[], char *envp[]){ |
723 | 391 |
1422 | 392 #ifdef USE_SUB |
1289 | 393 static subtitle* subtitles=NULL; |
1422 | 394 #endif |
1289 | 395 |
396 static demuxer_t *demuxer=NULL; | |
397 | |
398 static demux_stream_t *d_audio=NULL; | |
399 static demux_stream_t *d_video=NULL; | |
400 static demux_stream_t *d_dvdsub=NULL; | |
401 | |
402 static sh_audio_t *sh_audio=NULL; | |
403 static sh_video_t *sh_video=NULL; | |
404 | |
1629 | 405 // for multifile support: |
406 char **filenames=NULL; | |
407 int num_filenames=0; | |
408 int curr_filename=0; | |
409 | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
410 char* filename=NULL; //"MI2-Trailer.avi"; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
411 int file_format=DEMUXER_TYPE_UNKNOWN; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
412 // |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
413 int delay_corrected=1; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
414 char* title="MPlayer"; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
415 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
416 // movie info: |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
417 int out_fmt=0; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
418 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
419 int osd_visible=100; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
420 int osd_function=OSD_PLAY; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
421 int osd_last_pts=-303; |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
422 int osd_show_sub_delay = 0; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
423 |
1429 | 424 int v_bright=50; |
425 int v_cont=50; | |
426 int v_hue=50; | |
427 int v_saturation=50; | |
428 | |
2705 | 429 int vo_flags=0; |
430 | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
431 int rtc_fd=-1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
432 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
433 //float a_frame=0; // Audio |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
434 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
435 int i; |
1467 | 436 int use_stdin=0; //int f; // filedes |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
437 |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
438 int gui_no_filename=0; |
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
439 |
1567 | 440 mp_msg_init(MSGL_STATUS); |
441 | |
442 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s",banner_text); | |
723 | 443 |
2272 | 444 /* Test for cpu capabilities (and corresponding OS support) for optimizing */ |
445 #ifdef ARCH_X86 | |
446 GetCpuCaps(&gCpuCaps); | |
447 mp_msg(MSGT_CPLAYER,MSGL_INFO,"CPUflags: Type: %d MMX: %d MMX2: %d 3DNow: %d 3DNow2: %d SSE: %d SSE2: %d\n", | |
448 gCpuCaps.cpuType,gCpuCaps.hasMMX,gCpuCaps.hasMMX2, | |
449 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt, | |
450 gCpuCaps.hasSSE, gCpuCaps.hasSSE2); | |
451 #endif | |
452 | |
1709 | 453 if ( argv[0] ) |
454 if(!strcmp(argv[0],"gmplayer") || | |
455 (strrchr(argv[0],'/') && !strcmp(strrchr(argv[0],'/'),"/gmplayer") ) ) | |
456 use_gui=1; | |
1639 | 457 |
751 | 458 parse_cfgfiles(); |
1639 | 459 num_filenames=parse_command_line(conf, argc, argv, envp, &filenames); |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
460 |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
461 if(playlist_file!=NULL) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
462 { |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
463 FILE *playlist_f; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
464 char *playlist_linebuffer = (char*)malloc(256); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
465 char *playlist_line; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
466 if(!strcmp(playlist_file,"-")) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
467 { |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
468 playlist_f = fopen("/dev/stdin","r"); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
469 } |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
470 else |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
471 playlist_f = fopen(playlist_file,"r"); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
472 if(playlist_f != NULL) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
473 { |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
474 while(!feof(playlist_f)) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
475 { |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
476 memset(playlist_linebuffer,0,255); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
477 fgets(playlist_linebuffer,255,playlist_f); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
478 if(strlen(playlist_linebuffer)==0) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
479 break; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
480 playlist_linebuffer[strlen(playlist_linebuffer)-1] = 0; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
481 playlist_line = (char*)malloc(strlen(playlist_linebuffer)+1); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
482 memset(playlist_line,0,strlen(playlist_linebuffer)+1); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
483 strcpy(playlist_line,playlist_linebuffer); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
484 if (!(filenames = (char **) realloc(filenames, sizeof(*filenames) * (num_filenames + 2)))) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
485 exit(3); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
486 filenames[num_filenames++] = playlist_line; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
487 } |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
488 fclose(playlist_f); |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
489 } |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
490 } |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
491 |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
492 |
1639 | 493 if(num_filenames<0) exit(1); // error parsing cmdline |
723 | 494 |
1709 | 495 #ifndef HAVE_NEW_GUI |
496 if(use_gui){ | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
497 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoGui); |
1709 | 498 use_gui=0; |
499 } | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
500 #else |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
501 if(use_gui && !vo_init()){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
502 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_GuiNeedsX); |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
503 use_gui=0; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
504 } |
1709 | 505 #endif |
506 | |
1422 | 507 #ifndef USE_LIBVO2 |
723 | 508 if(video_driver && strcmp(video_driver,"help")==0){ |
509 printf("Available video output drivers:\n"); | |
510 i=0; | |
511 while (video_out_drivers[i]) { | |
512 const vo_info_t *info = video_out_drivers[i++]->get_info (); | |
513 printf("\t%s\t%s\n", info->short_name, info->name); | |
514 } | |
515 printf("\n"); | |
516 exit(0); | |
956
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
517 } |
1422 | 518 #endif |
956
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
519 if(audio_driver && strcmp(audio_driver,"help")==0){ |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
520 printf("Available audio output drivers:\n"); |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
521 i=0; |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
522 while (audio_out_drivers[i]) { |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
523 const ao_info_t *info = audio_out_drivers[i++]->info; |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
524 printf("\t%s\t%s\n", info->short_name, info->name); |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
525 } |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
526 printf("\n"); |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
527 exit(0); |
a6cecd9a1bad
'-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents:
955
diff
changeset
|
528 } |
1639 | 529 |
1983 | 530 // check codec.conf |
531 if(!parse_codec_cfg(get_path("codecs.conf"))){ | |
532 if(!parse_codec_cfg(DATADIR"/codecs.conf")){ | |
533 mp_msg(MSGT_CPLAYER,MSGL_HINT,MSGTR_CopyCodecsConf); | |
2116 | 534 // printf("Exit.\n"); |
535 // exit(0); // From unknown reason a hangup occurs here :(((((( | |
536 kill(getpid(),SIGTERM); | |
537 usleep(20000); | |
538 kill(getpid(),SIGKILL); | |
1983 | 539 } |
540 } | |
541 | |
542 if(audio_codec && strcmp(audio_codec,"help")==0){ | |
543 printf("Available audio codecs:\n"); | |
544 list_codecs(1); | |
545 printf("\n"); | |
546 exit(0); | |
547 } | |
548 if(video_codec && strcmp(video_codec,"help")==0){ | |
549 printf("Available video codecs:\n"); | |
550 list_codecs(0); | |
551 printf("\n"); | |
552 exit(0); | |
553 } | |
554 | |
555 | |
2824 | 556 if(!num_filenames && !vcd_track && !dvd_title && !tv_param_on){ |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
557 if(!use_gui){ |
1690 | 558 // no file/vcd/dvd -> show HELP: |
559 printf("%s",help_text); | |
560 exit(0); | |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
561 } else gui_no_filename=1; |
1690 | 562 } |
563 | |
564 // Many users forget to include command line in bugreports... | |
565 if(verbose){ | |
566 printf("CommandLine:"); | |
567 for(i=1;i<argc;i++)printf(" '%s'",argv[i]); | |
568 printf("\n"); | |
569 printf("num_filenames: %d\n",num_filenames); | |
570 } | |
571 | |
1639 | 572 mp_msg_init(verbose+MSGL_STATUS); |
1183 | 573 |
1639 | 574 //------ load global data first ------ |
955 | 575 |
442 | 576 |
212 | 577 // check font |
1422 | 578 #ifdef USE_OSD |
212 | 579 if(font_name){ |
337 | 580 vo_font=read_font_desc(font_name,font_factor,verbose>1); |
1582 | 581 if(!vo_font) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name); |
220 | 582 } else { |
583 // try default: | |
337 | 584 vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1); |
1353 | 585 if(!vo_font) |
586 vo_font=read_font_desc(DATADIR"/font/font.desc",font_factor,verbose>1); | |
212 | 587 } |
1422 | 588 #endif |
212 | 589 |
1651 | 590 #ifdef USE_SUB |
591 // check .sub | |
592 if(sub_name){ | |
593 int l=strlen(sub_name); | |
594 if ((l>4) && ((0==strcmp(&sub_name[l-4],".utf")) | |
595 ||(0==strcmp(&sub_name[l-4],".UTF")))) | |
596 sub_utf8=1; | |
597 subtitles=sub_read_file(sub_name); | |
2491 | 598 if(!subtitles || sub_num == 0) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,sub_name); |
1651 | 599 } |
600 #endif | |
601 | |
1709 | 602 // It's time to init the GUI code: (and fork() the GTK process) |
603 #ifdef HAVE_NEW_GUI | |
604 if(use_gui){ | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
605 appInit( argc,argv,envp,(void*)mDisplay ); |
1856 | 606 inited_flags|=INITED_GUI; |
1803 | 607 mplShMem->Playing= (gui_no_filename) ? 0 : 1; |
1709 | 608 } |
609 #endif | |
1639 | 610 |
611 #ifdef HAVE_LIRC | |
612 lirc_mp_setup(); | |
1856 | 613 inited_flags|=INITED_LIRC; |
1639 | 614 #endif |
615 | |
3015 | 616 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
617 if ((rtc_fd = open("/dev/rtc", O_RDONLY)) < 0) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
618 perror ("Linux RTC init: open"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
619 else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
620 unsigned long irqp; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
621 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
622 /* if (ioctl(rtc_fd, RTC_IRQP_SET, _) < 0) { */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
623 if (ioctl(rtc_fd, RTC_IRQP_READ, &irqp) < 0) { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
624 perror ("Linux RTC init: ioctl (rtc_irqp_read)"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
625 close (rtc_fd); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
626 rtc_fd = -1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
627 } else if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
628 /* variable only by the root */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
629 perror ("Linux RTC init: ioctl (rtc_pie_on)"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
630 close (rtc_fd); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
631 rtc_fd = -1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
632 } else |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
633 printf("Using Linux's hardware RTC timing (%ldHz)\n", irqp); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
634 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
635 if(rtc_fd<0) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
636 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
637 printf("Using %s timing\n",softsleep?"software":"usleep()"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
638 |
1639 | 639 #ifdef USE_TERMCAP |
1729 | 640 if ( !use_gui ) load_termcap(NULL); // load key-codes |
1639 | 641 #endif |
642 | |
1816 | 643 // ========== Init keyboard FIFO (connection to libvo) ============ |
644 make_pipe(&keyb_fifo_get,&keyb_fifo_put); | |
1694 | 645 |
1639 | 646 //========= Catch terminate signals: ================ |
647 // terminate requests: | |
648 signal(SIGTERM,exit_sighandler); // kill | |
649 signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed | |
650 | |
1729 | 651 signal(SIGINT,exit_sighandler); // Interrupt from keyboard |
1639 | 652 |
653 signal(SIGQUIT,exit_sighandler); // Quit from keyboard | |
654 // fatal errors: | |
655 signal(SIGBUS,exit_sighandler); // bus error | |
656 signal(SIGSEGV,exit_sighandler); // segfault | |
657 signal(SIGILL,exit_sighandler); // illegal instruction | |
658 signal(SIGFPE,exit_sighandler); // floating point exc. | |
659 signal(SIGABRT,exit_sighandler); // abort() | |
660 | |
661 // ******************* Now, let's see the per-file stuff ******************** | |
662 | |
663 curr_filename=0; | |
664 play_next_file: | |
665 filename=(num_filenames>0)?filenames[curr_filename]:NULL; | |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
666 |
1745 | 667 #ifdef HAVE_NEW_GUI |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
668 if ( use_gui ) { |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
669 if(filename && !mplShMem->FilenameChanged) strcpy( mplShMem->Filename,filename ); |
1803 | 670 // mplShMem->Playing= (gui_no_filename) ? 0 : 1; |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
671 while(mplShMem->Playing!=1){ |
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
672 usleep(20000); |
1802 | 673 EventHandling(); |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
674 } |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
675 if(mplShMem->FilenameChanged){ |
1790 | 676 filename=mplShMem->Filename; |
677 } | |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
678 } |
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
679 #endif |
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
680 |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
681 if(filename) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Playing, filename); |
1650
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
682 |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
683 #ifdef USE_SUB |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
684 // check .sub |
1651 | 685 if(!sub_name){ |
1650
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
686 if(sub_auto && filename) { // auto load sub file ... |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
687 subtitles=sub_read_file( sub_filename( get_path("sub/"), filename ) ); |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
688 } |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
689 if(!subtitles) subtitles=sub_read_file(get_path("default.sub")); // try default |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
690 } |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
691 #endif |
7502b16bce63
make automatic subfile detection working with many files
atlka
parents:
1641
diff
changeset
|
692 |
1762 | 693 if(subtitles && stream_dump_type==3) list_sub_file(subtitles); |
2178 | 694 if(subtitles && stream_dump_type==4) dump_mpsub(subtitles); |
1762 | 695 |
1654 | 696 stream=NULL; |
697 demuxer=NULL; | |
698 d_audio=NULL; | |
699 d_video=NULL; | |
700 sh_audio=NULL; | |
701 sh_video=NULL; | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
702 |
1639 | 703 #ifdef USE_LIBVO2 |
704 current_module="vo2_new"; | |
705 video_out=vo2_new(video_driver); | |
706 current_module=NULL; | |
707 #else | |
708 // check video_out driver name: | |
709 if (video_driver) | |
710 if ((i = strcspn(video_driver, ":")) > 0) | |
711 { | |
712 size_t i2 = strlen(video_driver); | |
713 | |
714 if (video_driver[i] == ':') | |
715 { | |
716 vo_subdevice = malloc(i2-i); | |
717 if (vo_subdevice != NULL) | |
718 strncpy(vo_subdevice, (char *)(video_driver+i+1), i2-i); | |
719 video_driver[i] = '\0'; | |
720 } | |
721 // printf("video_driver: %s, subdevice: %s\n", video_driver, vo_subdevice); | |
722 } | |
723 if(!video_driver) | |
724 video_out=video_out_drivers[0]; | |
725 else | |
726 for (i=0; video_out_drivers[i] != NULL; i++){ | |
727 const vo_info_t *info = video_out_drivers[i]->get_info (); | |
728 if(strcmp(info->short_name,video_driver) == 0){ | |
729 video_out = video_out_drivers[i];break; | |
730 } | |
731 } | |
732 #endif | |
733 if(!video_out){ | |
734 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_InvalidVOdriver,video_driver?video_driver:"?"); | |
735 exit_player(MSGTR_Exit_error); | |
736 } | |
737 | |
738 // check audio_out driver name: | |
739 if (audio_driver) | |
740 if ((i = strcspn(audio_driver, ":")) > 0) | |
741 { | |
742 size_t i2 = strlen(audio_driver); | |
743 | |
744 if (audio_driver[i] == ':') | |
745 { | |
746 ao_subdevice = malloc(i2-i); | |
747 if (ao_subdevice != NULL) | |
748 strncpy(ao_subdevice, (char *)(audio_driver+i+1), i2-i); | |
749 audio_driver[i] = '\0'; | |
750 } | |
751 // printf("audio_driver: %s, subdevice: %s\n", audio_driver, ao_subdevice); | |
752 } | |
753 if(!audio_driver) | |
754 audio_out=audio_out_drivers[0]; | |
755 else | |
756 for (i=0; audio_out_drivers[i] != NULL; i++){ | |
757 const ao_info_t *info = audio_out_drivers[i]->info; | |
758 if(strcmp(info->short_name,audio_driver) == 0){ | |
759 audio_out = audio_out_drivers[i];break; | |
760 } | |
761 } | |
762 if (!audio_out){ | |
763 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_InvalidAOdriver,audio_driver); | |
764 exit_player(MSGTR_Exit_error); | |
765 } | |
3107 | 766 /* Initailize audio plugin interface if used */ |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3180
diff
changeset
|
767 if(ao_plugin_cfg.plugin_list){ |
3107 | 768 for (i=0; audio_out_drivers[i] != NULL; i++){ |
769 const ao_info_t *info = audio_out_drivers[i]->info; | |
770 if(strcmp(info->short_name,"plugin") == 0){ | |
771 audio_out_drivers[i]->control(AOCONTROL_SET_PLUGIN_DRIVER,(int)audio_out); | |
772 audio_out = audio_out_drivers[i]; | |
773 break; | |
774 } | |
775 } | |
776 } | |
777 | |
1639 | 778 current_module="open_stream"; |
1467 | 779 stream=open_stream(filename,vcd_track,&file_format); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
780 if(!stream) goto goto_next_file;// exit_player(MSGTR_Exit_error); // error... |
2321 | 781 inited_flags|=INITED_STREAM; |
1497
ad4d402b3d29
seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents:
1496
diff
changeset
|
782 stream->start_pos+=seek_to_byte; |
598 | 783 |
3257 | 784 if(stream_dump_type==5){ |
785 unsigned char buf[4096]; | |
786 int len; | |
787 FILE *f; | |
788 current_module="dump"; | |
789 stream_reset(stream); | |
790 stream_seek(stream,stream->start_pos); | |
791 f=fopen(stream_dump_name,"wb"); | |
792 if(!f){ | |
793 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); | |
794 exit_player(MSGTR_Exit_error); | |
795 } | |
796 while(!stream->eof){ | |
797 len=stream_read(stream,buf,4096); | |
798 if(len>0) fwrite(buf,len,1,f); | |
799 } | |
800 fclose(f); | |
801 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); | |
802 exit_player(MSGTR_Exit_eof); | |
803 } | |
804 | |
805 | |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
806 #ifdef USE_DVDREAD |
3166 | 807 current_module="spudec"; |
808 vo_spudec=spudec_new(stream->priv); | |
809 if (vo_spudec!=NULL) | |
810 inited_flags|=INITED_SPUDEC; | |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
811 #endif |
3166 | 812 current_module=NULL; |
813 | |
2332 | 814 if(stream_cache_size) stream_enable_cache(stream,stream_cache_size*1024); |
2321 | 815 |
1639 | 816 use_stdin=filename && (!strcmp(filename,"-")); |
817 | |
492 | 818 #ifdef HAVE_LIBCSS |
1639 | 819 current_module="libcss"; |
546 | 820 if (dvdimportkey) { |
821 if (dvd_import_key(dvdimportkey)) { | |
1582 | 822 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_ErrorDVDkey); |
1639 | 823 exit_player(MSGTR_Exit_error); |
546 | 824 } |
1582 | 825 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CmdlineDVDkey); |
546 | 826 } |
1018
e5fc7ec51fa3
-dvd is renamed to -dvdauth, variable dvd_device is renamed to dvd_auth_device. These changes are needed for future DVD playback developmenting
lgb
parents:
1015
diff
changeset
|
827 if (dvd_auth_device) { |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1039
diff
changeset
|
828 // if (dvd_auth(dvd_auth_device,f)) { |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1039
diff
changeset
|
829 if (dvd_auth(dvd_auth_device,filename)) { |
1809 | 830 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"Error in DVD auth...\n"); |
1639 | 831 exit_player(MSGTR_Exit_error); |
723 | 832 } |
1582 | 833 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_DVDauthOk); |
492 | 834 } |
835 #endif | |
1 | 836 |
837 //============ Open & Sync stream and detect file format =============== | |
838 | |
3257 | 839 |
442 | 840 if(!has_audio) audio_id=-2; // do NOT read audio packets... |
1 | 841 |
1639 | 842 current_module="demux_open"; |
843 | |
1496 | 844 demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
845 if(!demuxer) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
846 |
1660 | 847 //file_format=demuxer->file_format; |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
848 |
1 | 849 d_audio=demuxer->audio; |
850 d_video=demuxer->video; | |
554 | 851 d_dvdsub=demuxer->sub; |
1 | 852 |
792 | 853 // DUMP STREAMS: |
854 if(stream_dump_type){ | |
855 FILE *f; | |
856 demux_stream_t *ds=NULL; | |
1639 | 857 current_module="dump"; |
792 | 858 // select stream to dump |
859 switch(stream_dump_type){ | |
860 case 1: ds=d_audio;break; | |
861 case 2: ds=d_video;break; | |
2178 | 862 case 3: |
863 case 4: ds=d_dvdsub;break; | |
792 | 864 } |
865 if(!ds){ | |
1582 | 866 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_DumpSelectedSteramMissing); |
1639 | 867 exit_player(MSGTR_Exit_error); |
792 | 868 } |
869 // disable other streams: | |
870 if(d_audio && d_audio!=ds) {ds_free_packs(d_audio); d_audio->id=-2; } | |
871 if(d_video && d_video!=ds) {ds_free_packs(d_video); d_video->id=-2; } | |
872 if(d_dvdsub && d_dvdsub!=ds) {ds_free_packs(d_dvdsub); d_dvdsub->id=-2; } | |
873 // let's dump it! | |
3257 | 874 f=fopen(stream_dump_name,"wb"); |
1639 | 875 if(!f){ |
876 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); | |
877 exit_player(MSGTR_Exit_error); | |
878 } | |
792 | 879 while(!ds->eof){ |
880 unsigned char* start; | |
881 int in_size=ds_get_packet(ds,&start); | |
2102 | 882 if( (demuxer->file_format==DEMUXER_TYPE_AVI || demuxer->file_format==DEMUXER_TYPE_ASF || demuxer->file_format==DEMUXER_TYPE_MOV) |
1246
7f69c1dd1e91
-dumpvideo stores frame size for avi/asf video frames (for ffmpeg testing)
arpi
parents:
1237
diff
changeset
|
883 && stream_dump_type==2) fwrite(&in_size,1,4,f); |
792 | 884 if(in_size>0) fwrite(start,in_size,1,f); |
885 } | |
886 fclose(f); | |
1582 | 887 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); |
1639 | 888 exit_player(MSGTR_Exit_eof); |
792 | 889 } |
890 | |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
891 sh_audio=d_audio->sh; |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
892 sh_video=d_video->sh; |
792 | 893 |
3054 | 894 #ifdef HAVE_NEW_GUI |
895 #ifdef USE_DVDREAD | |
896 if ( use_gui && stream->type == STREAMTYPE_DVD ) | |
897 { | |
898 dvd_priv_t * dvdp = stream->priv; | |
899 mplShMem->DVD.titles=dvdp->vmg_file->tt_srpt->nr_of_srpts; | |
900 mplShMem->DVD.chapters=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
901 mplShMem->DVD.angles=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
902 mplShMem->DVD.nr_of_audio_channels=dvdp->nr_of_channels; | |
903 memcpy( mplShMem->DVD.audio_streams,dvdp->audio_streams,sizeof( dvdp->audio_streams ) ); | |
904 mplShMem->DVD.nr_of_subtitles=dvdp->nr_of_subtitles; | |
905 memcpy( mplShMem->DVD.subtitles,dvdp->subtitles,sizeof( dvdp->subtitles ) ); | |
906 mplShMem->DVD.current_title=dvd_title + 1; | |
907 mplShMem->DVD.current_chapter=dvd_chapter + 1; | |
908 mplShMem->Track=dvd_title + 1; | |
909 } | |
910 #endif | |
911 #endif | |
912 | |
1639 | 913 current_module="video_read_properties"; |
914 | |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
915 if(sh_video){ |
1 | 916 |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
917 if(!video_read_properties(sh_video)) goto goto_next_file; // exit_player(MSGTR_Exit_error); // couldn't read header? |
1 | 918 |
1567 | 919 mp_msg(MSGT_CPLAYER,MSGL_INFO,"[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n", |
1660 | 920 demuxer->file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h, |
398 | 921 sh_video->fps,sh_video->frametime |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
922 ); |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
923 |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
924 if(!sh_video->fps && !force_fps){ |
1582 | 925 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_FPSnotspecified); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
926 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
927 } |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
928 |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
929 } |
398 | 930 |
1 | 931 fflush(stdout); |
932 | |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
933 if(!sh_video){ |
1582 | 934 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_NoVideoStream); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
935 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
936 } |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
937 |
3050 | 938 /* display clip info */ |
939 demux_info_print(demuxer); | |
940 | |
303 | 941 //================== Init AUDIO (codec) ========================== |
1639 | 942 |
943 current_module="init_audio_codec"; | |
944 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
945 if(sh_audio){ |
303 | 946 // Go through the codec.conf and find the best codec... |
626 | 947 sh_audio->codec=NULL; |
1582 | 948 if(audio_family!=-1) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceAudioFmt,audio_family); |
626 | 949 while(1){ |
950 sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1); | |
951 if(!sh_audio->codec){ | |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
952 if(audio_family!=-1) { |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
953 sh_audio->codec=NULL; /* re-search */ |
1582 | 954 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindAfmtFallback); |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
955 audio_family=-1; |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
956 continue; |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
957 } |
1582 | 958 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format); |
959 mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf")); | |
1792 | 960 sh_audio=d_audio->sh=NULL; |
626 | 961 break; |
962 } | |
1286
543a94b241a2
Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents:
1285
diff
changeset
|
963 if(audio_codec && strcmp(sh_audio->codec->name,audio_codec)) continue; |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
964 else if(audio_family!=-1 && sh_audio->codec->driver!=audio_family) continue; |
1567 | 965 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s audio codec: [%s] drv:%d (%s)\n",audio_codec?"Forcing":"Detected",sh_audio->codec->name,sh_audio->codec->driver,sh_audio->codec->info); |
626 | 966 break; |
303 | 967 } |
1 | 968 } |
969 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
970 if(sh_audio){ |
1567 | 971 mp_msg(MSGT_CPLAYER,MSGL_V,"Initializing audio codec...\n"); |
442 | 972 if(!init_audio(sh_audio)){ |
1582 | 973 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CouldntInitAudioCodec); |
1792 | 974 sh_audio=d_audio->sh=NULL; |
1889 | 975 #ifdef HAVE_NEW_GUI |
976 if ( use_gui ) mplShMem->AudioType=0; | |
977 #endif | |
303 | 978 } else { |
1567 | 979 mp_msg(MSGT_CPLAYER,MSGL_INFO,"AUDIO: srate=%d chans=%d bps=%d sfmt=0x%X ratio: %d->%d\n",sh_audio->samplerate,sh_audio->channels,sh_audio->samplesize, |
758 | 980 sh_audio->sample_format,sh_audio->i_bps,sh_audio->o_bps); |
1889 | 981 #ifdef HAVE_NEW_GUI |
982 if ( use_gui ) mplShMem->AudioType=sh_audio->channels; | |
983 #endif | |
303 | 984 } |
175 | 985 } |
986 | |
303 | 987 //================== Init VIDEO (codec & libvo) ========================== |
988 | |
1639 | 989 current_module="init_video_codec"; |
990 | |
303 | 991 // Go through the codec.conf and find the best codec... |
626 | 992 sh_video->codec=NULL; |
1582 | 993 if(video_family!=-1) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceVideoFmt,video_family); |
626 | 994 while(1){ |
995 sh_video->codec=find_codec(sh_video->format, | |
996 sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,sh_video->codec,0); | |
997 if(!sh_video->codec){ | |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
998 if(video_family!=-1) { |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
999 sh_video->codec=NULL; /* re-search */ |
1582 | 1000 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_CantFindVfmtFallback); |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
1001 video_family=-1; |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
1002 continue; |
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
1003 } |
1582 | 1004 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format); |
1005 mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf")); | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1006 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
626 | 1007 } |
1286
543a94b241a2
Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents:
1285
diff
changeset
|
1008 // is next line needed anymore? - atmos :: |
1410
eda16e490ae7
using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents:
1406
diff
changeset
|
1009 if(!allow_dshow && sh_video->codec->driver==VFM_DSHOW) continue; // skip DShow |
1286
543a94b241a2
Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents:
1285
diff
changeset
|
1010 else if(video_codec && strcmp(sh_video->codec->name,video_codec)) continue; |
1299
fa50e6bc6091
As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents:
1296
diff
changeset
|
1011 else if(video_family!=-1 && sh_video->codec->driver!=video_family) continue; |
626 | 1012 break; |
303 | 1013 } |
1014 | |
1567 | 1015 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s video codec: [%s] drv:%d (%s)\n",video_codec?"Forcing":"Detected",sh_video->codec->name,sh_video->codec->driver,sh_video->codec->info); |
303 | 1016 |
1017 for(i=0;i<CODECS_MAX_OUTFMT;i++){ | |
2705 | 1018 // int ret; |
303 | 1019 out_fmt=sh_video->codec->outfmt[i]; |
534
2a45d5adcc88
do not query vo drivers for format 0xFFFFFFFF (thanx to szabi)
arpi_esp
parents:
510
diff
changeset
|
1020 if(out_fmt==0xFFFFFFFF) continue; |
1422 | 1021 #ifdef USE_LIBVO2 |
2705 | 1022 vo_flags=vo2_query_format(video_out); |
1422 | 1023 #else |
2705 | 1024 vo_flags=video_out->query_format(out_fmt); |
1422 | 1025 #endif |
2705 | 1026 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: query(%s) returned 0x%X\n",vo_format_name(out_fmt),vo_flags); |
1027 if(vo_flags) break; | |
303 | 1028 } |
1029 if(i>=CODECS_MAX_OUTFMT){ | |
1582 | 1030 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_VOincompCodec); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1031 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
303 | 1032 } |
1033 sh_video->outfmtidx=i; | |
1034 | |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1035 if(flip==-1){ |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1036 // autodetect flipping |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1037 flip=0; |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1038 if(sh_video->codec->outflags[i]&CODECS_FLAG_FLIP) |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1039 if(!(sh_video->codec->outflags[i]&CODECS_FLAG_NOFLIP)) |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1040 flip=1; |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1041 } |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1042 |
1567 | 1043 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug1: out_fmt=%s\n",vo_format_name(out_fmt)); |
487 | 1044 |
1291 | 1045 if(!init_video(sh_video)){ |
1582 | 1046 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CouldntInitVideoCodec); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1047 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1 | 1048 } |
1049 | |
1439 | 1050 if(auto_quality>0){ |
1051 // Auto quality option enabled | |
1052 output_quality=get_video_quality_max(sh_video); | |
1053 if(auto_quality>output_quality) auto_quality=output_quality; | |
1054 else output_quality=auto_quality; | |
1567 | 1055 mp_msg(MSGT_CPLAYER,MSGL_V,"AutoQ: setting quality to %d\n",output_quality); |
1439 | 1056 set_video_quality(sh_video,output_quality); |
1057 } | |
1058 | |
398 | 1059 // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============ |
1 | 1060 |
1639 | 1061 current_module="init_libvo"; |
1062 | |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1063 #if 0 /* was X11_FULLSCREEN hack -> moved to libvo/vo_xv.c where it belongs ::atmos */ |
1 | 1064 if(fullscreen){ |
1065 if(vo_init()){ | |
1066 //if(verbose) printf("X11 running at %dx%d depth: %d\n",vo_screenwidth,vo_screenheight,vo_depthonscreen); | |
1067 } | |
1068 if(!screen_size_xy) screen_size_xy=vo_screenwidth; // scale with asp.ratio | |
1069 } | |
1070 #endif | |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1071 // Set default VGA 1:1 aspect as fallback ::atmos |
3139 | 1072 if(movie_aspect>-1.0) sh_video->aspect = movie_aspect; // cmdline overrides autodetect |
2042 | 1073 // if(!sh_video->aspect) sh_video->aspect=1.0; |
1 | 1074 |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1075 if(screen_size_xy||screen_size_x||screen_size_y){ |
1 | 1076 if(screen_size_xy>0){ |
1077 if(screen_size_xy<=8){ | |
398 | 1078 screen_size_x=screen_size_xy*sh_video->disp_w; |
1079 screen_size_y=screen_size_xy*sh_video->disp_h; | |
1 | 1080 } else { |
1081 screen_size_x=screen_size_xy; | |
398 | 1082 screen_size_y=screen_size_xy*sh_video->disp_h/sh_video->disp_w; |
1 | 1083 } |
337 | 1084 } else if(!vidmode){ |
1085 if(!screen_size_x) screen_size_x=SCREEN_SIZE_X; | |
1086 if(!screen_size_y) screen_size_y=SCREEN_SIZE_Y; | |
398 | 1087 if(screen_size_x<=8) screen_size_x*=sh_video->disp_w; |
1088 if(screen_size_y<=8) screen_size_y*=sh_video->disp_h; | |
1 | 1089 } |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1090 } else { |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1091 // check source format aspect, calculate prescale ::atmos |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1092 screen_size_x=sh_video->disp_w; |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1093 screen_size_y=sh_video->disp_h; |
2042 | 1094 if(sh_video->aspect>0.01){ |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1095 mp_msg(MSGT_CPLAYER,MSGL_INFO,"Movie-Aspect is %.2f:1 - prescaling to correct movie aspect.\n", |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1096 sh_video->aspect); |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1097 screen_size_x=(int)((float)sh_video->disp_h*sh_video->aspect); |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1098 screen_size_x+=screen_size_x%2; // round |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1099 if(screen_size_x<sh_video->disp_w){ |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1100 screen_size_x=sh_video->disp_w; |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1101 screen_size_y=(int)((float)sh_video->disp_w*(1.0/sh_video->aspect)); |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1102 screen_size_y+=screen_size_y%2; // round |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1103 } |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1104 } else { |
2042 | 1105 mp_msg(MSGT_CPLAYER,MSGL_INFO,"Movie-Aspect is undefined - no prescaling applied.\n"); |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1106 } |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1107 } |
208
ae0f909ccc7c
Adds code to deal with vidmode selection. -- mgraffam
mgraffam
parents:
190
diff
changeset
|
1108 |
1422 | 1109 #ifndef USE_LIBVO2 |
340 | 1110 { const vo_info_t *info = video_out->get_info(); |
1567 | 1111 mp_msg(MSGT_CPLAYER,MSGL_INFO,"VO: [%s] %dx%d => %dx%d %s %s%s%s%s\n",info->short_name, |
398 | 1112 sh_video->disp_w,sh_video->disp_h, |
340 | 1113 screen_size_x,screen_size_y, |
1183 | 1114 vo_format_name(out_fmt), |
340 | 1115 fullscreen?"fs ":"", |
1116 vidmode?"vm ":"", | |
766 | 1117 softzoom?"zoom ":"", |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1118 (flip==1)?"flip ":"" |
766 | 1119 // fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3) |
340 | 1120 ); |
1567 | 1121 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Description: %s\n",info->name); |
1122 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Author: %s\n", info->author); | |
1237 | 1123 if(strlen(info->comment) > 0) |
1567 | 1124 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Comment: %s\n", info->comment); |
340 | 1125 } |
1422 | 1126 #endif |
340 | 1127 |
1753 | 1128 #ifdef HAVE_NEW_GUI |
1129 if ( use_gui ) | |
1130 { | |
1952 | 1131 mplResizeToMovieSize( sh_video->disp_w,sh_video->disp_h ); |
1132 moviewidth=screen_size_x=sh_video->disp_w; | |
1133 movieheight=screen_size_y=sh_video->disp_h; | |
2447 | 1134 mplShMem->StreamType=stream->type; |
2854 | 1135 mplSetFileName( filename ); |
1753 | 1136 } |
1137 #endif | |
1138 | |
1567 | 1139 mp_msg(MSGT_CPLAYER,MSGL_V,"video_out->init(%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", |
398 | 1140 sh_video->disp_w,sh_video->disp_h, |
1 | 1141 screen_size_x,screen_size_y, |
766 | 1142 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), |
337 | 1143 title,out_fmt); |
1 | 1144 |
1422 | 1145 #ifdef USE_LIBVO2 |
1146 if(!vo2_start(video_out, | |
1147 sh_video->disp_w,sh_video->disp_h,out_fmt,0, | |
1148 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3) )){ | |
1149 #else | |
398 | 1150 if(video_out->init(sh_video->disp_w,sh_video->disp_h, |
1 | 1151 screen_size_x,screen_size_y, |
766 | 1152 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), |
337 | 1153 title,out_fmt)){ |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1154 #endif |
1582 | 1155 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CannotInitVO); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1156 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1 | 1157 } |
1856 | 1158 inited_flags|=INITED_VO; |
1567 | 1159 mp_msg(MSGT_CPLAYER,MSGL_V,"INFO: Video OUT driver init OK!\n"); |
1 | 1160 |
1161 fflush(stdout); | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
1162 |
1 | 1163 //================== MAIN: ========================== |
1164 { | |
746 | 1165 |
1420 | 1166 //int frame_corr_num=0; // |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1167 //float v_frame=0; // Video |
1 | 1168 float time_frame=0; // Timer |
1169 int eof=0; | |
1170 int force_redraw=0; | |
1400 | 1171 //float num_frames=0; // number of frames played |
1382 | 1172 int grab_frames=0; |
212 | 1173 char osd_text_buffer[64]; |
715 | 1174 int drop_frame=0; |
1175 int drop_frame_cnt=0; | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1176 int too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1177 int too_fast_frame_cnt=0; |
1439 | 1178 // for auto-quality: |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1179 float AV_delay=0; // average of A-V timestamp differences |
1439 | 1180 double cvideo_base_vtime; |
1181 double cvideo_base_vframe; | |
1182 double vdecode_time; | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1183 unsigned int lastframeout_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1184 float time_frame_corr_avg=0; |
1 | 1185 |
1186 //================ SETUP AUDIO ========================== | |
1187 current_module="setup_audio"; | |
1188 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1189 if(sh_audio){ |
1237 | 1190 |
1191 const ao_info_t *info=audio_out->info; | |
1567 | 1192 mp_msg(MSGT_CPLAYER,MSGL_INFO,"AO: [%s] %iHz %s %s\n", |
1237 | 1193 info->short_name, |
1194 force_srate?force_srate:sh_audio->samplerate, | |
1195 sh_audio->channels>1?"Stereo":"Mono", | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1196 audio_out_format_name(sh_audio->sample_format) |
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1197 ); |
1567 | 1198 mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Description: %s\nAO: Author: %s\n", |
1237 | 1199 info->name, |
1200 info->author | |
1201 ); | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1202 if(strlen(info->comment) > 0) |
1567 | 1203 mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Comment: %s\n", info->comment); |
969 | 1204 if(!audio_out->init(force_srate?force_srate:sh_audio->samplerate, |
1205 sh_audio->channels,sh_audio->sample_format,0)){ | |
1582 | 1206 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotInitAO); |
1792 | 1207 sh_audio=d_audio->sh=NULL; |
1856 | 1208 } else { |
1209 inited_flags|=INITED_AO; | |
1 | 1210 } |
1211 | |
955 | 1212 // printf("Audio buffer size: %d bytes, delay: %5.3fs\n",audio_buffer_size,audio_buffer_delay); |
746 | 1213 |
758 | 1214 // fixup audio buffer size: |
782 | 1215 // if(outburst<MAX_OUTBURST){ |
1216 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+outburst; | |
1217 // printf("Audio out buffer size reduced to %d bytes\n",sh_audio->a_buffer_size); | |
1218 // } | |
758 | 1219 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1220 // sh_audio->timer=-(audio_buffer_delay); |
1 | 1221 } |
1222 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1223 sh_video->timer=0; |
2000 | 1224 if(sh_audio) sh_audio->timer=-audio_delay; |
1 | 1225 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1226 if(!sh_audio){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
1227 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_NoSound); |
1567 | 1228 if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused audio chunks\n",d_audio->packs); |
1 | 1229 ds_free_packs(d_audio); // free buffered chunks |
1230 d_audio->id=-2; // do not read audio chunks | |
1856 | 1231 if(audio_out) uninit_player(INITED_AO); // close device |
1 | 1232 } |
1233 | |
1234 current_module=NULL; | |
1235 | |
1660 | 1236 if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! |
398 | 1237 if(force_fps){ |
1238 sh_video->fps=force_fps; | |
1239 sh_video->frametime=1.0f/sh_video->fps; | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
1240 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_FPSforced,sh_video->fps,sh_video->frametime); |
398 | 1241 } |
1 | 1242 |
1639 | 1243 //==================== START PLAYING ======================= |
1244 | |
1582 | 1245 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying);fflush(stdout); |
1 | 1246 |
1856 | 1247 if(!use_stdin){ |
1248 getch2_enable(); // prepare stdin for hotkeys... | |
1249 inited_flags|=INITED_GETCH2; | |
1250 } | |
1639 | 1251 |
1 | 1252 InitTimer(); |
1253 | |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1254 total_time_usage_start=GetTimer(); |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1255 |
1 | 1256 while(!eof){ |
2567 | 1257 // unsigned int aq_total_time=GetTimer(); |
1439 | 1258 float aq_sleep_time=0; |
1 | 1259 |
1125 | 1260 if(play_n_frames>=0){ |
1261 --play_n_frames; | |
1582 | 1262 if(play_n_frames<0) exit_player(MSGTR_Exit_frames); |
1125 | 1263 } |
1264 | |
2705 | 1265 vo_pts=sh_video->timer*90000.0; |
3201 | 1266 vo_fps=sh_video->fps; |
2705 | 1267 |
1 | 1268 /*========================== PLAY AUDIO ============================*/ |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1269 while(sh_audio){ |
746 | 1270 unsigned int t; |
2705 | 1271 int playsize; |
1272 | |
3097 | 1273 ao_data.pts=sh_audio->timer*90000.0; |
2705 | 1274 playsize=audio_out->get_space(); |
746 | 1275 |
955 | 1276 if(!playsize) break; // buffer is full, do not block here!!! |
746 | 1277 |
1278 if(playsize>MAX_OUTBURST) playsize=MAX_OUTBURST; // we shouldn't exceed it! | |
1279 //if(playsize>outburst) playsize=outburst; | |
291 | 1280 |
1281 // Update buffer if needed | |
1639 | 1282 current_module="decode_audio"; // Enter AUDIO decoder module |
746 | 1283 t=GetTimer(); |
1284 while(sh_audio->a_buffer_len<playsize && !d_audio->eof){ | |
1285 int ret=decode_audio(sh_audio,&sh_audio->a_buffer[sh_audio->a_buffer_len], | |
1286 playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len); | |
296 | 1287 if(ret>0) sh_audio->a_buffer_len+=ret; else break; |
1 | 1288 } |
1289 current_module=NULL; // Leave AUDIO decoder module | |
291 | 1290 t=GetTimer()-t;audio_time_usage+=t*0.000001; |
746 | 1291 |
1292 if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len; | |
1293 | |
955 | 1294 playsize=audio_out->play(sh_audio->a_buffer,playsize,0); |
1 | 1295 |
955 | 1296 if(playsize>0){ |
746 | 1297 sh_audio->a_buffer_len-=playsize; |
1298 memcpy(sh_audio->a_buffer,&sh_audio->a_buffer[playsize],sh_audio->a_buffer_len); | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1299 sh_audio->timer+=playsize/(float)(sh_audio->o_bps); |
1 | 1300 } |
1301 | |
1302 break; | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1303 } // if(sh_audio) |
1 | 1304 |
1305 /*========================== UPDATE TIMERS ============================*/ | |
746 | 1306 #if 0 |
1 | 1307 if(alsa){ |
1308 // Use system timer for sync, not audio card/driver | |
1309 time_frame-=GetRelativeTime(); | |
1310 if(time_frame<-0.1 || time_frame>0.1){ | |
1311 time_frame=0; | |
1312 } else { | |
398 | 1313 while(time_frame>0.022){ |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1314 usec_sleep(time_frame-0.022); |
398 | 1315 time_frame-=GetRelativeTime(); |
1316 } | |
103 | 1317 while(time_frame>0.007){ |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1318 usec_sleep(1000); // sleeps 1 clock tick (10ms)! |
103 | 1319 time_frame-=GetRelativeTime(); |
1320 } | |
398 | 1321 } |
1 | 1322 } |
746 | 1323 #endif |
1 | 1324 |
1325 /*========================== PLAY VIDEO ============================*/ | |
1326 | |
1439 | 1327 cvideo_base_vframe=sh_video->timer; |
1328 cvideo_base_vtime=video_time_usage; | |
1329 | |
1 | 1330 if(1) |
746 | 1331 while(1){ |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
1332 |
2567 | 1333 float frame_time=0; |
1291 | 1334 int blit_frame=0; |
715 | 1335 |
2567 | 1336 //-------------------- Decode a frame: ----------------------- |
1337 vdecode_time=video_time_usage; | |
1338 { unsigned char* start=NULL; | |
1339 int in_size; | |
1340 // get it! | |
1341 current_module="video_read_frame"; | |
1342 in_size=video_read_frame(sh_video,&frame_time,&start,force_fps); | |
1343 if(in_size<0){ eof=1; break; } | |
1344 if(in_size>max_framesize) max_framesize=in_size; // stats | |
1345 // decode: | |
1346 current_module="decode_video"; | |
1347 // printf("Decode! %p %d \n",start,in_size); | |
1348 blit_frame=decode_video(video_out,sh_video,start,in_size,drop_frame); | |
1291 | 1349 } |
2567 | 1350 vdecode_time=video_time_usage-vdecode_time; |
1351 //------------------------ frame decoded. -------------------- | |
1352 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1353 //------------------------ add OSD to frame contents --------- |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1354 #ifndef USE_LIBVO2 |
1768 | 1355 current_module="draw_osd"; |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1356 video_out->draw_osd(); |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1357 #endif |
1 | 1358 |
1768 | 1359 current_module="av_sync"; |
1360 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1361 sh_video->timer+=frame_time; |
746 | 1362 time_frame+=frame_time; // for nosound |
1363 | |
1567 | 1364 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time); |
780 | 1365 |
798 | 1366 if(drop_frame){ |
746 | 1367 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1368 if(sh_audio && !d_audio->eof){ |
3097 | 1369 float delay=audio_out->get_delay(); |
1370 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"delay=%f\n",delay); | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1371 time_frame=sh_video->timer; |
3097 | 1372 time_frame-=sh_audio->timer-delay; |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1373 if(time_frame>-2*frame_time) { |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1374 drop_frame=0; // stop dropping frames |
1567 | 1375 mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nstop frame drop %.2f\n", time_frame); |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1376 }else{ |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1377 ++drop_frame_cnt; |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1378 if (verbose > 0 && drop_frame_cnt%10 == 0) |
1567 | 1379 mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nstill dropping, %.2f\n", time_frame); |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1380 } |
798 | 1381 } |
1709 | 1382 #ifdef HAVE_NEW_GUI |
2567 | 1383 if(use_gui) EventHandling(); |
1709 | 1384 #endif |
1729 | 1385 video_out->check_events(); // check events AST |
798 | 1386 } else { |
780 | 1387 // It's time to sleep... |
1388 current_module="sleep"; | |
1389 | |
1390 time_frame-=GetRelativeTime(); // reset timer | |
1391 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1392 if(sh_audio && !d_audio->eof){ |
3097 | 1393 float delay=audio_out->get_delay(); |
1394 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"delay=%f\n",delay); | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1395 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1396 if(!dapsync){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1397 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1398 /* Arpi's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1399 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1400 time_frame=sh_video->timer; |
3097 | 1401 time_frame-=sh_audio->timer-delay; |
1402 | |
798 | 1403 // we are out of time... drop next frame! |
940 | 1404 if(time_frame<-2*frame_time){ |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1405 static int drop_message=0; |
798 | 1406 drop_frame=frame_dropping; // tricky! |
1407 ++drop_frame_cnt; | |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1408 if(drop_frame_cnt>50 && AV_delay>0.5 && !drop_message){ |
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1409 drop_message=1; |
1582 | 1410 mp_msg(MSGT_AVSYNC,MSGL_WARN,MSGTR_SystemTooSlow); |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1411 } |
1567 | 1412 mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nframe drop %d, %.2f\n", drop_frame, time_frame); |
798 | 1413 } |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1414 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1415 } else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1416 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1417 /* DaP's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1418 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1419 float SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1420 /* SH_AV_delay = sh_video->timer - (sh_audio->timer - (float)((float)delay + sh_audio->a_buffer_len) / (float)sh_audio->o_bps); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1421 SH_AV_delay = sh_video->timer - (sh_audio->timer - (float)((float)delay) / (float)sh_audio->o_bps); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1422 // printf ("audio slp req: %.3f TF: %.3f delta: %.3f (v: %.3f a: %.3f) | ", i, time_frame, |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1423 // i - time_frame, sh_video->timer, sh_audio->timer - (float)((float)delay / (float)sh_audio->o_bps)); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1424 if(SH_AV_delay<-2*frame_time){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1425 static int drop_message=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1426 drop_frame=frame_dropping; // tricky! |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1427 ++drop_frame_cnt; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1428 if(drop_frame_cnt>50 && AV_delay>0.5 && !drop_message){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1429 drop_message=1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1430 mp_msg(MSGT_AVSYNC,MSGL_WARN,MSGTR_SystemTooSlow); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1431 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1432 printf ("A-V SYNC: FRAMEDROP (SH_AV_delay=%.3f)!\n", SH_AV_delay); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1433 mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nframe drop %d, %.2f\n", drop_frame, time_frame); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1434 /* go into unlimited-TF cycle */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1435 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1436 } else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1437 #define SL_CORR_AVG_LEN 125 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1438 /* don't adjust under framedropping */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1439 time_frame_corr_avg = (time_frame_corr_avg * (SL_CORR_AVG_LEN - 1) + |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1440 (SH_AV_delay - time_frame)) / SL_CORR_AVG_LEN; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1441 #define UNEXP_CORR_MAX 0.1 /* limit of unexpected correction between two frames (percentage) */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1442 #define UNEXP_CORR_WARN 1.0 /* warn limit of A-V lag (percentage) */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1443 time_frame += time_frame_corr_avg; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1444 // printf ("{%.3f - %.3f}\n", i - time_frame, frame_time + frame_time_corr_avg); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1445 if (SH_AV_delay - time_frame < (frame_time + time_frame_corr_avg) * UNEXP_CORR_MAX && |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1446 SH_AV_delay - time_frame > (frame_time + time_frame_corr_avg) * -UNEXP_CORR_MAX) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1447 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1448 else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1449 if (SH_AV_delay - time_frame > (frame_time + time_frame_corr_avg) * UNEXP_CORR_WARN || |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1450 SH_AV_delay - time_frame < (frame_time + time_frame_corr_avg) * -UNEXP_CORR_WARN) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1451 printf ("WARNING: A-V SYNC LAG TOO LARGE: %.3f {%.3f - %.3f} (too little UNEXP_CORR_MAX?)\n", |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1452 SH_AV_delay - time_frame, SH_AV_delay, time_frame); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1453 time_frame += (frame_time + time_frame_corr_avg) * ((SH_AV_delay > time_frame) ? |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1454 UNEXP_CORR_MAX : -UNEXP_CORR_MAX); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1455 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1456 } /* /start dropframe */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1457 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1458 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1459 |
780 | 1460 } else { |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1461 // NOSOUND: |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1462 if( (time_frame<-3*frame_time || time_frame>3*frame_time) || benchmark) |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1463 time_frame=0; |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1464 |
780 | 1465 } |
798 | 1466 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1467 // if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,sh_audio->timer,sh_video->timer); |
1439 | 1468 |
1469 aq_sleep_time+=time_frame; | |
1709 | 1470 |
1471 #ifdef HAVE_NEW_GUI | |
1472 if(use_gui){ | |
1802 | 1473 EventHandling(); |
1709 | 1474 } |
1475 #endif | |
2705 | 1476 |
1477 if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card) | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1478 |
3015 | 1479 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1480 if(rtc_fd>=0){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1481 // -------- RTC ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1482 while (time_frame > 0.000) { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1483 unsigned long long rtc_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1484 if (read (rtc_fd, &rtc_ts, sizeof(rtc_ts)) <= 0) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1485 perror ("read (rtc_fd)"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1486 time_frame-=GetRelativeTime(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1487 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1488 } else |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1489 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1490 { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1491 // -------- USLEEP + SOFTSLEEP ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1492 float min=softsleep?0.021:0.005; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1493 while(time_frame>min){ |
746 | 1494 if(time_frame<=0.020) |
1439 | 1495 usec_sleep(0); // sleeps 1 clock tick (10ms)! |
746 | 1496 else |
2757 | 1497 usec_sleep(1000000*(time_frame-0.020)); |
746 | 1498 time_frame-=GetRelativeTime(); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1499 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1500 if(softsleep){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1501 if(time_frame<0) printf("Warning! softsleep underflow!\n"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1502 while(time_frame>0) time_frame-=GetRelativeTime(); // burn the CPU |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1503 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1504 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1505 |
2705 | 1506 } |
117 | 1507 |
715 | 1508 current_module="flip_page"; |
1422 | 1509 #ifdef USE_LIBVO2 |
1510 if(blit_frame) vo2_flip(video_out,0); | |
1511 #else | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1512 video_out->check_events(); |
1962 | 1513 if(blit_frame){ |
1514 unsigned int t2=GetTimer(); | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1515 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1516 float j; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1517 #define FRAME_LAG_WARN 0.2 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1518 j = ((float)t2 - lastframeout_ts) / 1000000; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1519 lastframeout_ts = GetTimer(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1520 if (j < frame_time + frame_time * -FRAME_LAG_WARN) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1521 too_fast_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1522 /* printf ("PANIC: too fast frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1523 else if (j > frame_time + frame_time * FRAME_LAG_WARN) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1524 too_slow_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1525 /* printf ("PANIC: too slow frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1526 |
1962 | 1527 video_out->flip_page(); |
1528 t2=GetTimer()-t2;vout_time_usage+=t2*0.000001f; | |
1529 } | |
1422 | 1530 #endif |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1531 // usec_sleep(50000); // test only! |
780 | 1532 |
715 | 1533 } |
780 | 1534 |
1535 current_module=NULL; | |
715 | 1536 |
1 | 1537 if(eof) break; |
220 | 1538 if(force_redraw){ |
1539 --force_redraw; | |
577 | 1540 if(!force_redraw) osd_function=OSD_PLAY; |
746 | 1541 continue; |
220 | 1542 } |
1 | 1543 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1544 // printf("A:%6.1f V:%6.1f A-V:%7.3f frame=%5.2f \r",d_audio->pts,d_video->pts,d_audio->pts-d_video->pts,sh_audio->timer); |
1 | 1545 // fflush(stdout); |
1546 | |
1547 #if 1 | |
1548 /*================ A-V TIMESTAMP CORRECTION: =========================*/ | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1549 if(sh_audio){ |
780 | 1550 float a_pts=0; |
1551 float v_pts=0; | |
1552 | |
746 | 1553 // unplayed bytes in our and soundcard/dma buffer: |
3097 | 1554 float delay=audio_out->get_delay()+(float)sh_audio->a_buffer_len/(float)sh_audio->o_bps; |
746 | 1555 |
780 | 1556 if(pts_from_bps){ |
1498 | 1557 #if 1 |
1558 unsigned int samples=(sh_audio->audio.dwSampleSize)? | |
1559 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : | |
1560 (d_audio->pack_no); // <- used for VBR audio | |
1561 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; | |
1562 #else | |
1481 | 1563 if(sh_audio->audio.dwSampleSize) |
1564 a_pts=(ds_tell(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->wf->nAvgBytesPerSec; | |
1565 else // VBR: | |
1566 a_pts=d_audio->pack_no*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; | |
1498 | 1567 #endif |
1568 // v_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; | |
1569 // printf("V_PTS: PTS: %8.3f BPS: %8.3f \n",d_video->pts,v_pts); | |
1570 delay_corrected=1; | |
780 | 1571 } else { |
1572 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) | |
746 | 1573 a_pts=d_audio->pts; |
1498 | 1574 if(!delay_corrected) if(a_pts) delay_corrected=1; |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1575 //printf("*** %5.3f ***\n",a_pts); |
746 | 1576 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1577 // v_pts=d_video->pts-frame_time; |
1498 | 1578 // v_pts=d_video->pts; |
780 | 1579 } |
1498 | 1580 v_pts=d_video->pts; |
746 | 1581 |
1567 | 1582 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"### A:%8.3f (%8.3f) V:%8.3f A-V:%7.4f \n",a_pts,a_pts-audio_delay-delay,v_pts,(a_pts-delay-audio_delay)-v_pts); |
780 | 1583 |
398 | 1584 if(delay_corrected){ |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1585 float x; |
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1586 AV_delay=(a_pts-delay-audio_delay)-v_pts; |
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1587 x=AV_delay*0.1f; |
1 | 1588 if(x<-max_pts_correction) x=-max_pts_correction; else |
1589 if(x> max_pts_correction) x= max_pts_correction; | |
780 | 1590 if(default_max_pts_correction>=0) |
1591 max_pts_correction=default_max_pts_correction; | |
1592 else | |
1593 max_pts_correction=sh_video->frametime*0.10; // +-10% of time | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1594 sh_audio->timer+=x; c_total+=x; |
2353 | 1595 if(!quiet) mp_msg(MSGT_AVSYNC,MSGL_STATUS,"A:%6.1f V:%6.1f A-V:%7.3f ct:%7.3f %3d/%3d %2d%% %2d%% %4.1f%% %d %d %d%%\r", |
1498 | 1596 a_pts-audio_delay-delay,v_pts,AV_delay,c_total, |
1546 | 1597 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded, |
1498 | 1598 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, |
1599 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, | |
1600 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 | |
1601 ,drop_frame_cnt | |
1602 ,output_quality | |
2353 | 1603 ,cache_fill_status |
1 | 1604 ); |
1605 fflush(stdout); | |
1606 } | |
780 | 1607 |
1 | 1608 } else { |
1609 // No audio: | |
1420 | 1610 |
1448 | 1611 if(!quiet) |
2353 | 1612 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"V:%6.1f %3d %2d%% %2d%% %4.1f%% %d %d %d%%\r",d_video->pts, |
1400 | 1613 (int)sh_video->num_frames, |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1614 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, |
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1615 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, |
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1616 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 |
2353 | 1617 ,drop_frame_cnt |
1618 ,output_quality | |
1619 ,cache_fill_status | |
442 | 1620 ); |
1 | 1621 |
1622 fflush(stdout); | |
1420 | 1623 |
1 | 1624 } |
1625 #endif | |
1626 | |
1439 | 1627 /*Output quality adjustments:*/ |
1628 if(auto_quality>0){ | |
1629 #if 0 | |
1630 /*If we took a long time decoding this frame, downgrade the quality.*/ | |
1631 if(output_quality>0&& | |
1632 (video_time_usage-cvideo_base_vtime)*sh_video->timer>= | |
1633 (0.95*sh_video->timer-(vout_time_usage+audio_time_usage))* | |
1634 (sh_video->timer-cvideo_base_vframe-frame_correction)){ | |
1635 output_quality>>=1; | |
1567 | 1636 mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Downgrading quality to %i.\n",output_quality); |
1439 | 1637 set_video_quality(sh_video,output_quality); |
1638 } else | |
1639 /*If we had plenty of extra time, upgrade the quality.*/ | |
1640 if(output_quality<auto_quality&& | |
1641 vdecode_time<0.5*frame_time&& | |
1642 (video_time_usage-cvideo_base_vtime)*sh_video->timer< | |
1643 (0.67*sh_video->timer-(vout_time_usage+audio_time_usage))* | |
1644 (sh_video->timer-cvideo_base_vframe-frame_correction)){ | |
1645 output_quality++; | |
1567 | 1646 mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Upgrading quality to %i.\n",output_quality); |
1439 | 1647 set_video_quality(sh_video,output_quality); |
1648 } | |
1649 #else | |
1496 | 1650 // float total=0.000001f * (GetTimer()-aq_total_time); |
1439 | 1651 // if(output_quality<auto_quality && aq_sleep_time>0.05f*total) |
1652 if(output_quality<auto_quality && aq_sleep_time>0) | |
1653 ++output_quality; | |
1654 else | |
1655 // if(output_quality>0 && aq_sleep_time<-0.05f*total) | |
1656 if(output_quality>1 && aq_sleep_time<0) | |
1657 --output_quality; | |
1658 else | |
1659 if(output_quality>0 && aq_sleep_time<-0.050f) // 50ms | |
1660 output_quality=0; | |
1661 // printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); | |
1662 set_video_quality(sh_video,output_quality); | |
1663 #endif | |
1664 } | |
1665 | |
1422 | 1666 #ifdef USE_OSD |
220 | 1667 if(osd_visible){ |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1668 if (!--osd_visible){ vo_osd_progbar_type=-1; // disable |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1669 if (osd_function != OSD_PAUSE) |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1670 osd_function = OSD_PLAY; |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1671 } |
220 | 1672 } |
1422 | 1673 #endif |
371 | 1674 |
1675 if(osd_function==OSD_PAUSE){ | |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1676 int gui_pause_flag=0; // gany! |
1567 | 1677 mp_msg(MSGT_CPLAYER,MSGL_STATUS,"\n------ PAUSED -------\r");fflush(stdout); |
1793
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1678 #ifdef HAVE_NEW_GUI |
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1679 if(use_gui) mplShMem->Playing=2; |
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1680 #endif |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1681 if (audio_out && sh_audio) |
1156 | 1682 audio_out->pause(); // pause audio, keep data if possible |
723 | 1683 while( |
371 | 1684 #ifdef HAVE_LIRC |
723 | 1685 lirc_mp_getinput()<=0 && |
371 | 1686 #endif |
1467 | 1687 (use_stdin || getch2(20)<=0) && mplayer_get_key()<=0){ |
1422 | 1688 #ifndef USE_LIBVO2 |
723 | 1689 video_out->check_events(); |
1422 | 1690 #endif |
1709 | 1691 #ifdef HAVE_NEW_GUI |
1692 if(use_gui){ | |
1802 | 1693 EventHandling(); |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1694 if(mplShMem->Playing!=2 || (rel_seek_secs || abs_seek_pos)) |
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1695 { gui_pause_flag=1; break; } // end of pause or seek |
1709 | 1696 } |
1697 #endif | |
1467 | 1698 if(use_stdin) usec_sleep(1000); // do not eat the CPU |
723 | 1699 } |
1700 osd_function=OSD_PLAY; | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1701 if (audio_out && sh_audio) |
1156 | 1702 audio_out->resume(); // resume audio |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1703 (void)GetRelativeTime(); // keep TF around FT in next cycle |
1793
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1704 #ifdef HAVE_NEW_GUI |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1705 if(use_gui && !gui_pause_flag) mplShMem->Playing=1; // play from keyboard |
1793
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1706 #endif |
371 | 1707 } |
1708 | |
746 | 1709 |
1710 if(!force_redraw) break; | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1711 } // while(sh_video->timer<sh_audio->timer || force_redraw) |
1 | 1712 |
2436 | 1713 // skip some seconds... added by fly |
1714 | |
1715 if(step_sec>0) { | |
1716 osd_function=OSD_FFW; | |
1717 rel_seek_secs+=step_sec; | |
1718 } | |
1 | 1719 |
1720 //================= Keyboard events, SEEKing ==================== | |
1721 | |
723 | 1722 { int c; |
1 | 1723 while( |
1724 #ifdef HAVE_LIRC | |
1725 (c=lirc_mp_getinput())>0 || | |
1726 #endif | |
1467 | 1727 (!use_stdin && (c=getch2(0))>0) || (c=mplayer_get_key())>0) switch(c){ |
1 | 1728 // seek 10 sec |
1729 case KEY_RIGHT: | |
220 | 1730 osd_function=OSD_FFW; |
1 | 1731 rel_seek_secs+=10;break; |
1732 case KEY_LEFT: | |
220 | 1733 osd_function=OSD_REW; |
1 | 1734 rel_seek_secs-=10;break; |
1735 // seek 1 min | |
1736 case KEY_UP: | |
220 | 1737 osd_function=OSD_FFW; |
1 | 1738 rel_seek_secs+=60;break; |
1739 case KEY_DOWN: | |
220 | 1740 osd_function=OSD_REW; |
1 | 1741 rel_seek_secs-=60;break; |
651 | 1742 // seek 10 min |
1743 case KEY_PAGE_UP: | |
1744 rel_seek_secs+=600;break; | |
1745 case KEY_PAGE_DOWN: | |
1746 rel_seek_secs-=600;break; | |
1 | 1747 // delay correction: |
1748 case '+': | |
746 | 1749 audio_delay+=0.1; // increase audio buffer delay |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1750 if(sh_audio) sh_audio->timer-=0.1; |
1 | 1751 break; |
1752 case '-': | |
746 | 1753 audio_delay-=0.1; // decrease audio buffer delay |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1754 if(sh_audio) sh_audio->timer+=0.1; |
1 | 1755 break; |
1756 // quit | |
1757 case KEY_ESC: // ESC | |
1639 | 1758 case 'q': exit_player(MSGTR_Exit_quit); |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1759 case '>': |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1760 if(curr_filename>=num_filenames-1) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1761 break; |
1 | 1762 case KEY_ENTER: // ESC |
1639 | 1763 eof=1; // jump to next file |
1764 break; | |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1765 case '<': |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1766 if(curr_filename < 1) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1767 break; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1768 curr_filename-=2; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1769 eof=1; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1770 break; |
36 | 1771 case 'g': grab_frames=2;break; |
1 | 1772 // pause |
1773 case 'p': | |
1774 case ' ': | |
220 | 1775 osd_function=OSD_PAUSE; |
371 | 1776 break; |
1777 case 'o': // toggle OSD | |
1778 osd_level=(osd_level+1)%3; | |
1 | 1779 break; |
939 | 1780 case 'z': |
1781 sub_delay -= 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
1782 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 1783 break; |
1784 case 'x': | |
1785 sub_delay += 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
1786 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 1787 break; |
1626 | 1788 case '9': |
1789 case '0': | |
459 | 1790 case '*': |
555 | 1791 case '/': { |
1626 | 1792 if(c=='*' || c=='0'){ |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1793 mixer_incvolume(); |
555 | 1794 } else { |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1795 mixer_decvolume(); |
555 | 1796 } |
1797 | |
1422 | 1798 #ifdef USE_OSD |
555 | 1799 if(osd_level){ |
1800 osd_visible=sh_video->fps; // 1 sec | |
1801 vo_osd_progbar_type=OSD_VOLUME; | |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1802 vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0; |
1852 | 1803 //printf("volume: %d\n",vo_osd_progbar_value); |
555 | 1804 } |
1422 | 1805 #endif |
555 | 1806 } |
1807 break; | |
459 | 1808 case 'm': |
510 | 1809 mixer_usemaster=!mixer_usemaster; |
459 | 1810 break; |
1429 | 1811 |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1812 #if 0 // change to 1 for absolute seeking tests |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1813 case '1': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1814 case '2': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1815 case '3': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1816 case '4': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1817 case '5': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1818 case '6': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1819 case '7': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1820 case '8': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1821 rel_seek_secs=0.99*(float)(c-'1')/7.0; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1822 abs_seek_pos=3; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1823 printf("ABS seek to %5.3f \n",rel_seek_secs); |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1824 break; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1825 #else |
1429 | 1826 // Contrast: |
1827 case '1': | |
1828 case '2': | |
1829 if(c=='2'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1830 if ( ++v_cont > 100 ) v_cont = 100; |
1429 | 1831 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1832 if ( --v_cont < 0 ) v_cont = 0; |
1429 | 1833 } |
1834 if(set_video_colors(sh_video,"Contrast",v_cont)){ | |
1835 #ifdef USE_OSD | |
1836 if(osd_level){ | |
1837 osd_visible=sh_video->fps; // 1 sec | |
1838 vo_osd_progbar_type=OSD_CONTRAST; | |
1726 | 1839 vo_osd_progbar_value=((v_cont)<<8)/100; |
1429 | 1840 } |
1841 #endif | |
1842 } | |
1843 break; | |
1844 | |
1845 // Brightness: | |
1846 case '3': | |
1847 case '4': | |
1848 if(c=='4'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1849 if ( ++v_bright > 100 ) v_bright = 100; |
1429 | 1850 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1851 if ( --v_bright < 0 ) v_bright = 0; |
1429 | 1852 } |
1853 if(set_video_colors(sh_video,"Brightness",v_bright)){ | |
1854 #ifdef USE_OSD | |
1855 if(osd_level){ | |
1856 osd_visible=sh_video->fps; // 1 sec | |
1857 vo_osd_progbar_type=OSD_BRIGHTNESS; | |
1726 | 1858 vo_osd_progbar_value=((v_bright)<<8)/100; |
1429 | 1859 } |
1860 #endif | |
1861 } | |
1862 break; | |
1863 | |
1864 // Hue: | |
1865 case '5': | |
1866 case '6': | |
1867 if(c=='6'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1868 if ( ++v_hue > 100 ) v_hue = 100; |
1429 | 1869 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1870 if ( --v_hue < 0 ) v_hue = 0; |
1429 | 1871 } |
1872 if(set_video_colors(sh_video,"Hue",v_hue)){ | |
1873 #ifdef USE_OSD | |
1874 if(osd_level){ | |
1875 osd_visible=sh_video->fps; // 1 sec | |
1876 vo_osd_progbar_type=OSD_HUE; | |
1726 | 1877 vo_osd_progbar_value=((v_hue)<<8)/100; |
1429 | 1878 } |
1879 #endif | |
1880 } | |
1881 break; | |
1882 | |
1883 // Saturation: | |
1884 case '7': | |
1885 case '8': | |
1886 if(c=='8'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1887 if ( ++v_saturation > 100 ) v_saturation = 100; |
1429 | 1888 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1889 if ( --v_saturation < 0 ) v_saturation = 0; |
1429 | 1890 } |
1891 if(set_video_colors(sh_video,"Saturation",v_saturation)){ | |
1892 #ifdef USE_OSD | |
1893 if(osd_level){ | |
1894 osd_visible=sh_video->fps; // 1 sec | |
1895 vo_osd_progbar_type=OSD_SATURATION; | |
1726 | 1896 vo_osd_progbar_value=((v_saturation)<<8)/100; |
1429 | 1897 } |
1898 #endif | |
1899 } | |
1900 break; | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1901 #endif |
1429 | 1902 |
715 | 1903 case 'd': |
798 | 1904 frame_dropping=(frame_dropping+1)%3; |
1567 | 1905 mp_msg(MSGT_CPLAYER,MSGL_V,"== drop: %d == \n",frame_dropping); |
715 | 1906 break; |
2941
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1907 |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1908 #ifdef USE_TV |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1909 case 'h': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1910 if (tv_param_on == 1) |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1911 tv_step_channel(tv_handler, TV_CHANNEL_HIGHER); |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1912 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1913 case 'l': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1914 if (tv_param_on == 1) |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1915 tv_step_channel(tv_handler, TV_CHANNEL_LOWER); |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1916 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1917 case 'n': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1918 if (tv_param_on == 1) |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1919 tv_step_norm(tv_handler); |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1920 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1921 case 'b': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1922 if (tv_param_on == 1) |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1923 tv_step_chanlist(tv_handler); |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1924 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1925 #endif |
1 | 1926 } |
1406 | 1927 } // keyboard event handler |
1928 | |
651 | 1929 if (seek_to_sec) { |
937 | 1930 int a,b; float d; |
1931 | |
1932 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | |
1933 rel_seek_secs += 3600*a +60*b +d ; | |
1934 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2) | |
1935 rel_seek_secs += 60*a +d; | |
1936 else if (sscanf(seek_to_sec, "%f", &d)==1) | |
1937 rel_seek_secs += d; | |
1938 | |
1939 seek_to_sec = NULL; | |
651 | 1940 } |
937 | 1941 |
2365 | 1942 /* Looping. */ |
1943 if(eof==5 && loop_times>-1) { | |
1944 | |
1945 if(loop_times!=0) { | |
1946 | |
1947 loop_times--; | |
1948 | |
1949 if(loop_times==0) | |
1950 loop_times=-1; | |
1951 | |
1952 } | |
1953 | |
1954 eof=0; | |
1955 abs_seek_pos=1; | |
1956 | |
1957 mp_msg(MSGT_CPLAYER,MSGL_V,"loop_times = %d, eof = 0\n", loop_times); | |
1958 | |
1959 } | |
1960 | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1961 if(rel_seek_secs || abs_seek_pos){ |
1466 | 1962 current_module="seek"; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1963 if(demux_seek(demuxer,rel_seek_secs,abs_seek_pos)){ |
1405 | 1964 // success: |
889 | 1965 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1966 if(sh_audio){ |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1967 if(verbose){ |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1968 float a_pts=d_audio->pts; |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1969 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; |
1567 | 1970 mp_msg(MSGT_AVSYNC,MSGL_V,"SEEK: A: %5.3f V: %5.3f A-V: %5.3f \n",a_pts,d_video->pts,a_pts-d_video->pts); |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1971 } |
1567 | 1972 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"A:%6.1f V:%6.1f A-V:%7.3f ct: ? \r",d_audio->pts,d_video->pts,0.0f); |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1973 } else { |
1567 | 1974 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"A: --- V:%6.1f \r",d_video->pts); |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1975 } |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1976 fflush(stdout); |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1977 |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1978 if(sh_audio){ |
1466 | 1979 current_module="seek_audio_reset"; |
1334 | 1980 audio_out->reset(); // stop audio, throwing away buffered data |
1 | 1981 } |
1982 | |
1422 | 1983 #ifdef USE_OSD |
1334 | 1984 // Set OSD: |
1985 if(osd_level){ | |
1986 int len=((demuxer->movi_end-demuxer->movi_start)>>8); | |
1727 | 1987 if (len>0){ |
1988 osd_visible=sh_video->fps; // 1 sec | |
1989 vo_osd_progbar_type=0; | |
1990 vo_osd_progbar_value=(demuxer->filepos-demuxer->movi_start)/len; | |
1991 } | |
1334 | 1992 } |
1422 | 1993 #endif |
1405 | 1994 |
1420 | 1995 c_total=0; |
1 | 1996 max_pts_correction=0.1; |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1997 osd_visible=sh_video->fps; // to rewert to PLAY pointer after 1 sec |
1 | 1998 audio_time_usage=0; video_time_usage=0; vout_time_usage=0; |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1999 drop_frame_cnt=0; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
2000 too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
2001 too_fast_frame_cnt=0; |
1 | 2002 } |
1405 | 2003 rel_seek_secs=0; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2004 abs_seek_pos=0; |
1466 | 2005 current_module=NULL; |
2006 } | |
2007 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2008 #ifdef HAVE_NEW_GUI |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2009 if(use_gui){ |
1735 | 2010 if(demuxer->file_format==DEMUXER_TYPE_AVI && sh_video->video.dwLength>2){ |
2011 // get pos from frame number / total frames | |
2012 mplShMem->Position=(float)d_video->pack_no*100.0f/sh_video->video.dwLength; | |
2013 } else { | |
2014 // get pos from file position / filesize | |
2015 int len=((demuxer->movi_end-demuxer->movi_start)); | |
2016 int pos=(demuxer->file_format==DEMUXER_TYPE_AVI)?demuxer->filepos:d_video->pos; | |
2017 mplShMem->Position=(len<=0)?0:((float)(pos-demuxer->movi_start) / len * 100.0f); | |
2018 } | |
1729 | 2019 mplShMem->TimeSec=d_video->pts; |
1772 | 2020 if(mplShMem->Playing==0) break; // STOP |
2021 if(mplShMem->Playing==2) osd_function=OSD_PAUSE; | |
1852 | 2022 if ( mplShMem->VolumeChanged ) |
1848 | 2023 { |
1852 | 2024 mixer_setvolume( mplShMem->Volume,mplShMem->Volume ); |
2025 mplShMem->VolumeChanged=0; | |
2026 #ifdef USE_OSD | |
2027 if ( osd_level ) | |
2028 { | |
2029 osd_visible=sh_video->fps; // 1 sec | |
2030 vo_osd_progbar_type=OSD_VOLUME; | |
2031 vo_osd_progbar_value=( ( mplShMem->Volume ) * 256.0 ) / 100.0; | |
2032 } | |
1848 | 2033 #endif |
1852 | 2034 } |
2035 mplShMem->Volume=(float)mixer_getbothvolume(); | |
3054 | 2036 #ifdef USE_DVDREAD |
2037 if ( stream->type == STREAMTYPE_DVD ) | |
2038 { | |
2039 dvd_priv_t * dvdp = stream->priv; | |
2040 mplShMem->DVD.current_chapter=dvdp->cur_cell + 1; | |
2041 } | |
2042 #endif | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2043 } |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2044 #endif |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2045 |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2046 |
220 | 2047 //================= Update OSD ==================== |
1422 | 2048 #ifdef USE_OSD |
1421 | 2049 if(osd_level>=2){ |
780 | 2050 int pts=d_video->pts; |
595 | 2051 if(pts==osd_last_pts-1) ++pts; else osd_last_pts=pts; |
371 | 2052 vo_osd_text=osd_text_buffer; |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2053 if (osd_show_sub_delay) { |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2054 sprintf(vo_osd_text, "Sub delay: %d ms",(int)(sub_delay*1000)); |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2055 osd_show_sub_delay--; |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2056 } else |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2057 sprintf(vo_osd_text,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60); |
371 | 2058 } else { |
2059 vo_osd_text=NULL; | |
2060 } | |
220 | 2061 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0; |
371 | 2062 // vo_osd_text=osd_text_buffer; |
1422 | 2063 #endif |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
2064 |
1422 | 2065 #ifdef USE_SUB |
258 | 2066 // find sub |
1204 | 2067 if(subtitles && d_video->pts>0){ |
1762 | 2068 float pts=d_video->pts; |
398 | 2069 if(sub_fps==0) sub_fps=sh_video->fps; |
482 | 2070 current_module="find_sub"; |
780 | 2071 find_sub(subtitles,sub_uses_time?(100*(pts+sub_delay)):((pts+sub_delay)*sub_fps)); // FIXME! frame counter... |
482 | 2072 current_module=NULL; |
258 | 2073 } |
1422 | 2074 #endif |
554 | 2075 |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2076 |
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2077 #ifdef USE_DVDREAD |
554 | 2078 // DVD sub: |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2079 if(vo_spudec){ |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2080 unsigned char* packet=NULL; |
557 | 2081 int len=ds_get_packet_sub(d_dvdsub,&packet); |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2082 current_module="spudec"; |
557 | 2083 if(len>=2){ |
2084 int len2; | |
2085 len2=(packet[0]<<8)+packet[1]; | |
1567 | 2086 mp_msg(MSGT_CPLAYER,MSGL_V,"\rDVD sub: %d / %d \n",len,len2); |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2087 spudec_assemble(vo_spudec,packet,len,100*d_video->pts); |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2088 } else { |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2089 spudec_heartbeat(vo_spudec,100*d_video->pts); |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2090 if(len>=0) |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2091 mp_msg(MSGT_CPLAYER,MSGL_V,"invalid dvd sub\n"); |
554 | 2092 } |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2093 current_module=NULL; |
554 | 2094 } |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2095 #endif |
554 | 2096 |
1421 | 2097 } // while(!eof) |
1 | 2098 |
1567 | 2099 mp_msg(MSGT_GLOBAL,MSGL_V,"EOF code: %d \n",eof); |
1 | 2100 |
1639 | 2101 } |
2102 | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2103 |
1790 | 2104 if(curr_filename+1<num_filenames || use_gui){ |
1639 | 2105 // partial uninit: |
2106 | |
1857 | 2107 uninit_player(INITED_ALL-(INITED_GUI+INITED_LIRC)); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2108 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2109 } |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2110 |
1808 | 2111 goto_next_file: // don't jump here after ao/vo/getch initialization! |
2112 | |
1797 | 2113 #ifdef HAVE_NEW_GUI |
2114 if(use_gui) | |
2115 { | |
2116 mplStop(); | |
2117 } | |
2118 #endif | |
2119 | |
1790 | 2120 if(use_gui || ++curr_filename<num_filenames){ |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2121 |
1654 | 2122 current_module="uninit_vcodec"; |
2123 if(sh_video) uninit_video(sh_video); | |
2124 | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2125 current_module="free_demuxer"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2126 if(demuxer) free_demuxer(demuxer); |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2127 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2128 current_module="free_stream"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2129 if(stream) free_stream(stream); |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2130 |
1639 | 2131 video_out=NULL; |
2132 audio_out=NULL; | |
2854 | 2133 |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2134 goto play_next_file; |
1639 | 2135 } |
2136 | |
1582 | 2137 exit_player(MSGTR_Exit_eof); |
1639 | 2138 |
109 | 2139 return 1; |
2140 } |