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