Mercurial > mplayer.hg
annotate mplayer.c @ 7052:f3b2f31332fc
allocating large enough buffer, fixes green stuff on top for encoding of height %16 != 0 videos
author | michael |
---|---|
date | Wed, 21 Aug 2002 19:12:13 +0000 |
parents | e37a67d5e117 |
children | 5a6616a088f2 |
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> |
5288
370d13663229
we don't use mmap() in mplayer.c, so why should we include mman.h...
arpi
parents:
5221
diff
changeset
|
9 // #include <sys/mman.h> |
1428
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 |
5112 | 19 #include <errno.h> |
20 | |
1430 | 21 #include "version.h" |
22 #include "config.h" | |
1584 | 23 |
1564 | 24 #include "mp_msg.h" |
1 | 25 |
1584 | 26 #define HELP_MP_DEFINE_STATIC |
27 #include "help_mp.h" | |
28 | |
147 | 29 #include "cfgparser.h" |
151 | 30 #include "cfg-mplayer-def.h" |
147 | 31 |
1422 | 32 #ifdef USE_SUB |
258 | 33 #include "subreader.h" |
1422 | 34 #endif |
258 | 35 |
36 | 36 #include "libvo/video_out.h" |
2550 | 37 extern void* mDisplay; // Display* mDisplay; |
1422 | 38 |
5293
fd992ece4367
include font_load.h directly, instead of via video_out.h
arpi
parents:
5288
diff
changeset
|
39 #include "libvo/font_load.h" |
220 | 40 #include "libvo/sub.h" |
36 | 41 |
955 | 42 #include "libao2/audio_out.h" |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3180
diff
changeset
|
43 #include "libao2/audio_plugin.h" |
955 | 44 |
1 | 45 #include "libmpeg2/mpeg2.h" |
46 #include "libmpeg2/mpeg2_internal.h" | |
47 | |
303 | 48 #include "codec-cfg.h" |
175 | 49 |
492 | 50 #include "dvdauth.h" |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
51 #ifdef USE_DVDNAV |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
52 #include <dvdnav.h> |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
53 #endif |
5488
3f183ca22747
fixed SPU pts, it's 1024/90000 based instead of 1/100
arpi
parents:
5463
diff
changeset
|
54 |
560
28ae99036574
Separated dvdsub code to be able to work with it easier
lgb
parents:
557
diff
changeset
|
55 #include "spudec.h" |
4079 | 56 #include "vobsub.h" |
492 | 57 |
1 | 58 #include "linux/getch2.h" |
59 #include "linux/keycodes.h" | |
60 #include "linux/timer.h" | |
61 #include "linux/shmem.h" | |
62 | |
2272 | 63 #include "cpudetect.h" |
64 | |
1 | 65 #ifdef HAVE_LIRC |
66 #include "lirc_mp.h" | |
67 #endif | |
68 | |
2036 | 69 #ifdef HAVE_NEW_GUI |
4798 | 70 #include "Gui/interface.h" |
2036 | 71 #endif |
72 | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
73 #ifdef HAVE_NEW_INPUT |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
74 #include "input/input.h" |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
75 #endif |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
76 |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
77 int slave_mode=0; |
362 | 78 int verbose=0; |
1448 | 79 int quiet=0; |
1 | 80 |
398 | 81 #define ABS(x) (((x)>=0)?(x):(-(x))) |
82 | |
3015 | 83 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
84 #include <linux/rtc.h> |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
85 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
86 |
2941
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
87 #ifdef USE_TV |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
88 #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
|
89 |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
90 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
|
91 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
|
92 #endif |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
93 |
258 | 94 //**************************************************************************// |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
95 // Playtree |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
96 //**************************************************************************// |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
97 #include "playtree.h" |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
98 |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
99 play_tree_t* playtree; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
100 |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
101 #define PT_NEXT_ENTRY 1 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
102 #define PT_PREV_ENTRY -1 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
103 #define PT_NEXT_SRC 2 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
104 #define PT_PREV_SRC -2 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
105 #define PT_UP_NEXT 3 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
106 #define PT_UP_PREV -3 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
107 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
108 //**************************************************************************// |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
109 // Config |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
110 //**************************************************************************// |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
111 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
112 m_config_t* mconfig; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
113 |
4381 | 114 /************************************************************************** |
115 Video accelerated architecture | |
116 **************************************************************************/ | |
117 vo_vaa_t vo_vaa; | |
4388 | 118 |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
119 //**************************************************************************// |
258 | 120 // Config file |
121 //**************************************************************************// | |
122 | |
2557 | 123 static int cfg_inc_verbose(struct config *conf){ ++verbose; return 0;} |
153 | 124 |
162 | 125 static int cfg_include(struct config *conf, char *filename){ |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
126 return m_config_parse_config_file(mconfig, filename); |
162 | 127 } |
128 | |
2557 | 129 #include "get_path.c" |
178 | 130 |
1 | 131 //**************************************************************************// |
442 | 132 //**************************************************************************// |
133 // Input media streaming & demultiplexer: | |
134 //**************************************************************************// | |
135 | |
1289 | 136 static int max_framesize=0; |
137 | |
578 | 138 #include "stream.h" |
587
8511095c5283
stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents:
578
diff
changeset
|
139 #include "demuxer.h" |
442 | 140 #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
|
141 #include "parse_es.h" |
1 | 142 |
5607 | 143 #include "libmpcodecs/dec_audio.h" |
144 #include "libmpcodecs/dec_video.h" | |
2563 | 145 |
111 | 146 //**************************************************************************// |
1 | 147 //**************************************************************************// |
148 | |
112 | 149 // Common FIFO functions, and keyboard/event FIFO code |
150 #include "fifo.c" | |
4892 | 151 int use_stdin=0; |
1 | 152 //**************************************************************************// |
153 | |
6755 | 154 vo_functions_t *video_out=NULL; |
4788
d678ce495a75
Moved HW dependent mixer stuff to libao and removed master switch
anders
parents:
4787
diff
changeset
|
155 ao_functions_t *audio_out=NULL; |
1 | 156 |
2557 | 157 // benchmark: |
1291 | 158 double video_time_usage=0; |
159 double vout_time_usage=0; | |
1289 | 160 static double audio_time_usage=0; |
161 static int total_time_usage_start=0; | |
5621 | 162 static int total_frame_cnt=0; |
163 static int drop_frame_cnt=0; // total number of dropped frames | |
4844
76acf5bbda78
exclude benchmark stuff execution from normal playback
nick
parents:
4843
diff
changeset
|
164 int benchmark=0; |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
165 |
2557 | 166 // static int play_in_bg=0; |
606 | 167 |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
168 // options: |
6796 | 169 int auto_quality=0; |
1496 | 170 static int output_quality=0; |
1439 | 171 |
1709 | 172 int use_gui=0; |
173 | |
6921 | 174 int osd_level=1; |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6590
diff
changeset
|
175 int osd_visible=100; |
2557 | 176 |
177 // seek: | |
937 | 178 char *seek_to_sec=NULL; |
1428
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
1422
diff
changeset
|
179 off_t seek_to_byte=0; |
2436 | 180 off_t step_sec=0; |
2557 | 181 int loop_times=-1; |
182 float rel_seek_secs=0; | |
183 int abs_seek_pos=0; | |
184 | |
185 // codecs: | |
442 | 186 int has_audio=1; |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
187 int has_video=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
|
188 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
|
189 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
|
190 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
|
191 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
|
192 |
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
|
193 // 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
|
194 // 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
|
195 // yes, people without working c++ compiler can disable it - A'rpi |
626 | 196 #ifdef USE_DIRECTSHOW |
197 int allow_dshow=1; | |
198 #else | |
199 int allow_dshow=0; | |
200 #endif | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
201 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
202 // streaming: |
3532 | 203 int audio_id=-1; |
204 int video_id=-1; | |
3618 | 205 int dvdsub_id=-1; |
4079 | 206 int vobsub_id=-1; |
3754
174e473f582d
-alang/-slang options (audio/sub selection by language code)
arpi
parents:
3748
diff
changeset
|
207 char* audio_lang=NULL; |
174e473f582d
-alang/-slang options (audio/sub selection by language code)
arpi
parents:
3748
diff
changeset
|
208 char* dvdsub_lang=NULL; |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5380
diff
changeset
|
209 static char* spudec_ifo=NULL; |
6280 | 210 int vcd_track=0; |
6627 | 211 char* filename=NULL; //"MI2-Trailer.avi"; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
212 |
2353 | 213 // cache2: |
2557 | 214 static int stream_cache_size=0; |
2353 | 215 #ifdef USE_STREAM_CACHE |
216 extern int cache_fill_status; | |
217 #else | |
218 #define cache_fill_status 0 | |
219 #endif | |
220 | |
2557 | 221 // dump: |
3257 | 222 static char *stream_dump_name="stream.dump"; |
6796 | 223 int stream_dump_type=0; |
2557 | 224 |
225 // A-V sync: | |
1498 | 226 static float default_max_pts_correction=-1;//0.01f; |
227 static float max_pts_correction=0;//default_max_pts_correction; | |
2557 | 228 static float c_total=0; |
6796 | 229 float audio_delay=0; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
230 |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
231 static int dapsync=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
232 static int softsleep=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
233 |
2557 | 234 static float force_fps=0; |
235 static int force_srate=0; | |
6796 | 236 int frame_dropping=0; // option 0=no drop 1= drop vo 2= drop decode |
2557 | 237 static int play_n_frames=-1; |
6590 | 238 static int play_n_frames_mf=-1; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
239 |
1 | 240 // screen info: |
241 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
|
242 char* audio_driver=NULL; |
5075 | 243 |
244 // libvo opts: (defiend at libmpcodecs/vd.c) | |
245 extern int opt_screen_size_x; | |
246 extern int opt_screen_size_y; | |
247 extern int screen_size_xy; | |
248 extern float movie_aspect; | |
249 extern int fullscreen; | |
250 extern int vidmode; | |
251 extern int softzoom; | |
252 extern int flip; | |
253 extern int vo_flags; | |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
254 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
255 // sub: |
212 | 256 char *font_name=NULL; |
215 | 257 float font_factor=0.75; |
258 | 258 char *sub_name=NULL; |
259 float sub_delay=0; | |
260 float sub_fps=0; | |
510 | 261 int sub_auto = 1; |
4079 | 262 char *vobsub_name=NULL; |
1255
94f2853ec6f4
-dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents:
1250
diff
changeset
|
263 /*DSP!!char *dsp=NULL;*/ |
6784
b38e38b6f88f
DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
6781
diff
changeset
|
264 int subcc_enabled=0; |
723 | 265 |
1183 | 266 extern char *vo_subdevice; |
267 extern char *ao_subdevice; | |
1156 | 268 |
2321 | 269 static stream_t* stream=NULL; |
270 | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
271 char* current_module=NULL; // for debugging |
1856 | 272 |
6786 | 273 int vo_gamma_brightness = 1000; |
274 int vo_gamma_contrast = 1000; | |
275 int vo_gamma_saturation = 1000; | |
276 int vo_gamma_hue = 1000; | |
6781 | 277 |
6755 | 278 // --- |
279 | |
5055 | 280 #ifdef HAVE_RTC |
281 int nortc; | |
282 #endif | |
283 | |
1856 | 284 static unsigned int inited_flags=0; |
285 #define INITED_VO 1 | |
286 #define INITED_AO 2 | |
287 #define INITED_GUI 4 | |
288 #define INITED_GETCH2 8 | |
289 #define INITED_LIRC 16 | |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
290 #define INITED_SPUDEC 32 |
2321 | 291 #define INITED_STREAM 64 |
4431 | 292 #define INITED_INPUT 128 |
6110 | 293 #define INITED_VOBSUB 256 |
1856 | 294 #define INITED_ALL 0xFFFF |
295 | |
296 void uninit_player(unsigned int mask){ | |
297 mask=inited_flags&mask; | |
5154 | 298 |
299 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n*** uninit(0x%X)\n",mask); | |
300 | |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
301 // kill the cache process: |
5154 | 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 | |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
309 if(mask&INITED_VO){ |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
310 inited_flags&=~INITED_VO; |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
311 current_module="uninit_vo"; |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
312 video_out->uninit(); |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
313 video_out=NULL; |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
314 } |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
315 |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
316 // must be after libvo uninit, as few vo drivers (svgalib) has tty code |
5154 | 317 if(mask&INITED_GETCH2){ |
318 inited_flags&=~INITED_GETCH2; | |
319 current_module="uninit_getch2"; | |
320 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n[[[uninit getch2]]]\n"); | |
321 // restore terminal: | |
322 getch2_disable(); | |
323 } | |
324 | |
6110 | 325 if(mask&INITED_VOBSUB){ |
326 inited_flags&=~INITED_VOBSUB; | |
327 current_module="uninit_vobsub"; | |
328 vobsub_close(vo_vobsub); | |
329 vo_vobsub=NULL; | |
330 } | |
331 | |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
332 if (mask&INITED_SPUDEC){ |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
333 inited_flags&=~INITED_SPUDEC; |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
334 current_module="uninit_spudec"; |
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
335 spudec_free(vo_spudec); |
5411 | 336 vo_spudec=NULL; |
3034
24d3dca4e813
DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
3015
diff
changeset
|
337 } |
5488
3f183ca22747
fixed SPU pts, it's 1024/90000 based instead of 1/100
arpi
parents:
5463
diff
changeset
|
338 |
1856 | 339 if(mask&INITED_AO){ |
340 inited_flags&=~INITED_AO; | |
341 current_module="uninit_ao"; | |
5154 | 342 audio_out->uninit(); audio_out=NULL; |
1856 | 343 } |
344 | |
345 #ifdef HAVE_NEW_GUI | |
346 if(mask&INITED_GUI){ | |
347 inited_flags&=~INITED_GUI; | |
348 current_module="uninit_gui"; | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
349 guiDone(); |
1856 | 350 } |
351 #endif | |
352 | |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
353 #ifdef HAVE_NEW_INPUT |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
354 if(mask&INITED_INPUT){ |
6429 | 355 inited_flags&=~INITED_INPUT; |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
356 current_module="uninit_input"; |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
357 mp_input_uninit(); |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
358 } |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
359 #else |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
360 #ifdef HAVE_LIRC |
1856 | 361 if(mask&INITED_LIRC){ |
362 inited_flags&=~INITED_LIRC; | |
363 current_module="uninit_lirc"; | |
364 lirc_mp_cleanup(); | |
365 } | |
366 #endif | |
4431 | 367 #endif |
368 | |
1863 | 369 current_module=NULL; |
370 | |
1856 | 371 } |
372 | |
1156 | 373 void exit_player(char* how){ |
374 | |
1856 | 375 uninit_player(INITED_ALL); |
6015 | 376 #ifdef X11_FULLSCREEN |
6016 | 377 #ifdef HAVE_NEW_GUI |
378 if ( !use_gui ) | |
379 #endif | |
6015 | 380 vo_uninit(); // close the X11 connection (if any opened) |
381 #endif | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
382 |
1856 | 383 current_module="exit_player"; |
1156 | 384 |
5106 | 385 if(how) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Exiting,mp_gettext(how)); |
4733
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
386 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"max framesize was %d bytes\n",max_framesize); |
1639 | 387 |
1156 | 388 exit(1); |
389 } | |
390 | |
391 void exit_sighandler(int x){ | |
392 static int sig_count=0; | |
393 ++sig_count; | |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
394 if(sig_count==5 || (inited_flags==0 && sig_count>1)) exit(1); |
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
395 if(sig_count>5){ |
1156 | 396 // can't stop :( |
397 kill(getpid(),SIGKILL); | |
398 } | |
5127 | 399 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"\n" MSGTR_IntBySignal,x, |
5106 | 400 current_module?current_module:mp_gettext("unknown") |
1156 | 401 ); |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
402 if(sig_count==1) |
5127 | 403 switch(x){ |
404 case SIGINT: | |
405 case SIGQUIT: | |
406 case SIGTERM: | |
407 case SIGKILL: | |
408 break; // killed from keyboard (^C) or killed [-9] | |
409 case SIGILL: | |
5129 | 410 #ifdef RUNTIME_CPUDETECT |
411 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"- MPlayer crashed by 'Illegal Instruction'. It may be a bug in our new runtime cpu-detection code... please read DOCS/bugreports.html\n"); | |
412 #else | |
5830
4c17a92220fc
uninit libvo before getch2 - requires for clean svgalib uninit
arpi
parents:
5798
diff
changeset
|
413 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"- MPlayer crashed by 'Illegal Instruction'. It usually happens when you run it on different CPU than it was compiled/optimized for. Verify this!\n"); |
5129 | 414 #endif |
5127 | 415 case SIGFPE: |
416 case SIGSEGV: | |
417 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"- MPlayer crashed by bad usage of CPU/FPU/RAM. Recompile MPlayer with --enable-debug and make a 'gdb' backtrace and disassembly. For details, see DOCS/bugreports.html section 5.b.\n"); | |
418 default: | |
5129 | 419 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"- MPlayer crashed. This shouldn't happen. It can be a bug in the MPlayer code _or_ in your drivers _or_ in your gcc version. If you think it's MPlayer's fault, please read DOCS/bugreports.html and follow instructions there. We can't and won't help unless you provide these informations when reporting a possible bug.\n"); |
5127 | 420 } |
1156 | 421 exit_player(NULL); |
422 } | |
423 | |
2557 | 424 //extern void write_avi_header_1(FILE *f,int fcc,float fps,int width,int height); |
1439 | 425 |
4659 | 426 extern void mp_register_options(m_config_t* cfg); |
427 | |
459 | 428 #include "mixer.h" |
147 | 429 #include "cfg-mplayer.h" |
1 | 430 |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
431 void parse_cfgfiles( m_config_t* conf ) |
723 | 432 { |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
433 char *conffile; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
434 int conffile_fd; |
6545 | 435 if (m_config_parse_config_file(conf, CONFDIR"/mplayer.conf") < 0) |
147 | 436 exit(1); |
178 | 437 if ((conffile = get_path("")) == NULL) { |
1583 | 438 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoHomeDir); |
147 | 439 } else { |
178 | 440 mkdir(conffile, 0777); |
441 free(conffile); | |
442 if ((conffile = get_path("config")) == NULL) { | |
1583 | 443 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_GetpathProblem); |
178 | 444 } else { |
445 if ((conffile_fd = open(conffile, O_CREAT | O_EXCL | O_WRONLY, 0666)) != -1) { | |
1582 | 446 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CreatingCfgFile, conffile); |
178 | 447 write(conffile_fd, default_config, strlen(default_config)); |
448 close(conffile_fd); | |
449 } | |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
450 if (m_config_parse_config_file(conf, conffile) < 0) |
178 | 451 exit(1); |
452 free(conffile); | |
151 | 453 } |
1 | 454 } |
455 } | |
456 | |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
457 // When libmpdemux perform a blocking operation (network connection or cache filling) |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
458 // if the operation fail we use this function to check if it was interrupted by the user. |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
459 // The function return a new value for eof. |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
460 static int libmpdemux_was_interrupted(int eof) { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
461 #ifdef HAVE_NEW_INPUT |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
462 mp_cmd_t* cmd; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
463 if((cmd = mp_input_get_cmd(0,0)) != NULL) { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
464 switch(cmd->id) { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
465 case MP_CMD_QUIT: |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
466 exit_player(MSGTR_Exit_quit); |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
467 case MP_CMD_PLAY_TREE_STEP: { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
468 eof = (cmd->args[0].v.i > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
469 } break; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
470 case MP_CMD_PLAY_TREE_UP_STEP: { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
471 eof = (cmd->args[0].v.i > 0) ? PT_UP_NEXT : PT_UP_PREV; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
472 } break; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
473 case MP_CMD_PLAY_ALT_SRC_STEP: { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
474 eof = (cmd->args[0].v.i > 0) ? PT_NEXT_SRC : PT_PREV_SRC; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
475 } break; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
476 } |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
477 mp_cmd_free(cmd); |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
478 } |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
479 return eof; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
480 #else |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
481 return 0; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
482 #endif |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
483 } |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
484 |
1983 | 485 int main(int argc,char* argv[], char *envp[]){ |
723 | 486 |
1422 | 487 #ifdef USE_SUB |
1289 | 488 static subtitle* subtitles=NULL; |
3274
ac7ded58b6df
mpeg subtitle flickering patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3257
diff
changeset
|
489 float sub_last_pts = -303; |
1422 | 490 #endif |
1289 | 491 |
492 static demuxer_t *demuxer=NULL; | |
493 | |
494 static demux_stream_t *d_audio=NULL; | |
495 static demux_stream_t *d_video=NULL; | |
496 static demux_stream_t *d_dvdsub=NULL; | |
497 | |
498 static sh_audio_t *sh_audio=NULL; | |
499 static sh_video_t *sh_video=NULL; | |
500 | |
6755 | 501 |
1629 | 502 // for multifile support: |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
503 play_tree_iter_t* playtree_iter = NULL; |
1629 | 504 |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
505 int file_format=DEMUXER_TYPE_UNKNOWN; |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
506 |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
507 int delay_corrected=1; |
5075 | 508 //char* title="MPlayer"; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
509 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
510 // movie info: |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
511 int out_fmt=0; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
512 int eof=0; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
513 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
514 int osd_function=OSD_PLAY; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
515 int osd_last_pts=-303; |
3783 | 516 int osd_show_av_delay = 0; |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
517 int osd_show_sub_delay = 0; |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
518 |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
519 int rtc_fd=-1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
520 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
521 //float a_frame=0; // Audio |
1014
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
522 |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
523 int i; |
e01dc1a88edf
fixed punkso's mess... local variables moved back to main()
arpi_esp
parents:
1009
diff
changeset
|
524 |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
525 int gui_no_filename=0; |
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
526 |
5075 | 527 //vo_tune_info_t vtune; |
4453 | 528 |
5221 | 529 mp_msg_init(); |
530 mp_msg_set_level(MSGL_STATUS); | |
1567 | 531 |
5106 | 532 mp_msg(MSGT_CPLAYER,MSGL_INFO,banner_text); |
5075 | 533 // memset(&vtune,0,sizeof(vo_tune_info_t)); |
2272 | 534 /* Test for cpu capabilities (and corresponding OS support) for optimizing */ |
535 #ifdef ARCH_X86 | |
536 GetCpuCaps(&gCpuCaps); | |
6135 | 537 mp_msg(MSGT_CPLAYER,MSGL_INFO,"CPUflags: MMX: %d MMX2: %d 3DNow: %d 3DNow2: %d SSE: %d SSE2: %d\n", |
538 gCpuCaps.hasMMX,gCpuCaps.hasMMX2, | |
2272 | 539 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt, |
540 gCpuCaps.hasSSE, gCpuCaps.hasSSE2); | |
3742 | 541 #ifdef RUNTIME_CPUDETECT |
6930 | 542 mp_msg(MSGT_CPLAYER,MSGL_INFO, MSGTR_CompiledWithRuntimeDetection); |
3742 | 543 #else |
6930 | 544 mp_msg(MSGT_CPLAYER,MSGL_INFO, MSGTR_CompiledWithCPUExtensions); |
3742 | 545 #ifdef HAVE_MMX |
546 mp_msg(MSGT_CPLAYER,MSGL_INFO," MMX"); | |
547 #endif | |
548 #ifdef HAVE_MMX2 | |
549 mp_msg(MSGT_CPLAYER,MSGL_INFO," MMX2"); | |
550 #endif | |
551 #ifdef HAVE_3DNOW | |
552 mp_msg(MSGT_CPLAYER,MSGL_INFO," 3DNow"); | |
553 #endif | |
554 #ifdef HAVE_3DNOWEX | |
555 mp_msg(MSGT_CPLAYER,MSGL_INFO," 3DNowEx"); | |
556 #endif | |
557 #ifdef HAVE_SSE | |
558 mp_msg(MSGT_CPLAYER,MSGL_INFO," SSE"); | |
559 #endif | |
6135 | 560 #ifdef HAVE_SSE2 |
561 mp_msg(MSGT_CPLAYER,MSGL_INFO," SSE2"); | |
562 #endif | |
563 mp_msg(MSGT_CPLAYER,MSGL_INFO,"\n\n"); | |
3742 | 564 #endif |
565 | |
2272 | 566 #endif |
567 | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5520
diff
changeset
|
568 #ifdef HAVE_TV_BSDBT848 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5520
diff
changeset
|
569 tv_param_immediate = 1; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5520
diff
changeset
|
570 #endif |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5520
diff
changeset
|
571 |
1709 | 572 if ( argv[0] ) |
573 if(!strcmp(argv[0],"gmplayer") || | |
574 (strrchr(argv[0],'/') && !strcmp(strrchr(argv[0],'/'),"/gmplayer") ) ) | |
575 use_gui=1; | |
1639 | 576 |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
577 playtree = play_tree_new(); |
723 | 578 |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
579 mconfig = m_config_new(playtree); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
580 m_config_register_options(mconfig,mplayer_opts); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
581 // TODO : add something to let modules register their options |
4659 | 582 mp_register_options(mconfig); |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
583 parse_cfgfiles(mconfig); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
584 |
7019 | 585 #ifdef HAVE_NEW_GUI |
586 if ( use_gui ) cfg_read(); | |
587 #endif | |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
588 |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
589 if(m_config_parse_command_line(mconfig, argc, argv, envp) < 0) exit(1); // error parsing cmdline |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
590 |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
591 playtree = play_tree_cleanup(playtree); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
592 if(playtree) { |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
593 playtree_iter = play_tree_iter_new(playtree,mconfig); |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
594 if(playtree_iter) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
595 if(play_tree_iter_step(playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
596 play_tree_iter_free(playtree_iter); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
597 playtree_iter = NULL; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
598 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
599 filename = play_tree_iter_get_file(playtree_iter,1); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
600 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
601 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
602 |
1709 | 603 #ifndef HAVE_NEW_GUI |
604 if(use_gui){ | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
605 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoGui); |
1709 | 606 use_gui=0; |
607 } | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
608 #else |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
609 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
|
610 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
|
611 use_gui=0; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
612 } |
1709 | 613 #endif |
614 | |
6081
47d6a4b0f971
-vop help, patch by Julian J. M. <bandit@telecable.es>
arpi
parents:
6028
diff
changeset
|
615 if(vo_plugin_args && vo_plugin_args[0] && strcmp(vo_plugin_args[0],"help")==0){ |
6930 | 616 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableVideoOutputPlugins); |
6081
47d6a4b0f971
-vop help, patch by Julian J. M. <bandit@telecable.es>
arpi
parents:
6028
diff
changeset
|
617 vf_list_plugins(); |
47d6a4b0f971
-vop help, patch by Julian J. M. <bandit@telecable.es>
arpi
parents:
6028
diff
changeset
|
618 printf("\n"); |
47d6a4b0f971
-vop help, patch by Julian J. M. <bandit@telecable.es>
arpi
parents:
6028
diff
changeset
|
619 exit(0); |
47d6a4b0f971
-vop help, patch by Julian J. M. <bandit@telecable.es>
arpi
parents:
6028
diff
changeset
|
620 } |
47d6a4b0f971
-vop help, patch by Julian J. M. <bandit@telecable.es>
arpi
parents:
6028
diff
changeset
|
621 |
723 | 622 if(video_driver && strcmp(video_driver,"help")==0){ |
6930 | 623 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableVideoOutputDrivers); |
723 | 624 i=0; |
625 while (video_out_drivers[i]) { | |
626 const vo_info_t *info = video_out_drivers[i++]->get_info (); | |
627 printf("\t%s\t%s\n", info->short_name, info->name); | |
628 } | |
629 printf("\n"); | |
630 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
|
631 } |
5072 | 632 |
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
|
633 if(audio_driver && strcmp(audio_driver,"help")==0){ |
6930 | 634 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableAudioOutputDrivers); |
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
|
635 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
|
636 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
|
637 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
|
638 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
|
639 } |
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
|
640 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
|
641 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
|
642 } |
1639 | 643 |
1983 | 644 // check codec.conf |
645 if(!parse_codec_cfg(get_path("codecs.conf"))){ | |
3748 | 646 if(!parse_codec_cfg(CONFDIR"/codecs.conf")){ |
1983 | 647 mp_msg(MSGT_CPLAYER,MSGL_HINT,MSGTR_CopyCodecsConf); |
3934
e8e7ca8995a1
codecs.conf parser hangup fixed by iive, cpu usage reset at start
arpi
parents:
3843
diff
changeset
|
648 exit(0); // From unknown reason a hangup occurs here :(((((( |
1983 | 649 } |
650 } | |
651 | |
652 if(audio_codec && strcmp(audio_codec,"help")==0){ | |
6930 | 653 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableAudioCodecs); |
1983 | 654 list_codecs(1); |
655 printf("\n"); | |
656 exit(0); | |
657 } | |
658 if(video_codec && strcmp(video_codec,"help")==0){ | |
6930 | 659 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableVideoCodecs); |
1983 | 660 list_codecs(0); |
661 printf("\n"); | |
662 exit(0); | |
663 } | |
664 | |
665 | |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
666 if(!filename && !vcd_track && !dvd_title && !dvd_nav && !tv_param_on){ |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
667 if(!use_gui){ |
1690 | 668 // no file/vcd/dvd -> show HELP: |
5112 | 669 mp_msg(MSGT_CPLAYER, MSGL_INFO, help_text); |
1690 | 670 exit(0); |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
671 } else gui_no_filename=1; |
1690 | 672 } |
673 | |
674 // Many users forget to include command line in bugreports... | |
675 if(verbose){ | |
5112 | 676 mp_msg(MSGT_CPLAYER, MSGL_INFO, "CommandLine:"); |
1690 | 677 for(i=1;i<argc;i++)printf(" '%s'",argv[i]); |
678 printf("\n"); | |
679 } | |
680 | |
5221 | 681 mp_msg_set_level(verbose+MSGL_STATUS); |
1183 | 682 |
1639 | 683 //------ load global data first ------ |
955 | 684 |
442 | 685 |
212 | 686 // check font |
1422 | 687 #ifdef USE_OSD |
212 | 688 if(font_name){ |
337 | 689 vo_font=read_font_desc(font_name,font_factor,verbose>1); |
1582 | 690 if(!vo_font) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name); |
220 | 691 } else { |
692 // try default: | |
337 | 693 vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1); |
1353 | 694 if(!vo_font) |
695 vo_font=read_font_desc(DATADIR"/font/font.desc",font_factor,verbose>1); | |
212 | 696 } |
1422 | 697 #endif |
212 | 698 |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
699 vo_init_osd(); |
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
700 |
4431 | 701 #if defined(HAVE_LIRC) && ! defined(HAVE_NEW_INPUT) |
1639 | 702 lirc_mp_setup(); |
1856 | 703 inited_flags|=INITED_LIRC; |
1639 | 704 #endif |
705 | |
3015 | 706 #ifdef HAVE_RTC |
5055 | 707 if(!nortc) |
708 { | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
709 if ((rtc_fd = open("/dev/rtc", O_RDONLY)) < 0) |
5112 | 710 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Linux RTC init error: %s\n", strerror(errno)); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
711 else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
712 unsigned long irqp; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
713 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
714 /* if (ioctl(rtc_fd, RTC_IRQP_SET, _) < 0) { */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
715 if (ioctl(rtc_fd, RTC_IRQP_READ, &irqp) < 0) { |
5112 | 716 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Linux RTC init error in ioctl (rtc_irqp_read): %s\n", strerror(errno)); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
717 close (rtc_fd); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
718 rtc_fd = -1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
719 } 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
|
720 /* variable only by the root */ |
5112 | 721 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Linux RTC init error in ioctl (rtc_pie_on): %s\n", strerror(errno)); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
722 close (rtc_fd); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
723 rtc_fd = -1; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
724 } else |
6930 | 725 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_UsingRTCTiming, irqp); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
726 } |
5055 | 727 } |
4176
116abdd0aed1
small gtk bug fix (-display bug, baze gabu, miattad fogok elkarhozni:), and remove gui dependencie in mencoder
pontscho
parents:
4160
diff
changeset
|
728 #ifdef HAVE_NEW_GUI |
3825 | 729 // breaks DGA and SVGAlib and VESA drivers: --A'rpi |
4176
116abdd0aed1
small gtk bug fix (-display bug, baze gabu, miattad fogok elkarhozni:), and remove gui dependencie in mencoder
pontscho
parents:
4160
diff
changeset
|
730 // and now ? -- Pontscho |
116abdd0aed1
small gtk bug fix (-display bug, baze gabu, miattad fogok elkarhozni:), and remove gui dependencie in mencoder
pontscho
parents:
4160
diff
changeset
|
731 if(use_gui) setuid( getuid() ); // strongly test, please check this. |
116abdd0aed1
small gtk bug fix (-display bug, baze gabu, miattad fogok elkarhozni:), and remove gui dependencie in mencoder
pontscho
parents:
4160
diff
changeset
|
732 #endif |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
733 if(rtc_fd<0) |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
734 #endif |
5112 | 735 mp_msg(MSGT_CPLAYER, MSGL_INFO, "Using %s timing\n",softsleep?"software":"usleep()"); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
736 |
1639 | 737 #ifdef USE_TERMCAP |
3618 | 738 if ( !use_gui ) load_termcap(NULL); // load key-codes |
1639 | 739 #endif |
740 | |
1816 | 741 // ========== Init keyboard FIFO (connection to libvo) ============ |
742 make_pipe(&keyb_fifo_get,&keyb_fifo_put); | |
1694 | 743 |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
744 // Init input system |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
745 #ifdef HAVE_NEW_INPUT |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
746 current_module = "init_input"; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
747 mp_input_init(); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
748 if(keyb_fifo_get > 0) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
749 mp_input_add_key_fd(keyb_fifo_get,1,NULL,NULL); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
750 if(slave_mode) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
751 mp_input_add_cmd_fd(0,1,NULL,NULL); |
4892 | 752 else if(!use_stdin) |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
753 mp_input_add_key_fd(0,1,NULL,NULL); |
4431 | 754 inited_flags|=INITED_INPUT; |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
755 current_module = NULL; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
756 #endif |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
757 |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
758 |
1639 | 759 //========= Catch terminate signals: ================ |
760 // terminate requests: | |
761 signal(SIGTERM,exit_sighandler); // kill | |
762 signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed | |
763 | |
1729 | 764 signal(SIGINT,exit_sighandler); // Interrupt from keyboard |
1639 | 765 |
766 signal(SIGQUIT,exit_sighandler); // Quit from keyboard | |
5367
658ea5d7316a
Allow to disable crasj sighandler to enable creation of coredump files.
atmos4
parents:
5326
diff
changeset
|
767 #ifdef ENABLE_SIGHANDLER |
1639 | 768 // fatal errors: |
769 signal(SIGBUS,exit_sighandler); // bus error | |
770 signal(SIGSEGV,exit_sighandler); // segfault | |
771 signal(SIGILL,exit_sighandler); // illegal instruction | |
772 signal(SIGFPE,exit_sighandler); // floating point exc. | |
773 signal(SIGABRT,exit_sighandler); // abort() | |
5367
658ea5d7316a
Allow to disable crasj sighandler to enable creation of coredump files.
atmos4
parents:
5326
diff
changeset
|
774 #endif |
1639 | 775 |
4963 | 776 #ifdef HAVE_NEW_GUI |
777 if(use_gui){ | |
6218 | 778 guiInit(); |
4963 | 779 inited_flags|=INITED_GUI; |
4974 | 780 guiGetEvent( guiCEvent,(char *)((gui_no_filename) ? 0 : 1) ); |
4963 | 781 } |
782 #endif | |
783 | |
5983 | 784 // ******************* Now, let's see the per-file stuff ******************** |
785 | |
1639 | 786 play_next_file: |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
787 |
4835
1f59d4d73558
Fix my mistake (forgot to remove a getch2_enable) but in the rigth
albeu
parents:
4834
diff
changeset
|
788 // We must enable getch2 here to be able to interrupt network connection |
1f59d4d73558
Fix my mistake (forgot to remove a getch2_enable) but in the rigth
albeu
parents:
4834
diff
changeset
|
789 // or cache filling |
1f59d4d73558
Fix my mistake (forgot to remove a getch2_enable) but in the rigth
albeu
parents:
4834
diff
changeset
|
790 if(!use_stdin && !slave_mode){ |
5983 | 791 if(inited_flags&INITED_GETCH2) |
792 mp_msg(MSGT_CPLAYER,MSGL_WARN,"WARNING: getch2_init called twice!\n"); | |
793 else | |
794 getch2_enable(); // prepare stdin for hotkeys... | |
4835
1f59d4d73558
Fix my mistake (forgot to remove a getch2_enable) but in the rigth
albeu
parents:
4834
diff
changeset
|
795 inited_flags|=INITED_GETCH2; |
5154 | 796 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n[[[init getch2]]]\n"); |
4835
1f59d4d73558
Fix my mistake (forgot to remove a getch2_enable) but in the rigth
albeu
parents:
4834
diff
changeset
|
797 } |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
798 |
5983 | 799 // =================== GUI idle loop (STOP state) =========================== |
1745 | 800 #ifdef HAVE_NEW_GUI |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
801 if ( use_gui ) { |
3618 | 802 |
5789 | 803 guiGetEvent( guiReDrawSubWindow,0 ); |
5665 | 804 while ( guiIntfStruct.Playing != 1 ) |
805 { | |
5091
cf9c0a6f76d5
added some ifdef's to make possible to compile with --disable-new-input --enable-gui
alex
parents:
5075
diff
changeset
|
806 #ifdef HAVE_NEW_INPUT |
4858 | 807 mp_cmd_t* cmd; |
5091
cf9c0a6f76d5
added some ifdef's to make possible to compile with --disable-new-input --enable-gui
alex
parents:
5075
diff
changeset
|
808 #endif |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6590
diff
changeset
|
809 usleep(20000); |
4798 | 810 guiEventHandling(); |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6590
diff
changeset
|
811 guiGetEvent( guiReDraw,NULL ); |
5091
cf9c0a6f76d5
added some ifdef's to make possible to compile with --disable-new-input --enable-gui
alex
parents:
5075
diff
changeset
|
812 #ifdef HAVE_NEW_INPUT |
4858 | 813 if ( (cmd = mp_input_get_cmd(0,0)) != NULL) guiGetEvent( guiIEvent,(char *)cmd->id ); |
5091
cf9c0a6f76d5
added some ifdef's to make possible to compile with --disable-new-input --enable-gui
alex
parents:
5075
diff
changeset
|
814 #endif |
5665 | 815 } |
816 | |
6627 | 817 guiGetEvent( guiSetDefaults,NULL ); |
818 | |
5665 | 819 if ( ( guiIntfStruct.FilenameChanged || !filename ) |
7009 | 820 //#ifdef USE_DVDREAD |
821 // && ( guiIntfStruct.StreamType != STREAMTYPE_DVD ) | |
822 //#endif | |
5665 | 823 ) |
3543 | 824 { |
4950 | 825 play_tree_t * entry = play_tree_new(); |
826 play_tree_add_file( entry,guiIntfStruct.Filename ); | |
4974 | 827 if ( playtree ) play_tree_free_list( playtree->child,1 ); |
828 else playtree=play_tree_new(); | |
829 play_tree_set_child( playtree,entry ); | |
830 if(playtree) | |
4950 | 831 { |
4974 | 832 playtree_iter = play_tree_iter_new(playtree,mconfig); |
4950 | 833 if(playtree_iter) |
834 { | |
835 if(play_tree_iter_step(playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) | |
836 { | |
837 play_tree_iter_free(playtree_iter); | |
838 playtree_iter = NULL; | |
839 } | |
840 filename = play_tree_iter_get_file(playtree_iter,1); | |
841 } | |
842 } | |
843 guiIntfStruct.FilenameChanged=0; | |
4974 | 844 } |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
845 } |
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
846 #endif |
5983 | 847 //--------------------------------------------------------------------------- |
1787
de6a0987a08d
stop fixed, fileselector supp. maybe not work, couldn't test
arpi
parents:
1772
diff
changeset
|
848 |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
849 mp_msg(MSGT_CPLAYER,MSGL_INFO,"\n"); |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
850 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
|
851 |
5983 | 852 //==================== Open VOB-Sub ============================ |
853 | |
4770
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
854 current_module="vobsub"; |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
855 if (vobsub_name){ |
6110 | 856 vo_vobsub=vobsub_open(vobsub_name,spudec_ifo,1,&vo_spudec); |
4770
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
857 if(vo_vobsub==NULL) |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
858 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,vobsub_name); |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
859 }else if(sub_auto && filename && (strlen(filename)>=5)){ |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
860 /* try to autodetect vobsub from movie filename ::atmos */ |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
861 char *buf = malloc((strlen(filename)-3) * sizeof(char)); |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
862 memset(buf,0,strlen(filename)-3); // make sure string is terminated |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
863 strncpy(buf, filename, strlen(filename)-4); |
6110 | 864 vo_vobsub=vobsub_open(buf,spudec_ifo,0,&vo_spudec); |
4770
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
865 free(buf); |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
866 } |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
867 if(vo_vobsub) |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
868 sub_auto=0; // don't do autosub for textsubs if vobsub found |
59f8fd64538b
autodetect vobsub filename, disable autosub if vobsub found.
atmos4
parents:
4754
diff
changeset
|
869 |
5983 | 870 //==================== Init Video Out ============================ |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
871 |
1639 | 872 // check video_out driver name: |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
873 { |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
874 char* vo = video_driver ? strdup(video_driver) : NULL; |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
875 if(vo_subdevice) { |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
876 free(vo_subdevice); |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
877 vo_subdevice = NULL; |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
878 } |
1639 | 879 if (video_driver) |
880 if ((i = strcspn(video_driver, ":")) > 0) | |
881 { | |
882 size_t i2 = strlen(video_driver); | |
883 | |
884 if (video_driver[i] == ':') | |
885 { | |
886 vo_subdevice = malloc(i2-i); | |
887 if (vo_subdevice != NULL) | |
888 strncpy(vo_subdevice, (char *)(video_driver+i+1), i2-i); | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
889 vo[i] = '\0'; |
1639 | 890 } |
891 // printf("video_driver: %s, subdevice: %s\n", video_driver, vo_subdevice); | |
892 } | |
893 if(!video_driver) | |
894 video_out=video_out_drivers[0]; | |
895 else | |
896 for (i=0; video_out_drivers[i] != NULL; i++){ | |
897 const vo_info_t *info = video_out_drivers[i]->get_info (); | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
898 if(strcmp(info->short_name,vo) == 0){ |
1639 | 899 video_out = video_out_drivers[i];break; |
900 } | |
901 } | |
902 if(!video_out){ | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
903 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_InvalidVOdriver,vo?vo:"?"); |
1639 | 904 exit_player(MSGTR_Exit_error); |
905 } | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
906 if(vo) |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
907 free(vo); |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
908 } |
5983 | 909 |
910 //==================== Init Audio Out ============================ | |
911 | |
1639 | 912 // check audio_out driver name: |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
913 { |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
914 char* ao = audio_driver ? strdup(audio_driver) : NULL; |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
915 if(ao_subdevice) { |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
916 free(ao_subdevice); |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
917 ao_subdevice = NULL; |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
918 } |
1639 | 919 if (audio_driver) |
920 if ((i = strcspn(audio_driver, ":")) > 0) | |
921 { | |
922 size_t i2 = strlen(audio_driver); | |
923 | |
924 if (audio_driver[i] == ':') | |
925 { | |
926 ao_subdevice = malloc(i2-i); | |
927 if (ao_subdevice != NULL) | |
928 strncpy(ao_subdevice, (char *)(audio_driver+i+1), i2-i); | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
929 ao[i] = '\0'; |
1639 | 930 } |
931 // printf("audio_driver: %s, subdevice: %s\n", audio_driver, ao_subdevice); | |
932 } | |
933 if(!audio_driver) | |
934 audio_out=audio_out_drivers[0]; | |
935 else | |
936 for (i=0; audio_out_drivers[i] != NULL; i++){ | |
937 const ao_info_t *info = audio_out_drivers[i]->info; | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
938 if(strcmp(info->short_name,ao) == 0){ |
1639 | 939 audio_out = audio_out_drivers[i];break; |
940 } | |
941 } | |
942 if (!audio_out){ | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
943 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_InvalidAOdriver,ao?ao:"?"); |
1639 | 944 exit_player(MSGTR_Exit_error); |
945 } | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
946 if(ao) |
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
947 free(ao); |
3107 | 948 /* 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
|
949 if(ao_plugin_cfg.plugin_list){ |
3107 | 950 for (i=0; audio_out_drivers[i] != NULL; i++){ |
951 const ao_info_t *info = audio_out_drivers[i]->info; | |
952 if(strcmp(info->short_name,"plugin") == 0){ | |
953 audio_out_drivers[i]->control(AOCONTROL_SET_PLUGIN_DRIVER,(int)audio_out); | |
954 audio_out = audio_out_drivers[i]; | |
955 break; | |
956 } | |
957 } | |
958 } | |
6217
d2167f69a48b
Fix audio/video driver name parsing and remove 2 little memleaks
albeu
parents:
6209
diff
changeset
|
959 } |
5151 | 960 //============ Open & Sync STREAM --- fork cache2 ==================== |
961 | |
5983 | 962 stream=NULL; |
963 demuxer=NULL; | |
964 d_audio=NULL; | |
965 d_video=NULL; | |
966 sh_audio=NULL; | |
967 sh_video=NULL; | |
968 | |
1639 | 969 current_module="open_stream"; |
1467 | 970 stream=open_stream(filename,vcd_track,&file_format); |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
971 if(!stream) { // error... |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
972 eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY); |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
973 goto goto_next_file; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
974 } |
2321 | 975 inited_flags|=INITED_STREAM; |
5151 | 976 |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
977 if(stream->type == STREAMTYPE_PLAYLIST) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
978 play_tree_t* entry; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
979 // Handle playlist |
5151 | 980 current_module="handle_playlist"; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
981 mp_msg(MSGT_CPLAYER,MSGL_V,"Parsing playlist %s...\n",filename); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
982 entry = parse_playtree(stream); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
983 if(!entry) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
984 entry = playtree_iter->tree; |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
985 if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
986 eof = PT_NEXT_ENTRY; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
987 goto goto_next_file; |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
988 } |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
989 if(playtree_iter->tree == entry ) { // Loop with a single file |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
990 if(play_tree_iter_up_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
991 eof = PT_NEXT_ENTRY; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
992 goto goto_next_file; |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
993 } |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
994 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
995 play_tree_remove(entry,1,1); |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
996 eof = PT_NEXT_SRC; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
997 goto goto_next_file; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
998 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
999 play_tree_insert_entry(playtree_iter->tree,entry); |
5217
3e7152b383ca
Set the params given to a playlist url to the playlist
albeu
parents:
5216
diff
changeset
|
1000 play_tree_set_params_from(entry,playtree_iter->tree); |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
1001 entry = playtree_iter->tree; |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1002 if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1003 eof = PT_NEXT_ENTRY; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
1004 goto goto_next_file; |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1005 } |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
1006 play_tree_remove(entry,1,1); |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1007 eof = PT_NEXT_SRC; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1008 goto goto_next_file; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
1009 } |
1497
ad4d402b3d29
seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents:
1496
diff
changeset
|
1010 stream->start_pos+=seek_to_byte; |
598 | 1011 |
5151 | 1012 #ifdef HAVE_LIBCSS |
1013 current_module="libcss"; | |
1014 if (dvdimportkey) { | |
1015 if (dvd_import_key(dvdimportkey)) { | |
1016 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_ErrorDVDkey); | |
1017 exit_player(MSGTR_Exit_error); | |
1018 } | |
1019 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CmdlineDVDkey); | |
1020 } | |
1021 if (dvd_auth_device) { | |
1022 if (dvd_auth(dvd_auth_device,filename)) { | |
1023 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"Error in DVD auth...\n"); | |
1024 exit_player(MSGTR_Exit_error); | |
1025 } | |
1026 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_DVDauthOk); | |
1027 } | |
1028 #endif | |
1029 | |
3257 | 1030 if(stream_dump_type==5){ |
1031 unsigned char buf[4096]; | |
1032 int len; | |
1033 FILE *f; | |
5151 | 1034 current_module="dumpstream"; |
3257 | 1035 stream_reset(stream); |
1036 stream_seek(stream,stream->start_pos); | |
1037 f=fopen(stream_dump_name,"wb"); | |
1038 if(!f){ | |
1039 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); | |
1040 exit_player(MSGTR_Exit_error); | |
1041 } | |
1042 while(!stream->eof){ | |
1043 len=stream_read(stream,buf,4096); | |
1044 if(len>0) fwrite(buf,len,1,f); | |
1045 } | |
1046 fclose(f); | |
1047 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); | |
1048 exit_player(MSGTR_Exit_eof); | |
1049 } | |
1050 | |
4274 | 1051 #ifdef USE_DVDREAD |
5425 | 1052 if(stream->type==STREAMTYPE_DVD){ |
1053 current_module="dvd lang->id"; | |
1054 if(audio_lang && audio_id==-1) audio_id=dvd_aid_from_lang(stream,audio_lang); | |
1055 if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=dvd_sid_from_lang(stream,dvdsub_lang); | |
1056 current_module=NULL; | |
1057 } | |
4274 | 1058 #endif |
1059 | |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1060 #ifdef USE_DVDNAV |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1061 if (dvd_nav) stream_cache_size=0; // must disable caching... |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1062 #endif |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1063 |
5151 | 1064 // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts) |
1065 if(stream_cache_size){ | |
1066 current_module="enable_cache"; | |
1067 if(!stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024/5,stream_cache_size*1024/20)) | |
1068 if((eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file; | |
1069 } | |
1639 | 1070 |
5151 | 1071 //============ Open DEMUXERS --- DETECT file type ======================= |
3257 | 1072 |
442 | 1073 if(!has_audio) audio_id=-2; // do NOT read audio packets... |
1 | 1074 |
1639 | 1075 current_module="demux_open"; |
1076 | |
1496 | 1077 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
|
1078 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
|
1079 |
5175
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1080 current_module="demux_open2"; |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1081 |
1660 | 1082 //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
|
1083 |
1 | 1084 d_audio=demuxer->audio; |
1085 d_video=demuxer->video; | |
554 | 1086 d_dvdsub=demuxer->sub; |
1 | 1087 |
792 | 1088 // DUMP STREAMS: |
6209 | 1089 if((stream_dump_type)&&(stream_dump_type<4)){ |
792 | 1090 FILE *f; |
1091 demux_stream_t *ds=NULL; | |
1639 | 1092 current_module="dump"; |
792 | 1093 // select stream to dump |
1094 switch(stream_dump_type){ | |
1095 case 1: ds=d_audio;break; | |
1096 case 2: ds=d_video;break; | |
4335 | 1097 case 3: ds=d_dvdsub;break; |
792 | 1098 } |
1099 if(!ds){ | |
1582 | 1100 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_DumpSelectedSteramMissing); |
1639 | 1101 exit_player(MSGTR_Exit_error); |
792 | 1102 } |
1103 // disable other streams: | |
1104 if(d_audio && d_audio!=ds) {ds_free_packs(d_audio); d_audio->id=-2; } | |
1105 if(d_video && d_video!=ds) {ds_free_packs(d_video); d_video->id=-2; } | |
1106 if(d_dvdsub && d_dvdsub!=ds) {ds_free_packs(d_dvdsub); d_dvdsub->id=-2; } | |
1107 // let's dump it! | |
3257 | 1108 f=fopen(stream_dump_name,"wb"); |
1639 | 1109 if(!f){ |
1110 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); | |
1111 exit_player(MSGTR_Exit_error); | |
1112 } | |
792 | 1113 while(!ds->eof){ |
1114 unsigned char* start; | |
1115 int in_size=ds_get_packet(ds,&start); | |
2102 | 1116 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
|
1117 && stream_dump_type==2) fwrite(&in_size,1,4,f); |
792 | 1118 if(in_size>0) fwrite(start,in_size,1,f); |
1119 } | |
1120 fclose(f); | |
1582 | 1121 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); |
1639 | 1122 exit_player(MSGTR_Exit_eof); |
792 | 1123 } |
1124 | |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
1125 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
|
1126 sh_video=d_video->sh; |
792 | 1127 |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
1128 if(sh_video){ |
1 | 1129 |
5151 | 1130 current_module="video_read_properties"; |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1131 if(!video_read_properties(sh_video)) { |
6930 | 1132 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotReadVideoPropertiers); |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1133 sh_video=d_video->sh=NULL; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1134 } else { |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1135 mp_msg(MSGT_CPLAYER,MSGL_V,"[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n", |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1136 demuxer->file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h, |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1137 sh_video->fps,sh_video->frametime |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1138 ); |
1 | 1139 |
4598 | 1140 vo_fps = sh_video->fps; |
1141 /* need to set fps here for output encoders to pick it up in their init */ | |
1142 if(force_fps){ | |
1143 sh_video->fps=force_fps; | |
1144 sh_video->frametime=1.0f/sh_video->fps; | |
1145 vo_fps = force_fps; | |
1146 } | |
1147 | |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1148 if(!sh_video->fps && !force_fps){ |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1149 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_FPSnotspecified); |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1150 sh_video=d_video->sh=NULL; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1151 } |
1375
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
1152 } |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
1153 |
dbcb5b5e1fae
file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents:
1369
diff
changeset
|
1154 } |
398 | 1155 |
1 | 1156 fflush(stdout); |
1157 | |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1158 if(!sh_video && !sh_audio){ |
6930 | 1159 mp_msg(MSGT_CPLAYER,MSGL_FATAL, MSGTR_NoStreamFound); |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
1160 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
|
1161 } |
13c0dfde813b
removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents:
766
diff
changeset
|
1162 |
5151 | 1163 /* display clip info */ |
1164 demux_info_print(demuxer); | |
1165 | |
1166 //================== Read SUBTITLES (DVD & TEXT) ========================== | |
6110 | 1167 if(d_dvdsub->id >= 0 && vo_spudec==NULL && sh_video){ |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1168 |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5380
diff
changeset
|
1169 if (spudec_ifo) { |
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5380
diff
changeset
|
1170 unsigned int palette[16], width, height; |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1171 current_module="spudec_init_vobsub"; |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6627
diff
changeset
|
1172 if (vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1, -1, NULL) >= 0) |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5380
diff
changeset
|
1173 vo_spudec=spudec_new_scaled(palette, sh_video->disp_w, sh_video->disp_h); |
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5380
diff
changeset
|
1174 } |
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5380
diff
changeset
|
1175 |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1176 #ifdef USE_DVDNAV |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1177 if (vo_spudec==NULL && stream->type==STREAMTYPE_DVDNAV) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1178 current_module="spudec_init_dvdnav"; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1179 vo_spudec=spudec_new_scaled(dvdnav_stream_get_palette((dvdnav_priv_t*)(stream->priv)), |
4087 | 1180 sh_video->disp_w, sh_video->disp_h); |
5411 | 1181 } |
1182 #endif | |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1183 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1184 #ifdef USE_DVDREAD |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1185 if (vo_spudec==NULL && stream->type==STREAMTYPE_DVD) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1186 current_module="spudec_init_dvdread"; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1187 vo_spudec=spudec_new_scaled(((dvd_priv_t *)(stream->priv))->cur_pgc->palette, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1188 sh_video->disp_w, sh_video->disp_h); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1189 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1190 #endif |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1191 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1192 if (vo_spudec==NULL) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1193 current_module="spudec_init_normal"; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1194 vo_spudec=spudec_new_scaled(NULL, sh_video->disp_w, sh_video->disp_h); |
6110 | 1195 spudec_set_font_factor(vo_spudec,font_factor); |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1196 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1197 |
4087 | 1198 if (vo_spudec!=NULL) |
1199 inited_flags|=INITED_SPUDEC; | |
4274 | 1200 |
6110 | 1201 } |
1202 | |
4052
505f206d80d1
corrections to adjust_subs_time function which now uses fps if needed
atlka
parents:
4045
diff
changeset
|
1203 #ifdef USE_SUB |
6110 | 1204 if(sh_video) { |
4064
3c747168eb6e
1. subs know are readed after reading AVI header so we already know fps
atlka
parents:
4052
diff
changeset
|
1205 // after reading video params we should load subtitles because |
4052
505f206d80d1
corrections to adjust_subs_time function which now uses fps if needed
atlka
parents:
4045
diff
changeset
|
1206 // we know fps so now we can adjust subtitles time to ~6 seconds AST |
4064
3c747168eb6e
1. subs know are readed after reading AVI header so we already know fps
atlka
parents:
4052
diff
changeset
|
1207 // check .sub |
5151 | 1208 current_module="read_subtitles_file"; |
1209 if(sub_name){ | |
1210 subtitles=sub_read_file(sub_name, sh_video->fps); | |
1211 if(!subtitles) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,sub_name); | |
1212 } else | |
1213 if(sub_auto) { // auto load sub file ... | |
1214 subtitles=sub_read_file( filename ? sub_filename( get_path("sub/"), filename ) | |
6796 | 1215 : "default.sub", sh_video->fps ); |
4064
3c747168eb6e
1. subs know are readed after reading AVI header so we already know fps
atlka
parents:
4052
diff
changeset
|
1216 } |
3c747168eb6e
1. subs know are readed after reading AVI header so we already know fps
atlka
parents:
4052
diff
changeset
|
1217 if(subtitles && stream_dump_type==3) list_sub_file(subtitles); |
3c747168eb6e
1. subs know are readed after reading AVI header so we already know fps
atlka
parents:
4052
diff
changeset
|
1218 if(subtitles && stream_dump_type==4) dump_mpsub(subtitles, sh_video->fps); |
6792 | 1219 if(subtitles && stream_dump_type==6) dump_srt(subtitles, sh_video->fps); |
5151 | 1220 } |
6110 | 1221 #endif |
1222 | |
303 | 1223 //================== Init AUDIO (codec) ========================== |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1224 current_module="find_audio_codec"; |
1639 | 1225 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1226 if(sh_audio){ |
303 | 1227 // Go through the codec.conf and find the best codec... |
626 | 1228 sh_audio->codec=NULL; |
1582 | 1229 if(audio_family!=-1) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceAudioFmt,audio_family); |
626 | 1230 while(1){ |
1231 sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1); | |
1232 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
|
1233 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
|
1234 sh_audio->codec=NULL; /* re-search */ |
1582 | 1235 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
|
1236 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
|
1237 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
|
1238 } |
1582 | 1239 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format); |
1240 mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf")); | |
1792 | 1241 sh_audio=d_audio->sh=NULL; |
626 | 1242 break; |
1243 } | |
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
|
1244 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
|
1245 else if(audio_family!=-1 && sh_audio->codec->driver!=audio_family) continue; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1246 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s audio codec: [%s] afm:%d (%s)\n", |
5106 | 1247 audio_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_audio->codec->name,sh_audio->codec->driver,sh_audio->codec->info); |
626 | 1248 break; |
303 | 1249 } |
1 | 1250 } |
1251 | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1252 current_module="init_audio_codec"; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1253 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1254 if(sh_audio){ |
6930 | 1255 mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_InitializingAudioCodec); |
442 | 1256 if(!init_audio(sh_audio)){ |
1582 | 1257 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CouldntInitAudioCodec); |
1792 | 1258 sh_audio=d_audio->sh=NULL; |
303 | 1259 } else { |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1260 mp_msg(MSGT_CPLAYER,MSGL_INFO,"AUDIO: %d Hz, %d ch, sfmt: 0x%X (%d bps), ratio: %d->%d (%3.1f kbit)\n", |
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1261 sh_audio->samplerate,sh_audio->channels, |
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1262 sh_audio->sample_format,sh_audio->samplesize, |
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1263 sh_audio->i_bps,sh_audio->o_bps,sh_audio->i_bps*8*0.001); |
303 | 1264 } |
175 | 1265 } |
1266 | |
303 | 1267 //================== Init VIDEO (codec & libvo) ========================== |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1268 if(!sh_video) |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1269 goto main; |
5154 | 1270 |
1271 current_module="preinit_libvo"; | |
1272 | |
5511 | 1273 vo_config_count=0; |
5434 | 1274 if((video_out->preinit(vo_subdevice))!=0){ |
6930 | 1275 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_ErrorInitializingVODevice); |
5154 | 1276 goto goto_next_file; // exit_player(MSGTR_Exit_error); |
1277 } | |
5681 | 1278 #ifdef X11_FULLSCREEN |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5643
diff
changeset
|
1279 vo_mouse_timer_const=(int)sh_video->fps; |
5681 | 1280 #endif |
5075 | 1281 sh_video->video_out=video_out; |
5154 | 1282 inited_flags|=INITED_VO; |
1283 | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1284 current_module="init_video_filters"; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1285 |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1286 sh_video->vfilter=vf_open_filter(NULL,"vo",video_out); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1287 sh_video->vfilter=append_filters(sh_video->vfilter); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1288 |
5154 | 1289 current_module="init_video_codec"; |
303 | 1290 |
5175
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1291 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1292 |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1293 // Go through the codec.conf and find the best codec... |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1294 sh_video->inited=0; |
5326 | 1295 codecs_reset_selection(0); |
5175
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1296 if(video_codec){ |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1297 // forced codec by name: |
6930 | 1298 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_ForcedVideoCodec,video_codec); |
5175
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1299 init_video(sh_video,video_codec,-1,-1); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1300 } else { |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1301 int status; |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1302 // try in stability order: UNTESTED, WORKING, BUGGY, BROKEN |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1303 if(video_family>=0) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceVideoFmt,video_family); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1304 for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status){ |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1305 if(video_family>=0) // try first the preferred codec family: |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1306 if(init_video(sh_video,NULL,video_family,status)) break; |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1307 if(init_video(sh_video,NULL,-1,status)) break; |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1308 } |
1 | 1309 } |
5175
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1310 if(!sh_video->inited){ |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1311 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1312 mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf")); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1313 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1314 if(!sh_audio) goto goto_next_file; |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1315 sh_video = d_video->sh = NULL; |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1316 goto main; // exit_player(MSGTR_Exit_error); |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1317 } |
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1318 |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1319 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s video codec: [%s] vfm:%d (%s)\n", |
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1320 video_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_video->codec->name,sh_video->codec->driver,sh_video->codec->info); |
5175
8354d89498d4
video codec selection redesigned and moved to libmpcodecs - now it's 'intelligent'
arpi
parents:
5154
diff
changeset
|
1321 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
1 | 1322 |
1439 | 1323 if(auto_quality>0){ |
1324 // Auto quality option enabled | |
1325 output_quality=get_video_quality_max(sh_video); | |
1326 if(auto_quality>output_quality) auto_quality=output_quality; | |
1327 else output_quality=auto_quality; | |
1567 | 1328 mp_msg(MSGT_CPLAYER,MSGL_V,"AutoQ: setting quality to %d\n",output_quality); |
1439 | 1329 set_video_quality(sh_video,output_quality); |
1330 } | |
1331 | |
398 | 1332 // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============ |
1 | 1333 |
6781 | 1334 current_module="init_vo"; |
6786 | 1335 if (sh_video) |
1336 { | |
1337 if (vo_gamma_brightness != 1000) | |
1338 set_video_colors(sh_video, "brightness", vo_gamma_brightness); | |
1339 if (vo_gamma_contrast != 1000) | |
1340 set_video_colors(sh_video, "contrast", vo_gamma_contrast); | |
1341 if (vo_gamma_saturation != 1000) | |
1342 set_video_colors(sh_video, "saturation", vo_gamma_saturation); | |
1343 if (vo_gamma_hue != 1000) | |
1344 set_video_colors(sh_video, "hue", vo_gamma_hue); | |
1345 } | |
6755 | 1346 |
6110 | 1347 if(vo_flags & 0x08 && vo_spudec) |
1348 spudec_set_hw_spu(vo_spudec,video_out); | |
1349 | |
1 | 1350 //================== MAIN: ========================== |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1351 main: |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1352 if(!sh_video) osd_level = 0; |
5151 | 1353 |
5154 | 1354 fflush(stdout); |
5151 | 1355 |
5789 | 1356 #ifdef HAVE_NEW_GUI |
1357 if ( use_gui ) | |
1358 { | |
6796 | 1359 guiGetEvent( guiSetStream,(char *)stream ); |
5789 | 1360 guiGetEvent( guiSetFileName,filename ); |
1361 if ( sh_audio ) guiIntfStruct.AudioType=sh_audio->channels; else guiIntfStruct.AudioType=0; | |
6796 | 1362 if ( !sh_video && sh_audio ) guiGetEvent( guiSetAudioOnly,(char *)1 ); else guiGetEvent( guiSetAudioOnly,(char *)0 ); |
7009 | 1363 guiGetEvent( guiSetFileFormat,(char *)demuxer->file_format ); |
1364 if ( guiGetEvent( guiSetValues,(char *)sh_video ) ) goto goto_next_file; | |
5789 | 1365 } |
1366 #endif | |
1367 | |
1 | 1368 { |
1420 | 1369 //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
|
1370 //float v_frame=0; // Video |
1 | 1371 float time_frame=0; // Timer |
1400 | 1372 //float num_frames=0; // number of frames played |
1382 | 1373 int grab_frames=0; |
212 | 1374 char osd_text_buffer[64]; |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1375 int drop_frame=0; // current dropping status |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1376 int dropped_frames=0; // how many frames dropped since last non-dropped frame |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1377 int too_slow_frame_cnt=0; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1378 int too_fast_frame_cnt=0; |
1439 | 1379 // 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
|
1380 float AV_delay=0; // average of A-V timestamp differences |
1439 | 1381 double vdecode_time; |
6028
bd016664dc18
UMRs fixed - noticed by Nilmoni Deb <ndeb@ece.cmu.edu>
arpi
parents:
6016
diff
changeset
|
1382 unsigned int lastframeout_ts=0; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1383 float time_frame_corr_avg=0; |
1 | 1384 |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1385 float next_frame_time=0; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1386 int frame_time_remaining=0; // flag |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1387 int blit_frame=0; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1388 |
6028
bd016664dc18
UMRs fixed - noticed by Nilmoni Deb <ndeb@ece.cmu.edu>
arpi
parents:
6016
diff
changeset
|
1389 osd_text_buffer[0]=0; |
bd016664dc18
UMRs fixed - noticed by Nilmoni Deb <ndeb@ece.cmu.edu>
arpi
parents:
6016
diff
changeset
|
1390 |
1 | 1391 //================ SETUP AUDIO ========================== |
1392 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1393 if(sh_audio){ |
1237 | 1394 const ao_info_t *info=audio_out->info; |
5151 | 1395 current_module="setup_audio"; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1396 mp_msg(MSGT_CPLAYER,MSGL_INFO,"AO: [%s] %iHz %dch %s\n", |
1237 | 1397 info->short_name, |
1398 force_srate?force_srate:sh_audio->samplerate, | |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
1399 sh_audio->channels, |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1449
diff
changeset
|
1400 audio_out_format_name(sh_audio->sample_format) |
5151 | 1401 ); |
6930 | 1402 mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_AODescription_AOAuthor, |
5151 | 1403 info->name, info->author); |
1404 if(strlen(info->comment) > 0) | |
6930 | 1405 mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_AOComment, info->comment); |
5151 | 1406 |
969 | 1407 if(!audio_out->init(force_srate?force_srate:sh_audio->samplerate, |
1408 sh_audio->channels,sh_audio->sample_format,0)){ | |
1582 | 1409 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotInitAO); |
1792 | 1410 sh_audio=d_audio->sh=NULL; |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1411 if(sh_video == NULL) |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1412 goto goto_next_file; |
1856 | 1413 } else { |
1414 inited_flags|=INITED_AO; | |
1 | 1415 } |
1416 } | |
1417 | |
5151 | 1418 current_module="av_init"; |
1419 | |
1420 if(sh_video) sh_video->timer=0; | |
1421 if(sh_audio) sh_audio->timer=-audio_delay; | |
1 | 1422 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1423 if(!sh_audio){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1962
diff
changeset
|
1424 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_NoSound); |
1567 | 1425 if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused audio chunks\n",d_audio->packs); |
1 | 1426 ds_free_packs(d_audio); // free buffered chunks |
1427 d_audio->id=-2; // do not read audio chunks | |
5154 | 1428 uninit_player(INITED_AO); // close device |
1 | 1429 } |
5151 | 1430 if(!sh_video){ |
6930 | 1431 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Video_NoVideo); |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1432 if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused video chunks\n",d_video->packs); |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1433 ds_free_packs(d_video); |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1434 d_video->id=-2; |
5154 | 1435 uninit_player(INITED_VO); |
5151 | 1436 } |
1 | 1437 |
6185
7e769ea2acc7
jump to next file (or exit) if can't decode audio && video
alex
parents:
6183
diff
changeset
|
1438 if (!sh_video && !sh_audio) |
7e769ea2acc7
jump to next file (or exit) if can't decode audio && video
alex
parents:
6183
diff
changeset
|
1439 goto goto_next_file; |
7e769ea2acc7
jump to next file (or exit) if can't decode audio && video
alex
parents:
6183
diff
changeset
|
1440 |
1660 | 1441 if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! |
398 | 1442 if(force_fps){ |
4598 | 1443 vo_fps = sh_video->fps=force_fps; |
398 | 1444 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
|
1445 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_FPSforced,sh_video->fps,sh_video->frametime); |
398 | 1446 } |
1 | 1447 |
1639 | 1448 //==================== START PLAYING ======================= |
1449 | |
1582 | 1450 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying);fflush(stdout); |
1 | 1451 |
1452 InitTimer(); | |
1453 | |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1454 #ifdef USE_DVDNAV |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1455 if (dvd_nav && stream->type==STREAMTYPE_DVDNAV) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1456 dvdnav_stream_fullstart((dvdnav_priv_t *)stream->priv); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1457 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1458 #endif |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1459 |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1460 total_time_usage_start=GetTimer(); |
3934
e8e7ca8995a1
codecs.conf parser hangup fixed by iive, cpu usage reset at start
arpi
parents:
3843
diff
changeset
|
1461 audio_time_usage=0; video_time_usage=0; vout_time_usage=0; |
6585
eb10ce6b3f18
multifile (informal output) fix by Balazs Tibor (tibcu)
alex
parents:
6545
diff
changeset
|
1462 total_frame_cnt=0; drop_frame_cnt=0; // fix for multifile fps benchmark |
6590 | 1463 play_n_frames=play_n_frames_mf; |
1464 | |
1465 if(play_n_frames==0){ | |
1466 eof=PT_NEXT_ENTRY; goto goto_next_file; | |
1467 } | |
1468 | |
1 | 1469 while(!eof){ |
1439 | 1470 float aq_sleep_time=0; |
1 | 1471 |
1125 | 1472 if(play_n_frames>=0){ |
1473 --play_n_frames; | |
6954
8e991cd2e727
10l bug, noticed by Alexander Neundorf <neundorf@dellingsoft.de>
arpi
parents:
6940
diff
changeset
|
1474 if(play_n_frames<0) eof = PT_NEXT_ENTRY; |
1125 | 1475 } |
1476 | |
1 | 1477 /*========================== PLAY AUDIO ============================*/ |
5610 | 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 while(sh_audio){ |
746 | 1480 unsigned int t; |
4834 | 1481 double tt; |
2705 | 1482 int playsize; |
5610 | 1483 |
1484 current_module="play_audio"; | |
2705 | 1485 |
3097 | 1486 ao_data.pts=sh_audio->timer*90000.0; |
2705 | 1487 playsize=audio_out->get_space(); |
746 | 1488 |
5610 | 1489 // handle audio-only case: |
1490 if(!playsize && !sh_video) { // buffer is full, do not block here!!! | |
4825
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1491 usec_sleep(10000); // Wait a tick before retry |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1492 continue; |
41d2da3bd082
Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents:
4818
diff
changeset
|
1493 } |
746 | 1494 |
1495 if(playsize>MAX_OUTBURST) playsize=MAX_OUTBURST; // we shouldn't exceed it! | |
5610 | 1496 |
1497 // Fill buffer if needed: | |
1639 | 1498 current_module="decode_audio"; // Enter AUDIO decoder module |
746 | 1499 t=GetTimer(); |
1500 while(sh_audio->a_buffer_len<playsize && !d_audio->eof){ | |
1501 int ret=decode_audio(sh_audio,&sh_audio->a_buffer[sh_audio->a_buffer_len], | |
1502 playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len); | |
5610 | 1503 if(ret<=0) break; // EOF? |
1504 sh_audio->a_buffer_len+=ret; | |
1 | 1505 } |
4834 | 1506 t=GetTimer()-t; |
5610 | 1507 tt = t*0.000001f; audio_time_usage+=tt; |
746 | 1508 if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len; |
5610 | 1509 |
1510 // play audio: | |
1511 current_module="play_audio"; | |
955 | 1512 playsize=audio_out->play(sh_audio->a_buffer,playsize,0); |
1 | 1513 |
955 | 1514 if(playsize>0){ |
746 | 1515 sh_audio->a_buffer_len-=playsize; |
1516 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
|
1517 sh_audio->timer+=playsize/(float)(sh_audio->o_bps); |
1 | 1518 } |
1519 | |
1520 break; | |
5610 | 1521 } // while(sh_audio) |
1 | 1522 |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1523 if(!sh_video) { |
5610 | 1524 // handle audio-only case: |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1525 if(!quiet) mp_msg(MSGT_AVSYNC,MSGL_STATUS,"A:%6.1f %4.1f%% %d%% \r" |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1526 ,sh_audio->timer-audio_out->get_delay() |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1527 ,(sh_audio->timer>0.5)?100.0*audio_time_usage/(double)sh_audio->timer:0 |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1528 ,cache_fill_status |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1529 ); |
5610 | 1530 if(d_audio->eof) eof = PT_NEXT_ENTRY; |
1531 | |
1532 } else { | |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1533 |
1 | 1534 /*========================== PLAY VIDEO ============================*/ |
1535 | |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1536 float frame_time=next_frame_time; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1537 |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1538 vo_pts=sh_video->timer*90000.0; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1539 vo_fps=sh_video->fps; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1540 |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1541 if(!frame_time_remaining){ |
2567 | 1542 //-------------------- Decode a frame: ----------------------- |
1543 vdecode_time=video_time_usage; | |
5698
cb47abf3b511
Fix loop playback. Main loop was quited on end of video.
albeu
parents:
5681
diff
changeset
|
1544 while(1) |
2567 | 1545 { unsigned char* start=NULL; |
1546 int in_size; | |
1547 // get it! | |
1548 current_module="video_read_frame"; | |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1549 in_size=video_read_frame(sh_video,&next_frame_time,&start,force_fps); |
2567 | 1550 if(in_size<0){ eof=1; break; } |
1551 if(in_size>max_framesize) max_framesize=in_size; // stats | |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1552 sh_video->timer+=frame_time; |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1553 time_frame+=frame_time; // for nosound |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1554 // check for frame-drop: |
5643 | 1555 current_module="check_framedrop"; |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1556 if(sh_audio && !d_audio->eof){ |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1557 float delay=audio_out->get_delay(); |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1558 float d=(sh_video->timer)-(sh_audio->timer-delay); |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1559 // we should avoid dropping to many frames in sequence unless we |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1560 // are too late. and we allow 100ms A-V delay here: |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1561 if(d<-dropped_frames*frame_time-0.100){ |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1562 drop_frame=frame_dropping; |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1563 ++drop_frame_cnt; |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1564 ++dropped_frames; |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1565 } else { |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1566 drop_frame=dropped_frames=0; |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1567 } |
5621 | 1568 ++total_frame_cnt; |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1569 } |
2567 | 1570 // decode: |
1571 current_module="decode_video"; | |
1572 // printf("Decode! %p %d \n",start,in_size); | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5489
diff
changeset
|
1573 blit_frame=decode_video(sh_video,start,in_size,drop_frame); |
5698
cb47abf3b511
Fix loop playback. Main loop was quited on end of video.
albeu
parents:
5681
diff
changeset
|
1574 break; |
1291 | 1575 } |
2567 | 1576 vdecode_time=video_time_usage-vdecode_time; |
1577 //------------------------ frame decoded. -------------------- | |
5610 | 1578 |
1579 mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time); | |
1580 | |
5927 | 1581 if(sh_video->vf_inited<0){ |
6930 | 1582 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_NotInitializeVOPorVO); |
5927 | 1583 eof=1; goto goto_next_file; |
1584 } | |
1585 | |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1586 } |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1587 |
5610 | 1588 // ========================================================================== |
2567 | 1589 |
5643 | 1590 // current_module="draw_osd"; |
1591 // if(vo_config_count) video_out->draw_osd(); | |
1 | 1592 |
5610 | 1593 #ifdef HAVE_NEW_GUI |
1594 if(use_gui) guiEventHandling(); | |
1595 #endif | |
1596 | |
1597 current_module="calc_sleep_time"; | |
780 | 1598 |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1599 #if 0 |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1600 { // debug frame dropping code |
3097 | 1601 float delay=audio_out->get_delay(); |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1602 mp_msg(MSGT_AVSYNC,MSGL_V,"\r[V] %5.3f [A] %5.3f => {%5.3f} (%5.3f) [%d] \n", |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1603 sh_video->timer,sh_audio->timer-delay, |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1604 sh_video->timer-(sh_audio->timer-delay), |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1605 delay,drop_frame); |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1606 } |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1607 #endif |
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1608 |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1609 if(drop_frame && !frame_time_remaining){ |
5610 | 1610 |
1611 time_frame=0; // don't sleep! | |
1612 blit_frame=0; // don't display! | |
1613 | |
798 | 1614 } else { |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1615 |
780 | 1616 // It's time to sleep... |
5612
027568c0f982
new -framedrop code - works much better than the old one
arpi
parents:
5610
diff
changeset
|
1617 |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1618 frame_time_remaining=0; |
780 | 1619 time_frame-=GetRelativeTime(); // reset timer |
1620 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1621 if(sh_audio && !d_audio->eof){ |
3097 | 1622 float delay=audio_out->get_delay(); |
1623 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
|
1624 |
5610 | 1625 if(!dapsync){ |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1626 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1627 /* Arpi's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1628 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1629 time_frame=sh_video->timer; |
3097 | 1630 time_frame-=sh_audio->timer-delay; |
1631 | |
5610 | 1632 } else { // if(!dapsync) |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1633 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1634 /* DaP's AV-sync */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1635 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1636 float SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1637 /* 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
|
1638 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
|
1639 // 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
|
1640 // 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
|
1641 if(SH_AV_delay<-2*frame_time){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1642 drop_frame=frame_dropping; // tricky! |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1643 ++drop_frame_cnt; |
5112 | 1644 mp_msg(MSGT_AVSYNC,MSGL_INFO,"A-V SYNC: FRAMEDROP (SH_AV_delay=%.3f)!\n", SH_AV_delay); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1645 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
|
1646 /* go into unlimited-TF cycle */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1647 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1648 } else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1649 #define SL_CORR_AVG_LEN 125 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1650 /* don't adjust under framedropping */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1651 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
|
1652 (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
|
1653 #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
|
1654 #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
|
1655 time_frame += time_frame_corr_avg; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1656 // 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
|
1657 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
|
1658 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
|
1659 time_frame = SH_AV_delay; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1660 else { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1661 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
|
1662 SH_AV_delay - time_frame < (frame_time + time_frame_corr_avg) * -UNEXP_CORR_WARN) |
5112 | 1663 mp_msg(MSGT_AVSYNC, MSGL_WARN, "WARNING: A-V SYNC LAG TOO LARGE: %.3f {%.3f - %.3f} (too little UNEXP_CORR_MAX?)\n", |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1664 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
|
1665 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
|
1666 UNEXP_CORR_MAX : -UNEXP_CORR_MAX); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1667 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1668 } /* /start dropframe */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1669 |
5610 | 1670 } // if(dapsync) |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1671 |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1672 if(delay>0.25) delay=0.25; else |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1673 if(delay<0.10) delay=0.10; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1674 if(time_frame>delay*0.6){ |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1675 // sleep time too big - may cause audio drops (buffer underrun) |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1676 frame_time_remaining=1; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1677 time_frame=delay*0.5; |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1678 } |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1679 |
780 | 1680 } else { |
5610 | 1681 |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1682 // NOSOUND: |
1124
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1683 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
|
1684 time_frame=0; |
0e95f30ffd4c
-frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents:
1059
diff
changeset
|
1685 |
780 | 1686 } |
798 | 1687 |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1688 // if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,sh_audio->timer,sh_video->timer); |
1439 | 1689 |
1690 aq_sleep_time+=time_frame; | |
1709 | 1691 |
5610 | 1692 } // !drop_frame |
1693 | |
1694 //============================== SLEEP: =================================== | |
1695 | |
1696 // flag 256 means: libvo driver does its timing (dvb card) | |
1697 if(time_frame>0.001 && !(vo_flags&256)){ | |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1698 |
3015 | 1699 #ifdef HAVE_RTC |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1700 if(rtc_fd>=0){ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1701 // -------- RTC ----------- |
5610 | 1702 current_module="sleep_rtc"; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1703 while (time_frame > 0.000) { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1704 unsigned long long rtc_ts; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1705 if (read (rtc_fd, &rtc_ts, sizeof(rtc_ts)) <= 0) |
5112 | 1706 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Linux RTC read error: %s\n", strerror(errno)); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1707 time_frame-=GetRelativeTime(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1708 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1709 } else |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1710 #endif |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1711 { |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1712 // -------- USLEEP + SOFTSLEEP ----------- |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1713 float min=softsleep?0.021:0.005; |
5610 | 1714 current_module="sleep_usleep"; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1715 while(time_frame>min){ |
746 | 1716 if(time_frame<=0.020) |
1439 | 1717 usec_sleep(0); // sleeps 1 clock tick (10ms)! |
746 | 1718 else |
2757 | 1719 usec_sleep(1000000*(time_frame-0.020)); |
746 | 1720 time_frame-=GetRelativeTime(); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1721 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1722 if(softsleep){ |
5610 | 1723 current_module="sleep_soft"; |
5112 | 1724 if(time_frame<0) mp_msg(MSGT_AVSYNC, MSGL_WARN, "Warning! Softsleep underflow!\n"); |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1725 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
|
1726 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1727 } |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1728 |
2705 | 1729 } |
117 | 1730 |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1731 //if(!frame_time_remaining){ // should we display the frame now? |
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1732 |
5610 | 1733 //====================== FLIP PAGE (VIDEO BLT): ========================= |
1734 | |
6123 | 1735 current_module="vo_check_events"; |
1736 if(vo_config_count) video_out->check_events(); | |
1737 | |
715 | 1738 current_module="flip_page"; |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1739 if(blit_frame && !frame_time_remaining){ |
1962 | 1740 unsigned int t2=GetTimer(); |
4838 | 1741 double tt; |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1742 float j; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1743 #define FRAME_LAG_WARN 0.2 |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1744 j = ((float)t2 - lastframeout_ts) / 1000000; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1745 lastframeout_ts = GetTimer(); |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1746 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
|
1747 too_fast_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1748 /* printf ("PANIC: too fast frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1749 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
|
1750 too_slow_frame_cnt++; |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1751 /* printf ("PANIC: too slow frame (%.3f)!\n", j); */ |
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1752 |
5511 | 1753 if(vo_config_count) video_out->flip_page(); |
5610 | 1754 // usec_sleep(50000); // test only! |
4838 | 1755 t2=GetTimer()-t2; |
1756 tt = t2*0.000001f; | |
1757 vout_time_usage+=tt; | |
1962 | 1758 } |
5610 | 1759 |
1760 //====================== A-V TIMESTAMP CORRECTION: ========================= | |
1761 | |
1762 current_module="av_sync"; | |
1763 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1764 if(sh_audio){ |
780 | 1765 float a_pts=0; |
1766 float v_pts=0; | |
1767 | |
746 | 1768 // unplayed bytes in our and soundcard/dma buffer: |
3097 | 1769 float delay=audio_out->get_delay()+(float)sh_audio->a_buffer_len/(float)sh_audio->o_bps; |
746 | 1770 |
780 | 1771 if(pts_from_bps){ |
5610 | 1772 // PTS = sample_no / samplerate |
1498 | 1773 unsigned int samples=(sh_audio->audio.dwSampleSize)? |
1774 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : | |
6871
88953ff93743
count blocks by rounded-up chunksizes instead of chunks -
arpi
parents:
6838
diff
changeset
|
1775 (d_audio->block_no); // <- used for VBR audio |
3302 | 1776 samples+=sh_audio->audio.dwStart; // offset |
1498 | 1777 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; |
5610 | 1778 delay_corrected=1; |
780 | 1779 } else { |
1780 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) | |
746 | 1781 a_pts=d_audio->pts; |
1498 | 1782 if(!delay_corrected) if(a_pts) delay_corrected=1; |
6429 | 1783 #if 0 |
1784 printf("\n#X# pts=%5.3f ds_pts=%5.3f buff=%5.3f total=%5.3f\n", | |
1785 a_pts, | |
1786 ds_tell_pts(d_audio)/(float)sh_audio->i_bps, | |
1787 -sh_audio->a_in_buffer_len/(float)sh_audio->i_bps, | |
1788 a_pts+(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps); | |
1789 #endif | |
746 | 1790 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; |
780 | 1791 } |
1498 | 1792 v_pts=d_video->pts; |
746 | 1793 |
1567 | 1794 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 | 1795 |
398 | 1796 if(delay_corrected){ |
6173 | 1797 static int drop_message=0; |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1798 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
|
1799 AV_delay=(a_pts-delay-audio_delay)-v_pts; |
6173 | 1800 if(drop_frame_cnt>50+drop_message*250 && AV_delay>0.5){ |
1801 ++drop_message; | |
1802 mp_msg(MSGT_AVSYNC,MSGL_WARN,MSGTR_SystemTooSlow); | |
1803 } | |
1478
6f9167f0fcca
'too slow' message is fixed - better detection now based on both drop_cnt and A-V sync
arpi
parents:
1467
diff
changeset
|
1804 x=AV_delay*0.1f; |
1 | 1805 if(x<-max_pts_correction) x=-max_pts_correction; else |
1806 if(x> max_pts_correction) x= max_pts_correction; | |
780 | 1807 if(default_max_pts_correction>=0) |
1808 max_pts_correction=default_max_pts_correction; | |
1809 else | |
1810 max_pts_correction=sh_video->frametime*0.10; // +-10% of time | |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
1811 if(!frame_time_remaining){ sh_audio->timer+=x; c_total+=x;} // correction |
2353 | 1812 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 | 1813 a_pts-audio_delay-delay,v_pts,AV_delay,c_total, |
1546 | 1814 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded, |
1498 | 1815 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, |
1816 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, | |
1817 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 | |
1818 ,drop_frame_cnt | |
1819 ,output_quality | |
2353 | 1820 ,cache_fill_status |
1 | 1821 ); |
1822 fflush(stdout); | |
1823 } | |
780 | 1824 |
1 | 1825 } else { |
1826 // No audio: | |
1420 | 1827 |
1448 | 1828 if(!quiet) |
2353 | 1829 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"V:%6.1f %3d %2d%% %2d%% %4.1f%% %d %d %d%%\r",d_video->pts, |
1400 | 1830 (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
|
1831 (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
|
1832 (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
|
1833 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 |
2353 | 1834 ,drop_frame_cnt |
1835 ,output_quality | |
1836 ,cache_fill_status | |
442 | 1837 ); |
1 | 1838 |
1839 fflush(stdout); | |
1420 | 1840 |
1 | 1841 } |
5610 | 1842 |
1843 //============================ Auto QUALITY ============================ | |
1 | 1844 |
1439 | 1845 /*Output quality adjustments:*/ |
1846 if(auto_quality>0){ | |
5610 | 1847 current_module="autoq"; |
1496 | 1848 // float total=0.000001f * (GetTimer()-aq_total_time); |
1439 | 1849 // if(output_quality<auto_quality && aq_sleep_time>0.05f*total) |
1850 if(output_quality<auto_quality && aq_sleep_time>0) | |
1851 ++output_quality; | |
1852 else | |
1853 // if(output_quality>0 && aq_sleep_time<-0.05f*total) | |
1854 if(output_quality>1 && aq_sleep_time<0) | |
1855 --output_quality; | |
1856 else | |
1857 if(output_quality>0 && aq_sleep_time<-0.050f) // 50ms | |
1858 output_quality=0; | |
1859 // printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); | |
1860 set_video_quality(sh_video,output_quality); | |
1861 } | |
1862 | |
5610 | 1863 } // end if(sh_video) |
1864 | |
1865 //============================ Handle PAUSE =============================== | |
1866 | |
1867 current_module="pause"; | |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1868 |
1422 | 1869 #ifdef USE_OSD |
220 | 1870 if(osd_visible){ |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
1871 if (!--osd_visible){ |
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
1872 vo_osd_progbar_type=-1; // disable |
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
1873 vo_osd_changed(OSDTYPE_PROGBAR); |
1504
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1874 if (osd_function != OSD_PAUSE) |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1875 osd_function = OSD_PLAY; |
f4f686aed404
modified mplayer.c to rewert to PLAY after rewinding after 1 sec
atlka
parents:
1501
diff
changeset
|
1876 } |
220 | 1877 } |
1422 | 1878 #endif |
371 | 1879 |
1880 if(osd_function==OSD_PAUSE){ | |
6699
9fc877cee29a
Only space and 'p' will unpause, other keys will unpause and do their function (eg. seek),
atmos4
parents:
6674
diff
changeset
|
1881 int pkey=-1; |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1882 #ifdef HAVE_NEW_INPUT |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1883 mp_cmd_t* cmd; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1884 #endif |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1885 if(!quiet) { |
6930 | 1886 mp_msg(MSGT_CPLAYER,MSGL_STATUS,MSGTR_Paused); |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1887 fflush(stdout); |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
1888 } |
1793
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1889 #ifdef HAVE_NEW_GUI |
4974 | 1890 if(use_gui) guiGetEvent( guiCEvent,(char *)guiSetPause ); |
1793
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1891 #endif |
5511 | 1892 if (video_out && sh_video && vo_config_count) |
4754 | 1893 video_out->control(VOCTRL_PAUSE, NULL); |
1894 | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
1895 if (audio_out && sh_audio) |
1156 | 1896 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
|
1897 |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1898 #ifdef HAVE_NEW_INPUT |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1899 while( (cmd = mp_input_get_cmd(20,1)) == NULL) { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1900 #else /* HAVE_NEW_INPUT */ |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1901 if(slave_mode) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1902 fd_set set; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1903 struct timeval timeout; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1904 while (1) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1905 usec_sleep(1000); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1906 FD_ZERO (&set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1907 FD_SET (STDIN_FILENO, &set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1908 timeout.tv_sec = 0; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1909 timeout.tv_usec = 1000; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1910 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
|
1911 break; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1912 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1913 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1914 } else { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1915 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1916 while( |
371 | 1917 #ifdef HAVE_LIRC |
723 | 1918 lirc_mp_getinput()<=0 && |
371 | 1919 #endif |
6699
9fc877cee29a
Only space and 'p' will unpause, other keys will unpause and do their function (eg. seek),
atmos4
parents:
6674
diff
changeset
|
1920 (use_stdin || getch2(20)<=0) /* && mplayer_get_key()<=0*/){ |
4849
9be4ac85dd35
Moved the call to VOCTRL_FULLSCREEN outside of #ifdef USE_TV block
albeu
parents:
4844
diff
changeset
|
1921 #endif /* HAVE_NEW_INPUT */ |
5511 | 1922 if(sh_video && video_out && vo_config_count) video_out->check_events(); |
6699
9fc877cee29a
Only space and 'p' will unpause, other keys will unpause and do their function (eg. seek),
atmos4
parents:
6674
diff
changeset
|
1923 if((pkey=mplayer_get_key()) > 0) break; |
1709 | 1924 #ifdef HAVE_NEW_GUI |
1925 if(use_gui){ | |
4798 | 1926 guiEventHandling(); |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6590
diff
changeset
|
1927 guiGetEvent( guiReDraw,NULL ); |
4963 | 1928 if(guiIntfStruct.Playing!=2 || (rel_seek_secs || abs_seek_pos)) break; |
1709 | 1929 } |
1930 #endif | |
4963 | 1931 usleep(20000); |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1932 #ifdef HAVE_NEW_INPUT |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1933 } |
5046 | 1934 mp_cmd_free(cmd); |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1935 #else |
1467 | 1936 if(use_stdin) usec_sleep(1000); // do not eat the CPU |
723 | 1937 } |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1938 } |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1939 #endif /* HAVE_NEW_INPUT */ |
723 | 1940 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
|
1941 if (audio_out && sh_audio) |
1156 | 1942 audio_out->resume(); // resume audio |
5511 | 1943 if (video_out && sh_video && vo_config_count) |
4754 | 1944 video_out->control(VOCTRL_RESUME, NULL); // resume video |
2889
0d8553a47d1a
RTC support, softsleep and optional new timing code by Dap
arpi
parents:
2880
diff
changeset
|
1945 (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
|
1946 #ifdef HAVE_NEW_GUI |
6183
a4bbda72ce86
fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents:
6173
diff
changeset
|
1947 if (use_gui) |
a4bbda72ce86
fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents:
6173
diff
changeset
|
1948 { |
a4bbda72ce86
fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents:
6173
diff
changeset
|
1949 if ( guiIntfStruct.Playing == guiSetStop ) goto goto_next_file; |
a4bbda72ce86
fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents:
6173
diff
changeset
|
1950 guiGetEvent( guiCEvent,(char *)guiSetPlay ); |
a4bbda72ce86
fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents:
6173
diff
changeset
|
1951 } |
1793
ba11d77c587a
gui status maintaining - now pause from console works, and gui display is in sync with osd
arpi
parents:
1792
diff
changeset
|
1952 #endif |
6796 | 1953 if(pkey!=32 && pkey!=112 && pkey!=-1) |
6699
9fc877cee29a
Only space and 'p' will unpause, other keys will unpause and do their function (eg. seek),
atmos4
parents:
6674
diff
changeset
|
1954 mplayer_put_key(pkey); // pass on the key |
371 | 1955 } |
1956 | |
5610 | 1957 // handle -sstep |
2436 | 1958 if(step_sec>0) { |
1959 osd_function=OSD_FFW; | |
1960 rel_seek_secs+=step_sec; | |
1961 } | |
1 | 1962 |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1963 #ifdef USE_DVDNAV |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1964 if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still) |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1965 dvdnav_stream_sleeping((dvdnav_priv_t*)stream->priv); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1966 #endif |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
1967 |
1 | 1968 //================= Keyboard events, SEEKing ==================== |
1969 | |
5610 | 1970 current_module="key_events"; |
1971 | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
1972 #ifndef HAVE_NEW_INPUT |
3322
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1973 /* slave mode */ |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1974 if(slave_mode) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1975 char buffer[1024]; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1976 fd_set set; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1977 struct timeval timeout; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1978 int arg; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1979 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1980 FD_ZERO (&set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1981 FD_SET (STDIN_FILENO, &set); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1982 timeout.tv_sec = 0; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1983 timeout.tv_usec = 1000; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1984 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1985 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
|
1986 fgets(buffer, 1024, stdin); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1987 if(!strcmp("play\n", buffer)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1988 osd_function=OSD_PLAY; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1989 } else if(!strcmp("stop\n", buffer)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1990 osd_function=OSD_PAUSE; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1991 } else if(!strncmp("seek ", buffer, 5)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1992 sscanf(buffer+5, "%d", &arg); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1993 rel_seek_secs = arg-d_video->pts; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1994 } else if(!strncmp("skip ", buffer, 5)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1995 sscanf(buffer+5, "%d", &arg); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1996 rel_seek_secs = arg; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1997 } else if(!strcmp("quit\n", buffer)) { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1998 exit_player(MSGTR_Exit_quit); |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
1999 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
2000 } else { |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
2001 osd_function=OSD_PLAY; |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
2002 } |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
2003 } else |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
2004 |
cdd3f5ac06b2
-slave patch by Kilian A. Foth <foth@informatik.uni-hamburg.de>
arpi
parents:
3302
diff
changeset
|
2005 /* interactive mode */ |
723 | 2006 { int c; |
1 | 2007 while( |
2008 #ifdef HAVE_LIRC | |
2009 (c=lirc_mp_getinput())>0 || | |
2010 #endif | |
1467 | 2011 (!use_stdin && (c=getch2(0))>0) || (c=mplayer_get_key())>0) switch(c){ |
1 | 2012 // seek 10 sec |
2013 case KEY_RIGHT: | |
220 | 2014 osd_function=OSD_FFW; |
1 | 2015 rel_seek_secs+=10;break; |
2016 case KEY_LEFT: | |
220 | 2017 osd_function=OSD_REW; |
1 | 2018 rel_seek_secs-=10;break; |
2019 // seek 1 min | |
2020 case KEY_UP: | |
220 | 2021 osd_function=OSD_FFW; |
1 | 2022 rel_seek_secs+=60;break; |
2023 case KEY_DOWN: | |
220 | 2024 osd_function=OSD_REW; |
1 | 2025 rel_seek_secs-=60;break; |
651 | 2026 // seek 10 min |
2027 case KEY_PAGE_UP: | |
2028 rel_seek_secs+=600;break; | |
2029 case KEY_PAGE_DOWN: | |
2030 rel_seek_secs-=600;break; | |
1 | 2031 // delay correction: |
2032 case '+': | |
746 | 2033 audio_delay+=0.1; // increase audio buffer delay |
3783 | 2034 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
|
2035 if(sh_audio) sh_audio->timer-=0.1; |
1 | 2036 break; |
2037 case '-': | |
746 | 2038 audio_delay-=0.1; // decrease audio buffer delay |
3783 | 2039 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
|
2040 if(sh_audio) sh_audio->timer+=0.1; |
1 | 2041 break; |
2042 // quit | |
2043 case KEY_ESC: // ESC | |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2044 case 'q': |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2045 exit_player(MSGTR_Exit_quit); |
1 | 2046 case KEY_ENTER: // ESC |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2047 eof=1; // force jump to next file : quit if no next file |
2647
679d3b21bedb
-playlist option patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents:
2567
diff
changeset
|
2048 break; |
36 | 2049 case 'g': grab_frames=2;break; |
1 | 2050 // pause |
2051 case 'p': | |
2052 case ' ': | |
220 | 2053 osd_function=OSD_PAUSE; |
371 | 2054 break; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2055 case KEY_HOME: |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2056 { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2057 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2058 if(play_tree_iter_up_step(i,1,0) == PLAY_TREE_ITER_ENTRY) |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2059 eof = PT_UP_NEXT; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2060 play_tree_iter_free(i); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2061 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2062 break; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2063 case KEY_END: |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2064 { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2065 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2066 if(play_tree_iter_up_step(i,-1,0) == PLAY_TREE_ITER_ENTRY) |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2067 eof = PT_UP_PREV; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2068 play_tree_iter_free(i); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2069 } |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2070 break; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2071 case '>': |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2072 { |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2073 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2074 if(play_tree_iter_step(i,1,0) == PLAY_TREE_ITER_ENTRY) |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2075 eof = PT_NEXT_ENTRY; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2076 play_tree_iter_free(i); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2077 } |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2078 break; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2079 case '<': |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2080 { |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2081 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2082 if(play_tree_iter_step(i,-1,0) == PLAY_TREE_ITER_ENTRY) |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2083 eof = PT_PREV_ENTRY; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2084 play_tree_iter_free(i); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2085 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2086 break; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2087 case KEY_INS: |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2088 if(playtree_iter->num_files > 1 && playtree_iter->file < playtree_iter->num_files) |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2089 eof = PT_NEXT_SRC; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2090 break; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2091 case KEY_DEL: |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2092 if(playtree_iter->num_files > 1 && playtree_iter->file > 1) |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
2093 eof = PT_PREV_SRC; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
2094 break; |
371 | 2095 case 'o': // toggle OSD |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2096 if(sh_video) |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2097 osd_level=(osd_level+1)%3; |
1 | 2098 break; |
939 | 2099 case 'z': |
2100 sub_delay -= 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2101 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 2102 break; |
2103 case 'x': | |
2104 sub_delay += 0.1; | |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2105 osd_show_sub_delay = 9; // show the subdelay in OSD |
939 | 2106 break; |
1626 | 2107 case '9': |
2108 case '0': | |
459 | 2109 case '*': |
555 | 2110 case '/': { |
1626 | 2111 if(c=='*' || c=='0'){ |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
2112 mixer_incvolume(); |
555 | 2113 } else { |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
2114 mixer_decvolume(); |
555 | 2115 } |
2116 | |
1422 | 2117 #ifdef USE_OSD |
555 | 2118 if(osd_level){ |
2119 osd_visible=sh_video->fps; // 1 sec | |
2120 vo_osd_progbar_type=OSD_VOLUME; | |
1881
d75b24bda7ce
Applied fix for mixercontrol w/alsa ossemu by Christian Ohm.
atmos4
parents:
1863
diff
changeset
|
2121 vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0; |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2122 vo_osd_changed(OSDTYPE_PROGBAR); |
1852 | 2123 //printf("volume: %d\n",vo_osd_progbar_value); |
555 | 2124 } |
1422 | 2125 #endif |
555 | 2126 } |
2127 break; | |
1429 | 2128 |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2129 #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
|
2130 case '1': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2131 case '2': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2132 case '3': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2133 case '4': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2134 case '5': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2135 case '6': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2136 case '7': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2137 case '8': |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2138 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
|
2139 abs_seek_pos=3; |
5112 | 2140 printf ("ABS seek to %5.3f \n",rel_seek_secs); |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2141 break; |
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2142 #else |
4738 | 2143 /* User wants to have screen shot */ |
2144 case 'S': | |
2145 case 's': | |
5511 | 2146 if(vo_config_count) video_out->control(VOCTRL_SCREENSHOT, NULL); |
4738 | 2147 break; |
1429 | 2148 // Contrast: |
2149 case '1': | |
2150 case '2': | |
2151 if(c=='2'){ | |
6755 | 2152 if ( ++vo_gamma_contrast > 100 ) vo_gamma_contrast = 100; |
1429 | 2153 } else { |
6755 | 2154 --vo_gamma_contrast; |
4395 | 2155 if(v_hw_equ_cap & VEQ_CAP_CONTRAST) |
4388 | 2156 { |
6755 | 2157 if(vo_gamma_contrast < -100) vo_gamma_contrast = -100; |
4388 | 2158 } |
2159 else | |
2160 { | |
6755 | 2161 if ( vo_gamma_contrast < 0 ) vo_gamma_contrast = 0; |
4388 | 2162 } |
1429 | 2163 } |
6755 | 2164 if(set_video_colors(sh_video,"Contrast",vo_gamma_contrast)){ |
1429 | 2165 #ifdef USE_OSD |
2166 if(osd_level){ | |
2167 osd_visible=sh_video->fps; // 1 sec | |
2168 vo_osd_progbar_type=OSD_CONTRAST; | |
6755 | 2169 vo_osd_progbar_value=((vo_gamma_contrast)<<8)/100; |
2170 if(v_hw_equ_cap) vo_osd_progbar_value = ((vo_gamma_contrast+100)<<8)/200; | |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2171 vo_osd_changed(OSDTYPE_PROGBAR); |
1429 | 2172 } |
2173 #endif | |
2174 } | |
2175 break; | |
2176 | |
2177 // Brightness: | |
2178 case '3': | |
2179 case '4': | |
2180 if(c=='4'){ | |
6755 | 2181 if ( ++vo_gamma_brightness > 100 ) vo_gamma_brightness = 100; |
1429 | 2182 } else { |
6755 | 2183 --vo_gamma_brightness; |
4395 | 2184 if(v_hw_equ_cap & VEQ_CAP_BRIGHTNESS) |
4388 | 2185 { |
6755 | 2186 if(vo_gamma_brightness < -100) vo_gamma_brightness = -100; |
4388 | 2187 } |
2188 else | |
2189 { | |
6755 | 2190 if ( vo_gamma_brightness < 0 ) vo_gamma_brightness = 0; |
4388 | 2191 } |
1429 | 2192 } |
6755 | 2193 if(set_video_colors(sh_video,"Brightness",vo_gamma_brightness)){ |
1429 | 2194 #ifdef USE_OSD |
2195 if(osd_level){ | |
2196 osd_visible=sh_video->fps; // 1 sec | |
2197 vo_osd_progbar_type=OSD_BRIGHTNESS; | |
6755 | 2198 vo_osd_progbar_value=((vo_gamma_brightness)<<8)/100; |
2199 if(v_hw_equ_cap) vo_osd_progbar_value = ((vo_gamma_brightness+100)<<8)/200; | |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2200 vo_osd_changed(OSDTYPE_PROGBAR); |
1429 | 2201 } |
2202 #endif | |
2203 } | |
2204 break; | |
2205 | |
2206 // Hue: | |
2207 case '5': | |
2208 case '6': | |
2209 if(c=='6'){ | |
6755 | 2210 if ( ++vo_gamma_hue > 100 ) vo_gamma_hue = 100; |
1429 | 2211 } else { |
6755 | 2212 --vo_gamma_hue; |
4395 | 2213 if(v_hw_equ_cap & VEQ_CAP_HUE) |
4388 | 2214 { |
6755 | 2215 if(vo_gamma_hue < -100) vo_gamma_hue = -100; |
4388 | 2216 } |
2217 else | |
2218 { | |
6755 | 2219 if ( vo_gamma_hue < 0 ) vo_gamma_hue = 0; |
4388 | 2220 } |
1429 | 2221 } |
6755 | 2222 if(set_video_colors(sh_video,"Hue",vo_gamma_hue)){ |
1429 | 2223 #ifdef USE_OSD |
2224 if(osd_level){ | |
2225 osd_visible=sh_video->fps; // 1 sec | |
2226 vo_osd_progbar_type=OSD_HUE; | |
6755 | 2227 vo_osd_progbar_value=((vo_gamma_hue)<<8)/100; |
2228 if(v_hw_equ_cap) vo_osd_progbar_value = ((vo_gamma_hue+100)<<8)/200; | |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2229 vo_osd_changed(OSDTYPE_PROGBAR); |
1429 | 2230 } |
2231 #endif | |
2232 } | |
2233 break; | |
2234 | |
2235 // Saturation: | |
2236 case '7': | |
2237 case '8': | |
2238 if(c=='8'){ | |
6755 | 2239 if ( ++vo_gamma_saturation > 100 ) vo_gamma_saturation = 100; |
1429 | 2240 } else { |
6755 | 2241 --vo_gamma_saturation; |
4395 | 2242 if(v_hw_equ_cap & VEQ_CAP_SATURATION) |
4388 | 2243 { |
6755 | 2244 if(vo_gamma_saturation < -100) vo_gamma_saturation = -100; |
4388 | 2245 } |
2246 else | |
2247 { | |
6755 | 2248 if ( vo_gamma_saturation < 0 ) vo_gamma_saturation = 0; |
4388 | 2249 } |
1429 | 2250 } |
6755 | 2251 if(set_video_colors(sh_video,"Saturation",vo_gamma_saturation)){ |
1429 | 2252 #ifdef USE_OSD |
2253 if(osd_level){ | |
2254 osd_visible=sh_video->fps; // 1 sec | |
2255 vo_osd_progbar_type=OSD_SATURATION; | |
6755 | 2256 vo_osd_progbar_value=((vo_gamma_saturation)<<8)/100; |
2257 if(v_hw_equ_cap) vo_osd_progbar_value = ((vo_gamma_saturation+100)<<8)/200; | |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2258 vo_osd_changed(OSDTYPE_PROGBAR); |
1429 | 2259 } |
2260 #endif | |
2261 } | |
2262 break; | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2263 #endif |
1429 | 2264 |
715 | 2265 case 'd': |
798 | 2266 frame_dropping=(frame_dropping+1)%3; |
1567 | 2267 mp_msg(MSGT_CPLAYER,MSGL_V,"== drop: %d == \n",frame_dropping); |
715 | 2268 break; |
2941
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2269 |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2270 #ifdef USE_TV |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2271 case 'h': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2272 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
|
2273 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
|
2274 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2275 case 'l': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2276 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
|
2277 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
|
2278 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2279 case 'n': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2280 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
|
2281 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
|
2282 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2283 case 'b': |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2284 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
|
2285 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
|
2286 break; |
60c1b7c0ea21
added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys
alex
parents:
2897
diff
changeset
|
2287 #endif |
4733
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
2288 |
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
2289 case 'f': |
5511 | 2290 if(vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); |
4733
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
2291 break; |
1 | 2292 } |
1406 | 2293 } // keyboard event handler |
2294 | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2295 #else /* HAVE_NEW_INPUT */ |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2296 { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2297 mp_cmd_t* cmd; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2298 while( (cmd = mp_input_get_cmd(0,0)) != NULL) { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2299 switch(cmd->id) { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2300 case MP_CMD_SEEK : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2301 int v,abs; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2302 v = cmd->args[0].v.i; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2303 abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2304 if(abs) { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2305 abs_seek_pos = 3; |
5798 | 2306 if(sh_video) |
2307 osd_function= (v > sh_video->timer) ? OSD_FFW : OSD_REW; | |
2308 rel_seek_secs = v/100.0; | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2309 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2310 else { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2311 rel_seek_secs+= v; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2312 osd_function= (v > 0) ? OSD_FFW : OSD_REW; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2313 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2314 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2315 case MP_CMD_AUDIO_DELAY : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2316 float v = cmd->args[0].v.f; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2317 audio_delay += v; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2318 osd_show_av_delay = 9; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2319 if(sh_audio) sh_audio->timer+= v; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2320 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2321 case MP_CMD_PAUSE : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2322 osd_function=OSD_PAUSE; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2323 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2324 case MP_CMD_QUIT : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2325 exit_player(MSGTR_Exit_quit); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2326 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2327 case MP_CMD_GRAB_FRAMES : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2328 grab_frames=2; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2329 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2330 case MP_CMD_PLAY_TREE_STEP : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2331 int n = cmd->args[0].v.i > 0 ? 1 : -1; |
5135 | 2332 int force = cmd->args[1].v.i; |
2333 | |
2334 if(!force) { | |
2335 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); | |
2336 | |
2337 if(play_tree_iter_step(i,n,0) == PLAY_TREE_ITER_ENTRY) | |
2338 eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; | |
2339 play_tree_iter_free(i); | |
2340 } else | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2341 eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2342 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2343 case MP_CMD_PLAY_TREE_UP_STEP : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2344 int n = cmd->args[0].v.i > 0 ? 1 : -1; |
5135 | 2345 int force = cmd->args[1].v.i; |
2346 | |
2347 if(!force) { | |
2348 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); | |
2349 if(play_tree_iter_up_step(i,n,0) == PLAY_TREE_ITER_ENTRY) | |
2350 eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; | |
2351 play_tree_iter_free(i); | |
2352 } else | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2353 eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2354 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2355 case MP_CMD_PLAY_ALT_SRC_STEP : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2356 if(playtree_iter->num_files > 1) { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2357 int v = cmd->args[0].v.i; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2358 if(v > 0 && playtree_iter->file < playtree_iter->num_files) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2359 eof = PT_NEXT_SRC; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2360 else if(v < 0 && playtree_iter->file > 1) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2361 eof = PT_PREV_SRC; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2362 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2363 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2364 case MP_CMD_SUB_DELAY : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2365 int abs= cmd->args[1].v.i; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2366 float v = cmd->args[0].v.f; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2367 if(abs) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2368 sub_delay = v; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2369 else |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2370 sub_delay += v; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2371 osd_show_sub_delay = 9; // show the subdelay in OSD |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2372 } break; |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2373 case MP_CMD_OSD : |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2374 if(sh_video) { |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2375 int v = cmd->args[0].v.i; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2376 if(v < 0) |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2377 osd_level=(osd_level+1)%3; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2378 else |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2379 osd_level= v > 2 ? 2 : v; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2380 } break; |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2381 case MP_CMD_VOLUME : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2382 int v = cmd->args[0].v.i; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2383 if(v > 0) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2384 mixer_incvolume(); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2385 else |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2386 mixer_decvolume(); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2387 #ifdef USE_OSD |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2388 if(osd_level){ |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2389 osd_visible=sh_video->fps; // 1 sec |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2390 vo_osd_progbar_type=OSD_VOLUME; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2391 vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0; |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2392 vo_osd_changed(OSDTYPE_PROGBAR); |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2393 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2394 #endif |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2395 } break; |
6940
335d827e8201
10l bug (missing break;) found by Jim Hawkins <jim@jawkins.com>
arpi
parents:
6930
diff
changeset
|
2396 case MP_CMD_MUTE: |
335d827e8201
10l bug (missing break;) found by Jim Hawkins <jim@jawkins.com>
arpi
parents:
6930
diff
changeset
|
2397 mixer_mute(); |
335d827e8201
10l bug (missing break;) found by Jim Hawkins <jim@jawkins.com>
arpi
parents:
6930
diff
changeset
|
2398 break; |
6818
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2399 case MP_CMD_LOADFILE : { |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2400 play_tree_t* e = play_tree_new(); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2401 play_tree_add_file(e,cmd->args[0].v.s); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2402 |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2403 // Go back to the start point |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2404 while(play_tree_iter_up_step(playtree_iter,0,1) != PLAY_TREE_ITER_END) |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2405 /* NOP */; |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2406 play_tree_free_list(playtree->child,1); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2407 play_tree_set_child(playtree,e); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2408 play_tree_iter_step(playtree_iter,0,0); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2409 eof = PT_NEXT_SRC; |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2410 } break; |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2411 case MP_CMD_LOADLIST : { |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2412 play_tree_t* e = parse_playlist_file(cmd->args[0].v.s); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2413 if(!e) |
6930 | 2414 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_PlaylistLoadUnable,cmd->args[0].v.s); |
6818
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2415 else { |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2416 // Go back to the start point |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2417 while(play_tree_iter_up_step(playtree_iter,0,1) != PLAY_TREE_ITER_END) |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2418 /* NOP */; |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2419 play_tree_free_list(playtree->child,1); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2420 play_tree_set_child(playtree,e); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2421 play_tree_iter_step(playtree_iter,0,0); |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2422 eof = PT_NEXT_SRC; |
b9a6817d9ff3
Add loadfile and loadlist commands. May be buggy if the filename contain some
albeu
parents:
6796
diff
changeset
|
2423 } |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2424 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2425 case MP_CMD_BRIGHTNESS : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2426 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; |
6786 | 2427 |
2428 if (!sh_video) | |
2429 break; | |
2430 | |
2431 if (vo_gamma_brightness == 1000) | |
2432 { | |
2433 vo_gamma_brightness = 0; | |
2434 get_video_colors(sh_video, "brightness", &vo_gamma_brightness); | |
2435 } | |
2436 | |
6781 | 2437 if (abs) |
2438 vo_gamma_brightness = v; | |
2439 else | |
2440 vo_gamma_brightness += v; | |
2441 | |
2442 if (vo_gamma_brightness > 100) | |
2443 vo_gamma_brightness = 100; | |
2444 else if (vo_gamma_brightness < -100) | |
2445 vo_gamma_brightness = -100; | |
2446 if(set_video_colors(sh_video, "brightness", vo_gamma_brightness)){ | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2447 #ifdef USE_OSD |
6755 | 2448 if(osd_level){ |
2449 osd_visible=sh_video->fps; // 1 sec | |
2450 vo_osd_progbar_type=OSD_BRIGHTNESS; | |
2451 vo_osd_progbar_value=(vo_gamma_brightness<<7)/100 + 128; | |
2452 vo_osd_changed(OSDTYPE_PROGBAR); | |
2453 } | |
2454 #endif // USE_OSD | |
2455 } | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2456 } break; |
6781 | 2457 case MP_CMD_CONTRAST : { |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2458 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; |
6786 | 2459 |
2460 if (!sh_video) | |
2461 break; | |
2462 | |
2463 if (vo_gamma_contrast == 1000) | |
2464 { | |
2465 vo_gamma_contrast = 0; | |
2466 get_video_colors(sh_video, "contrast", &vo_gamma_contrast); | |
2467 } | |
6781 | 2468 |
2469 if (abs) | |
2470 vo_gamma_contrast = v; | |
2471 else | |
2472 vo_gamma_contrast += v; | |
2473 | |
2474 if (vo_gamma_contrast > 100) | |
2475 vo_gamma_contrast = 100; | |
2476 else if (vo_gamma_contrast < -100) | |
2477 vo_gamma_contrast = -100; | |
2478 if(set_video_colors(sh_video, "contrast", vo_gamma_contrast)){ | |
2479 #ifdef USE_OSD | |
2480 if(osd_level){ | |
2481 osd_visible=sh_video->fps; // 1 sec | |
2482 vo_osd_progbar_type=OSD_CONTRAST; | |
2483 vo_osd_progbar_value=(vo_gamma_contrast<<7)/100 + 128; | |
2484 vo_osd_changed(OSDTYPE_PROGBAR); | |
2485 } | |
2486 #endif // USE_OSD | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2487 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2488 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2489 case MP_CMD_SATURATION : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2490 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; |
6786 | 2491 |
2492 if (!sh_video) | |
2493 break; | |
2494 | |
2495 if (vo_gamma_saturation == 1000) | |
2496 { | |
2497 vo_gamma_saturation = 0; | |
2498 get_video_colors(sh_video, "saturation", &vo_gamma_saturation); | |
2499 } | |
2500 | |
6781 | 2501 if (abs) |
2502 vo_gamma_saturation = v; | |
2503 else | |
2504 vo_gamma_saturation += v; | |
2505 | |
2506 if (vo_gamma_saturation > 100) | |
2507 vo_gamma_saturation = 100; | |
2508 else if (vo_gamma_saturation < -100) | |
2509 vo_gamma_saturation = -100; | |
2510 if(set_video_colors(sh_video, "saturation", vo_gamma_saturation)){ | |
2511 #ifdef USE_OSD | |
2512 if(osd_level){ | |
2513 osd_visible=sh_video->fps; // 1 sec | |
2514 vo_osd_progbar_type=OSD_SATURATION; | |
2515 vo_osd_progbar_value=(vo_gamma_saturation<<7)/100 + 128; | |
2516 vo_osd_changed(OSDTYPE_PROGBAR); | |
2517 } | |
2518 #endif // USE_OSD | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2519 } |
6781 | 2520 } break; |
2521 case MP_CMD_HUE : { | |
2522 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; | |
6786 | 2523 |
2524 if (!sh_video) | |
2525 break; | |
2526 | |
2527 if (vo_gamma_hue == 1000) | |
2528 { | |
2529 vo_gamma_hue = 0; | |
2530 get_video_colors(sh_video, "hue", &vo_gamma_hue); | |
2531 } | |
6781 | 2532 |
2533 if (abs) | |
2534 vo_gamma_hue = v; | |
2535 else | |
2536 vo_gamma_hue += v; | |
2537 | |
2538 if (vo_gamma_hue > 100) | |
2539 vo_gamma_hue = 100; | |
2540 else if (vo_gamma_hue < -100) | |
2541 vo_gamma_hue = -100; | |
2542 if(set_video_colors(sh_video, "hue", vo_gamma_hue)){ | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2543 #ifdef USE_OSD |
6781 | 2544 if(osd_level){ |
2545 osd_visible=sh_video->fps; // 1 sec | |
2546 vo_osd_progbar_type=OSD_HUE; | |
2547 vo_osd_progbar_value=(vo_gamma_hue<<7)/100 + 128; | |
2548 vo_osd_changed(OSDTYPE_PROGBAR); | |
2549 } | |
2550 #endif // USE_OSD | |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2551 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2552 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2553 case MP_CMD_FRAMEDROPPING : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2554 int v = cmd->args[0].v.i; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2555 if(v < 0) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2556 frame_dropping = (frame_dropping+1)%3; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2557 else |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2558 frame_dropping = v > 2 ? 2 : v; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2559 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2560 #ifdef USE_TV |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2561 case MP_CMD_TV_STEP_CHANNEL : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2562 if (tv_param_on == 1) { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2563 int v = cmd->args[0].v.i; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2564 if(v > 0) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2565 tv_step_channel(tv_handler, TV_CHANNEL_HIGHER); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2566 else |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2567 tv_step_channel(tv_handler, TV_CHANNEL_LOWER); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2568 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2569 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2570 case MP_CMD_TV_STEP_NORM : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2571 if (tv_param_on == 1) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2572 tv_step_norm(tv_handler); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2573 } break; |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2574 case MP_CMD_TV_STEP_CHANNEL_LIST : { |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2575 if (tv_param_on == 1) |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2576 tv_step_chanlist(tv_handler); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2577 } break; |
4849
9be4ac85dd35
Moved the call to VOCTRL_FULLSCREEN outside of #ifdef USE_TV block
albeu
parents:
4844
diff
changeset
|
2578 #endif |
4733
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
2579 case MP_CMD_VO_FULLSCREEN: |
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
2580 { |
4858 | 2581 #ifdef HAVE_NEW_GUI |
2582 if ( use_gui ) guiGetEvent( guiIEvent,(char *)MP_CMD_GUI_FULLSCREEN ); | |
2583 else | |
2584 #endif | |
5511 | 2585 if(video_out && vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); |
4733
5bad0d74f6ea
standard key support for video out runtime fullscreen switching
alex
parents:
4693
diff
changeset
|
2586 } break; |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6280
diff
changeset
|
2587 case MP_CMD_PANSCAN : { |
6311
da2dda48b7ec
add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents:
6307
diff
changeset
|
2588 if ( !video_out ) break; |
6307 | 2589 if ( video_out->control( VOCTRL_GET_PANSCAN,NULL ) == VO_TRUE ) |
2590 { | |
2591 int abs= cmd->args[1].v.i; | |
2592 float v = cmd->args[0].v.f; | |
2593 float res; | |
2594 if(abs) res = v; | |
2595 else res = vo_panscan+v; | |
2596 vo_panscan = res > 1 ? 1 : res < 0 ? 0 : res; | |
2597 video_out->control( VOCTRL_SET_PANSCAN,NULL ); | |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6280
diff
changeset
|
2598 #ifdef USE_OSD |
6307 | 2599 if(osd_level){ |
2600 osd_visible=sh_video->fps; // 1 sec | |
2601 vo_osd_progbar_type=OSD_PANSCAN; | |
2602 vo_osd_progbar_value=vo_panscan*256; | |
2603 vo_osd_changed(OSDTYPE_PROGBAR); | |
2604 } | |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6280
diff
changeset
|
2605 #endif |
6307 | 2606 } |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6280
diff
changeset
|
2607 } break; |
5015
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2608 case MP_CMD_SUB_POS: |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2609 { |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2610 int v; |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2611 v = cmd->args[0].v.i; |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2612 |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2613 sub_pos+=v; |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2614 if(sub_pos >100) sub_pos=100; |
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2615 if(sub_pos <0) sub_pos=0; |
5640 | 2616 vo_osd_changed(OSDTYPE_SUBTITLE); |
5015
9842148f6053
-subpos key bindings with new input layer - patch by Tomas Konir <moje@molly.vabo.cz>
arpi
parents:
4981
diff
changeset
|
2617 } break; |
6112 | 2618 case MP_CMD_SCREENSHOT : |
2619 if(vo_config_count) video_out->control(VOCTRL_SCREENSHOT, NULL); | |
2620 break; | |
6888
2dde1a1bc03a
Add the input command "change_rectangle" to control the rectangle
kmkaplan
parents:
6871
diff
changeset
|
2621 case MP_CMD_VF_CHANGE_RECTANGLE: |
2dde1a1bc03a
Add the input command "change_rectangle" to control the rectangle
kmkaplan
parents:
6871
diff
changeset
|
2622 set_rectangle(sh_video, cmd->args[0].v.i, cmd->args[1].v.i); |
2dde1a1bc03a
Add the input command "change_rectangle" to control the rectangle
kmkaplan
parents:
6871
diff
changeset
|
2623 break; |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2624 #ifdef USE_DVDNAV |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2625 case MP_CMD_DVDNAV_EVENT: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2626 dvdnav_priv_t * dvdnav_priv = (dvdnav_priv_t*)(stream->priv); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2627 dvdnav_event_t * dvdnav_event = (dvdnav_event_t *)(cmd->args[0].v.v); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2628 |
5627 | 2629 /* ignore these events if we're not in dvd_nav mode */ |
2630 if (!dvd_nav) break; | |
2631 | |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2632 if (!dvdnav_event) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2633 printf("DVDNAV Event NULL?!\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2634 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2635 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2636 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2637 if (stream->type!=STREAMTYPE_DVDNAV) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2638 printf("Got DVDNAV event when not running a DVDNAV stream!?\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2639 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2640 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2641 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2642 //printf("mplayer: got event: %d\n",dvdnav_event->event); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2643 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2644 switch (dvdnav_event->event) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2645 case DVDNAV_BLOCK_OK: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2646 /* be silent about this one */ |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2647 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2648 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2649 case DVDNAV_HIGHLIGHT: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2650 dvdnav_highlight_event_t *hevent = (dvdnav_highlight_event_t*)(dvdnav_event->details); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2651 if (!hevent) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2652 printf("DVDNAV Event: Highlight event broken\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2653 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2654 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2655 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2656 if (hevent->display && hevent->buttonN>0) |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2657 { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2658 //dvdnav_priv->seen_root_menu=1; /* if we got a highlight, we're on a menu */ |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2659 sprintf( dvd_nav_text, "Highlight button %d (%u,%u)-(%u,%u) PTS %d (now is %5.2f)", |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2660 hevent->buttonN, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2661 hevent->sx,hevent->sy, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2662 hevent->ex,hevent->ey, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2663 hevent->pts, d_video->pts); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2664 printf("DVDNAV Event: %s\n",dvd_nav_text); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2665 //osd_show_dvd_nav_delay = 60; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2666 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2667 osd_show_dvd_nav_highlight=1; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2668 osd_show_dvd_nav_sx=hevent->sx; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2669 osd_show_dvd_nav_ex=hevent->ex; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2670 osd_show_dvd_nav_sy=hevent->sy; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2671 osd_show_dvd_nav_ey=hevent->ey; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2672 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2673 else { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2674 osd_show_dvd_nav_highlight=0; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2675 printf("DVDNAV Event: Highlight Hide\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2676 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2677 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2678 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2679 case DVDNAV_STILL_FRAME: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2680 dvdnav_still_event_t *still_event = (dvdnav_still_event_t*)(dvdnav_event->details); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2681 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2682 printf( "######################################## DVDNAV Event: Still Frame: %d sec(s)\n", still_event->length ); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2683 while (dvdnav_stream_sleeping(dvdnav_priv)) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2684 usleep(1000); /* 1ms */ |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2685 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2686 dvdnav_stream_sleep(dvdnav_priv,still_event->length); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2687 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2688 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2689 case DVDNAV_STOP: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2690 printf( "DVDNAV Event: Nav Stop\n" ); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2691 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2692 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2693 case DVDNAV_NOP: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2694 printf("DVDNAV Event: Nav NOP\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2695 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2696 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2697 case DVDNAV_SPU_STREAM_CHANGE: { |
6971 | 2698 #if DVDNAVVERSION > 012 |
2699 dvdnav_spu_stream_change_event_t *stream_change = (dvdnav_spu_stream_change_event_t*)(dvdnav_event->details); | |
2700 | |
2701 printf("DVDNAV Event: Nav SPU Stream Change: phys: %d/%d/%d logical: %d\n", | |
2702 stream_change->physical_wide, | |
2703 stream_change->physical_letterbox, | |
2704 stream_change->physical_pan_scan, | |
2705 stream_change->logical); | |
2706 | |
2707 if (vo_spudec && dvdsub_id!=stream_change->physical_wide) { | |
2708 mp_msg(MSGT_INPUT,MSGL_DBG2,"d_dvdsub->id change: was %d is now %d\n", | |
2709 d_dvdsub->id,stream_change->physical_wide); | |
2710 // FIXME: need a better way to change SPU id | |
2711 d_dvdsub->id=dvdsub_id=stream_change->physical_wide; | |
2712 if (vo_spudec) spudec_reset(vo_spudec); | |
2713 } | |
2714 #else | |
2715 dvdnav_stream_change_event_t *stream_change = (dvdnav_stream_change_event_t*)(dvdnav_event->details); | |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2716 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2717 printf("DVDNAV Event: Nav SPU Stream Change: phys: %d logical: %d\n", |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2718 stream_change->physical, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2719 stream_change->logical); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2720 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2721 if (vo_spudec && dvdsub_id!=stream_change->physical) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2722 mp_msg(MSGT_INPUT,MSGL_DBG2,"d_dvdsub->id change: was %d is now %d\n", |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2723 d_dvdsub->id,stream_change->physical); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2724 // FIXME: need a better way to change SPU id |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2725 d_dvdsub->id=dvdsub_id=stream_change->physical; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2726 if (vo_spudec) spudec_reset(vo_spudec); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2727 } |
6971 | 2728 #endif |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2729 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2730 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2731 case DVDNAV_AUDIO_STREAM_CHANGE: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2732 int aid_temp; |
6971 | 2733 #if DVDNAVVERSION > 012 |
2734 dvdnav_audio_stream_change_event_t *stream_change = (dvdnav_audio_stream_change_event_t*)(dvdnav_event->details); | |
2735 #else | |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2736 dvdnav_stream_change_event_t *stream_change = (dvdnav_stream_change_event_t*)(dvdnav_event->details); |
6971 | 2737 #endif |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2738 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2739 printf("DVDNAV Event: Nav Audio Stream Change: phys: %d logical: %d\n", |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2740 stream_change->physical, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2741 stream_change->logical); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2742 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2743 aid_temp=stream_change->physical; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2744 if (aid_temp>=0) aid_temp+=128; // FIXME: is this sane? |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2745 if (d_audio && audio_id!=aid_temp) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2746 mp_msg(MSGT_INPUT,MSGL_DBG2,"d_audio->id change: was %d is now %d\n", |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2747 d_audio->id,aid_temp); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2748 // FIXME: need a bettery way to change audio stream id |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2749 d_audio->id=dvdsub_id=aid_temp; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2750 resync_audio_stream(sh_audio); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2751 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2752 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2753 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2754 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2755 case DVDNAV_VTS_CHANGE: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2756 printf("DVDNAV Event: Nav VTS Change\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2757 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2758 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2759 case DVDNAV_CELL_CHANGE: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2760 dvdnav_cell_change_event_t *cell_change = (dvdnav_cell_change_event_t*)(dvdnav_event->details); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2761 cell_playback_t * cell_playback = cell_change->new_cell; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2762 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2763 printf("DVDNAV Event: Nav Cell Change\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2764 osd_show_dvd_nav_highlight=0; /* screen changed, disable menu */ |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2765 /* |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2766 printf("new still time: %d\n",cell_playback->still_time); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2767 printf("new cell_cmd_nr: %d\n",cell_playback->cell_cmd_nr); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2768 printf("new playback_time: %02d:%02d:%02d.%02d\n", |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2769 cell_playback->playback_time.hour, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2770 cell_playback->playback_time.minute, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2771 cell_playback->playback_time.second, |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2772 cell_playback->playback_time.frame_u); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2773 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2774 */ |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2775 //rel_seek_secs=1; // not really: we can't seek, but it'll reset the muxer |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2776 //abs_seek_pos=0; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2777 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2778 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2779 case DVDNAV_NAV_PACKET: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2780 // printf("DVDNAV Event: Nav Packet\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2781 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2782 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2783 case DVDNAV_SPU_CLUT_CHANGE: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2784 uint32_t * new_clut = (uint32_t *)(dvdnav_event->details); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2785 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2786 printf("DVDNAV Event: Nav SPU CLUT Change\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2787 // send new palette to SPU decoder |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2788 if (vo_spudec) spudec_update_palette(vo_spudec,new_clut); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2789 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2790 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2791 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2792 case DVDNAV_SEEK_DONE: { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2793 printf("DVDNAV Event: Nav Seek Done\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2794 break; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2795 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2796 } |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2797 |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2798 // free the dvdnav event |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2799 free(dvdnav_event->details); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2800 free(dvdnav_event); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2801 cmd->args[0].v.v=NULL; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2802 } |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2803 case MP_CMD_DVDNAV: { |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2804 dvdnav_priv_t * dvdnav_priv=(dvdnav_priv_t*)stream->priv; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2805 |
5627 | 2806 /* ignore these events if we're not in dvd_nav mode */ |
2807 if (!dvd_nav) break; | |
2808 | |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2809 switch (cmd->args[0].v.i) { |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2810 case MP_CMD_DVDNAV_UP: |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2811 dvdnav_upper_button_select(dvdnav_priv->dvdnav); |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2812 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2813 case MP_CMD_DVDNAV_DOWN: |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2814 dvdnav_lower_button_select(dvdnav_priv->dvdnav); |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2815 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2816 case MP_CMD_DVDNAV_LEFT: |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2817 dvdnav_left_button_select(dvdnav_priv->dvdnav); |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2818 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2819 case MP_CMD_DVDNAV_RIGHT: |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2820 dvdnav_right_button_select(dvdnav_priv->dvdnav); |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2821 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2822 case MP_CMD_DVDNAV_MENU: |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2823 printf("Menu call\n"); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2824 dvdnav_menu_call(dvdnav_priv->dvdnav,DVD_MENU_Root); |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2825 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2826 case MP_CMD_DVDNAV_SELECT: |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2827 dvdnav_button_activate(dvdnav_priv->dvdnav); |
5380
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2828 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2829 default: |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2830 mp_msg(MSGT_CPLAYER, MSGL_V, "Weird DVD Nav cmd %d\n",cmd->args[0].v.i); |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2831 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2832 } |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2833 break; |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2834 } |
8a01cde9cf39
DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents:
5367
diff
changeset
|
2835 #endif |
4858 | 2836 default : { |
2837 #ifdef HAVE_NEW_GUI | |
2838 if ( ( use_gui )&&( cmd->id > MP_CMD_GUI_EVENTS ) ) guiGetEvent( guiIEvent,(char *)cmd->id ); | |
2839 else | |
2840 #endif | |
5112 | 2841 mp_msg(MSGT_CPLAYER, MSGL_V, "Received unknow cmd %s\n",cmd->name); |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2842 } |
4858 | 2843 } |
4418
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2844 mp_cmd_free(cmd); |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2845 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2846 } |
8141d2c399e4
A new configurable input system and joystick support for this system
albeu
parents:
4395
diff
changeset
|
2847 #endif |
651 | 2848 if (seek_to_sec) { |
937 | 2849 int a,b; float d; |
2850 | |
2851 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | |
2852 rel_seek_secs += 3600*a +60*b +d ; | |
2853 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2) | |
2854 rel_seek_secs += 60*a +d; | |
2855 else if (sscanf(seek_to_sec, "%f", &d)==1) | |
2856 rel_seek_secs += d; | |
2857 | |
2858 seek_to_sec = NULL; | |
651 | 2859 } |
937 | 2860 |
2365 | 2861 /* Looping. */ |
3540 | 2862 if(eof==1 && loop_times>=0) { |
5655
117f34bb7097
Add correct loop option parsing in command line parser.
albeu
parents:
5651
diff
changeset
|
2863 int l = loop_times; |
117f34bb7097
Add correct loop option parsing in command line parser.
albeu
parents:
5651
diff
changeset
|
2864 play_tree_iter_step(playtree_iter,0,0); |
117f34bb7097
Add correct loop option parsing in command line parser.
albeu
parents:
5651
diff
changeset
|
2865 loop_times = l; |
3540 | 2866 mp_msg(MSGT_CPLAYER,MSGL_V,"loop_times = %d, eof = %d\n", loop_times,eof); |
2365 | 2867 |
3540 | 2868 if(loop_times>1) loop_times--; else |
2869 if(loop_times==1) loop_times=-1; | |
2870 | |
2365 | 2871 eof=0; |
3540 | 2872 abs_seek_pos=3; rel_seek_secs=0; // seek to start of movie (0%) |
2365 | 2873 |
2874 } | |
2875 | |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2876 if(rel_seek_secs || abs_seek_pos){ |
1466 | 2877 current_module="seek"; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2878 if(demux_seek(demuxer,rel_seek_secs,abs_seek_pos)){ |
1405 | 2879 // success: |
4079 | 2880 /* FIXME there should be real seeking for vobsub */ |
2881 if (vo_vobsub) | |
2882 vobsub_reset(vo_vobsub); | |
5942
fb3a76edddf1
100000l! it resets a/v buffers _after_ stream sync, dropping possible keyframe, and may causing a-v desync.. seems to fix mpg seek bug and avi desync bug
arpi
parents:
5929
diff
changeset
|
2883 #if 0 |
5836 | 2884 if(sh_video && d_video->packs == 0) |
2885 ds_fill_buffer(d_video); | |
1369
7a2f1881b776
a_frame, v_frame killed, using sh_audio/video->timer. has_audio not more used after initialization.
arpi
parents:
1353
diff
changeset
|
2886 if(sh_audio){ |
5836 | 2887 if(d_audio->packs == 0) |
2888 ds_fill_buffer(d_audio); | |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2889 if(verbose){ |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2890 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
|
2891 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; |
1567 | 2892 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
|
2893 } |
1567 | 2894 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
|
2895 } else { |
1567 | 2896 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
|
2897 } |
5942
fb3a76edddf1
100000l! it resets a/v buffers _after_ stream sync, dropping possible keyframe, and may causing a-v desync.. seems to fix mpg seek bug and avi desync bug
arpi
parents:
5929
diff
changeset
|
2898 #endif |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2899 fflush(stdout); |
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2900 |
4593
3769ccb8da8b
libvo's query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4587
diff
changeset
|
2901 if(sh_video){ |
3769ccb8da8b
libvo's query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4587
diff
changeset
|
2902 current_module="seek_video_reset"; |
5511 | 2903 if(vo_config_count) video_out->control(VOCTRL_RESET,NULL); |
4593
3769ccb8da8b
libvo's query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4587
diff
changeset
|
2904 } |
3769ccb8da8b
libvo's query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4587
diff
changeset
|
2905 |
1459
622c504f36ef
printf stuff moved seek.c->mplayer.c, resetting drop_frame_cnt after seek
arpi
parents:
1457
diff
changeset
|
2906 if(sh_audio){ |
1466 | 2907 current_module="seek_audio_reset"; |
1334 | 2908 audio_out->reset(); // stop audio, throwing away buffered data |
1 | 2909 } |
1422 | 2910 #ifdef USE_OSD |
1334 | 2911 // Set OSD: |
2912 if(osd_level){ | |
2913 int len=((demuxer->movi_end-demuxer->movi_start)>>8); | |
1727 | 2914 if (len>0){ |
2915 osd_visible=sh_video->fps; // 1 sec | |
2916 vo_osd_progbar_type=0; | |
2917 vo_osd_progbar_value=(demuxer->filepos-demuxer->movi_start)/len; | |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2918 vo_osd_changed(OSDTYPE_PROGBAR); |
1727 | 2919 } |
1334 | 2920 } |
1422 | 2921 #endif |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2922 if(sh_video) { |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2923 c_total=0; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2924 max_pts_correction=0.1; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2925 osd_visible=sh_video->fps; // to rewert to PLAY pointer after 1 sec |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2926 audio_time_usage=0; video_time_usage=0; vout_time_usage=0; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2927 drop_frame_cnt=0; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2928 too_slow_frame_cnt=0; |
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2929 too_fast_frame_cnt=0; |
3744 | 2930 |
5488
3f183ca22747
fixed SPU pts, it's 1024/90000 based instead of 1/100
arpi
parents:
5463
diff
changeset
|
2931 if(vo_spudec) spudec_reset(vo_spudec); |
4587
886bf5274992
Audio only support. Include a fix in the asf demuxer opening.
albeu
parents:
4552
diff
changeset
|
2932 } |
1 | 2933 } |
1405 | 2934 rel_seek_secs=0; |
1627
eeaee1632340
absolute seek debugging with 1-8 keys (disabled by default)
arpi
parents:
1626
diff
changeset
|
2935 abs_seek_pos=0; |
5929
9e7d54e7be58
- frame_time delayed one frame, as it's really duration of current frame,
arpi
parents:
5927
diff
changeset
|
2936 frame_time_remaining=0; |
1466 | 2937 current_module=NULL; |
2938 } | |
2939 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2940 #ifdef HAVE_NEW_GUI |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2941 if(use_gui){ |
5789 | 2942 guiEventHandling(); |
1735 | 2943 if(demuxer->file_format==DEMUXER_TYPE_AVI && sh_video->video.dwLength>2){ |
2944 // get pos from frame number / total frames | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
2945 guiIntfStruct.Position=(float)d_video->pack_no*100.0f/sh_video->video.dwLength; |
1735 | 2946 } else { |
6914 | 2947 off_t len = ( demuxer->movi_end - demuxer->movi_start ); |
2948 off_t pos = ( demuxer->file_format == DEMUXER_TYPE_AUDIO?stream->pos:demuxer->filepos ); | |
2949 guiIntfStruct.Position=(len <= 0? 0.0f : ( pos - demuxer->movi_start ) * 100.0f / len ); | |
1735 | 2950 } |
5797 | 2951 if ( sh_video ) guiIntfStruct.TimeSec=d_video->pts; |
2952 else if ( sh_audio ) guiIntfStruct.TimeSec=sh_audio->timer; | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6590
diff
changeset
|
2953 guiGetEvent( guiReDraw,NULL ); |
6903 | 2954 guiGetEvent( guiSetVolume,NULL ); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
2955 if(guiIntfStruct.Playing==0) break; // STOP |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
2956 if(guiIntfStruct.Playing==2) osd_function=OSD_PAUSE; |
6713 | 2957 if ( guiIntfStruct.DiskChanged || guiIntfStruct.FilenameChanged ) goto goto_next_file; |
3054 | 2958 #ifdef USE_DVDREAD |
2959 if ( stream->type == STREAMTYPE_DVD ) | |
2960 { | |
2961 dvd_priv_t * dvdp = stream->priv; | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
2962 guiIntfStruct.DVD.current_chapter=dvdp->cur_cell + 1; |
3054 | 2963 } |
2964 #endif | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2965 } |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2966 #endif |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2967 |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1709
diff
changeset
|
2968 |
220 | 2969 //================= Update OSD ==================== |
1422 | 2970 #ifdef USE_OSD |
5205
47259a4f3216
show sub/av delay at osdlevel=1 - patch by Marcin Juszkiewicz <marcinj@netbox.pl>
arpi
parents:
5202
diff
changeset
|
2971 if(osd_level>=1){ |
780 | 2972 int pts=d_video->pts; |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2973 char osd_text_tmp[50]; |
595 | 2974 if(pts==osd_last_pts-1) ++pts; else osd_last_pts=pts; |
371 | 2975 vo_osd_text=osd_text_buffer; |
5489
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2976 #ifdef USE_DVDNAV |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2977 if (osd_show_dvd_nav_delay) { |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2978 sprintf(osd_text_tmp, "DVDNAV: %s", dvd_nav_text); |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2979 osd_show_dvd_nav_delay--; |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2980 } else |
5e6e08ff47d5
dvdnav support improved - patch by Kees Cook <mplayer@outflux.net>
arpi
parents:
5488
diff
changeset
|
2981 #endif |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2982 if (osd_show_sub_delay) { |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2983 sprintf(osd_text_tmp, "Sub delay: %d ms",(int)(sub_delay*1000)); |
3234
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2984 osd_show_sub_delay--; |
d1e891c1e548
dusplay sub_delay patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3201
diff
changeset
|
2985 } else |
3783 | 2986 if (osd_show_av_delay) { |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2987 sprintf(osd_text_tmp, "A-V delay: %d ms",(int)(audio_delay*1000)); |
3783 | 2988 osd_show_av_delay--; |
5205
47259a4f3216
show sub/av delay at osdlevel=1 - patch by Marcin Juszkiewicz <marcinj@netbox.pl>
arpi
parents:
5202
diff
changeset
|
2989 } else if(osd_level>=2) |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2990 sprintf(osd_text_tmp,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60); |
5205
47259a4f3216
show sub/av delay at osdlevel=1 - patch by Marcin Juszkiewicz <marcinj@netbox.pl>
arpi
parents:
5202
diff
changeset
|
2991 else osd_text_tmp[0]=0; |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2992 |
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2993 if(strcmp(vo_osd_text, osd_text_tmp)) { |
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2994 strcpy(vo_osd_text, osd_text_tmp); |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
2995 vo_osd_changed(OSDTYPE_OSD); |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2996 } |
371 | 2997 } else { |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
2998 if(vo_osd_text) { |
371 | 2999 vo_osd_text=NULL; |
5638
86663f1b9b00
new osd code, use osd objs to follow changes and do minimal updates
arpi
parents:
5627
diff
changeset
|
3000 vo_osd_changed(OSDTYPE_OSD); |
4807
156482788caf
osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents:
4798
diff
changeset
|
3001 } |
371 | 3002 } |
220 | 3003 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0; |
371 | 3004 // vo_osd_text=osd_text_buffer; |
1422 | 3005 #endif |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
452
diff
changeset
|
3006 |
1422 | 3007 #ifdef USE_SUB |
258 | 3008 // find sub |
1204 | 3009 if(subtitles && d_video->pts>0){ |
1762 | 3010 float pts=d_video->pts; |
398 | 3011 if(sub_fps==0) sub_fps=sh_video->fps; |
482 | 3012 current_module="find_sub"; |
3274
ac7ded58b6df
mpeg subtitle flickering patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3257
diff
changeset
|
3013 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
|
3014 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
|
3015 sub_last_pts = pts; |
ac7ded58b6df
mpeg subtitle flickering patch by Evgeny Chukreev <codedj@echo.ru>
arpi
parents:
3257
diff
changeset
|
3016 } |
482 | 3017 current_module=NULL; |
258 | 3018 } |
1422 | 3019 #endif |
554 | 3020 |
6110 | 3021 // DVD sub: |
3022 if(vo_config_count && vo_spudec) { | |
3023 unsigned char* packet=NULL; | |
3024 int len,timestamp; | |
3025 // Get a sub packet from the dvd or a vobsub and make a timestamp relative to sh_video->timer | |
3026 int get_sub_packet(void) { | |
3027 // Vobsub | |
3028 len = 0; | |
3029 if(vo_vobsub) { | |
3030 if(d_video->pts+sub_delay>=0) { | |
3031 // The + next_frame_time is there because we'll display the sub at the next frame | |
3032 len = vobsub_get_packet(vo_vobsub,d_video->pts+sub_delay+next_frame_time,(void**)&packet,×tamp); | |
3033 if(len > 0) { | |
3034 timestamp -= (d_video->pts + sub_delay - sh_video->timer)*90000; | |
3035 mp_dbg(MSGT_CPLAYER,MSGL_V,"\rVOB sub: len=%d v_pts=%5.3f v_timer=%5.3f sub=%5.3f ts=%d \n",len,d_video->pts,sh_video->timer,timestamp / 90000.0); | |
3036 } | |
3037 } | |
3038 } else { | |
3039 // DVD sub | |
3040 len = ds_get_packet_sub(d_dvdsub,(unsigned char**)&packet); | |
3041 if(len > 0) { | |
3042 timestamp = 90000*(sh_video->timer + d_dvdsub->pts + sub_delay - d_video->pts); | |
3043 mp_dbg(MSGT_CPLAYER,MSGL_V,"\rDVD sub: len=%d v_pts=%5.3f s_pts=%5.3f ts=%d \n",len,d_video->pts,d_dvdsub->pts,timestamp); | |
3044 } | |
3045 } | |
3046 return len; | |
4079 | 3047 } |
6110 | 3048 current_module="spudec"; |
3049 spudec_heartbeat(vo_spudec,90000*sh_video->timer); | |
3050 while(get_sub_packet()>0 && packet){ | |
6204 | 3051 if(timestamp < 0) timestamp = 0; |
6110 | 3052 spudec_assemble(vo_spudec,packet,len,timestamp); |
554 | 3053 } |
3054 | |
6190
bd6748605681
Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents:
6185
diff
changeset
|
3055 /* detect wether the sub has changed or not */ |
bd6748605681
Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents:
6185
diff
changeset
|
3056 if(spudec_changed(vo_spudec)) |
bd6748605681
Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents:
6185
diff
changeset
|
3057 vo_osd_changed(OSDTYPE_SPU); |
6110 | 3058 current_module=NULL; |
3059 } | |
3060 | |
1421 | 3061 } // while(!eof) |
1 | 3062 |
1567 | 3063 mp_msg(MSGT_GLOBAL,MSGL_V,"EOF code: %d \n",eof); |
1 | 3064 |
1639 | 3065 } |
3066 | |
3618 | 3067 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
|
3068 |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
3069 mp_msg(MSGT_CPLAYER,MSGL_INFO,"\n"); |
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6135
diff
changeset
|
3070 |
4221 | 3071 if(benchmark){ |
3072 double tot=video_time_usage+vout_time_usage+audio_time_usage; | |
3073 double total_time_usage; | |
3074 total_time_usage_start=GetTimer()-total_time_usage_start; | |
3075 total_time_usage = (float)total_time_usage_start*0.000001; | |
5151 | 3076 mp_msg(MSGT_CPLAYER,MSGL_INFO,"\nBENCHMARKs: VC:%8.3fs VO:%8.3fs A:%8.3fs Sys:%8.3fs = %8.3fs\n", |
4221 | 3077 video_time_usage,vout_time_usage,audio_time_usage, |
3078 total_time_usage-tot,total_time_usage); | |
3079 if(total_time_usage>0.0) | |
5151 | 3080 mp_msg(MSGT_CPLAYER,MSGL_INFO,"BENCHMARK%%: VC:%8.4f%% VO:%8.4f%% A:%8.4f%% Sys:%8.4f%% = %8.4f%%\n", |
4221 | 3081 100.0*video_time_usage/total_time_usage, |
3082 100.0*vout_time_usage/total_time_usage, | |
3083 100.0*audio_time_usage/total_time_usage, | |
3084 100.0*(total_time_usage-tot)/total_time_usage, | |
3085 100.0); | |
5983 | 3086 if(total_frame_cnt && frame_dropping) |
5621 | 3087 mp_msg(MSGT_CPLAYER,MSGL_INFO,"BENCHMARKn: disp: %d (%3.2f fps) drop: %d (%d%%) total: %d (%3.2f fps)\n", |
3088 total_frame_cnt-drop_frame_cnt, | |
3089 (total_time_usage>0.5)?((total_frame_cnt-drop_frame_cnt)/total_time_usage):0, | |
3090 drop_frame_cnt, | |
3091 100*drop_frame_cnt/total_frame_cnt, | |
3092 total_frame_cnt, | |
3093 (total_time_usage>0.5)?(total_frame_cnt/total_time_usage):0); | |
3094 | |
4221 | 3095 } |
3096 | |
5983 | 3097 // time to uninit all, except global stuff: |
3098 uninit_player(INITED_ALL-(INITED_GUI+INITED_LIRC+INITED_INPUT)); | |
5154 | 3099 |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3100 if(eof == PT_NEXT_ENTRY || eof == PT_PREV_ENTRY) { |
4221 | 3101 eof = eof == PT_NEXT_ENTRY ? 1 : -1; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3102 if(play_tree_iter_step(playtree_iter,eof,0) == PLAY_TREE_ITER_ENTRY) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3103 eof = 1; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3104 } else { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3105 play_tree_iter_free(playtree_iter); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3106 playtree_iter = NULL; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3107 } |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3108 } else if (eof == PT_UP_NEXT || eof == PT_UP_PREV) { |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3109 eof = eof == PT_UP_NEXT ? 1 : -1; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3110 if(play_tree_iter_up_step(playtree_iter,eof,0) == PLAY_TREE_ITER_ENTRY) { |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3111 eof = 1; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3112 } else { |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3113 play_tree_iter_free(playtree_iter); |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3114 playtree_iter = NULL; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3115 } |
5154 | 3116 } else { // NEXT PREV SRC |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4152
diff
changeset
|
3117 eof = eof == PT_PREV_SRC ? -1 : 1; |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3118 } |
1639 | 3119 |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3120 if(eof == 0) eof = 1; |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3121 |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3122 while(playtree_iter != NULL) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3123 filename = play_tree_iter_get_file(playtree_iter,eof); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3124 if(filename == NULL) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3125 if( play_tree_iter_step(playtree_iter,eof,0) != PLAY_TREE_ITER_ENTRY) { |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3126 play_tree_iter_free(playtree_iter); |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3127 playtree_iter = NULL; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3128 }; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3129 } else |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3130 break; |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3131 } |
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3132 |
5910
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3133 #ifdef HAVE_NEW_GUI |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3134 if( use_gui && !playtree_iter ) |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3135 { |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3136 #ifdef USE_DVDREAD |
6280 | 3137 if ( !guiIntfStruct.DiskChanged ) |
5910
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3138 #endif |
6713 | 3139 mplEnd(); |
5910
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3140 } |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3141 #endif |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5908
diff
changeset
|
3142 |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6590
diff
changeset
|
3143 if(use_gui || playtree_iter != NULL){ |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3144 |
5459 | 3145 current_module="uninit_acodec"; |
5461 | 3146 if(sh_audio) uninit_audio(sh_audio); |
5459 | 3147 sh_audio=NULL; |
3148 | |
1654 | 3149 current_module="uninit_vcodec"; |
3150 if(sh_video) uninit_video(sh_video); | |
5411 | 3151 sh_video=NULL; |
5459 | 3152 |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3153 current_module="free_demuxer"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3154 if(demuxer) free_demuxer(demuxer); |
5411 | 3155 demuxer=NULL; |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3156 |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3157 current_module="free_stream"; |
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3158 if(stream) free_stream(stream); |
5411 | 3159 stream=NULL; |
6796 | 3160 |
3161 #ifdef USE_SUB | |
3543 | 3162 current_module="sub_free"; |
3163 if ( subtitles ) | |
3164 { | |
3165 sub_free( subtitles ); | |
3166 sub_name=NULL; | |
3167 vo_sub=NULL; | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
3168 subtitles=NULL; |
3543 | 3169 } |
6796 | 3170 #endif |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4807
diff
changeset
|
3171 |
4045
898caa690c0b
playtree support. replaces old playlist and multifile mess. patch by Alban Bedel <albeu@free.fr>
arpi
parents:
3934
diff
changeset
|
3172 eof = 0; |
1641
b7dae998505c
free stream/demuxer. continue playback with next file if error found
arpi
parents:
1639
diff
changeset
|
3173 goto play_next_file; |
1639 | 3174 } |
3175 | |
1582 | 3176 exit_player(MSGTR_Exit_eof); |
1639 | 3177 |
109 | 3178 return 1; |
3179 } |