summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authoruau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-08-25 04:28:14 +0000
committeruau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-08-25 04:28:14 +0000
commit95a174a65a04ada12ecda4f34f139a31dfa95540 (patch)
treefbc26f310143717c7b821f7ba87d78924f32332f /input
parent24802b1def3b48375a54e2fe9bbb1d19953286c8 (diff)
downloadmpv-95a174a65a04ada12ecda4f34f139a31dfa95540.tar.bz2
mpv-95a174a65a04ada12ecda4f34f139a31dfa95540.tar.xz
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
Diffstat (limited to 'input')
-rw-r--r--input/input.c27
-rw-r--r--input/input.h4
2 files changed, 29 insertions, 2 deletions
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.