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