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