Mercurial > mplayer.hg
comparison mplayer.c @ 4418:8141d2c399e4
A new configurable input system and joystick support for this system
author | albeu |
---|---|
date | Wed, 30 Jan 2002 12:46:03 +0000 |
parents | 817530449706 |
children | 44c23fd75005 |
comparison
equal
deleted
inserted
replaced
4417:4f507d28716d | 4418:8141d2c399e4 |
---|---|
69 #include "lirc_mp.h" | 69 #include "lirc_mp.h" |
70 #endif | 70 #endif |
71 | 71 |
72 #ifdef HAVE_NEW_GUI | 72 #ifdef HAVE_NEW_GUI |
73 #include "Gui/mplayer/play.h" | 73 #include "Gui/mplayer/play.h" |
74 #endif | |
75 | |
76 #ifdef HAVE_NEW_INPUT | |
77 #include "input/input.h" | |
74 #endif | 78 #endif |
75 | 79 |
76 int slave_mode=0; | 80 int slave_mode=0; |
77 int verbose=0; | 81 int verbose=0; |
78 int quiet=0; | 82 int quiet=0; |
668 #endif | 672 #endif |
669 | 673 |
670 // ========== Init keyboard FIFO (connection to libvo) ============ | 674 // ========== Init keyboard FIFO (connection to libvo) ============ |
671 make_pipe(&keyb_fifo_get,&keyb_fifo_put); | 675 make_pipe(&keyb_fifo_get,&keyb_fifo_put); |
672 | 676 |
677 // Init input system | |
678 #ifdef HAVE_NEW_INPUT | |
679 current_module = "init_input"; | |
680 mp_input_init(); | |
681 if(keyb_fifo_get > 0) | |
682 mp_input_add_key_fd(keyb_fifo_get,1,NULL,NULL); | |
683 if(slave_mode) | |
684 mp_input_add_cmd_fd(0,1,NULL,NULL); | |
685 else | |
686 mp_input_add_key_fd(0,1,NULL,NULL); | |
687 current_module = NULL; | |
688 #endif | |
689 | |
690 | |
673 //========= Catch terminate signals: ================ | 691 //========= Catch terminate signals: ================ |
674 // terminate requests: | 692 // terminate requests: |
675 signal(SIGTERM,exit_sighandler); // kill | 693 signal(SIGTERM,exit_sighandler); // kill |
676 signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed | 694 signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed |
677 | 695 |
910 #endif | 928 #endif |
911 | 929 |
912 // initial prefill: 20% later: 5% (should be set by -cacheopts) | 930 // initial prefill: 20% later: 5% (should be set by -cacheopts) |
913 if(stream_cache_size) stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024/5,stream_cache_size*1024/20); | 931 if(stream_cache_size) stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024/5,stream_cache_size*1024/20); |
914 | 932 |
933 #ifdef HAVE_NEW_INPUT | |
934 if(!slave_mode && filename && !use_stdin && !strcmp(filename,"-")) { | |
935 mp_input_rm_key_fd(0); | |
936 use_stdin = 1; | |
937 } | |
938 else if(!slave_mode && use_stdin && (!filename || strcmp(filename,"-"))) { | |
939 mp_input_add_key_fd(0,1,NULL,NULL); | |
940 use_stdin = 0; | |
941 } | |
942 #else | |
915 use_stdin=filename && (!strcmp(filename,"-")); | 943 use_stdin=filename && (!strcmp(filename,"-")); |
944 #endif | |
916 | 945 |
917 #ifdef HAVE_LIBCSS | 946 #ifdef HAVE_LIBCSS |
918 current_module="libcss"; | 947 current_module="libcss"; |
919 if (dvdimportkey) { | 948 if (dvdimportkey) { |
920 if (dvd_import_key(dvdimportkey)) { | 949 if (dvd_import_key(dvdimportkey)) { |
1852 } | 1881 } |
1853 } | 1882 } |
1854 #endif | 1883 #endif |
1855 | 1884 |
1856 if(osd_function==OSD_PAUSE){ | 1885 if(osd_function==OSD_PAUSE){ |
1886 #ifdef HAVE_NEW_INPUT | |
1887 mp_cmd_t* cmd; | |
1888 #endif | |
1857 #ifdef HAVE_NEW_GUI | 1889 #ifdef HAVE_NEW_GUI |
1858 int gui_pause_flag=0; // gany! | 1890 int gui_pause_flag=0; // gany! |
1859 #endif | 1891 #endif |
1860 mp_msg(MSGT_CPLAYER,MSGL_STATUS,"\n------ PAUSED -------\r");fflush(stdout); | 1892 mp_msg(MSGT_CPLAYER,MSGL_STATUS,"\n------ PAUSED -------\r");fflush(stdout); |
1861 #ifdef HAVE_NEW_GUI | 1893 #ifdef HAVE_NEW_GUI |
1862 if(use_gui) mplShMem->Playing=2; | 1894 if(use_gui) mplShMem->Playing=2; |
1863 #endif | 1895 #endif |
1864 if (audio_out && sh_audio) | 1896 if (audio_out && sh_audio) |
1865 audio_out->pause(); // pause audio, keep data if possible | 1897 audio_out->pause(); // pause audio, keep data if possible |
1866 | 1898 |
1899 #ifdef HAVE_NEW_INPUT | |
1900 while( (cmd = mp_input_get_cmd(20,1)) == NULL) { | |
1901 #else /* HAVE_NEW_INPUT */ | |
1867 if(slave_mode) { | 1902 if(slave_mode) { |
1868 fd_set set; | 1903 fd_set set; |
1869 struct timeval timeout; | 1904 struct timeval timeout; |
1870 while (1) { | 1905 while (1) { |
1871 usec_sleep(1000); | 1906 usec_sleep(1000); |
1882 while( | 1917 while( |
1883 #ifdef HAVE_LIRC | 1918 #ifdef HAVE_LIRC |
1884 lirc_mp_getinput()<=0 && | 1919 lirc_mp_getinput()<=0 && |
1885 #endif | 1920 #endif |
1886 (use_stdin || getch2(20)<=0) && mplayer_get_key()<=0){ | 1921 (use_stdin || getch2(20)<=0) && mplayer_get_key()<=0){ |
1922 #endif | |
1887 #ifndef USE_LIBVO2 | 1923 #ifndef USE_LIBVO2 |
1888 video_out->check_events(); | 1924 video_out->check_events(); |
1889 #endif | 1925 #endif /* HAVE_NEW_INPUT */ |
1890 #ifdef HAVE_NEW_GUI | 1926 #ifdef HAVE_NEW_GUI |
1891 if(use_gui){ | 1927 if(use_gui){ |
1892 EventHandling(); | 1928 EventHandling(); |
1893 if(mplShMem->Playing!=2 || (rel_seek_secs || abs_seek_pos)) | 1929 if(mplShMem->Playing!=2 || (rel_seek_secs || abs_seek_pos)) |
1894 { gui_pause_flag=1; break; } // end of pause or seek | 1930 { gui_pause_flag=1; break; } // end of pause or seek |
1895 } | 1931 } |
1896 #endif | 1932 #endif |
1933 #ifdef HAVE_NEW_INPUT | |
1934 } | |
1935 mp_cmd_free(cmd); | |
1936 #else | |
1897 if(use_stdin) usec_sleep(1000); // do not eat the CPU | 1937 if(use_stdin) usec_sleep(1000); // do not eat the CPU |
1898 } | 1938 } |
1899 } | 1939 } |
1940 #endif /* HAVE_NEW_INPUT */ | |
1900 osd_function=OSD_PLAY; | 1941 osd_function=OSD_PLAY; |
1901 if (audio_out && sh_audio) | 1942 if (audio_out && sh_audio) |
1902 audio_out->resume(); // resume audio | 1943 audio_out->resume(); // resume audio |
1903 (void)GetRelativeTime(); // keep TF around FT in next cycle | 1944 (void)GetRelativeTime(); // keep TF around FT in next cycle |
1904 #ifdef HAVE_NEW_GUI | 1945 #ifdef HAVE_NEW_GUI |
1917 rel_seek_secs+=step_sec; | 1958 rel_seek_secs+=step_sec; |
1918 } | 1959 } |
1919 | 1960 |
1920 //================= Keyboard events, SEEKing ==================== | 1961 //================= Keyboard events, SEEKing ==================== |
1921 | 1962 |
1963 #ifndef HAVE_NEW_INPUT | |
1922 /* slave mode */ | 1964 /* slave mode */ |
1923 if(slave_mode) { | 1965 if(slave_mode) { |
1924 char buffer[1024]; | 1966 char buffer[1024]; |
1925 fd_set set; | 1967 fd_set set; |
1926 struct timeval timeout; | 1968 struct timeval timeout; |
2227 break; | 2269 break; |
2228 #endif | 2270 #endif |
2229 } | 2271 } |
2230 } // keyboard event handler | 2272 } // keyboard event handler |
2231 | 2273 |
2274 #else /* HAVE_NEW_INPUT */ | |
2275 { | |
2276 mp_cmd_t* cmd; | |
2277 while( (cmd = mp_input_get_cmd(0,0)) != NULL) { | |
2278 switch(cmd->id) { | |
2279 case MP_CMD_SEEK : { | |
2280 int v,abs; | |
2281 v = cmd->args[0].v.i; | |
2282 abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; | |
2283 if(abs) { | |
2284 abs_seek_pos = 3; | |
2285 osd_function= (v > sh_video->timer) ? OSD_FFW : OSD_REW; | |
2286 rel_seek_secs = v; | |
2287 } | |
2288 else { | |
2289 rel_seek_secs+= v; | |
2290 osd_function= (v > 0) ? OSD_FFW : OSD_REW; | |
2291 } | |
2292 } break; | |
2293 case MP_CMD_AUDIO_DELAY : { | |
2294 float v = cmd->args[0].v.f; | |
2295 audio_delay += v; | |
2296 osd_show_av_delay = 9; | |
2297 if(sh_audio) sh_audio->timer+= v; | |
2298 } break; | |
2299 case MP_CMD_PAUSE : { | |
2300 osd_function=OSD_PAUSE; | |
2301 } break; | |
2302 case MP_CMD_QUIT : { | |
2303 exit_player(MSGTR_Exit_quit); | |
2304 } | |
2305 case MP_CMD_GRAB_FRAMES : { | |
2306 grab_frames=2; | |
2307 } break; | |
2308 case MP_CMD_PLAY_TREE_STEP : { | |
2309 int n = cmd->args[0].v.i > 0 ? 1 : -1; | |
2310 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); | |
2311 | |
2312 if(play_tree_iter_step(i,n,0) == PLAY_TREE_ITER_ENTRY) | |
2313 eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; | |
2314 play_tree_iter_free(i); | |
2315 } break; | |
2316 case MP_CMD_PLAY_TREE_UP_STEP : { | |
2317 int n = cmd->args[0].v.i > 0 ? 1 : -1; | |
2318 play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter); | |
2319 if(play_tree_iter_up_step(i,n,0) == PLAY_TREE_ITER_ENTRY) | |
2320 eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; | |
2321 play_tree_iter_free(i); | |
2322 } break; | |
2323 case MP_CMD_PLAY_ALT_SRC_STEP : { | |
2324 if(playtree_iter->num_files > 1) { | |
2325 int v = cmd->args[0].v.i; | |
2326 if(v > 0 && playtree_iter->file < playtree_iter->num_files) | |
2327 eof = PT_NEXT_SRC; | |
2328 else if(v < 0 && playtree_iter->file > 1) | |
2329 eof = PT_PREV_SRC; | |
2330 } | |
2331 } break; | |
2332 case MP_CMD_SUB_DELAY : { | |
2333 int abs= cmd->args[1].v.i; | |
2334 float v = cmd->args[0].v.f; | |
2335 if(abs) | |
2336 sub_delay = v; | |
2337 else | |
2338 sub_delay += v; | |
2339 osd_show_sub_delay = 9; // show the subdelay in OSD | |
2340 } break; | |
2341 case MP_CMD_OSD : { | |
2342 int v = cmd->args[0].v.i; | |
2343 if(v < 0) | |
2344 osd_level=(osd_level+1)%3; | |
2345 else | |
2346 osd_level= v > 2 ? 2 : v; | |
2347 } break; | |
2348 case MP_CMD_VOLUME : { | |
2349 int v = cmd->args[0].v.i; | |
2350 if(v > 0) | |
2351 mixer_incvolume(); | |
2352 else | |
2353 mixer_decvolume(); | |
2354 #ifdef USE_OSD | |
2355 if(osd_level){ | |
2356 osd_visible=sh_video->fps; // 1 sec | |
2357 vo_osd_progbar_type=OSD_VOLUME; | |
2358 vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0; | |
2359 } | |
2360 #endif | |
2361 } break; | |
2362 case MP_CMD_MIXER_USEMASTER : { | |
2363 mixer_usemaster=!mixer_usemaster; | |
2364 } break; | |
2365 case MP_CMD_CONTRAST : { | |
2366 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; | |
2367 if(abs) | |
2368 v_cont = v > 100 ? 100 : v; | |
2369 else { | |
2370 if ( (v_cont += v) > 100 ) v_cont = 100; | |
2371 } | |
2372 if(v_cont < 0) v_cont = 0; | |
2373 | |
2374 if(set_video_colors(sh_video,"Contrast",v_cont)){ | |
2375 #ifdef USE_OSD | |
2376 if(osd_level){ | |
2377 osd_visible=sh_video->fps; // 1 sec | |
2378 vo_osd_progbar_type=OSD_CONTRAST; | |
2379 vo_osd_progbar_value=((v_cont)<<8)/100; | |
2380 } | |
2381 #endif | |
2382 } | |
2383 } break; | |
2384 case MP_CMD_BRIGHTNESS : { | |
2385 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; | |
2386 if(abs) | |
2387 v_bright = v > 100 ? 100 : v; | |
2388 else { | |
2389 if ( (v_bright += v) > 100 ) v_cont = 100; | |
2390 } | |
2391 if(v_hw_equ_cap & VEQ_CAP_BRIGHTNESS) { | |
2392 if(v_bright < -100) v_bright = -100; | |
2393 } else { | |
2394 if ( v_bright < 0 ) v_bright = 0; | |
2395 } | |
2396 if(set_video_colors(sh_video,"Brightness",v_bright)){ | |
2397 #ifdef USE_OSD | |
2398 if(osd_level){ | |
2399 osd_visible=sh_video->fps; // 1 sec | |
2400 vo_osd_progbar_type=OSD_BRIGHTNESS; | |
2401 vo_osd_progbar_value=((v_bright)<<8)/100; | |
2402 } | |
2403 #endif | |
2404 } | |
2405 } break; | |
2406 case MP_CMD_HUE : { | |
2407 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; | |
2408 if(abs) | |
2409 v_hue = v > 100 ? 100 : v; | |
2410 else { | |
2411 if ( (v_hue += v) > 100 ) v_hue = 100; | |
2412 } | |
2413 if(v_hw_equ_cap & VEQ_CAP_HUE) { | |
2414 if(v_hue < -100) v_hue = -100; | |
2415 } else { | |
2416 if ( v_hue < 0 ) v_hue = 0; | |
2417 } | |
2418 if(set_video_colors(sh_video,"Hue",v_hue)){ | |
2419 #ifdef USE_OSD | |
2420 if(osd_level){ | |
2421 osd_visible=sh_video->fps; // 1 sec | |
2422 vo_osd_progbar_type=OSD_HUE; | |
2423 vo_osd_progbar_value=((v_hue)<<8)/100; | |
2424 } | |
2425 #endif | |
2426 } | |
2427 } break; | |
2428 case MP_CMD_SATURATION : { | |
2429 int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; | |
2430 if(abs) | |
2431 v_saturation = v > 100 ? 100 : v; | |
2432 else { | |
2433 if ( (v_saturation += v) > 100 ) v_saturation = 100; | |
2434 } | |
2435 if(v_hw_equ_cap & VEQ_CAP_SATURATION) { | |
2436 if(v_saturation < -100) v_saturation = -100; | |
2437 } else { | |
2438 if ( v_saturation < 0 ) v_saturation = 0; | |
2439 } | |
2440 if(set_video_colors(sh_video,"Saturation",v_saturation)){ | |
2441 #ifdef USE_OSD | |
2442 if(osd_level){ | |
2443 osd_visible=sh_video->fps; // 1 sec | |
2444 vo_osd_progbar_type=OSD_SATURATION; | |
2445 vo_osd_progbar_value=((v_saturation)<<8)/100; | |
2446 } | |
2447 #endif | |
2448 } | |
2449 } break; | |
2450 case MP_CMD_FRAMEDROPPING : { | |
2451 int v = cmd->args[0].v.i; | |
2452 if(v < 0) | |
2453 frame_dropping = (frame_dropping+1)%3; | |
2454 else | |
2455 frame_dropping = v > 2 ? 2 : v; | |
2456 } break; | |
2457 #ifdef USE_TV | |
2458 case MP_CMD_TV_STEP_CHANNEL : { | |
2459 if (tv_param_on == 1) { | |
2460 int v = cmd->args[0].v.i; | |
2461 if(v > 0) | |
2462 tv_step_channel(tv_handler, TV_CHANNEL_HIGHER); | |
2463 else | |
2464 tv_step_channel(tv_handler, TV_CHANNEL_LOWER); | |
2465 } | |
2466 } break; | |
2467 case MP_CMD_TV_STEP_NORM : { | |
2468 if (tv_param_on == 1) | |
2469 tv_step_norm(tv_handler); | |
2470 } break; | |
2471 case MP_CMD_TV_STEP_CHANNEL_LIST : { | |
2472 if (tv_param_on == 1) | |
2473 tv_step_chanlist(tv_handler); | |
2474 } break; | |
2475 #endif | |
2476 default : | |
2477 printf("Received unknow cmd %s\n",cmd->name); | |
2478 } | |
2479 mp_cmd_free(cmd); | |
2480 } | |
2481 } | |
2482 #endif | |
2232 if (seek_to_sec) { | 2483 if (seek_to_sec) { |
2233 int a,b; float d; | 2484 int a,b; float d; |
2234 | 2485 |
2235 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | 2486 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) |
2236 rel_seek_secs += 3600*a +60*b +d ; | 2487 rel_seek_secs += 3600*a +60*b +d ; |