Mercurial > mplayer.hg
annotate fifo.c @ 19170:7e689bb31c07
Add simple edit list support to mov demuxer, it supports delay of audio and video tracks at the beginning of the file. E.g. video starts at 0.0s audio at 4.0s. It uses mplayers a/v-delay to achieve sync so please use with -framedrop for fastest sync. More Details in my mail to dev-eng from 2006-07-22.
author | atmos4 |
---|---|
date | Sun, 23 Jul 2006 22:34:02 +0000 |
parents | 3d3f3cc8494a |
children | 32c3d5e3a682 |
rev | line source |
---|---|
9831 | 1 |
14077
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
2 #if 0 |
113 | 3 |
4 // keyboard: | |
5 static int keyb_fifo_put=-1; | |
6 static int keyb_fifo_get=-1; | |
7 | |
13872
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
8 static void set_nonblock_flag(int fd) { |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
9 int oldflags; |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
10 |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
11 oldflags = fcntl(fd, F_GETFL, 0); |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
12 if (oldflags != -1) { |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
13 if (fcntl(keyb_fifo_put, F_SETFL, oldflags | O_NONBLOCK) != -1) { |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
14 return; |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
15 } |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
16 } |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
17 mp_msg(MSGT_INPUT,MSGL_ERR,"Cannot set nonblocking mode for fd %d!\n", fd); |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
18 } |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
19 |
113 | 20 static void make_pipe(int* pr,int* pw){ |
21 int temp[2]; | |
13699
11b249ef87b0
printf --> mp_msg by the Wanderer <inverseparadox at comcast dot net>
diego
parents:
9831
diff
changeset
|
22 if(pipe(temp)!=0) mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CannotMakePipe); |
113 | 23 *pr=temp[0]; |
24 *pw=temp[1]; | |
13872
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
25 set_nonblock_flag(temp[1]); |
113 | 26 } |
27 | |
28 void mplayer_put_key(int code){ | |
29 | |
13872
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
30 if( write(keyb_fifo_put,&code,4) != 4 ){ |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
31 mp_msg(MSGT_INPUT,MSGL_ERR,"*** key event dropped (FIFO is full) ***\n"); |
8b810ed6e543
fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe.
iive
parents:
13699
diff
changeset
|
32 } |
113 | 33 } |
9831 | 34 |
35 #else | |
36 | |
14077
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
37 int key_fifo_size = 10; |
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
38 static int *key_fifo_data = NULL; |
9831 | 39 static int key_fifo_read=0; |
40 static int key_fifo_write=0; | |
41 | |
42 void mplayer_put_key(int code){ | |
43 // printf("mplayer_put_key(%d)\n",code); | |
14077
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
44 if (key_fifo_data == NULL) |
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
45 key_fifo_data = malloc(key_fifo_size * sizeof(int)); |
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
46 if(((key_fifo_write+1)%key_fifo_size)==key_fifo_read) return; // FIFO FULL!! |
9831 | 47 key_fifo_data[key_fifo_write]=code; |
14077
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
48 key_fifo_write=(key_fifo_write+1)%key_fifo_size; |
9831 | 49 } |
50 | |
51 int mplayer_get_key(int fd){ | |
52 int key; | |
53 // printf("mplayer_get_key(%d)\n",fd); | |
14077
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
54 if (key_fifo_data == NULL) |
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
55 return MP_INPUT_NOTHING; |
9831 | 56 if(key_fifo_write==key_fifo_read) return MP_INPUT_NOTHING; |
57 key=key_fifo_data[key_fifo_read]; | |
14077
3d3f3cc8494a
use a configurable-size ringbuffer instead of a pipe for buffering key events.
reimar
parents:
13872
diff
changeset
|
58 key_fifo_read=(key_fifo_read+1)%key_fifo_size; |
9831 | 59 // printf("mplayer_get_key => %d\n",key); |
60 return key; | |
61 } | |
62 | |
63 #endif | |
64 |