Mercurial > mplayer.hg
annotate mplayer.c @ 3253:48899ffdc4de
Minor improvements
author | nick |
---|---|
date | Sat, 01 Dec 2001 20:23:47 +0000 |
parents | d1e891c1e548 |
children | b59502557e39 |
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: |
202 static char *stream_dump_name=NULL; | |
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 | |
778 | |
1639 | 779 |
780 current_module="open_stream"; | |
1467 | 781 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
|
782 if(!stream) goto goto_next_file;// exit_player(MSGTR_Exit_error); // error... |
2321 | 783 inited_flags|=INITED_STREAM; |
1497
ad4d402b3d29
seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents:
1496
diff
changeset
|
784 stream->start_pos+=seek_to_byte; |
598 | 785 |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
786 #ifdef USE_DVDREAD |
3166 | 787 current_module="spudec"; |
788 vo_spudec=spudec_new(stream->priv); | |
789 if (vo_spudec!=NULL) | |
790 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
|
791 #endif |
3166 | 792 current_module=NULL; |
793 | |
2332 | 794 if(stream_cache_size) stream_enable_cache(stream,stream_cache_size*1024); |
2321 | 795 |
1639 | 796 use_stdin=filename && (!strcmp(filename,"-")); |
797 | |
492 | 798 #ifdef HAVE_LIBCSS |
1639 | 799 current_module="libcss"; |
546 | 800 if (dvdimportkey) { |
801 if (dvd_import_key(dvdimportkey)) { | |
1582 | 802 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_ErrorDVDkey); |
1639 | 803 exit_player(MSGTR_Exit_error); |
546 | 804 } |
1582 | 805 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CmdlineDVDkey); |
546 | 806 } |
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
|
807 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
|
808 // 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
|
809 if (dvd_auth(dvd_auth_device,filename)) { |
1809 | 810 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"Error in DVD auth...\n"); |
1639 | 811 exit_player(MSGTR_Exit_error); |
723 | 812 } |
1582 | 813 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_DVDauthOk); |
492 | 814 } |
815 #endif | |
1 | 816 |
817 //============ Open & Sync stream and detect file format =============== | |
818 | |
442 | 819 if(!has_audio) audio_id=-2; // do NOT read audio packets... |
1 | 820 |
1639 | 821 current_module="demux_open"; |
822 | |
1496 | 823 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
|
824 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
|
825 |
1660 | 826 //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
|
827 |
1 | 828 d_audio=demuxer->audio; |
829 d_video=demuxer->video; | |
554 | 830 d_dvdsub=demuxer->sub; |
1 | 831 |
792 | 832 // DUMP STREAMS: |
833 if(stream_dump_type){ | |
834 FILE *f; | |
835 demux_stream_t *ds=NULL; | |
1639 | 836 current_module="dump"; |
792 | 837 // select stream to dump |
838 switch(stream_dump_type){ | |
839 case 1: ds=d_audio;break; | |
840 case 2: ds=d_video;break; | |
2178 | 841 case 3: |
842 case 4: ds=d_dvdsub;break; | |
792 | 843 } |
844 if(!ds){ | |
1582 | 845 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_DumpSelectedSteramMissing); |
1639 | 846 exit_player(MSGTR_Exit_error); |
792 | 847 } |
848 // disable other streams: | |
849 if(d_audio && d_audio!=ds) {ds_free_packs(d_audio); d_audio->id=-2; } | |
850 if(d_video && d_video!=ds) {ds_free_packs(d_video); d_video->id=-2; } | |
851 if(d_dvdsub && d_dvdsub!=ds) {ds_free_packs(d_dvdsub); d_dvdsub->id=-2; } | |
852 // let's dump it! | |
853 f=fopen(stream_dump_name?stream_dump_name:"stream.dump","wb"); | |
1639 | 854 if(!f){ |
855 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); | |
856 exit_player(MSGTR_Exit_error); | |
857 } | |
792 | 858 while(!ds->eof){ |
859 unsigned char* start; | |
860 int in_size=ds_get_packet(ds,&start); | |
2102 | 861 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
|
862 && stream_dump_type==2) fwrite(&in_size,1,4,f); |
792 | 863 if(in_size>0) fwrite(start,in_size,1,f); |
864 } | |
865 fclose(f); | |
1582 | 866 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); |
1639 | 867 exit_player(MSGTR_Exit_eof); |
792 | 868 } |
869 | |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
870 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
|
871 sh_video=d_video->sh; |
792 | 872 |
3054 | 873 #ifdef HAVE_NEW_GUI |
874 #ifdef USE_DVDREAD | |
875 if ( use_gui && stream->type == STREAMTYPE_DVD ) | |
876 { | |
877 dvd_priv_t * dvdp = stream->priv; | |
878 mplShMem->DVD.titles=dvdp->vmg_file->tt_srpt->nr_of_srpts; | |
879 mplShMem->DVD.chapters=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
880 mplShMem->DVD.angles=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
881 mplShMem->DVD.nr_of_audio_channels=dvdp->nr_of_channels; | |
882 memcpy( mplShMem->DVD.audio_streams,dvdp->audio_streams,sizeof( dvdp->audio_streams ) ); | |
883 mplShMem->DVD.nr_of_subtitles=dvdp->nr_of_subtitles; | |
884 memcpy( mplShMem->DVD.subtitles,dvdp->subtitles,sizeof( dvdp->subtitles ) ); | |
885 mplShMem->DVD.current_title=dvd_title + 1; | |
886 mplShMem->DVD.current_chapter=dvd_chapter + 1; | |
887 mplShMem->Track=dvd_title + 1; | |
888 } | |
889 #endif | |
890 #endif | |
891 | |
1639 | 892 current_module="video_read_properties"; |
893 | |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
894 if(sh_video){ |
1 | 895 |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
896 if(!video_read_properties(sh_video)) goto goto_next_file; // exit_player(MSGTR_Exit_error); // couldn't read header? |
1 | 897 |
1567 | 898 mp_msg(MSGT_CPLAYER,MSGL_INFO,"[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n", |
1660 | 899 demuxer->file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h, |
398 | 900 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
|
901 ); |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
902 |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
903 if(!sh_video->fps && !force_fps){ |
1582 | 904 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
|
905 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
|
906 } |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
907 |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
908 } |
398 | 909 |
1 | 910 fflush(stdout); |
911 | |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
912 if(!sh_video){ |
1582 | 913 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
|
914 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
|
915 } |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
916 |
3050 | 917 /* display clip info */ |
918 demux_info_print(demuxer); | |
919 | |
303 | 920 //================== Init AUDIO (codec) ========================== |
1639 | 921 |
922 current_module="init_audio_codec"; | |
923 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
924 if(sh_audio){ |
303 | 925 // Go through the codec.conf and find the best codec... |
626 | 926 sh_audio->codec=NULL; |
1582 | 927 if(audio_family!=-1) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceAudioFmt,audio_family); |
626 | 928 while(1){ |
929 sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1); | |
930 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
|
931 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
|
932 sh_audio->codec=NULL; /* re-search */ |
1582 | 933 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
|
934 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
|
935 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
|
936 } |
1582 | 937 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format); |
938 mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf")); | |
1792 | 939 sh_audio=d_audio->sh=NULL; |
626 | 940 break; |
941 } | |
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
|
942 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
|
943 else if(audio_family!=-1 && sh_audio->codec->driver!=audio_family) continue; |
1567 | 944 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 | 945 break; |
303 | 946 } |
1 | 947 } |
948 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
949 if(sh_audio){ |
1567 | 950 mp_msg(MSGT_CPLAYER,MSGL_V,"Initializing audio codec...\n"); |
442 | 951 if(!init_audio(sh_audio)){ |
1582 | 952 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CouldntInitAudioCodec); |
1792 | 953 sh_audio=d_audio->sh=NULL; |
1889 | 954 #ifdef HAVE_NEW_GUI |
955 if ( use_gui ) mplShMem->AudioType=0; | |
956 #endif | |
303 | 957 } else { |
1567 | 958 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 | 959 sh_audio->sample_format,sh_audio->i_bps,sh_audio->o_bps); |
1889 | 960 #ifdef HAVE_NEW_GUI |
961 if ( use_gui ) mplShMem->AudioType=sh_audio->channels; | |
962 #endif | |
303 | 963 } |
175 | 964 } |
965 | |
303 | 966 //================== Init VIDEO (codec & libvo) ========================== |
967 | |
1639 | 968 current_module="init_video_codec"; |
969 | |
303 | 970 // Go through the codec.conf and find the best codec... |
626 | 971 sh_video->codec=NULL; |
1582 | 972 if(video_family!=-1) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceVideoFmt,video_family); |
626 | 973 while(1){ |
974 sh_video->codec=find_codec(sh_video->format, | |
975 sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,sh_video->codec,0); | |
976 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
|
977 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
|
978 sh_video->codec=NULL; /* re-search */ |
1582 | 979 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
|
980 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
|
981 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
|
982 } |
1582 | 983 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format); |
984 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
|
985 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
626 | 986 } |
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
|
987 // is next line needed anymore? - atmos :: |
1410
eda16e490ae7
using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents:
1406
diff
changeset
|
988 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
|
989 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
|
990 else if(video_family!=-1 && sh_video->codec->driver!=video_family) continue; |
626 | 991 break; |
303 | 992 } |
993 | |
1567 | 994 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 | 995 |
996 for(i=0;i<CODECS_MAX_OUTFMT;i++){ | |
2705 | 997 // int ret; |
303 | 998 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
|
999 if(out_fmt==0xFFFFFFFF) continue; |
1422 | 1000 #ifdef USE_LIBVO2 |
2705 | 1001 vo_flags=vo2_query_format(video_out); |
1422 | 1002 #else |
2705 | 1003 vo_flags=video_out->query_format(out_fmt); |
1422 | 1004 #endif |
2705 | 1005 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: query(%s) returned 0x%X\n",vo_format_name(out_fmt),vo_flags); |
1006 if(vo_flags) break; | |
303 | 1007 } |
1008 if(i>=CODECS_MAX_OUTFMT){ | |
1582 | 1009 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
|
1010 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
303 | 1011 } |
1012 sh_video->outfmtidx=i; | |
1013 | |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1014 if(flip==-1){ |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1015 // autodetect flipping |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1016 flip=0; |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1017 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
|
1018 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
|
1019 flip=1; |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1020 } |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1021 |
1567 | 1022 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug1: out_fmt=%s\n",vo_format_name(out_fmt)); |
487 | 1023 |
1291 | 1024 if(!init_video(sh_video)){ |
1582 | 1025 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
|
1026 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1 | 1027 } |
1028 | |
1439 | 1029 if(auto_quality>0){ |
1030 // Auto quality option enabled | |
1031 output_quality=get_video_quality_max(sh_video); | |
1032 if(auto_quality>output_quality) auto_quality=output_quality; | |
1033 else output_quality=auto_quality; | |
1567 | 1034 mp_msg(MSGT_CPLAYER,MSGL_V,"AutoQ: setting quality to %d\n",output_quality); |
1439 | 1035 set_video_quality(sh_video,output_quality); |
1036 } | |
1037 | |
398 | 1038 // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============ |
1 | 1039 |
1639 | 1040 current_module="init_libvo"; |
1041 | |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1042 #if 0 /* was X11_FULLSCREEN hack -> moved to libvo/vo_xv.c where it belongs ::atmos */ |
1 | 1043 if(fullscreen){ |
1044 if(vo_init()){ | |
1045 //if(verbose) printf("X11 running at %dx%d depth: %d\n",vo_screenwidth,vo_screenheight,vo_depthonscreen); | |
1046 } | |
1047 if(!screen_size_xy) screen_size_xy=vo_screenwidth; // scale with asp.ratio | |
1048 } | |
1049 #endif | |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1050 // Set default VGA 1:1 aspect as fallback ::atmos |
3139 | 1051 if(movie_aspect>-1.0) sh_video->aspect = movie_aspect; // cmdline overrides autodetect |
2042 | 1052 // if(!sh_video->aspect) sh_video->aspect=1.0; |
1 | 1053 |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1054 if(screen_size_xy||screen_size_x||screen_size_y){ |
1 | 1055 if(screen_size_xy>0){ |
1056 if(screen_size_xy<=8){ | |
398 | 1057 screen_size_x=screen_size_xy*sh_video->disp_w; |
1058 screen_size_y=screen_size_xy*sh_video->disp_h; | |
1 | 1059 } else { |
1060 screen_size_x=screen_size_xy; | |
398 | 1061 screen_size_y=screen_size_xy*sh_video->disp_h/sh_video->disp_w; |
1 | 1062 } |
337 | 1063 } else if(!vidmode){ |
1064 if(!screen_size_x) screen_size_x=SCREEN_SIZE_X; | |
1065 if(!screen_size_y) screen_size_y=SCREEN_SIZE_Y; | |
398 | 1066 if(screen_size_x<=8) screen_size_x*=sh_video->disp_w; |
1067 if(screen_size_y<=8) screen_size_y*=sh_video->disp_h; | |
1 | 1068 } |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1069 } else { |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1070 // 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
|
1071 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
|
1072 screen_size_y=sh_video->disp_h; |
2042 | 1073 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
|
1074 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
|
1075 sh_video->aspect); |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1076 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
|
1077 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
|
1078 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
|
1079 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
|
1080 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
|
1081 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
|
1082 } |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1083 } else { |
2042 | 1084 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
|
1085 } |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1086 } |
208
ae0f909ccc7c
Adds code to deal with vidmode selection. -- mgraffam
mgraffam
parents:
190
diff
changeset
|
1087 |
1422 | 1088 #ifndef USE_LIBVO2 |
340 | 1089 { const vo_info_t *info = video_out->get_info(); |
1567 | 1090 mp_msg(MSGT_CPLAYER,MSGL_INFO,"VO: [%s] %dx%d => %dx%d %s %s%s%s%s\n",info->short_name, |
398 | 1091 sh_video->disp_w,sh_video->disp_h, |
340 | 1092 screen_size_x,screen_size_y, |
1183 | 1093 vo_format_name(out_fmt), |
340 | 1094 fullscreen?"fs ":"", |
1095 vidmode?"vm ":"", | |
766 | 1096 softzoom?"zoom ":"", |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1097 (flip==1)?"flip ":"" |
766 | 1098 // fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3) |
340 | 1099 ); |
1567 | 1100 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Description: %s\n",info->name); |
1101 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Author: %s\n", info->author); | |
1237 | 1102 if(strlen(info->comment) > 0) |
1567 | 1103 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Comment: %s\n", info->comment); |
340 | 1104 } |
1422 | 1105 #endif |
340 | 1106 |
1753 | 1107 #ifdef HAVE_NEW_GUI |
1108 if ( use_gui ) | |
1109 { | |
1952 | 1110 mplResizeToMovieSize( sh_video->disp_w,sh_video->disp_h ); |
1111 moviewidth=screen_size_x=sh_video->disp_w; | |
1112 movieheight=screen_size_y=sh_video->disp_h; | |
2447 | 1113 mplShMem->StreamType=stream->type; |
2854 | 1114 mplSetFileName( filename ); |
1753 | 1115 } |
1116 #endif | |
1117 | |
1567 | 1118 mp_msg(MSGT_CPLAYER,MSGL_V,"video_out->init(%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", |
398 | 1119 sh_video->disp_w,sh_video->disp_h, |
1 | 1120 screen_size_x,screen_size_y, |
766 | 1121 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), |
337 | 1122 title,out_fmt); |
1 | 1123 |
1422 | 1124 #ifdef USE_LIBVO2 |
1125 if(!vo2_start(video_out, | |
1126 sh_video->disp_w,sh_video->disp_h,out_fmt,0, | |
1127 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3) )){ | |
1128 #else | |
398 | 1129 if(video_out->init(sh_video->disp_w,sh_video->disp_h, |
1 | 1130 screen_size_x,screen_size_y, |
766 | 1131 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), |
337 | 1132 title,out_fmt)){ |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1133 #endif |
1582 | 1134 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
|
1135 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1 | 1136 } |
1856 | 1137 inited_flags|=INITED_VO; |
1567 | 1138 mp_msg(MSGT_CPLAYER,MSGL_V,"INFO: Video OUT driver init OK!\n"); |
1 | 1139 |
1140 fflush(stdout); | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
1141 |
1 | 1142 //================== MAIN: ========================== |
1143 { | |
746 | 1144 |
1420 | 1145 //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
|
1146 //float v_frame=0; // Video |
1 | 1147 float time_frame=0; // Timer |
1148 int eof=0; | |
1149 int force_redraw=0; | |
1400 | 1150 //float num_frames=0; // number of frames played |
1382 | 1151 int grab_frames=0; |
212 | 1152 char osd_text_buffer[64]; |
715 | 1153 int drop_frame=0; |
1154 int drop_frame_cnt=0; | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1155 int too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1156 int too_fast_frame_cnt=0; |
1439 | 1157 // 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
|
1158 float AV_delay=0; // average of A-V timestamp differences |
1439 | 1159 double cvideo_base_vtime; |
1160 double cvideo_base_vframe; | |
1161 double vdecode_time; | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1162 unsigned int lastframeout_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1163 float time_frame_corr_avg=0; |
1 | 1164 |
1165 //================ SETUP AUDIO ========================== | |
1166 current_module="setup_audio"; | |
1167 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1168 if(sh_audio){ |
1237 | 1169 |
1170 const ao_info_t *info=audio_out->info; | |
1567 | 1171 mp_msg(MSGT_CPLAYER,MSGL_INFO,"AO: [%s] %iHz %s %s\n", |
1237 | 1172 info->short_name, |
1173 force_srate?force_srate:sh_audio->samplerate, | |
1174 sh_audio->channels>1?"Stereo":"Mono", | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1175 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
|
1176 ); |
1567 | 1177 mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Description: %s\nAO: Author: %s\n", |
1237 | 1178 info->name, |
1179 info->author | |
1180 ); | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1181 if(strlen(info->comment) > 0) |
1567 | 1182 mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Comment: %s\n", info->comment); |
969 | 1183 if(!audio_out->init(force_srate?force_srate:sh_audio->samplerate, |
1184 sh_audio->channels,sh_audio->sample_format,0)){ | |
1582 | 1185 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotInitAO); |
1792 | 1186 sh_audio=d_audio->sh=NULL; |
1856 | 1187 } else { |
1188 inited_flags|=INITED_AO; | |
1 | 1189 } |
1190 | |
955 | 1191 // printf("Audio buffer size: %d bytes, delay: %5.3fs\n",audio_buffer_size,audio_buffer_delay); |
746 | 1192 |
758 | 1193 // fixup audio buffer size: |
782 | 1194 // if(outburst<MAX_OUTBURST){ |
1195 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+outburst; | |
1196 // printf("Audio out buffer size reduced to %d bytes\n",sh_audio->a_buffer_size); | |
1197 // } | |
758 | 1198 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1199 // sh_audio->timer=-(audio_buffer_delay); |
1 | 1200 } |
1201 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1202 sh_video->timer=0; |
2000 | 1203 if(sh_audio) sh_audio->timer=-audio_delay; |
1 | 1204 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1205 if(!sh_audio){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
1206 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_NoSound); |
1567 | 1207 if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused audio chunks\n",d_audio->packs); |
1 | 1208 ds_free_packs(d_audio); // free buffered chunks |
1209 d_audio->id=-2; // do not read audio chunks | |
1856 | 1210 if(audio_out) uninit_player(INITED_AO); // close device |
1 | 1211 } |
1212 | |
1213 current_module=NULL; | |
1214 | |
1660 | 1215 if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! |
398 | 1216 if(force_fps){ |
1217 sh_video->fps=force_fps; | |
1218 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
|
1219 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_FPSforced,sh_video->fps,sh_video->frametime); |
398 | 1220 } |
1 | 1221 |
1639 | 1222 //==================== START PLAYING ======================= |
1223 | |
1582 | 1224 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying);fflush(stdout); |
1 | 1225 |
1856 | 1226 if(!use_stdin){ |
1227 getch2_enable(); // prepare stdin for hotkeys... | |
1228 inited_flags|=INITED_GETCH2; | |
1229 } | |
1639 | 1230 |
1 | 1231 InitTimer(); |
1232 | |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1233 total_time_usage_start=GetTimer(); |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1234 |
1 | 1235 while(!eof){ |
2567 | 1236 // unsigned int aq_total_time=GetTimer(); |
1439 | 1237 float aq_sleep_time=0; |
1 | 1238 |
1125 | 1239 if(play_n_frames>=0){ |
1240 --play_n_frames; | |
1582 | 1241 if(play_n_frames<0) exit_player(MSGTR_Exit_frames); |
1125 | 1242 } |
1243 | |
2705 | 1244 vo_pts=sh_video->timer*90000.0; |
3201 | 1245 vo_fps=sh_video->fps; |
2705 | 1246 |
1 | 1247 /*========================== 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
|
1248 while(sh_audio){ |
746 | 1249 unsigned int t; |
2705 | 1250 int playsize; |
1251 | |
3097 | 1252 ao_data.pts=sh_audio->timer*90000.0; |
2705 | 1253 playsize=audio_out->get_space(); |
746 | 1254 |
955 | 1255 if(!playsize) break; // buffer is full, do not block here!!! |
746 | 1256 |
1257 if(playsize>MAX_OUTBURST) playsize=MAX_OUTBURST; // we shouldn't exceed it! | |
1258 //if(playsize>outburst) playsize=outburst; | |
291 | 1259 |
1260 // Update buffer if needed | |
1639 | 1261 current_module="decode_audio"; // Enter AUDIO decoder module |
746 | 1262 t=GetTimer(); |
1263 while(sh_audio->a_buffer_len<playsize && !d_audio->eof){ | |
1264 int ret=decode_audio(sh_audio,&sh_audio->a_buffer[sh_audio->a_buffer_len], | |
1265 playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len); | |
296 | 1266 if(ret>0) sh_audio->a_buffer_len+=ret; else break; |
1 | 1267 } |
1268 current_module=NULL; // Leave AUDIO decoder module | |
291 | 1269 t=GetTimer()-t;audio_time_usage+=t*0.000001; |
746 | 1270 |
1271 if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len; | |
1272 | |
955 | 1273 playsize=audio_out->play(sh_audio->a_buffer,playsize,0); |
1 | 1274 |
955 | 1275 if(playsize>0){ |
746 | 1276 sh_audio->a_buffer_len-=playsize; |
1277 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
|
1278 sh_audio->timer+=playsize/(float)(sh_audio->o_bps); |
1 | 1279 } |
1280 | |
1281 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
|
1282 } // if(sh_audio) |
1 | 1283 |
1284 /*========================== UPDATE TIMERS ============================*/ | |
746 | 1285 #if 0 |
1 | 1286 if(alsa){ |
1287 // Use system timer for sync, not audio card/driver | |
1288 time_frame-=GetRelativeTime(); | |
1289 if(time_frame<-0.1 || time_frame>0.1){ | |
1290 time_frame=0; | |
1291 } else { | |
398 | 1292 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
|
1293 usec_sleep(time_frame-0.022); |
398 | 1294 time_frame-=GetRelativeTime(); |
1295 } | |
103 | 1296 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
|
1297 usec_sleep(1000); // sleeps 1 clock tick (10ms)! |
103 | 1298 time_frame-=GetRelativeTime(); |
1299 } | |
398 | 1300 } |
1 | 1301 } |
746 | 1302 #endif |
1 | 1303 |
1304 /*========================== PLAY VIDEO ============================*/ | |
1305 | |
1439 | 1306 cvideo_base_vframe=sh_video->timer; |
1307 cvideo_base_vtime=video_time_usage; | |
1308 | |
1 | 1309 if(1) |
746 | 1310 while(1){ |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
1311 |
2567 | 1312 float frame_time=0; |
1291 | 1313 int blit_frame=0; |
715 | 1314 |
2567 | 1315 //-------------------- Decode a frame: ----------------------- |
1316 vdecode_time=video_time_usage; | |
1317 { unsigned char* start=NULL; | |
1318 int in_size; | |
1319 // get it! | |
1320 current_module="video_read_frame"; | |
1321 in_size=video_read_frame(sh_video,&frame_time,&start,force_fps); | |
1322 if(in_size<0){ eof=1; break; } | |
1323 if(in_size>max_framesize) max_framesize=in_size; // stats | |
1324 // decode: | |
1325 current_module="decode_video"; | |
1326 // printf("Decode! %p %d \n",start,in_size); | |
1327 blit_frame=decode_video(video_out,sh_video,start,in_size,drop_frame); | |
1291 | 1328 } |
2567 | 1329 vdecode_time=video_time_usage-vdecode_time; |
1330 //------------------------ frame decoded. -------------------- | |
1331 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1332 //------------------------ add OSD to frame contents --------- |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1333 #ifndef USE_LIBVO2 |
1768 | 1334 current_module="draw_osd"; |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1335 video_out->draw_osd(); |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1336 #endif |
1 | 1337 |
1768 | 1338 current_module="av_sync"; |
1339 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1340 sh_video->timer+=frame_time; |
746 | 1341 time_frame+=frame_time; // for nosound |
1342 | |
1567 | 1343 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time); |
780 | 1344 |
798 | 1345 if(drop_frame){ |
746 | 1346 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1347 if(sh_audio && !d_audio->eof){ |
3097 | 1348 float delay=audio_out->get_delay(); |
1349 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
|
1350 time_frame=sh_video->timer; |
3097 | 1351 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
|
1352 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
|
1353 drop_frame=0; // stop dropping frames |
1567 | 1354 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
|
1355 }else{ |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1356 ++drop_frame_cnt; |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1357 if (verbose > 0 && drop_frame_cnt%10 == 0) |
1567 | 1358 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
|
1359 } |
798 | 1360 } |
1709 | 1361 #ifdef HAVE_NEW_GUI |
2567 | 1362 if(use_gui) EventHandling(); |
1709 | 1363 #endif |
1729 | 1364 video_out->check_events(); // check events AST |
798 | 1365 } else { |
780 | 1366 // It's time to sleep... |
1367 current_module="sleep"; | |
1368 | |
1369 time_frame-=GetRelativeTime(); // reset timer | |
1370 | |
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 if(sh_audio && !d_audio->eof){ |
3097 | 1372 float delay=audio_out->get_delay(); |
1373 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
|
1374 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1375 if(!dapsync){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1376 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1377 /* Arpi's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1378 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1379 time_frame=sh_video->timer; |
3097 | 1380 time_frame-=sh_audio->timer-delay; |
1381 | |
798 | 1382 // we are out of time... drop next frame! |
940 | 1383 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
|
1384 static int drop_message=0; |
798 | 1385 drop_frame=frame_dropping; // tricky! |
1386 ++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
|
1387 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
|
1388 drop_message=1; |
1582 | 1389 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
|
1390 } |
1567 | 1391 mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nframe drop %d, %.2f\n", drop_frame, time_frame); |
798 | 1392 } |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1393 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1394 } else { |
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 /* DaP's AV-sync */ |
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 float SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1399 /* 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
|
1400 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
|
1401 // 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
|
1402 // 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
|
1403 if(SH_AV_delay<-2*frame_time){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1404 static int drop_message=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1405 drop_frame=frame_dropping; // tricky! |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1406 ++drop_frame_cnt; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1407 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
|
1408 drop_message=1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1409 mp_msg(MSGT_AVSYNC,MSGL_WARN,MSGTR_SystemTooSlow); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1410 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1411 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
|
1412 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
|
1413 /* go into unlimited-TF cycle */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1414 time_frame = SH_AV_delay; |
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 #define SL_CORR_AVG_LEN 125 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1417 /* don't adjust under framedropping */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1418 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
|
1419 (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
|
1420 #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
|
1421 #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
|
1422 time_frame += time_frame_corr_avg; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1423 // 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
|
1424 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
|
1425 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
|
1426 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1427 else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1428 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
|
1429 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
|
1430 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
|
1431 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
|
1432 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
|
1433 UNEXP_CORR_MAX : -UNEXP_CORR_MAX); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1434 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1435 } /* /start dropframe */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1436 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1437 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1438 |
780 | 1439 } else { |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1440 // NOSOUND: |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1441 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
|
1442 time_frame=0; |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1443 |
780 | 1444 } |
798 | 1445 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1446 // if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,sh_audio->timer,sh_video->timer); |
1439 | 1447 |
1448 aq_sleep_time+=time_frame; | |
1709 | 1449 |
1450 #ifdef HAVE_NEW_GUI | |
1451 if(use_gui){ | |
1802 | 1452 EventHandling(); |
1709 | 1453 } |
1454 #endif | |
2705 | 1455 |
1456 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
|
1457 |
3015 | 1458 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1459 if(rtc_fd>=0){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1460 // -------- RTC ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1461 while (time_frame > 0.000) { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1462 unsigned long long rtc_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1463 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
|
1464 perror ("read (rtc_fd)"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1465 time_frame-=GetRelativeTime(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1466 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1467 } else |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1468 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1469 { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1470 // -------- USLEEP + SOFTSLEEP ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1471 float min=softsleep?0.021:0.005; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1472 while(time_frame>min){ |
746 | 1473 if(time_frame<=0.020) |
1439 | 1474 usec_sleep(0); // sleeps 1 clock tick (10ms)! |
746 | 1475 else |
2757 | 1476 usec_sleep(1000000*(time_frame-0.020)); |
746 | 1477 time_frame-=GetRelativeTime(); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1478 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1479 if(softsleep){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1480 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
|
1481 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
|
1482 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1483 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1484 |
2705 | 1485 } |
117 | 1486 |
715 | 1487 current_module="flip_page"; |
1422 | 1488 #ifdef USE_LIBVO2 |
1489 if(blit_frame) vo2_flip(video_out,0); | |
1490 #else | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1491 video_out->check_events(); |
1962 | 1492 if(blit_frame){ |
1493 unsigned int t2=GetTimer(); | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1494 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1495 float j; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1496 #define FRAME_LAG_WARN 0.2 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1497 j = ((float)t2 - lastframeout_ts) / 1000000; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1498 lastframeout_ts = GetTimer(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1499 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
|
1500 too_fast_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1501 /* printf ("PANIC: too fast frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1502 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
|
1503 too_slow_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1504 /* printf ("PANIC: too slow frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1505 |
1962 | 1506 video_out->flip_page(); |
1507 t2=GetTimer()-t2;vout_time_usage+=t2*0.000001f; | |
1508 } | |
1422 | 1509 #endif |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1510 // usec_sleep(50000); // test only! |
780 | 1511 |
715 | 1512 } |
780 | 1513 |
1514 current_module=NULL; | |
715 | 1515 |
1 | 1516 if(eof) break; |
220 | 1517 if(force_redraw){ |
1518 --force_redraw; | |
577 | 1519 if(!force_redraw) osd_function=OSD_PLAY; |
746 | 1520 continue; |
220 | 1521 } |
1 | 1522 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1523 // 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 | 1524 // fflush(stdout); |
1525 | |
1526 #if 1 | |
1527 /*================ 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
|
1528 if(sh_audio){ |
780 | 1529 float a_pts=0; |
1530 float v_pts=0; | |
1531 | |
746 | 1532 // unplayed bytes in our and soundcard/dma buffer: |
3097 | 1533 float delay=audio_out->get_delay()+(float)sh_audio->a_buffer_len/(float)sh_audio->o_bps; |
746 | 1534 |
780 | 1535 if(pts_from_bps){ |
1498 | 1536 #if 1 |
1537 unsigned int samples=(sh_audio->audio.dwSampleSize)? | |
1538 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : | |
1539 (d_audio->pack_no); // <- used for VBR audio | |
1540 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; | |
1541 #else | |
1481 | 1542 if(sh_audio->audio.dwSampleSize) |
1543 a_pts=(ds_tell(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->wf->nAvgBytesPerSec; | |
1544 else // VBR: | |
1545 a_pts=d_audio->pack_no*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; | |
1498 | 1546 #endif |
1547 // v_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; | |
1548 // printf("V_PTS: PTS: %8.3f BPS: %8.3f \n",d_video->pts,v_pts); | |
1549 delay_corrected=1; | |
780 | 1550 } else { |
1551 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) | |
746 | 1552 a_pts=d_audio->pts; |
1498 | 1553 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
|
1554 //printf("*** %5.3f ***\n",a_pts); |
746 | 1555 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
|
1556 // v_pts=d_video->pts-frame_time; |
1498 | 1557 // v_pts=d_video->pts; |
780 | 1558 } |
1498 | 1559 v_pts=d_video->pts; |
746 | 1560 |
1567 | 1561 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 | 1562 |
398 | 1563 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
|
1564 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
|
1565 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
|
1566 x=AV_delay*0.1f; |
1 | 1567 if(x<-max_pts_correction) x=-max_pts_correction; else |
1568 if(x> max_pts_correction) x= max_pts_correction; | |
780 | 1569 if(default_max_pts_correction>=0) |
1570 max_pts_correction=default_max_pts_correction; | |
1571 else | |
1572 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
|
1573 sh_audio->timer+=x; c_total+=x; |
2353 | 1574 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 | 1575 a_pts-audio_delay-delay,v_pts,AV_delay,c_total, |
1546 | 1576 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded, |
1498 | 1577 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, |
1578 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, | |
1579 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 | |
1580 ,drop_frame_cnt | |
1581 ,output_quality | |
2353 | 1582 ,cache_fill_status |
1 | 1583 ); |
1584 fflush(stdout); | |
1585 } | |
780 | 1586 |
1 | 1587 } else { |
1588 // No audio: | |
1420 | 1589 |
1448 | 1590 if(!quiet) |
2353 | 1591 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"V:%6.1f %3d %2d%% %2d%% %4.1f%% %d %d %d%%\r",d_video->pts, |
1400 | 1592 (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
|
1593 (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
|
1594 (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
|
1595 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 |
2353 | 1596 ,drop_frame_cnt |
1597 ,output_quality | |
1598 ,cache_fill_status | |
442 | 1599 ); |
1 | 1600 |
1601 fflush(stdout); | |
1420 | 1602 |
1 | 1603 } |
1604 #endif | |
1605 | |
1439 | 1606 /*Output quality adjustments:*/ |
1607 if(auto_quality>0){ | |
1608 #if 0 | |
1609 /*If we took a long time decoding this frame, downgrade the quality.*/ | |
1610 if(output_quality>0&& | |
1611 (video_time_usage-cvideo_base_vtime)*sh_video->timer>= | |
1612 (0.95*sh_video->timer-(vout_time_usage+audio_time_usage))* | |
1613 (sh_video->timer-cvideo_base_vframe-frame_correction)){ | |
1614 output_quality>>=1; | |
1567 | 1615 mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Downgrading quality to %i.\n",output_quality); |
1439 | 1616 set_video_quality(sh_video,output_quality); |
1617 } else | |
1618 /*If we had plenty of extra time, upgrade the quality.*/ | |
1619 if(output_quality<auto_quality&& | |
1620 vdecode_time<0.5*frame_time&& | |
1621 (video_time_usage-cvideo_base_vtime)*sh_video->timer< | |
1622 (0.67*sh_video->timer-(vout_time_usage+audio_time_usage))* | |
1623 (sh_video->timer-cvideo_base_vframe-frame_correction)){ | |
1624 output_quality++; | |
1567 | 1625 mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Upgrading quality to %i.\n",output_quality); |
1439 | 1626 set_video_quality(sh_video,output_quality); |
1627 } | |
1628 #else | |
1496 | 1629 // float total=0.000001f * (GetTimer()-aq_total_time); |
1439 | 1630 // if(output_quality<auto_quality && aq_sleep_time>0.05f*total) |
1631 if(output_quality<auto_quality && aq_sleep_time>0) | |
1632 ++output_quality; | |
1633 else | |
1634 // if(output_quality>0 && aq_sleep_time<-0.05f*total) | |
1635 if(output_quality>1 && aq_sleep_time<0) | |
1636 --output_quality; | |
1637 else | |
1638 if(output_quality>0 && aq_sleep_time<-0.050f) // 50ms | |
1639 output_quality=0; | |
1640 // printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); | |
1641 set_video_quality(sh_video,output_quality); | |
1642 #endif | |
1643 } | |
1644 | |
1422 | 1645 #ifdef USE_OSD |
220 | 1646 if(osd_visible){ |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1647 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
|
1648 if (osd_function != OSD_PAUSE) |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1649 osd_function = OSD_PLAY; |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1650 } |
220 | 1651 } |
1422 | 1652 #endif |
371 | 1653 |
1654 if(osd_function==OSD_PAUSE){ | |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1655 int gui_pause_flag=0; // gany! |
1567 | 1656 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
|
1657 #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
|
1658 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
|
1659 #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
|
1660 if (audio_out && sh_audio) |
1156 | 1661 audio_out->pause(); // pause audio, keep data if possible |
723 | 1662 while( |
371 | 1663 #ifdef HAVE_LIRC |
723 | 1664 lirc_mp_getinput()<=0 && |
371 | 1665 #endif |
1467 | 1666 (use_stdin || getch2(20)<=0) && mplayer_get_key()<=0){ |
1422 | 1667 #ifndef USE_LIBVO2 |
723 | 1668 video_out->check_events(); |
1422 | 1669 #endif |
1709 | 1670 #ifdef HAVE_NEW_GUI |
1671 if(use_gui){ | |
1802 | 1672 EventHandling(); |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1673 if(mplShMem->Playing!=2 || (rel_seek_secs || abs_seek_pos)) |
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1674 { gui_pause_flag=1; break; } // end of pause or seek |
1709 | 1675 } |
1676 #endif | |
1467 | 1677 if(use_stdin) usec_sleep(1000); // do not eat the CPU |
723 | 1678 } |
1679 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
|
1680 if (audio_out && sh_audio) |
1156 | 1681 audio_out->resume(); // resume audio |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1682 (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
|
1683 #ifdef HAVE_NEW_GUI |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1684 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
|
1685 #endif |
371 | 1686 } |
1687 | |
746 | 1688 |
1689 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
|
1690 } // while(sh_video->timer<sh_audio->timer || force_redraw) |
1 | 1691 |
2436 | 1692 // skip some seconds... added by fly |
1693 | |
1694 if(step_sec>0) { | |
1695 osd_function=OSD_FFW; | |
1696 rel_seek_secs+=step_sec; | |
1697 } | |
1 | 1698 |
1699 //================= Keyboard events, SEEKing ==================== | |
1700 | |
723 | 1701 { int c; |
1 | 1702 while( |
1703 #ifdef HAVE_LIRC | |
1704 (c=lirc_mp_getinput())>0 || | |
1705 #endif | |
1467 | 1706 (!use_stdin && (c=getch2(0))>0) || (c=mplayer_get_key())>0) switch(c){ |
1 | 1707 // seek 10 sec |
1708 case KEY_RIGHT: | |
220 | 1709 osd_function=OSD_FFW; |
1 | 1710 rel_seek_secs+=10;break; |
1711 case KEY_LEFT: | |
220 | 1712 osd_function=OSD_REW; |
1 | 1713 rel_seek_secs-=10;break; |
1714 // seek 1 min | |
1715 case KEY_UP: | |
220 | 1716 osd_function=OSD_FFW; |
1 | 1717 rel_seek_secs+=60;break; |
1718 case KEY_DOWN: | |
220 | 1719 osd_function=OSD_REW; |
1 | 1720 rel_seek_secs-=60;break; |
651 | 1721 // seek 10 min |
1722 case KEY_PAGE_UP: | |
1723 rel_seek_secs+=600;break; | |
1724 case KEY_PAGE_DOWN: | |
1725 rel_seek_secs-=600;break; | |
1 | 1726 // delay correction: |
1727 case '+': | |
746 | 1728 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
|
1729 if(sh_audio) sh_audio->timer-=0.1; |
1 | 1730 break; |
1731 case '-': | |
746 | 1732 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
|
1733 if(sh_audio) sh_audio->timer+=0.1; |
1 | 1734 break; |
1735 // quit | |
1736 case KEY_ESC: // ESC | |
1639 | 1737 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
|
1738 case '>': |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1739 if(curr_filename>=num_filenames-1) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1740 break; |
1 | 1741 case KEY_ENTER: // ESC |
1639 | 1742 eof=1; // jump to next file |
1743 break; | |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1744 case '<': |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1745 if(curr_filename < 1) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1746 break; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1747 curr_filename-=2; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1748 eof=1; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1749 break; |
36 | 1750 case 'g': grab_frames=2;break; |
1 | 1751 // pause |
1752 case 'p': | |
1753 case ' ': | |
220 | 1754 osd_function=OSD_PAUSE; |
371 | 1755 break; |
1756 case 'o': // toggle OSD | |
1757 osd_level=(osd_level+1)%3; | |
1 | 1758 break; |
939 | 1759 case 'z': |
1760 sub_delay -= 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
1761 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 1762 break; |
1763 case 'x': | |
1764 sub_delay += 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
1765 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 1766 break; |
1626 | 1767 case '9': |
1768 case '0': | |
459 | 1769 case '*': |
555 | 1770 case '/': { |
1626 | 1771 if(c=='*' || c=='0'){ |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1772 mixer_incvolume(); |
555 | 1773 } else { |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1774 mixer_decvolume(); |
555 | 1775 } |
1776 | |
1422 | 1777 #ifdef USE_OSD |
555 | 1778 if(osd_level){ |
1779 osd_visible=sh_video->fps; // 1 sec | |
1780 vo_osd_progbar_type=OSD_VOLUME; | |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1781 vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0; |
1852 | 1782 //printf("volume: %d\n",vo_osd_progbar_value); |
555 | 1783 } |
1422 | 1784 #endif |
555 | 1785 } |
1786 break; | |
459 | 1787 case 'm': |
510 | 1788 mixer_usemaster=!mixer_usemaster; |
459 | 1789 break; |
1429 | 1790 |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1791 #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
|
1792 case '1': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1793 case '2': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1794 case '3': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1795 case '4': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1796 case '5': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1797 case '6': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1798 case '7': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1799 case '8': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1800 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
|
1801 abs_seek_pos=3; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1802 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
|
1803 break; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1804 #else |
1429 | 1805 // Contrast: |
1806 case '1': | |
1807 case '2': | |
1808 if(c=='2'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1809 if ( ++v_cont > 100 ) v_cont = 100; |
1429 | 1810 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1811 if ( --v_cont < 0 ) v_cont = 0; |
1429 | 1812 } |
1813 if(set_video_colors(sh_video,"Contrast",v_cont)){ | |
1814 #ifdef USE_OSD | |
1815 if(osd_level){ | |
1816 osd_visible=sh_video->fps; // 1 sec | |
1817 vo_osd_progbar_type=OSD_CONTRAST; | |
1726 | 1818 vo_osd_progbar_value=((v_cont)<<8)/100; |
1429 | 1819 } |
1820 #endif | |
1821 } | |
1822 break; | |
1823 | |
1824 // Brightness: | |
1825 case '3': | |
1826 case '4': | |
1827 if(c=='4'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1828 if ( ++v_bright > 100 ) v_bright = 100; |
1429 | 1829 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1830 if ( --v_bright < 0 ) v_bright = 0; |
1429 | 1831 } |
1832 if(set_video_colors(sh_video,"Brightness",v_bright)){ | |
1833 #ifdef USE_OSD | |
1834 if(osd_level){ | |
1835 osd_visible=sh_video->fps; // 1 sec | |
1836 vo_osd_progbar_type=OSD_BRIGHTNESS; | |
1726 | 1837 vo_osd_progbar_value=((v_bright)<<8)/100; |
1429 | 1838 } |
1839 #endif | |
1840 } | |
1841 break; | |
1842 | |
1843 // Hue: | |
1844 case '5': | |
1845 case '6': | |
1846 if(c=='6'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1847 if ( ++v_hue > 100 ) v_hue = 100; |
1429 | 1848 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1849 if ( --v_hue < 0 ) v_hue = 0; |
1429 | 1850 } |
1851 if(set_video_colors(sh_video,"Hue",v_hue)){ | |
1852 #ifdef USE_OSD | |
1853 if(osd_level){ | |
1854 osd_visible=sh_video->fps; // 1 sec | |
1855 vo_osd_progbar_type=OSD_HUE; | |
1726 | 1856 vo_osd_progbar_value=((v_hue)<<8)/100; |
1429 | 1857 } |
1858 #endif | |
1859 } | |
1860 break; | |
1861 | |
1862 // Saturation: | |
1863 case '7': | |
1864 case '8': | |
1865 if(c=='8'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1866 if ( ++v_saturation > 100 ) v_saturation = 100; |
1429 | 1867 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1868 if ( --v_saturation < 0 ) v_saturation = 0; |
1429 | 1869 } |
1870 if(set_video_colors(sh_video,"Saturation",v_saturation)){ | |
1871 #ifdef USE_OSD | |
1872 if(osd_level){ | |
1873 osd_visible=sh_video->fps; // 1 sec | |
1874 vo_osd_progbar_type=OSD_SATURATION; | |
1726 | 1875 vo_osd_progbar_value=((v_saturation)<<8)/100; |
1429 | 1876 } |
1877 #endif | |
1878 } | |
1879 break; | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1880 #endif |
1429 | 1881 |
715 | 1882 case 'd': |
798 | 1883 frame_dropping=(frame_dropping+1)%3; |
1567 | 1884 mp_msg(MSGT_CPLAYER,MSGL_V,"== drop: %d == \n",frame_dropping); |
715 | 1885 break; |
2941
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1886 |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1887 #ifdef USE_TV |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1888 case 'h': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1889 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
|
1890 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
|
1891 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1892 case 'l': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1893 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
|
1894 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
|
1895 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1896 case 'n': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1897 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
|
1898 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
|
1899 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1900 case 'b': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1901 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
|
1902 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
|
1903 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
1904 #endif |
1 | 1905 } |
1406 | 1906 } // keyboard event handler |
1907 | |
651 | 1908 if (seek_to_sec) { |
937 | 1909 int a,b; float d; |
1910 | |
1911 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | |
1912 rel_seek_secs += 3600*a +60*b +d ; | |
1913 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2) | |
1914 rel_seek_secs += 60*a +d; | |
1915 else if (sscanf(seek_to_sec, "%f", &d)==1) | |
1916 rel_seek_secs += d; | |
1917 | |
1918 seek_to_sec = NULL; | |
651 | 1919 } |
937 | 1920 |
2365 | 1921 /* Looping. */ |
1922 if(eof==5 && loop_times>-1) { | |
1923 | |
1924 if(loop_times!=0) { | |
1925 | |
1926 loop_times--; | |
1927 | |
1928 if(loop_times==0) | |
1929 loop_times=-1; | |
1930 | |
1931 } | |
1932 | |
1933 eof=0; | |
1934 abs_seek_pos=1; | |
1935 | |
1936 mp_msg(MSGT_CPLAYER,MSGL_V,"loop_times = %d, eof = 0\n", loop_times); | |
1937 | |
1938 } | |
1939 | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1940 if(rel_seek_secs || abs_seek_pos){ |
1466 | 1941 current_module="seek"; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1942 if(demux_seek(demuxer,rel_seek_secs,abs_seek_pos)){ |
1405 | 1943 // success: |
889 | 1944 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1945 if(sh_audio){ |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1946 if(verbose){ |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1947 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
|
1948 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; |
1567 | 1949 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
|
1950 } |
1567 | 1951 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
|
1952 } else { |
1567 | 1953 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
|
1954 } |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1955 fflush(stdout); |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1956 |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
1957 if(sh_audio){ |
1466 | 1958 current_module="seek_audio_reset"; |
1334 | 1959 audio_out->reset(); // stop audio, throwing away buffered data |
1 | 1960 } |
1961 | |
1422 | 1962 #ifdef USE_OSD |
1334 | 1963 // Set OSD: |
1964 if(osd_level){ | |
1965 int len=((demuxer->movi_end-demuxer->movi_start)>>8); | |
1727 | 1966 if (len>0){ |
1967 osd_visible=sh_video->fps; // 1 sec | |
1968 vo_osd_progbar_type=0; | |
1969 vo_osd_progbar_value=(demuxer->filepos-demuxer->movi_start)/len; | |
1970 } | |
1334 | 1971 } |
1422 | 1972 #endif |
1405 | 1973 |
1420 | 1974 c_total=0; |
1 | 1975 max_pts_correction=0.1; |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1976 osd_visible=sh_video->fps; // to rewert to PLAY pointer after 1 sec |
1 | 1977 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
|
1978 drop_frame_cnt=0; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1979 too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1980 too_fast_frame_cnt=0; |
1 | 1981 } |
1405 | 1982 rel_seek_secs=0; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1983 abs_seek_pos=0; |
1466 | 1984 current_module=NULL; |
1985 } | |
1986 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
1987 #ifdef HAVE_NEW_GUI |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
1988 if(use_gui){ |
1735 | 1989 if(demuxer->file_format==DEMUXER_TYPE_AVI && sh_video->video.dwLength>2){ |
1990 // get pos from frame number / total frames | |
1991 mplShMem->Position=(float)d_video->pack_no*100.0f/sh_video->video.dwLength; | |
1992 } else { | |
1993 // get pos from file position / filesize | |
1994 int len=((demuxer->movi_end-demuxer->movi_start)); | |
1995 int pos=(demuxer->file_format==DEMUXER_TYPE_AVI)?demuxer->filepos:d_video->pos; | |
1996 mplShMem->Position=(len<=0)?0:((float)(pos-demuxer->movi_start) / len * 100.0f); | |
1997 } | |
1729 | 1998 mplShMem->TimeSec=d_video->pts; |
1772 | 1999 if(mplShMem->Playing==0) break; // STOP |
2000 if(mplShMem->Playing==2) osd_function=OSD_PAUSE; | |
1852 | 2001 if ( mplShMem->VolumeChanged ) |
1848 | 2002 { |
1852 | 2003 mixer_setvolume( mplShMem->Volume,mplShMem->Volume ); |
2004 mplShMem->VolumeChanged=0; | |
2005 #ifdef USE_OSD | |
2006 if ( osd_level ) | |
2007 { | |
2008 osd_visible=sh_video->fps; // 1 sec | |
2009 vo_osd_progbar_type=OSD_VOLUME; | |
2010 vo_osd_progbar_value=( ( mplShMem->Volume ) * 256.0 ) / 100.0; | |
2011 } | |
1848 | 2012 #endif |
1852 | 2013 } |
2014 mplShMem->Volume=(float)mixer_getbothvolume(); | |
3054 | 2015 #ifdef USE_DVDREAD |
2016 if ( stream->type == STREAMTYPE_DVD ) | |
2017 { | |
2018 dvd_priv_t * dvdp = stream->priv; | |
2019 mplShMem->DVD.current_chapter=dvdp->cur_cell + 1; | |
2020 } | |
2021 #endif | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2022 } |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2023 #endif |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2024 |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2025 |
220 | 2026 //================= Update OSD ==================== |
1422 | 2027 #ifdef USE_OSD |
1421 | 2028 if(osd_level>=2){ |
780 | 2029 int pts=d_video->pts; |
595 | 2030 if(pts==osd_last_pts-1) ++pts; else osd_last_pts=pts; |
371 | 2031 vo_osd_text=osd_text_buffer; |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2032 if (osd_show_sub_delay) { |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2033 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
|
2034 osd_show_sub_delay--; |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2035 } else |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2036 sprintf(vo_osd_text,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60); |
371 | 2037 } else { |
2038 vo_osd_text=NULL; | |
2039 } | |
220 | 2040 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0; |
371 | 2041 // vo_osd_text=osd_text_buffer; |
1422 | 2042 #endif |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
2043 |
1422 | 2044 #ifdef USE_SUB |
258 | 2045 // find sub |
1204 | 2046 if(subtitles && d_video->pts>0){ |
1762 | 2047 float pts=d_video->pts; |
398 | 2048 if(sub_fps==0) sub_fps=sh_video->fps; |
482 | 2049 current_module="find_sub"; |
780 | 2050 find_sub(subtitles,sub_uses_time?(100*(pts+sub_delay)):((pts+sub_delay)*sub_fps)); // FIXME! frame counter... |
482 | 2051 current_module=NULL; |
258 | 2052 } |
1422 | 2053 #endif |
554 | 2054 |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2055 |
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2056 #ifdef USE_DVDREAD |
554 | 2057 // DVD sub: |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2058 if(vo_spudec){ |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2059 unsigned char* packet=NULL; |
557 | 2060 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
|
2061 current_module="spudec"; |
557 | 2062 if(len>=2){ |
2063 int len2; | |
2064 len2=(packet[0]<<8)+packet[1]; | |
1567 | 2065 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
|
2066 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
|
2067 } else { |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2068 spudec_heartbeat(vo_spudec,100*d_video->pts); |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2069 if(len>=0) |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2070 mp_msg(MSGT_CPLAYER,MSGL_V,"invalid dvd sub\n"); |
554 | 2071 } |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2072 current_module=NULL; |
554 | 2073 } |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2074 #endif |
554 | 2075 |
1421 | 2076 } // while(!eof) |
1 | 2077 |
1567 | 2078 mp_msg(MSGT_GLOBAL,MSGL_V,"EOF code: %d \n",eof); |
1 | 2079 |
1639 | 2080 } |
2081 | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2082 |
1790 | 2083 if(curr_filename+1<num_filenames || use_gui){ |
1639 | 2084 // partial uninit: |
2085 | |
1857 | 2086 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
|
2087 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2088 } |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2089 |
1808 | 2090 goto_next_file: // don't jump here after ao/vo/getch initialization! |
2091 | |
1797 | 2092 #ifdef HAVE_NEW_GUI |
2093 if(use_gui) | |
2094 { | |
2095 mplStop(); | |
2096 } | |
2097 #endif | |
2098 | |
1790 | 2099 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
|
2100 |
1654 | 2101 current_module="uninit_vcodec"; |
2102 if(sh_video) uninit_video(sh_video); | |
2103 | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2104 current_module="free_demuxer"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2105 if(demuxer) free_demuxer(demuxer); |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2106 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2107 current_module="free_stream"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2108 if(stream) free_stream(stream); |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2109 |
1639 | 2110 video_out=NULL; |
2111 audio_out=NULL; | |
2854 | 2112 |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2113 goto play_next_file; |
1639 | 2114 } |
2115 | |
1582 | 2116 exit_player(MSGTR_Exit_eof); |
1639 | 2117 |
109 | 2118 return 1; |
2119 } |