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 ;