diff fifo.c @ 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 8b810ed6e543
children 32c3d5e3a682
line wrap: on
line diff
--- 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;
 }