summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authoralbeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-30 12:46:03 +0000
committeralbeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-30 12:46:03 +0000
commitf60af655fb185975a92373e4263f2a862dbcc8da (patch)
tree80bd450e58b0cd102e1cfd6eaa4e9d287dce00d1 /mplayer.c
parent50d37d64a4178810b66d96a3f434e49ff692a8f1 (diff)
downloadmpv-f60af655fb185975a92373e4263f2a862dbcc8da.tar.bz2
mpv-f60af655fb185975a92373e4263f2a862dbcc8da.tar.xz
A new configurable input system and joystick support for this system
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4419 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c253
1 files changed, 252 insertions, 1 deletions
diff --git a/mplayer.c b/mplayer.c
index 1c23603eed..c388ab3327 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -73,6 +73,10 @@ extern void* mDisplay; // Display* mDisplay;
#include "Gui/mplayer/play.h"
#endif
+#ifdef HAVE_NEW_INPUT
+#include "input/input.h"
+#endif
+
int slave_mode=0;
int verbose=0;
int quiet=0;
@@ -670,6 +674,20 @@ if(!parse_codec_cfg(get_path("codecs.conf"))){
// ========== Init keyboard FIFO (connection to libvo) ============
make_pipe(&keyb_fifo_get,&keyb_fifo_put);
+// Init input system
+#ifdef HAVE_NEW_INPUT
+current_module = "init_input";
+mp_input_init();
+if(keyb_fifo_get > 0)
+ mp_input_add_key_fd(keyb_fifo_get,1,NULL,NULL);
+if(slave_mode)
+ mp_input_add_cmd_fd(0,1,NULL,NULL);
+else
+ mp_input_add_key_fd(0,1,NULL,NULL);
+current_module = NULL;
+#endif
+
+
//========= Catch terminate signals: ================
// terminate requests:
signal(SIGTERM,exit_sighandler); // kill
@@ -912,7 +930,18 @@ current_module=NULL;
// initial prefill: 20% later: 5% (should be set by -cacheopts)
if(stream_cache_size) stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024/5,stream_cache_size*1024/20);
+#ifdef HAVE_NEW_INPUT
+ if(!slave_mode && filename && !use_stdin && !strcmp(filename,"-")) {
+ mp_input_rm_key_fd(0);
+ use_stdin = 1;
+ }
+ else if(!slave_mode && use_stdin && (!filename || strcmp(filename,"-"))) {
+ mp_input_add_key_fd(0,1,NULL,NULL);
+ use_stdin = 0;
+ }
+#else
use_stdin=filename && (!strcmp(filename,"-"));
+#endif
#ifdef HAVE_LIBCSS
current_module="libcss";
@@ -1854,6 +1883,9 @@ if(auto_quality>0){
#endif
if(osd_function==OSD_PAUSE){
+#ifdef HAVE_NEW_INPUT
+ mp_cmd_t* cmd;
+#endif
#ifdef HAVE_NEW_GUI
int gui_pause_flag=0; // gany!
#endif
@@ -1864,6 +1896,9 @@ if(auto_quality>0){
if (audio_out && sh_audio)
audio_out->pause(); // pause audio, keep data if possible
+#ifdef HAVE_NEW_INPUT
+ while( (cmd = mp_input_get_cmd(20,1)) == NULL) {
+#else /* HAVE_NEW_INPUT */
if(slave_mode) {
fd_set set;
struct timeval timeout;
@@ -1884,9 +1919,10 @@ if(auto_quality>0){
lirc_mp_getinput()<=0 &&
#endif
(use_stdin || getch2(20)<=0) && mplayer_get_key()<=0){
+#endif
#ifndef USE_LIBVO2
video_out->check_events();
-#endif
+#endif /* HAVE_NEW_INPUT */
#ifdef HAVE_NEW_GUI
if(use_gui){
EventHandling();
@@ -1894,9 +1930,14 @@ if(auto_quality>0){
{ gui_pause_flag=1; break; } // end of pause or seek
}
#endif
+#ifdef HAVE_NEW_INPUT
+ }
+ mp_cmd_free(cmd);
+#else
if(use_stdin) usec_sleep(1000); // do not eat the CPU
}
}
+#endif /* HAVE_NEW_INPUT */
osd_function=OSD_PLAY;
if (audio_out && sh_audio)
audio_out->resume(); // resume audio
@@ -1919,6 +1960,7 @@ if(step_sec>0) {
//================= Keyboard events, SEEKing ====================
+#ifndef HAVE_NEW_INPUT
/* slave mode */
if(slave_mode) {
char buffer[1024];
@@ -2229,6 +2271,215 @@ if(step_sec>0) {
}
} // keyboard event handler
+#else /* HAVE_NEW_INPUT */
+{
+ mp_cmd_t* cmd;
+ while( (cmd = mp_input_get_cmd(0,0)) != NULL) {
+ switch(cmd->id) {
+ case MP_CMD_SEEK : {
+ int v,abs;
+ v = cmd->args[0].v.i;
+ abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0;
+ if(abs) {
+ abs_seek_pos = 3;
+ osd_function= (v > sh_video->timer) ? OSD_FFW : OSD_REW;
+ rel_seek_secs = v;
+ }
+ else {
+ rel_seek_secs+= v;
+ osd_function= (v > 0) ? OSD_FFW : OSD_REW;
+ }
+ } break;
+ case MP_CMD_AUDIO_DELAY : {
+ float v = cmd->args[0].v.f;
+ audio_delay += v;
+ osd_show_av_delay = 9;
+ if(sh_audio) sh_audio->timer+= v;
+ } break;
+ case MP_CMD_PAUSE : {
+ osd_function=OSD_PAUSE;
+ } break;
+ case MP_CMD_QUIT : {
+ exit_player(MSGTR_Exit_quit);
+ }
+ case MP_CMD_GRAB_FRAMES : {
+ grab_frames=2;
+ } break;
+ case MP_CMD_PLAY_TREE_STEP : {
+ int n = cmd->args[0].v.i > 0 ? 1 : -1;
+ play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter);
+
+ if(play_tree_iter_step(i,n,0) == PLAY_TREE_ITER_ENTRY)
+ eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY;
+ play_tree_iter_free(i);
+ } break;
+ case MP_CMD_PLAY_TREE_UP_STEP : {
+ int n = cmd->args[0].v.i > 0 ? 1 : -1;
+ play_tree_iter_t* i = play_tree_iter_new_copy(playtree_iter);
+ if(play_tree_iter_up_step(i,n,0) == PLAY_TREE_ITER_ENTRY)
+ eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV;
+ play_tree_iter_free(i);
+ } break;
+ case MP_CMD_PLAY_ALT_SRC_STEP : {
+ if(playtree_iter->num_files > 1) {
+ int v = cmd->args[0].v.i;
+ if(v > 0 && playtree_iter->file < playtree_iter->num_files)
+ eof = PT_NEXT_SRC;
+ else if(v < 0 && playtree_iter->file > 1)
+ eof = PT_PREV_SRC;
+ }
+ } break;
+ case MP_CMD_SUB_DELAY : {
+ int abs= cmd->args[1].v.i;
+ float v = cmd->args[0].v.f;
+ if(abs)
+ sub_delay = v;
+ else
+ sub_delay += v;
+ osd_show_sub_delay = 9; // show the subdelay in OSD
+ } break;
+ case MP_CMD_OSD : {
+ int v = cmd->args[0].v.i;
+ if(v < 0)
+ osd_level=(osd_level+1)%3;
+ else
+ osd_level= v > 2 ? 2 : v;
+ } break;
+ case MP_CMD_VOLUME : {
+ int v = cmd->args[0].v.i;
+ if(v > 0)
+ mixer_incvolume();
+ else
+ mixer_decvolume();
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_VOLUME;
+ vo_osd_progbar_value=(mixer_getbothvolume()*256.0)/100.0;
+ }
+#endif
+ } break;
+ case MP_CMD_MIXER_USEMASTER : {
+ mixer_usemaster=!mixer_usemaster;
+ } break;
+ case MP_CMD_CONTRAST : {
+ int v = cmd->args[0].v.i, abs = cmd->args[1].v.i;
+ if(abs)
+ v_cont = v > 100 ? 100 : v;
+ else {
+ if ( (v_cont += v) > 100 ) v_cont = 100;
+ }
+ if(v_cont < 0) v_cont = 0;
+
+ if(set_video_colors(sh_video,"Contrast",v_cont)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_CONTRAST;
+ vo_osd_progbar_value=((v_cont)<<8)/100;
+ }
+#endif
+ }
+ } break;
+ case MP_CMD_BRIGHTNESS : {
+ int v = cmd->args[0].v.i, abs = cmd->args[1].v.i;
+ if(abs)
+ v_bright = v > 100 ? 100 : v;
+ else {
+ if ( (v_bright += v) > 100 ) v_cont = 100;
+ }
+ if(v_hw_equ_cap & VEQ_CAP_BRIGHTNESS) {
+ if(v_bright < -100) v_bright = -100;
+ } else {
+ if ( v_bright < 0 ) v_bright = 0;
+ }
+ if(set_video_colors(sh_video,"Brightness",v_bright)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_BRIGHTNESS;
+ vo_osd_progbar_value=((v_bright)<<8)/100;
+ }
+#endif
+ }
+ } break;
+ case MP_CMD_HUE : {
+ int v = cmd->args[0].v.i, abs = cmd->args[1].v.i;
+ if(abs)
+ v_hue = v > 100 ? 100 : v;
+ else {
+ if ( (v_hue += v) > 100 ) v_hue = 100;
+ }
+ if(v_hw_equ_cap & VEQ_CAP_HUE) {
+ if(v_hue < -100) v_hue = -100;
+ } else {
+ if ( v_hue < 0 ) v_hue = 0;
+ }
+ if(set_video_colors(sh_video,"Hue",v_hue)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_HUE;
+ vo_osd_progbar_value=((v_hue)<<8)/100;
+ }
+#endif
+ }
+ } break;
+ case MP_CMD_SATURATION : {
+ int v = cmd->args[0].v.i, abs = cmd->args[1].v.i;
+ if(abs)
+ v_saturation = v > 100 ? 100 : v;
+ else {
+ if ( (v_saturation += v) > 100 ) v_saturation = 100;
+ }
+ if(v_hw_equ_cap & VEQ_CAP_SATURATION) {
+ if(v_saturation < -100) v_saturation = -100;
+ } else {
+ if ( v_saturation < 0 ) v_saturation = 0;
+ }
+ if(set_video_colors(sh_video,"Saturation",v_saturation)){
+#ifdef USE_OSD
+ if(osd_level){
+ osd_visible=sh_video->fps; // 1 sec
+ vo_osd_progbar_type=OSD_SATURATION;
+ vo_osd_progbar_value=((v_saturation)<<8)/100;
+ }
+#endif
+ }
+ } break;
+ case MP_CMD_FRAMEDROPPING : {
+ int v = cmd->args[0].v.i;
+ if(v < 0)
+ frame_dropping = (frame_dropping+1)%3;
+ else
+ frame_dropping = v > 2 ? 2 : v;
+ } break;
+#ifdef USE_TV
+ case MP_CMD_TV_STEP_CHANNEL : {
+ if (tv_param_on == 1) {
+ int v = cmd->args[0].v.i;
+ if(v > 0)
+ tv_step_channel(tv_handler, TV_CHANNEL_HIGHER);
+ else
+ tv_step_channel(tv_handler, TV_CHANNEL_LOWER);
+ }
+ } break;
+ case MP_CMD_TV_STEP_NORM : {
+ if (tv_param_on == 1)
+ tv_step_norm(tv_handler);
+ } break;
+ case MP_CMD_TV_STEP_CHANNEL_LIST : {
+ if (tv_param_on == 1)
+ tv_step_chanlist(tv_handler);
+ } break;
+#endif
+ default :
+ printf("Received unknow cmd %s\n",cmd->name);
+ }
+ mp_cmd_free(cmd);
+ }
+}
+#endif
if (seek_to_sec) {
int a,b; float d;