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