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