Mercurial > mplayer.hg
view fifo.c @ 15205:19243f85e164
nico partially fixed the bug i reported; here's the rest of the fix.
basically demux_audio was mixing data in its header buffer in a bogus
manner, whereby it could sometimes "make up" valid mpeg headers where
no such header actually occurred in the file. it should be correct now.
btw these changes also fix the bug where mplayer reports huge initial
cpu usage for sound when playing mp3 files.
author | rfelker |
---|---|
date | Sun, 17 Apr 2005 17:17:52 +0000 |
parents | 3d3f3cc8494a |
children | 32c3d5e3a682 |
line wrap: on
line source
#if 0 // keyboard: static int keyb_fifo_put=-1; static int keyb_fifo_get=-1; static void set_nonblock_flag(int fd) { int oldflags; oldflags = fcntl(fd, F_GETFL, 0); if (oldflags != -1) { if (fcntl(keyb_fifo_put, F_SETFL, oldflags | O_NONBLOCK) != -1) { return; } } mp_msg(MSGT_INPUT,MSGL_ERR,"Cannot set nonblocking mode for fd %d!\n", fd); } static void make_pipe(int* pr,int* pw){ int temp[2]; if(pipe(temp)!=0) mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CannotMakePipe); *pr=temp[0]; *pw=temp[1]; set_nonblock_flag(temp[1]); } void mplayer_put_key(int code){ if( write(keyb_fifo_put,&code,4) != 4 ){ mp_msg(MSGT_INPUT,MSGL_ERR,"*** key event dropped (FIFO is full) ***\n"); } } #else 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_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; } 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; // printf("mplayer_get_key => %d\n",key); return key; } #endif