Mercurial > mplayer.hg
annotate mplayer.c @ 3729:6cfc308bc74a
warning fix
author | pl |
---|---|
date | Tue, 25 Dec 2001 11:49:19 +0000 |
parents | c8a267dc9941 |
children | 689986c2af9b |
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); |
3712 | 1023 { /* local vars */ |
1024 short bestprio=-1; | |
1025 struct codecs_st *bestcodec=NULL; | |
626 | 1026 while(1){ |
1027 sh_video->codec=find_codec(sh_video->format, | |
1028 sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,sh_video->codec,0); | |
3712 | 1029 if(!sh_video->codec/* && bestprio==-1*/){ |
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 if(video_family!=-1) { |
3712 | 1031 //sh_video->codec=NULL; /* re-search */ |
1582 | 1032 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
|
1033 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
|
1034 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
|
1035 } |
3712 | 1036 if(bestprio==-1 || !video_codec) { |
1582 | 1037 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format); |
1038 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
|
1039 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
3712 | 1040 } |
1041 } else { | |
1042 // is next line needed anymore? - atmos :: | |
1043 if(!allow_dshow && sh_video->codec->driver==VFM_DSHOW) continue; // skip DShow | |
1044 else if(video_codec && strcmp(sh_video->codec->name,video_codec)) continue; | |
1045 else if(video_family!=-1 && sh_video->codec->driver!=video_family) continue; | |
1046 else if(video_family==-1 && !video_codec && sh_video->codec->priority) { | |
1047 if(sh_video->codec->priority > bestprio) { | |
1048 //printf("\n\n!!! setting bestprio from %d to %d for %s!!!\n\n", bestprio, sh_video->codec->priority, sh_video->codec->name); | |
1049 bestprio=sh_video->codec->priority; | |
1050 bestcodec=sh_video->codec; | |
1051 } | |
1052 continue; | |
1053 } | |
1054 } /* sh_video->codec */ | |
626 | 1055 break; |
303 | 1056 } |
3712 | 1057 if(bestprio!=-1) { |
1058 //printf("chose codec %s by priority.\n", bestcodec->name); | |
1059 sh_video->codec=bestcodec; | |
1060 } | |
303 | 1061 |
3712 | 1062 } /* end local vars */ |
1063 | |
1064 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s video codec: [%s] drv:%d prio:%d (%s)\n",video_codec?"Forcing":"Detected",sh_video->codec->name,sh_video->codec->driver,sh_video->codec->priority!=-1?sh_video->codec->priority:0,sh_video->codec->info); | |
303 | 1065 |
1066 for(i=0;i<CODECS_MAX_OUTFMT;i++){ | |
2705 | 1067 // int ret; |
303 | 1068 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
|
1069 if(out_fmt==0xFFFFFFFF) continue; |
1422 | 1070 #ifdef USE_LIBVO2 |
2705 | 1071 vo_flags=vo2_query_format(video_out); |
1422 | 1072 #else |
2705 | 1073 vo_flags=video_out->query_format(out_fmt); |
1422 | 1074 #endif |
2705 | 1075 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: query(%s) returned 0x%X\n",vo_format_name(out_fmt),vo_flags); |
1076 if(vo_flags) break; | |
303 | 1077 } |
1078 if(i>=CODECS_MAX_OUTFMT){ | |
1582 | 1079 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
|
1080 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
303 | 1081 } |
1082 sh_video->outfmtidx=i; | |
1083 | |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1084 if(flip==-1){ |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1085 // autodetect flipping |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1086 flip=0; |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1087 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
|
1088 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
|
1089 flip=1; |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1090 } |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1091 |
1567 | 1092 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug1: out_fmt=%s\n",vo_format_name(out_fmt)); |
487 | 1093 |
1291 | 1094 if(!init_video(sh_video)){ |
1582 | 1095 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
|
1096 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1 | 1097 } |
1098 | |
1439 | 1099 if(auto_quality>0){ |
1100 // Auto quality option enabled | |
1101 output_quality=get_video_quality_max(sh_video); | |
1102 if(auto_quality>output_quality) auto_quality=output_quality; | |
1103 else output_quality=auto_quality; | |
1567 | 1104 mp_msg(MSGT_CPLAYER,MSGL_V,"AutoQ: setting quality to %d\n",output_quality); |
1439 | 1105 set_video_quality(sh_video,output_quality); |
1106 } | |
1107 | |
398 | 1108 // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============ |
1 | 1109 |
1639 | 1110 current_module="init_libvo"; |
1111 | |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1112 #if 0 /* was X11_FULLSCREEN hack -> moved to libvo/vo_xv.c where it belongs ::atmos */ |
1 | 1113 if(fullscreen){ |
1114 if(vo_init()){ | |
1115 //if(verbose) printf("X11 running at %dx%d depth: %d\n",vo_screenwidth,vo_screenheight,vo_depthonscreen); | |
1116 } | |
1117 if(!screen_size_xy) screen_size_xy=vo_screenwidth; // scale with asp.ratio | |
1118 } | |
1119 #endif | |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1120 // Set default VGA 1:1 aspect as fallback ::atmos |
3139 | 1121 if(movie_aspect>-1.0) sh_video->aspect = movie_aspect; // cmdline overrides autodetect |
2042 | 1122 // if(!sh_video->aspect) sh_video->aspect=1.0; |
1 | 1123 |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1124 if(screen_size_xy||screen_size_x||screen_size_y){ |
1 | 1125 if(screen_size_xy>0){ |
1126 if(screen_size_xy<=8){ | |
398 | 1127 screen_size_x=screen_size_xy*sh_video->disp_w; |
1128 screen_size_y=screen_size_xy*sh_video->disp_h; | |
1 | 1129 } else { |
1130 screen_size_x=screen_size_xy; | |
398 | 1131 screen_size_y=screen_size_xy*sh_video->disp_h/sh_video->disp_w; |
1 | 1132 } |
337 | 1133 } else if(!vidmode){ |
1134 if(!screen_size_x) screen_size_x=SCREEN_SIZE_X; | |
1135 if(!screen_size_y) screen_size_y=SCREEN_SIZE_Y; | |
398 | 1136 if(screen_size_x<=8) screen_size_x*=sh_video->disp_w; |
1137 if(screen_size_y<=8) screen_size_y*=sh_video->disp_h; | |
1 | 1138 } |
2034
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1139 } else { |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1140 // 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
|
1141 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
|
1142 screen_size_y=sh_video->disp_h; |
2042 | 1143 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
|
1144 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
|
1145 sh_video->aspect); |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1146 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
|
1147 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
|
1148 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
|
1149 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
|
1150 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
|
1151 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
|
1152 } |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1153 } else { |
2042 | 1154 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
|
1155 } |
2f1974590f88
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
2020
diff
changeset
|
1156 } |
208
ae0f909ccc7c
Adds code to deal with vidmode selection. -- mgraffam
mgraffam
parents:
190
diff
changeset
|
1157 |
1422 | 1158 #ifndef USE_LIBVO2 |
340 | 1159 { const vo_info_t *info = video_out->get_info(); |
1567 | 1160 mp_msg(MSGT_CPLAYER,MSGL_INFO,"VO: [%s] %dx%d => %dx%d %s %s%s%s%s\n",info->short_name, |
398 | 1161 sh_video->disp_w,sh_video->disp_h, |
340 | 1162 screen_size_x,screen_size_y, |
1183 | 1163 vo_format_name(out_fmt), |
340 | 1164 fullscreen?"fs ":"", |
1165 vidmode?"vm ":"", | |
766 | 1166 softzoom?"zoom ":"", |
778
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1167 (flip==1)?"flip ":"" |
766 | 1168 // fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3) |
340 | 1169 ); |
1567 | 1170 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Description: %s\n",info->name); |
1171 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Author: %s\n", info->author); | |
1237 | 1172 if(strlen(info->comment) > 0) |
1567 | 1173 mp_msg(MSGT_CPLAYER,MSGL_V,"VO: Comment: %s\n", info->comment); |
340 | 1174 } |
1422 | 1175 #endif |
340 | 1176 |
1753 | 1177 #ifdef HAVE_NEW_GUI |
1178 if ( use_gui ) | |
1179 { | |
1952 | 1180 mplResizeToMovieSize( sh_video->disp_w,sh_video->disp_h ); |
3558 | 1181 moviewidth=sh_video->disp_w; |
1182 movieheight=sh_video->disp_h; | |
2447 | 1183 mplShMem->StreamType=stream->type; |
2854 | 1184 mplSetFileName( filename ); |
1753 | 1185 } |
1186 #endif | |
1187 | |
1567 | 1188 mp_msg(MSGT_CPLAYER,MSGL_V,"video_out->init(%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", |
398 | 1189 sh_video->disp_w,sh_video->disp_h, |
1 | 1190 screen_size_x,screen_size_y, |
766 | 1191 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), |
337 | 1192 title,out_fmt); |
1 | 1193 |
1422 | 1194 #ifdef USE_LIBVO2 |
1195 if(!vo2_start(video_out, | |
1196 sh_video->disp_w,sh_video->disp_h,out_fmt,0, | |
1197 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3) )){ | |
1198 #else | |
398 | 1199 if(video_out->init(sh_video->disp_w,sh_video->disp_h, |
1 | 1200 screen_size_x,screen_size_y, |
766 | 1201 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), |
337 | 1202 title,out_fmt)){ |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1203 #endif |
1582 | 1204 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
|
1205 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1 | 1206 } |
1856 | 1207 inited_flags|=INITED_VO; |
1567 | 1208 mp_msg(MSGT_CPLAYER,MSGL_V,"INFO: Video OUT driver init OK!\n"); |
1 | 1209 |
1210 fflush(stdout); | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
1211 |
1 | 1212 //================== MAIN: ========================== |
1213 { | |
746 | 1214 |
1420 | 1215 //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
|
1216 //float v_frame=0; // Video |
1 | 1217 float time_frame=0; // Timer |
1218 int eof=0; | |
1219 int force_redraw=0; | |
1400 | 1220 //float num_frames=0; // number of frames played |
1382 | 1221 int grab_frames=0; |
212 | 1222 char osd_text_buffer[64]; |
715 | 1223 int drop_frame=0; |
1224 int drop_frame_cnt=0; | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1225 int too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1226 int too_fast_frame_cnt=0; |
1439 | 1227 // 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
|
1228 float AV_delay=0; // average of A-V timestamp differences |
1439 | 1229 double cvideo_base_vtime; |
1230 double cvideo_base_vframe; | |
1231 double vdecode_time; | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1232 unsigned int lastframeout_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1233 float time_frame_corr_avg=0; |
1 | 1234 |
1235 //================ SETUP AUDIO ========================== | |
1236 current_module="setup_audio"; | |
1237 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1238 if(sh_audio){ |
1237 | 1239 |
1240 const ao_info_t *info=audio_out->info; | |
1567 | 1241 mp_msg(MSGT_CPLAYER,MSGL_INFO,"AO: [%s] %iHz %s %s\n", |
1237 | 1242 info->short_name, |
1243 force_srate?force_srate:sh_audio->samplerate, | |
1244 sh_audio->channels>1?"Stereo":"Mono", | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1245 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
|
1246 ); |
1567 | 1247 mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Description: %s\nAO: Author: %s\n", |
1237 | 1248 info->name, |
1249 info->author | |
1250 ); | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1251 if(strlen(info->comment) > 0) |
1567 | 1252 mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Comment: %s\n", info->comment); |
969 | 1253 if(!audio_out->init(force_srate?force_srate:sh_audio->samplerate, |
1254 sh_audio->channels,sh_audio->sample_format,0)){ | |
1582 | 1255 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotInitAO); |
1792 | 1256 sh_audio=d_audio->sh=NULL; |
1856 | 1257 } else { |
1258 inited_flags|=INITED_AO; | |
1 | 1259 } |
1260 | |
955 | 1261 // printf("Audio buffer size: %d bytes, delay: %5.3fs\n",audio_buffer_size,audio_buffer_delay); |
746 | 1262 |
758 | 1263 // fixup audio buffer size: |
782 | 1264 // if(outburst<MAX_OUTBURST){ |
1265 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+outburst; | |
1266 // printf("Audio out buffer size reduced to %d bytes\n",sh_audio->a_buffer_size); | |
1267 // } | |
758 | 1268 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1269 // sh_audio->timer=-(audio_buffer_delay); |
1 | 1270 } |
1271 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1272 sh_video->timer=0; |
2000 | 1273 if(sh_audio) sh_audio->timer=-audio_delay; |
1 | 1274 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1275 if(!sh_audio){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
1276 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_NoSound); |
1567 | 1277 if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused audio chunks\n",d_audio->packs); |
1 | 1278 ds_free_packs(d_audio); // free buffered chunks |
1279 d_audio->id=-2; // do not read audio chunks | |
1856 | 1280 if(audio_out) uninit_player(INITED_AO); // close device |
1 | 1281 } |
1282 | |
1283 current_module=NULL; | |
1284 | |
1660 | 1285 if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! |
398 | 1286 if(force_fps){ |
1287 sh_video->fps=force_fps; | |
1288 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
|
1289 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_FPSforced,sh_video->fps,sh_video->frametime); |
398 | 1290 } |
1 | 1291 |
1639 | 1292 //==================== START PLAYING ======================= |
1293 | |
1582 | 1294 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying);fflush(stdout); |
1 | 1295 |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1296 if(!use_stdin && !slave_mode){ |
1856 | 1297 getch2_enable(); // prepare stdin for hotkeys... |
1298 inited_flags|=INITED_GETCH2; | |
1299 } | |
1639 | 1300 |
1 | 1301 InitTimer(); |
1302 | |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1303 total_time_usage_start=GetTimer(); |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1304 |
1 | 1305 while(!eof){ |
2567 | 1306 // unsigned int aq_total_time=GetTimer(); |
1439 | 1307 float aq_sleep_time=0; |
1 | 1308 |
1125 | 1309 if(play_n_frames>=0){ |
1310 --play_n_frames; | |
1582 | 1311 if(play_n_frames<0) exit_player(MSGTR_Exit_frames); |
1125 | 1312 } |
1313 | |
2705 | 1314 vo_pts=sh_video->timer*90000.0; |
3201 | 1315 vo_fps=sh_video->fps; |
2705 | 1316 |
1 | 1317 /*========================== 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
|
1318 while(sh_audio){ |
746 | 1319 unsigned int t; |
2705 | 1320 int playsize; |
1321 | |
3097 | 1322 ao_data.pts=sh_audio->timer*90000.0; |
2705 | 1323 playsize=audio_out->get_space(); |
746 | 1324 |
955 | 1325 if(!playsize) break; // buffer is full, do not block here!!! |
746 | 1326 |
1327 if(playsize>MAX_OUTBURST) playsize=MAX_OUTBURST; // we shouldn't exceed it! | |
1328 //if(playsize>outburst) playsize=outburst; | |
291 | 1329 |
1330 // Update buffer if needed | |
1639 | 1331 current_module="decode_audio"; // Enter AUDIO decoder module |
746 | 1332 t=GetTimer(); |
1333 while(sh_audio->a_buffer_len<playsize && !d_audio->eof){ | |
1334 int ret=decode_audio(sh_audio,&sh_audio->a_buffer[sh_audio->a_buffer_len], | |
1335 playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len); | |
296 | 1336 if(ret>0) sh_audio->a_buffer_len+=ret; else break; |
1 | 1337 } |
1338 current_module=NULL; // Leave AUDIO decoder module | |
291 | 1339 t=GetTimer()-t;audio_time_usage+=t*0.000001; |
746 | 1340 |
1341 if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len; | |
1342 | |
955 | 1343 playsize=audio_out->play(sh_audio->a_buffer,playsize,0); |
1 | 1344 |
955 | 1345 if(playsize>0){ |
746 | 1346 sh_audio->a_buffer_len-=playsize; |
1347 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
|
1348 sh_audio->timer+=playsize/(float)(sh_audio->o_bps); |
1 | 1349 } |
1350 | |
1351 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
|
1352 } // if(sh_audio) |
1 | 1353 |
1354 /*========================== UPDATE TIMERS ============================*/ | |
746 | 1355 #if 0 |
1 | 1356 if(alsa){ |
1357 // Use system timer for sync, not audio card/driver | |
1358 time_frame-=GetRelativeTime(); | |
1359 if(time_frame<-0.1 || time_frame>0.1){ | |
1360 time_frame=0; | |
1361 } else { | |
398 | 1362 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
|
1363 usec_sleep(time_frame-0.022); |
398 | 1364 time_frame-=GetRelativeTime(); |
1365 } | |
103 | 1366 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
|
1367 usec_sleep(1000); // sleeps 1 clock tick (10ms)! |
103 | 1368 time_frame-=GetRelativeTime(); |
1369 } | |
398 | 1370 } |
1 | 1371 } |
746 | 1372 #endif |
1 | 1373 |
1374 /*========================== PLAY VIDEO ============================*/ | |
1375 | |
1439 | 1376 cvideo_base_vframe=sh_video->timer; |
1377 cvideo_base_vtime=video_time_usage; | |
1378 | |
1 | 1379 if(1) |
746 | 1380 while(1){ |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
1381 |
2567 | 1382 float frame_time=0; |
1291 | 1383 int blit_frame=0; |
715 | 1384 |
2567 | 1385 //-------------------- Decode a frame: ----------------------- |
1386 vdecode_time=video_time_usage; | |
1387 { unsigned char* start=NULL; | |
1388 int in_size; | |
1389 // get it! | |
1390 current_module="video_read_frame"; | |
1391 in_size=video_read_frame(sh_video,&frame_time,&start,force_fps); | |
1392 if(in_size<0){ eof=1; break; } | |
1393 if(in_size>max_framesize) max_framesize=in_size; // stats | |
1394 // decode: | |
1395 current_module="decode_video"; | |
1396 // printf("Decode! %p %d \n",start,in_size); | |
1397 blit_frame=decode_video(video_out,sh_video,start,in_size,drop_frame); | |
1291 | 1398 } |
2567 | 1399 vdecode_time=video_time_usage-vdecode_time; |
1400 //------------------------ frame decoded. -------------------- | |
1401 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1402 //------------------------ add OSD to frame contents --------- |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1403 #ifndef USE_LIBVO2 |
1768 | 1404 current_module="draw_osd"; |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1405 video_out->draw_osd(); |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1406 #endif |
1 | 1407 |
1768 | 1408 current_module="av_sync"; |
1409 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1410 sh_video->timer+=frame_time; |
746 | 1411 time_frame+=frame_time; // for nosound |
1412 | |
1567 | 1413 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time); |
780 | 1414 |
798 | 1415 if(drop_frame){ |
746 | 1416 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1417 if(sh_audio && !d_audio->eof){ |
3097 | 1418 float delay=audio_out->get_delay(); |
1419 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
|
1420 time_frame=sh_video->timer; |
3097 | 1421 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
|
1422 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
|
1423 drop_frame=0; // stop dropping frames |
1567 | 1424 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
|
1425 }else{ |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1426 ++drop_frame_cnt; |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1427 if (verbose > 0 && drop_frame_cnt%10 == 0) |
1567 | 1428 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
|
1429 } |
798 | 1430 } |
1709 | 1431 #ifdef HAVE_NEW_GUI |
2567 | 1432 if(use_gui) EventHandling(); |
1709 | 1433 #endif |
1729 | 1434 video_out->check_events(); // check events AST |
798 | 1435 } else { |
780 | 1436 // It's time to sleep... |
1437 current_module="sleep"; | |
1438 | |
1439 time_frame-=GetRelativeTime(); // reset timer | |
1440 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1441 if(sh_audio && !d_audio->eof){ |
3097 | 1442 float delay=audio_out->get_delay(); |
1443 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
|
1444 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1445 if(!dapsync){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1446 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1447 /* Arpi's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1448 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1449 time_frame=sh_video->timer; |
3097 | 1450 time_frame-=sh_audio->timer-delay; |
1451 | |
798 | 1452 // we are out of time... drop next frame! |
940 | 1453 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
|
1454 static int drop_message=0; |
798 | 1455 drop_frame=frame_dropping; // tricky! |
1456 ++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
|
1457 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
|
1458 drop_message=1; |
1582 | 1459 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
|
1460 } |
1567 | 1461 mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nframe drop %d, %.2f\n", drop_frame, time_frame); |
798 | 1462 } |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1463 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1464 } else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1465 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1466 /* DaP's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1467 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1468 float SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1469 /* 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
|
1470 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
|
1471 // 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
|
1472 // 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
|
1473 if(SH_AV_delay<-2*frame_time){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1474 static int drop_message=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1475 drop_frame=frame_dropping; // tricky! |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1476 ++drop_frame_cnt; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1477 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
|
1478 drop_message=1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1479 mp_msg(MSGT_AVSYNC,MSGL_WARN,MSGTR_SystemTooSlow); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1480 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1481 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
|
1482 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
|
1483 /* go into unlimited-TF cycle */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1484 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1485 } else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1486 #define SL_CORR_AVG_LEN 125 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1487 /* don't adjust under framedropping */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1488 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
|
1489 (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
|
1490 #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
|
1491 #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
|
1492 time_frame += time_frame_corr_avg; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1493 // 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
|
1494 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
|
1495 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
|
1496 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1497 else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1498 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
|
1499 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
|
1500 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
|
1501 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
|
1502 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
|
1503 UNEXP_CORR_MAX : -UNEXP_CORR_MAX); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1504 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1505 } /* /start dropframe */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1506 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1507 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1508 |
780 | 1509 } else { |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1510 // NOSOUND: |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1511 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
|
1512 time_frame=0; |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1513 |
780 | 1514 } |
798 | 1515 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1516 // if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,sh_audio->timer,sh_video->timer); |
1439 | 1517 |
1518 aq_sleep_time+=time_frame; | |
1709 | 1519 |
1520 #ifdef HAVE_NEW_GUI | |
1521 if(use_gui){ | |
1802 | 1522 EventHandling(); |
1709 | 1523 } |
1524 #endif | |
2705 | 1525 |
1526 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
|
1527 |
3015 | 1528 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1529 if(rtc_fd>=0){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1530 // -------- RTC ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1531 while (time_frame > 0.000) { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1532 unsigned long long rtc_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1533 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
|
1534 perror ("read (rtc_fd)"); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1535 time_frame-=GetRelativeTime(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1536 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1537 } else |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1538 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1539 { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1540 // -------- USLEEP + SOFTSLEEP ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1541 float min=softsleep?0.021:0.005; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1542 while(time_frame>min){ |
746 | 1543 if(time_frame<=0.020) |
1439 | 1544 usec_sleep(0); // sleeps 1 clock tick (10ms)! |
746 | 1545 else |
2757 | 1546 usec_sleep(1000000*(time_frame-0.020)); |
746 | 1547 time_frame-=GetRelativeTime(); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1548 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1549 if(softsleep){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1550 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
|
1551 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
|
1552 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1553 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1554 |
2705 | 1555 } |
117 | 1556 |
715 | 1557 current_module="flip_page"; |
1422 | 1558 #ifdef USE_LIBVO2 |
1559 if(blit_frame) vo2_flip(video_out,0); | |
1560 #else | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1561 video_out->check_events(); |
1962 | 1562 if(blit_frame){ |
1563 unsigned int t2=GetTimer(); | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1564 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1565 float j; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1566 #define FRAME_LAG_WARN 0.2 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1567 j = ((float)t2 - lastframeout_ts) / 1000000; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1568 lastframeout_ts = GetTimer(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1569 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
|
1570 too_fast_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1571 /* printf ("PANIC: too fast frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1572 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
|
1573 too_slow_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1574 /* printf ("PANIC: too slow frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1575 |
1962 | 1576 video_out->flip_page(); |
1577 t2=GetTimer()-t2;vout_time_usage+=t2*0.000001f; | |
1578 } | |
1422 | 1579 #endif |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1026
diff
changeset
|
1580 // usec_sleep(50000); // test only! |
780 | 1581 |
715 | 1582 } |
780 | 1583 |
1584 current_module=NULL; | |
715 | 1585 |
1 | 1586 if(eof) break; |
220 | 1587 if(force_redraw){ |
1588 --force_redraw; | |
577 | 1589 if(!force_redraw) osd_function=OSD_PLAY; |
746 | 1590 continue; |
220 | 1591 } |
1 | 1592 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1593 // 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 | 1594 // fflush(stdout); |
1595 | |
1596 #if 1 | |
1597 /*================ 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
|
1598 if(sh_audio){ |
780 | 1599 float a_pts=0; |
1600 float v_pts=0; | |
1601 | |
746 | 1602 // unplayed bytes in our and soundcard/dma buffer: |
3097 | 1603 float delay=audio_out->get_delay()+(float)sh_audio->a_buffer_len/(float)sh_audio->o_bps; |
746 | 1604 |
780 | 1605 if(pts_from_bps){ |
1498 | 1606 #if 1 |
1607 unsigned int samples=(sh_audio->audio.dwSampleSize)? | |
1608 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : | |
1609 (d_audio->pack_no); // <- used for VBR audio | |
3302 | 1610 samples+=sh_audio->audio.dwStart; // offset |
1498 | 1611 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; |
1612 #else | |
1481 | 1613 if(sh_audio->audio.dwSampleSize) |
1614 a_pts=(ds_tell(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->wf->nAvgBytesPerSec; | |
1615 else // VBR: | |
1616 a_pts=d_audio->pack_no*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; | |
1498 | 1617 #endif |
1618 // v_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; | |
1619 // printf("V_PTS: PTS: %8.3f BPS: %8.3f \n",d_video->pts,v_pts); | |
1620 delay_corrected=1; | |
780 | 1621 } else { |
1622 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) | |
746 | 1623 a_pts=d_audio->pts; |
1498 | 1624 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
|
1625 //printf("*** %5.3f ***\n",a_pts); |
746 | 1626 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
|
1627 // v_pts=d_video->pts-frame_time; |
1498 | 1628 // v_pts=d_video->pts; |
780 | 1629 } |
1498 | 1630 v_pts=d_video->pts; |
746 | 1631 |
1567 | 1632 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 | 1633 |
398 | 1634 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
|
1635 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
|
1636 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
|
1637 x=AV_delay*0.1f; |
1 | 1638 if(x<-max_pts_correction) x=-max_pts_correction; else |
1639 if(x> max_pts_correction) x= max_pts_correction; | |
780 | 1640 if(default_max_pts_correction>=0) |
1641 max_pts_correction=default_max_pts_correction; | |
1642 else | |
1643 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
|
1644 sh_audio->timer+=x; c_total+=x; |
2353 | 1645 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 | 1646 a_pts-audio_delay-delay,v_pts,AV_delay,c_total, |
1546 | 1647 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded, |
1498 | 1648 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, |
1649 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, | |
1650 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 | |
1651 ,drop_frame_cnt | |
1652 ,output_quality | |
2353 | 1653 ,cache_fill_status |
1 | 1654 ); |
1655 fflush(stdout); | |
1656 } | |
780 | 1657 |
1 | 1658 } else { |
1659 // No audio: | |
1420 | 1660 |
1448 | 1661 if(!quiet) |
2353 | 1662 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"V:%6.1f %3d %2d%% %2d%% %4.1f%% %d %d %d%%\r",d_video->pts, |
1400 | 1663 (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
|
1664 (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
|
1665 (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
|
1666 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 |
2353 | 1667 ,drop_frame_cnt |
1668 ,output_quality | |
1669 ,cache_fill_status | |
442 | 1670 ); |
1 | 1671 |
1672 fflush(stdout); | |
1420 | 1673 |
1 | 1674 } |
1675 #endif | |
1676 | |
1439 | 1677 /*Output quality adjustments:*/ |
1678 if(auto_quality>0){ | |
1679 #if 0 | |
1680 /*If we took a long time decoding this frame, downgrade the quality.*/ | |
1681 if(output_quality>0&& | |
1682 (video_time_usage-cvideo_base_vtime)*sh_video->timer>= | |
1683 (0.95*sh_video->timer-(vout_time_usage+audio_time_usage))* | |
1684 (sh_video->timer-cvideo_base_vframe-frame_correction)){ | |
1685 output_quality>>=1; | |
1567 | 1686 mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Downgrading quality to %i.\n",output_quality); |
1439 | 1687 set_video_quality(sh_video,output_quality); |
1688 } else | |
1689 /*If we had plenty of extra time, upgrade the quality.*/ | |
1690 if(output_quality<auto_quality&& | |
1691 vdecode_time<0.5*frame_time&& | |
1692 (video_time_usage-cvideo_base_vtime)*sh_video->timer< | |
1693 (0.67*sh_video->timer-(vout_time_usage+audio_time_usage))* | |
1694 (sh_video->timer-cvideo_base_vframe-frame_correction)){ | |
1695 output_quality++; | |
1567 | 1696 mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Upgrading quality to %i.\n",output_quality); |
1439 | 1697 set_video_quality(sh_video,output_quality); |
1698 } | |
1699 #else | |
1496 | 1700 // float total=0.000001f * (GetTimer()-aq_total_time); |
1439 | 1701 // if(output_quality<auto_quality && aq_sleep_time>0.05f*total) |
1702 if(output_quality<auto_quality && aq_sleep_time>0) | |
1703 ++output_quality; | |
1704 else | |
1705 // if(output_quality>0 && aq_sleep_time<-0.05f*total) | |
1706 if(output_quality>1 && aq_sleep_time<0) | |
1707 --output_quality; | |
1708 else | |
1709 if(output_quality>0 && aq_sleep_time<-0.050f) // 50ms | |
1710 output_quality=0; | |
1711 // printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); | |
1712 set_video_quality(sh_video,output_quality); | |
1713 #endif | |
1714 } | |
1715 | |
1422 | 1716 #ifdef USE_OSD |
220 | 1717 if(osd_visible){ |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1718 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
|
1719 if (osd_function != OSD_PAUSE) |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1720 osd_function = OSD_PLAY; |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1721 } |
220 | 1722 } |
1422 | 1723 #endif |
371 | 1724 |
1725 if(osd_function==OSD_PAUSE){ | |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1726 int gui_pause_flag=0; // gany! |
1567 | 1727 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
|
1728 #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
|
1729 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
|
1730 #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
|
1731 if (audio_out && sh_audio) |
1156 | 1732 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
|
1733 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1734 if(slave_mode) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1735 fd_set set; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1736 struct timeval timeout; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1737 while (1) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1738 usec_sleep(1000); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1739 FD_ZERO (&set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1740 FD_SET (STDIN_FILENO, &set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1741 timeout.tv_sec = 0; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1742 timeout.tv_usec = 1000; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1743 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
|
1744 break; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1745 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1746 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1747 } else { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1748 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1749 while( |
371 | 1750 #ifdef HAVE_LIRC |
723 | 1751 lirc_mp_getinput()<=0 && |
371 | 1752 #endif |
1467 | 1753 (use_stdin || getch2(20)<=0) && mplayer_get_key()<=0){ |
1422 | 1754 #ifndef USE_LIBVO2 |
723 | 1755 video_out->check_events(); |
1422 | 1756 #endif |
1709 | 1757 #ifdef HAVE_NEW_GUI |
1758 if(use_gui){ | |
1802 | 1759 EventHandling(); |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1760 if(mplShMem->Playing!=2 || (rel_seek_secs || abs_seek_pos)) |
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1761 { gui_pause_flag=1; break; } // end of pause or seek |
1709 | 1762 } |
1763 #endif | |
1467 | 1764 if(use_stdin) usec_sleep(1000); // do not eat the CPU |
723 | 1765 } |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1766 } |
723 | 1767 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
|
1768 if (audio_out && sh_audio) |
1156 | 1769 audio_out->resume(); // resume audio |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1770 (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
|
1771 #ifdef HAVE_NEW_GUI |
1817
35d88a433502
fixed interaction between commandlien and fileselector
arpi
parents:
1816
diff
changeset
|
1772 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
|
1773 #endif |
371 | 1774 } |
1775 | |
746 | 1776 |
1777 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
|
1778 } // while(sh_video->timer<sh_audio->timer || force_redraw) |
1 | 1779 |
2436 | 1780 // skip some seconds... added by fly |
1781 | |
1782 if(step_sec>0) { | |
1783 osd_function=OSD_FFW; | |
1784 rel_seek_secs+=step_sec; | |
1785 } | |
1 | 1786 |
1787 //================= Keyboard events, SEEKing ==================== | |
1788 | |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1789 /* slave mode */ |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1790 if(slave_mode) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1791 char buffer[1024]; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1792 fd_set set; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1793 struct timeval timeout; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1794 int arg; |
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 FD_ZERO (&set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1797 FD_SET (STDIN_FILENO, &set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1798 timeout.tv_sec = 0; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1799 timeout.tv_usec = 1000; |
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 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
|
1802 fgets(buffer, 1024, stdin); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1803 if(!strcmp("play\n", buffer)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1804 osd_function=OSD_PLAY; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1805 } else if(!strcmp("stop\n", buffer)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1806 osd_function=OSD_PAUSE; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1807 } else if(!strncmp("seek ", buffer, 5)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1808 sscanf(buffer+5, "%d", &arg); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1809 rel_seek_secs = arg-d_video->pts; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1810 } else if(!strncmp("skip ", buffer, 5)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1811 sscanf(buffer+5, "%d", &arg); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1812 rel_seek_secs = arg; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1813 } else if(!strcmp("quit\n", buffer)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1814 exit_player(MSGTR_Exit_quit); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1815 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1816 } else { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1817 osd_function=OSD_PLAY; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1818 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1819 } else |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1820 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1821 /* interactive mode */ |
723 | 1822 { int c; |
1 | 1823 while( |
1824 #ifdef HAVE_LIRC | |
1825 (c=lirc_mp_getinput())>0 || | |
1826 #endif | |
1467 | 1827 (!use_stdin && (c=getch2(0))>0) || (c=mplayer_get_key())>0) switch(c){ |
1 | 1828 // seek 10 sec |
1829 case KEY_RIGHT: | |
220 | 1830 osd_function=OSD_FFW; |
1 | 1831 rel_seek_secs+=10;break; |
1832 case KEY_LEFT: | |
220 | 1833 osd_function=OSD_REW; |
1 | 1834 rel_seek_secs-=10;break; |
1835 // seek 1 min | |
1836 case KEY_UP: | |
220 | 1837 osd_function=OSD_FFW; |
1 | 1838 rel_seek_secs+=60;break; |
1839 case KEY_DOWN: | |
220 | 1840 osd_function=OSD_REW; |
1 | 1841 rel_seek_secs-=60;break; |
651 | 1842 // seek 10 min |
1843 case KEY_PAGE_UP: | |
1844 rel_seek_secs+=600;break; | |
1845 case KEY_PAGE_DOWN: | |
1846 rel_seek_secs-=600;break; | |
1 | 1847 // delay correction: |
1848 case '+': | |
746 | 1849 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
|
1850 if(sh_audio) sh_audio->timer-=0.1; |
1 | 1851 break; |
1852 case '-': | |
746 | 1853 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
|
1854 if(sh_audio) sh_audio->timer+=0.1; |
1 | 1855 break; |
1856 // quit | |
1857 case KEY_ESC: // ESC | |
1639 | 1858 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
|
1859 case '>': |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1860 if(curr_filename>=num_filenames-1) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1861 break; |
1 | 1862 case KEY_ENTER: // ESC |
3540 | 1863 eof=2; // jump to next file |
1639 | 1864 break; |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1865 case '<': |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1866 if(curr_filename < 1) |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1867 break; |
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1868 curr_filename-=2; |
3540 | 1869 eof=2; |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
1870 break; |
36 | 1871 case 'g': grab_frames=2;break; |
1 | 1872 // pause |
1873 case 'p': | |
1874 case ' ': | |
220 | 1875 osd_function=OSD_PAUSE; |
371 | 1876 break; |
1877 case 'o': // toggle OSD | |
1878 osd_level=(osd_level+1)%3; | |
1 | 1879 break; |
939 | 1880 case 'z': |
1881 sub_delay -= 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
1882 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 1883 break; |
1884 case 'x': | |
1885 sub_delay += 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
1886 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 1887 break; |
1626 | 1888 case '9': |
1889 case '0': | |
459 | 1890 case '*': |
555 | 1891 case '/': { |
1626 | 1892 if(c=='*' || c=='0'){ |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1893 mixer_incvolume(); |
555 | 1894 } else { |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1895 mixer_decvolume(); |
555 | 1896 } |
1897 | |
1422 | 1898 #ifdef USE_OSD |
555 | 1899 if(osd_level){ |
1900 osd_visible=sh_video->fps; // 1 sec | |
1901 vo_osd_progbar_type=OSD_VOLUME; | |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
1902 vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0; |
1852 | 1903 //printf("volume: %d\n",vo_osd_progbar_value); |
555 | 1904 } |
1422 | 1905 #endif |
555 | 1906 } |
1907 break; | |
459 | 1908 case 'm': |
510 | 1909 mixer_usemaster=!mixer_usemaster; |
459 | 1910 break; |
1429 | 1911 |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1912 #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
|
1913 case '1': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1914 case '2': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1915 case '3': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1916 case '4': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1917 case '5': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1918 case '6': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1919 case '7': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1920 case '8': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1921 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
|
1922 abs_seek_pos=3; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1923 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
|
1924 break; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
1925 #else |
1429 | 1926 // Contrast: |
1927 case '1': | |
1928 case '2': | |
1929 if(c=='2'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1930 if ( ++v_cont > 100 ) v_cont = 100; |
1429 | 1931 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1932 if ( --v_cont < 0 ) v_cont = 0; |
1429 | 1933 } |
1934 if(set_video_colors(sh_video,"Contrast",v_cont)){ | |
1935 #ifdef USE_OSD | |
1936 if(osd_level){ | |
1937 osd_visible=sh_video->fps; // 1 sec | |
1938 vo_osd_progbar_type=OSD_CONTRAST; | |
1726 | 1939 vo_osd_progbar_value=((v_cont)<<8)/100; |
1429 | 1940 } |
1941 #endif | |
1942 } | |
1943 break; | |
1944 | |
1945 // Brightness: | |
1946 case '3': | |
1947 case '4': | |
1948 if(c=='4'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1949 if ( ++v_bright > 100 ) v_bright = 100; |
1429 | 1950 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1951 if ( --v_bright < 0 ) v_bright = 0; |
1429 | 1952 } |
1953 if(set_video_colors(sh_video,"Brightness",v_bright)){ | |
1954 #ifdef USE_OSD | |
1955 if(osd_level){ | |
1956 osd_visible=sh_video->fps; // 1 sec | |
1957 vo_osd_progbar_type=OSD_BRIGHTNESS; | |
1726 | 1958 vo_osd_progbar_value=((v_bright)<<8)/100; |
1429 | 1959 } |
1960 #endif | |
1961 } | |
1962 break; | |
1963 | |
1964 // Hue: | |
1965 case '5': | |
1966 case '6': | |
1967 if(c=='6'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1968 if ( ++v_hue > 100 ) v_hue = 100; |
1429 | 1969 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1970 if ( --v_hue < 0 ) v_hue = 0; |
1429 | 1971 } |
1972 if(set_video_colors(sh_video,"Hue",v_hue)){ | |
1973 #ifdef USE_OSD | |
1974 if(osd_level){ | |
1975 osd_visible=sh_video->fps; // 1 sec | |
1976 vo_osd_progbar_type=OSD_HUE; | |
1726 | 1977 vo_osd_progbar_value=((v_hue)<<8)/100; |
1429 | 1978 } |
1979 #endif | |
1980 } | |
1981 break; | |
1982 | |
1983 // Saturation: | |
1984 case '7': | |
1985 case '8': | |
1986 if(c=='8'){ | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1987 if ( ++v_saturation > 100 ) v_saturation = 100; |
1429 | 1988 } else { |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1498
diff
changeset
|
1989 if ( --v_saturation < 0 ) v_saturation = 0; |
1429 | 1990 } |
1991 if(set_video_colors(sh_video,"Saturation",v_saturation)){ | |
1992 #ifdef USE_OSD | |
1993 if(osd_level){ | |
1994 osd_visible=sh_video->fps; // 1 sec | |
1995 vo_osd_progbar_type=OSD_SATURATION; | |
1726 | 1996 vo_osd_progbar_value=((v_saturation)<<8)/100; |
1429 | 1997 } |
1998 #endif | |
1999 } | |
2000 break; | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2001 #endif |
1429 | 2002 |
715 | 2003 case 'd': |
798 | 2004 frame_dropping=(frame_dropping+1)%3; |
1567 | 2005 mp_msg(MSGT_CPLAYER,MSGL_V,"== drop: %d == \n",frame_dropping); |
715 | 2006 break; |
2941
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2007 |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2008 #ifdef USE_TV |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2009 case 'h': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2010 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
|
2011 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
|
2012 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2013 case 'l': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2014 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
|
2015 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
|
2016 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2017 case 'n': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2018 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
|
2019 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
|
2020 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2021 case 'b': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2022 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
|
2023 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
|
2024 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2025 #endif |
1 | 2026 } |
1406 | 2027 } // keyboard event handler |
2028 | |
651 | 2029 if (seek_to_sec) { |
937 | 2030 int a,b; float d; |
2031 | |
2032 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | |
2033 rel_seek_secs += 3600*a +60*b +d ; | |
2034 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2) | |
2035 rel_seek_secs += 60*a +d; | |
2036 else if (sscanf(seek_to_sec, "%f", &d)==1) | |
2037 rel_seek_secs += d; | |
2038 | |
2039 seek_to_sec = NULL; | |
651 | 2040 } |
937 | 2041 |
2365 | 2042 /* Looping. */ |
3540 | 2043 if(eof==1 && loop_times>=0) { |
2044 | |
2045 mp_msg(MSGT_CPLAYER,MSGL_V,"loop_times = %d, eof = %d\n", loop_times,eof); | |
2365 | 2046 |
3540 | 2047 if(loop_times>1) loop_times--; else |
2048 if(loop_times==1) loop_times=-1; | |
2049 | |
2365 | 2050 eof=0; |
3540 | 2051 abs_seek_pos=3; rel_seek_secs=0; // seek to start of movie (0%) |
2365 | 2052 |
2053 } | |
2054 | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2055 if(rel_seek_secs || abs_seek_pos){ |
1466 | 2056 current_module="seek"; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2057 if(demux_seek(demuxer,rel_seek_secs,abs_seek_pos)){ |
1405 | 2058 // success: |
889 | 2059 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
2060 if(sh_audio){ |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2061 if(verbose){ |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2062 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
|
2063 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; |
1567 | 2064 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
|
2065 } |
1567 | 2066 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
|
2067 } else { |
1567 | 2068 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
|
2069 } |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2070 fflush(stdout); |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2071 |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2072 if(sh_audio){ |
1466 | 2073 current_module="seek_audio_reset"; |
1334 | 2074 audio_out->reset(); // stop audio, throwing away buffered data |
1 | 2075 } |
2076 | |
1422 | 2077 #ifdef USE_OSD |
1334 | 2078 // Set OSD: |
2079 if(osd_level){ | |
2080 int len=((demuxer->movi_end-demuxer->movi_start)>>8); | |
1727 | 2081 if (len>0){ |
2082 osd_visible=sh_video->fps; // 1 sec | |
2083 vo_osd_progbar_type=0; | |
2084 vo_osd_progbar_value=(demuxer->filepos-demuxer->movi_start)/len; | |
2085 } | |
1334 | 2086 } |
1422 | 2087 #endif |
1405 | 2088 |
1420 | 2089 c_total=0; |
1 | 2090 max_pts_correction=0.1; |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
2091 osd_visible=sh_video->fps; // to rewert to PLAY pointer after 1 sec |
1 | 2092 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
|
2093 drop_frame_cnt=0; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
2094 too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
2095 too_fast_frame_cnt=0; |
1 | 2096 } |
1405 | 2097 rel_seek_secs=0; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2098 abs_seek_pos=0; |
1466 | 2099 current_module=NULL; |
2100 } | |
2101 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2102 #ifdef HAVE_NEW_GUI |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2103 if(use_gui){ |
1735 | 2104 if(demuxer->file_format==DEMUXER_TYPE_AVI && sh_video->video.dwLength>2){ |
2105 // get pos from frame number / total frames | |
2106 mplShMem->Position=(float)d_video->pack_no*100.0f/sh_video->video.dwLength; | |
2107 } else { | |
2108 // get pos from file position / filesize | |
2109 int len=((demuxer->movi_end-demuxer->movi_start)); | |
2110 int pos=(demuxer->file_format==DEMUXER_TYPE_AVI)?demuxer->filepos:d_video->pos; | |
2111 mplShMem->Position=(len<=0)?0:((float)(pos-demuxer->movi_start) / len * 100.0f); | |
2112 } | |
1729 | 2113 mplShMem->TimeSec=d_video->pts; |
1772 | 2114 if(mplShMem->Playing==0) break; // STOP |
2115 if(mplShMem->Playing==2) osd_function=OSD_PAUSE; | |
1852 | 2116 if ( mplShMem->VolumeChanged ) |
1848 | 2117 { |
1852 | 2118 mixer_setvolume( mplShMem->Volume,mplShMem->Volume ); |
2119 mplShMem->VolumeChanged=0; | |
2120 #ifdef USE_OSD | |
2121 if ( osd_level ) | |
2122 { | |
2123 osd_visible=sh_video->fps; // 1 sec | |
2124 vo_osd_progbar_type=OSD_VOLUME; | |
2125 vo_osd_progbar_value=( ( mplShMem->Volume ) * 256.0 ) / 100.0; | |
2126 } | |
1848 | 2127 #endif |
1852 | 2128 } |
2129 mplShMem->Volume=(float)mixer_getbothvolume(); | |
3054 | 2130 #ifdef USE_DVDREAD |
3618 | 2131 if ( mplShMem->DVDChanged ) goto goto_next_file; |
3054 | 2132 if ( stream->type == STREAMTYPE_DVD ) |
2133 { | |
2134 dvd_priv_t * dvdp = stream->priv; | |
2135 mplShMem->DVD.current_chapter=dvdp->cur_cell + 1; | |
2136 } | |
2137 #endif | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2138 } |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2139 #endif |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2140 |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2141 |
220 | 2142 //================= Update OSD ==================== |
1422 | 2143 #ifdef USE_OSD |
1421 | 2144 if(osd_level>=2){ |
780 | 2145 int pts=d_video->pts; |
595 | 2146 if(pts==osd_last_pts-1) ++pts; else osd_last_pts=pts; |
371 | 2147 vo_osd_text=osd_text_buffer; |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2148 if (osd_show_sub_delay) { |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2149 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
|
2150 osd_show_sub_delay--; |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2151 } else |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2152 sprintf(vo_osd_text,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60); |
371 | 2153 } else { |
2154 vo_osd_text=NULL; | |
2155 } | |
220 | 2156 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0; |
371 | 2157 // vo_osd_text=osd_text_buffer; |
1422 | 2158 #endif |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
2159 |
1422 | 2160 #ifdef USE_SUB |
258 | 2161 // find sub |
1204 | 2162 if(subtitles && d_video->pts>0){ |
1762 | 2163 float pts=d_video->pts; |
398 | 2164 if(sub_fps==0) sub_fps=sh_video->fps; |
482 | 2165 current_module="find_sub"; |
3274
ac7ded58b6df
mpeg subtitle flickering patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3257
diff
changeset
|
2166 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
|
2167 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
|
2168 sub_last_pts = pts; |
ac7ded58b6df
mpeg subtitle flickering patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3257
diff
changeset
|
2169 } |
482 | 2170 current_module=NULL; |
258 | 2171 } |
1422 | 2172 #endif |
554 | 2173 |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2174 |
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2175 #ifdef USE_DVDREAD |
554 | 2176 // DVD sub: |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2177 if(vo_spudec){ |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2178 unsigned char* packet=NULL; |
557 | 2179 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
|
2180 current_module="spudec"; |
557 | 2181 if(len>=2){ |
2182 int len2; | |
2183 len2=(packet[0]<<8)+packet[1]; | |
1567 | 2184 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
|
2185 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
|
2186 } else { |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2187 spudec_heartbeat(vo_spudec,100*d_video->pts); |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2188 if(len>=0) |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2189 mp_msg(MSGT_CPLAYER,MSGL_V,"invalid dvd sub\n"); |
554 | 2190 } |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
2191 current_module=NULL; |
554 | 2192 } |
3180
d53f70e3c794
spudec_new has a dvd_priv_t as an argument, which is defined in
pl
parents:
3166
diff
changeset
|
2193 #endif |
554 | 2194 |
1421 | 2195 } // while(!eof) |
1 | 2196 |
1567 | 2197 mp_msg(MSGT_GLOBAL,MSGL_V,"EOF code: %d \n",eof); |
1 | 2198 |
1639 | 2199 } |
2200 | |
3618 | 2201 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
|
2202 |
1790 | 2203 if(curr_filename+1<num_filenames || use_gui){ |
1639 | 2204 // partial uninit: |
2205 | |
1857 | 2206 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
|
2207 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2208 } |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2209 |
1797 | 2210 #ifdef HAVE_NEW_GUI |
2211 if(use_gui) | |
2212 { | |
3618 | 2213 #ifdef USE_DVDREAD |
2214 if ( !mplShMem->DVDChanged ) | |
2215 #endif | |
2216 mplStop(); | |
1797 | 2217 } |
2218 #endif | |
2219 | |
3618 | 2220 if(use_gui || ++curr_filename<num_filenames |
2221 #if defined( HAVE_NEW_GUI ) && defined( USE_DVDREAD ) | |
3723 | 2222 || (mplShMem && mplShMem->DVDChanged) |
3618 | 2223 #endif |
2224 ){ | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2225 |
1654 | 2226 current_module="uninit_vcodec"; |
2227 if(sh_video) uninit_video(sh_video); | |
2228 | |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2229 current_module="free_demuxer"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2230 if(demuxer) free_demuxer(demuxer); |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2231 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2232 current_module="free_stream"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2233 if(stream) free_stream(stream); |
3543 | 2234 |
2235 current_module="sub_free"; | |
2236 if ( subtitles ) | |
2237 { | |
2238 sub_free( subtitles ); | |
2239 sub_name=NULL; | |
2240 vo_sub=NULL; | |
2241 } | |
2242 | |
1639 | 2243 video_out=NULL; |
2244 audio_out=NULL; | |
2854 | 2245 |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
2246 goto play_next_file; |
1639 | 2247 } |
2248 | |
1582 | 2249 exit_player(MSGTR_Exit_eof); |
1639 | 2250 |
109 | 2251 return 1; |
2252 } |