# HG changeset patch # User reimar # Date 1301003794 0 # Node ID 55a5a5e334dca90f9afa2cf99353f8506a9bf8c1 # Parent aab47f5fdb9b1e4e4655099cc0e8a3384c12eab5 Change fifo to not waste one entry needlessly. diff -r aab47f5fdb9b -r 55a5a5e334dc mp_fifo.c --- a/mp_fifo.c Thu Mar 24 20:25:45 2011 +0000 +++ b/mp_fifo.c Thu Mar 24 21:56:34 2011 +0000 @@ -24,12 +24,11 @@ int key_fifo_size = 7; static int *key_fifo_data = NULL; -static int key_fifo_read=0; -static int key_fifo_write=0; +static unsigned key_fifo_read=0; +static unsigned key_fifo_write=0; static void mplayer_put_key_internal(int code){ - int fifo_free = key_fifo_read - key_fifo_write - 1; - if (fifo_free < 0) fifo_free += key_fifo_size; + int fifo_free = key_fifo_read + key_fifo_size - key_fifo_write; // printf("mplayer_put_key(%d)\n",code); if (key_fifo_data == NULL) key_fifo_data = malloc(key_fifo_size * sizeof(int)); @@ -37,8 +36,8 @@ // reserve some space for key release events to avoid stuck keys if((code & MP_KEY_DOWN) && fifo_free < (key_fifo_size >> 1)) return; - key_fifo_data[key_fifo_write]=code; - key_fifo_write=(key_fifo_write+1)%key_fifo_size; + key_fifo_data[key_fifo_write % key_fifo_size]=code; + key_fifo_write++; } int mplayer_get_key(int fd){ @@ -47,8 +46,8 @@ 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=key_fifo_data[key_fifo_read % key_fifo_size]; + key_fifo_read++; // printf("mplayer_get_key => %d\n",key); return key; }