Mercurial > mplayer.hg
changeset 24132:9f234010c4be
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.
author | uau |
---|---|
date | Sat, 25 Aug 2007 04:28:14 +0000 |
parents | 30028bbcb9e8 |
children | d43cda21236d |
files | input/input.c input/input.h mplayer.c |
diffstat | 3 files changed, 30 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/input/input.c Sat Aug 25 04:28:11 2007 +0000 +++ b/input/input.c Sat Aug 25 04:28:14 2007 +0000 @@ -500,6 +500,7 @@ 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 @@ 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 @@ #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;
--- a/input/input.h Sat Aug 25 04:28:11 2007 +0000 +++ b/input/input.h Sat Aug 25 04:28:14 2007 +0000 @@ -230,6 +230,10 @@ 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.
--- a/mplayer.c Sat Aug 25 04:28:11 2007 +0000 +++ b/mplayer.c Sat Aug 25 04:28:14 2007 +0000 @@ -2605,7 +2605,7 @@ mp_input_add_cmd_fd(0,0,mp_input_win32_slave_cmd_func,NULL); #endif else if(!noconsolecontrols) - mp_input_add_key_fd(0,1,NULL,NULL); + mp_input_add_event_fd(0, getch2); inited_flags|=INITED_INPUT; current_module = NULL;