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