diff options
author | albeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-23 21:22:55 +0000 |
---|---|---|
committer | albeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-23 21:22:55 +0000 |
commit | 9ada242c51e0d325d553d3ec875373f1126d7cb1 (patch) | |
tree | 1a88924eaf222faf9d4e5506cd827a6c4d520502 /libmpdemux | |
parent | 5264cd378017ef8d42a4fe83d371272bdfaacaef (diff) | |
download | mpv-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/Makefile | 2 | ||||
-rw-r--r-- | libmpdemux/cache2.c | 9 | ||||
-rw-r--r-- | libmpdemux/network.c | 23 | ||||
-rw-r--r-- | libmpdemux/stream.h | 4 |
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); |