summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authoralbeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-02-23 21:22:55 +0000
committeralbeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-02-23 21:22:55 +0000
commit9ada242c51e0d325d553d3ec875373f1126d7cb1 (patch)
tree1a88924eaf222faf9d4e5506cd827a6c4d520502 /libmpdemux
parent5264cd378017ef8d42a4fe83d371272bdfaacaef (diff)
downloadmpv-9ada242c51e0d325d553d3ec875373f1126d7cb1.tar.bz2
mpv-9ada242c51e0d325d553d3ec875373f1126d7cb1.tar.xz
Make blocking call in libmpdemux interuptable (only with new input,
awnser to quit, pt_next, pt_up_step and alt_src_step) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4826 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/Makefile2
-rw-r--r--libmpdemux/cache2.c9
-rw-r--r--libmpdemux/network.c23
-rw-r--r--libmpdemux/stream.h4
4 files changed, 24 insertions, 14 deletions
diff --git a/libmpdemux/Makefile b/libmpdemux/Makefile
index b6d3b6ea72..c027b9db82 100644
--- a/libmpdemux/Makefile
+++ b/libmpdemux/Makefile
@@ -3,7 +3,7 @@ LIBNAME = libmpdemux.a
include ../config.mak
-SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c aviwrite.c demux_asf.c demux_avi.c demux_mov.c demux_mpg.c demux_viv.c demuxer.c dvdauth.c open.c parse_es.c stream.c tv.c tvi_dummy.c tvi_v4l.c frequencies.c demux_fli.c demux_real.c demux_y4m.c yuv4mpeg.c yuv4mpeg_ratio.c demux_nuv.c demux_film.c demux_roq.c mf.c demux_mf.c demux_audio.c demux_demuxers.c opt-reg.c
+SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c aviwrite.c demux_asf.c demux_avi.c demux_mov.c demux_mpg.c demux_viv.c demuxer.c dvdauth.c open.c parse_es.c stream.c tv.c tvi_dummy.c tvi_v4l.c frequencies.c demux_fli.c demux_real.c demux_y4m.c yuv4mpeg.c yuv4mpeg_ratio.c demux_nuv.c demux_film.c demux_roq.c mf.c demux_mf.c demux_audio.c demux_demuxers.c opt-reg.c mpdemux.c
ifeq ($(STREAMING),yes)
SRCS += asf_streaming.c url.c http.c network.c rtp.c
endif
diff --git a/libmpdemux/cache2.c b/libmpdemux/cache2.c
index 4b6deb0cdc..a925920370 100644
--- a/libmpdemux/cache2.c
+++ b/libmpdemux/cache2.c
@@ -8,7 +8,7 @@
#define READ_USLEEP_TIME 10000
#define FILL_USLEEP_TIME 50000
-#define PREFILL_USLEEP_TIME 200000
+#define PREFILL_SLEEP_TIME 200
#include <stdio.h>
#include <stdlib.h>
@@ -196,7 +196,7 @@ static void exit_sighandler(int x){
exit(0);
}
-void stream_enable_cache(stream_t *stream,int size,int min,int prefill){
+int stream_enable_cache(stream_t *stream,int size,int min,int prefill){
int ss=(stream->type==STREAMTYPE_VCD)?VCD_SECTOR_DATA:STREAM_BUFFER_SIZE;
cache_vars_t* s=cache_init(size,ss);
stream->cache_data=s;
@@ -213,9 +213,10 @@ void stream_enable_cache(stream_t *stream,int size,int min,int prefill){
s->max_filepos-s->read_filepos
);
if(s->eof) break; // file is smaller than prefill size
- usleep(PREFILL_USLEEP_TIME);
+ if(mpdemux_check_interrupt(PREFILL_SLEEP_TIME))
+ return 0;
}
- return; // parent exits
+ return 1; // parent exits
}
// cache thread mainloop:
diff --git a/libmpdemux/network.c b/libmpdemux/network.c
index 91a55cb741..ddd243eef3 100644
--- a/libmpdemux/network.c
+++ b/libmpdemux/network.c
@@ -19,6 +19,7 @@
#include "stream.h"
#include "demuxer.h"
#include "../cfgparser.h"
+#include "mpdemux.h"
#include "network.h"
#include "http.h"
@@ -124,7 +125,7 @@ int
connect2Server(char *host, int port) {
int socket_server_fd;
int err, err_len;
- int ret;
+ int ret,count = 0;
fd_set set;
struct timeval tv;
struct sockaddr_in server_address;
@@ -160,16 +161,24 @@ connect2Server(char *host, int port) {
return -1;
}
}
- tv.tv_sec = 15; // 15 seconds timeout on connection
- tv.tv_usec = 0;
+ tv.tv_sec = 0;
+ tv.tv_usec = 500000;
FD_ZERO( &set );
FD_SET( socket_server_fd, &set );
// When the connection will be made, we will have a writable fd
- ret = select(socket_server_fd+1, NULL, &set, NULL, &tv);
- if( ret<=0 ) {
- if( ret<0 ) perror("select failed");
- else printf("Connection timeout\n");
+ while((ret = select(socket_server_fd+1, NULL, &set, NULL, &tv)) == 0) {
+ if( ret<0 ) perror("select failed");
+ else if(ret > 0) break;
+ else if(count > 15 || mpdemux_check_interrupt(500)) {
+ if(count > 15)
+ printf("Connection timeout\n");
+ else
+ printf("Connection interuppted by user\n");
return -1;
+ }
+ count++;
+ FD_ZERO( &set );
+ FD_SET( socket_server_fd, &set );
}
// Turn back the socket as blocking
diff --git a/libmpdemux/stream.h b/libmpdemux/stream.h
index 0ef3d622cf..2d87336df4 100644
--- a/libmpdemux/stream.h
+++ b/libmpdemux/stream.h
@@ -46,12 +46,12 @@ typedef struct {
} stream_t;
#ifdef USE_STREAM_CACHE
-void stream_enable_cache(stream_t *stream,int size,int min,int prefill);
+int stream_enable_cache(stream_t *stream,int size,int min,int prefill);
#else
// no cache
#define cache_stream_fill_buffer(x) stream_fill_buffer(x)
#define cache_stream_seek_long(x,y) stream_seek_long(x,y)
-#define stream_enable_cache(x,y)
+#define stream_enable_cache(x,y) 1
#endif
int cache_stream_fill_buffer(stream_t *s);