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