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