From 95a174a65a04ada12ecda4f34f139a31dfa95540 Mon Sep 17 00:00:00 2001 From: uau Date: Sat, 25 Aug 2007 04:28:14 +0000 Subject: Add separate event input type for terminal+vo Add an input/input.c fd type whose read function takes no arguments and returns no value. If such a function reads key or command events it'll add them to the queues itself. Use this type for terminal input which was special-cased before. The event function for X11-based VOs will use the same type later. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24152 b3059339-0415-0410-9bf9-f77b7e298cf2 --- input/input.c | 27 +++++++++++++++++++++++++-- input/input.h | 4 ++++ 2 files changed, 29 insertions(+), 2 deletions(-) (limited to 'input') diff --git a/input/input.c b/input/input.c index ff51e1b70c..f37da37088 100644 --- a/input/input.c +++ b/input/input.c @@ -500,6 +500,7 @@ typedef struct mp_input_fd { int dead : 1; int got_cmd : 1; int no_select : 1; + int no_readfunc_retval : 1; // These fields are for the cmd fds. char* buffer; int pos,size; @@ -665,6 +666,28 @@ mp_input_add_key_fd(int fd, int select, mp_key_func_t read_func, mp_close_func_t return 1; } +int +mp_input_add_event_fd(int fd, void (*read_func)(void)) +{ + if(num_key_fd == MP_MAX_KEY_FD) { + mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds,fd); + return 0; + } + + memset(&key_fds[num_key_fd],0,sizeof(mp_input_fd_t)); + key_fds[num_key_fd].fd = fd; + key_fds[num_key_fd].read_func = read_func; + key_fds[num_key_fd].close_func = NULL; + key_fds[num_key_fd].no_readfunc_retval = 1; + num_key_fd++; + + return 1; +} + +void mp_input_rm_event_fd(int fd) +{ + mp_input_rm_key_fd(fd); +} mp_cmd_t* @@ -1148,8 +1171,8 @@ static mp_cmd_t *read_events(int time, int paused) #endif int code; - if (key_fds[i].fd == 0) { // getch2 handler special-cased for now - getch2(); + if (key_fds[i].no_readfunc_retval) { // getch2 handler special-cased for now + ((void (*)(void))key_fds[i].read_func)(); code = mplayer_get_key(0); if (code < 0) code = MP_INPUT_NOTHING; diff --git a/input/input.h b/input/input.h index 7e5b3e83d2..469ad48713 100644 --- a/input/input.h +++ b/input/input.h @@ -230,6 +230,10 @@ mp_input_add_key_fd(int fd, int select, mp_key_func_t read_func, mp_close_func_t void mp_input_rm_key_fd(int fd); +int mp_input_add_event_fd(int fd, void (*read_func)(void)); + +void mp_input_rm_event_fd(int fd); + // This function can be used to put a command in the system again. It's used by libmpdemux // when it performs a blocking operation to resend the command it received to the main // loop. -- cgit v1.2.3