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