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