Mercurial > mplayer.hg
changeset 14077:3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
author | reimar |
---|---|
date | Wed, 01 Dec 2004 12:22:39 +0000 |
parents | 8807085a6edf |
children | c4033dcb986f |
files | DOCS/man/en/mplayer.1 cfg-mplayer.h fifo.c mplayer.c |
diffstat | 4 files changed, 23 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/man/en/mplayer.1 Wed Dec 01 12:07:14 2004 +0000 +++ b/DOCS/man/en/mplayer.1 Wed Dec 01 12:22:39 2004 +0000 @@ -566,6 +566,17 @@ .PD 1 . .TP +.B \-key-fifo-size <2\-65000> +Specify the size of the FIFO that buffers key events (default: 10). +A FIFO of size n can buffer (n - 1) events. +If it is too small some events may be lost (leading to e.g. "stuck mouse +button"). +If it is too big, MPlayer may seem to hang while it processes the buffered +events. +To get the same behaviour as before this option was introduced, set it to +2 for linux or 1024 for windows. +. +.TP .B \-lircconf <filename> (LIRC only) Specifies a configuration file for LIRC (default: ~/\:.lircrc). .
--- a/cfg-mplayer.h Wed Dec 01 12:07:14 2004 +0000 +++ b/cfg-mplayer.h Wed Dec 01 12:22:39 2004 +0000 @@ -405,6 +405,7 @@ {"slave", &slave_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL}, {"use-stdin", "-use-stdin has been renamed to -noconsolecontrols, use that instead.", CONF_TYPE_PRINT, 0, 0, 0, NULL}, + {"key-fifo-size", &key_fifo_size, CONF_TYPE_INT, CONF_RANGE, 2, 65000, NULL}, {"noconsolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"consolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 0, NULL},
--- a/fifo.c Wed Dec 01 12:07:14 2004 +0000 +++ b/fifo.c Wed Dec 01 12:22:39 2004 +0000 @@ -1,5 +1,5 @@ -#ifndef HAVE_NO_POSIX_SELECT +#if 0 // keyboard: static int keyb_fifo_put=-1; @@ -34,24 +34,28 @@ #else -#define KEY_FIFO_SIZE 1024 -static int key_fifo_data[KEY_FIFO_SIZE]; +int key_fifo_size = 10; +static int *key_fifo_data = NULL; static int key_fifo_read=0; static int key_fifo_write=0; void mplayer_put_key(int code){ // printf("mplayer_put_key(%d)\n",code); - if(((key_fifo_write+1)%KEY_FIFO_SIZE)==key_fifo_read) return; // FIFO FULL!! + if (key_fifo_data == NULL) + key_fifo_data = malloc(key_fifo_size * sizeof(int)); + if(((key_fifo_write+1)%key_fifo_size)==key_fifo_read) return; // FIFO FULL!! key_fifo_data[key_fifo_write]=code; - key_fifo_write=(key_fifo_write+1)%KEY_FIFO_SIZE; + key_fifo_write=(key_fifo_write+1)%key_fifo_size; } int mplayer_get_key(int fd){ int key; // printf("mplayer_get_key(%d)\n",fd); + if (key_fifo_data == NULL) + return MP_INPUT_NOTHING; if(key_fifo_write==key_fifo_read) return MP_INPUT_NOTHING; key=key_fifo_data[key_fifo_read]; - key_fifo_read=(key_fifo_read+1)%KEY_FIFO_SIZE; + key_fifo_read=(key_fifo_read+1)%key_fifo_size; // printf("mplayer_get_key => %d\n",key); return key; }