summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stream/cache2.c4
-rw-r--r--stream/stream.c5
2 files changed, 6 insertions, 3 deletions
diff --git a/stream/cache2.c b/stream/cache2.c
index e936e47dca..533781104b 100644
--- a/stream/cache2.c
+++ b/stream/cache2.c
@@ -225,7 +225,7 @@ static int cache_fill(cache_vars_t *s)
//memcpy(&s->buffer[pos],s->stream->buffer,len); // avoid this extra copy!
// ....
len=stream_read(s->stream,&s->buffer[pos],space);
- if(!len) s->eof=1;
+ s->eof= !len;
s->max_filepos+=len;
if(pos+len>=s->buffer_size){
@@ -477,7 +477,6 @@ static void *ThreadProc( void *s ){
int cache_stream_fill_buffer(stream_t *s){
int len;
- if(s->eof){ s->buf_pos=s->buf_len=0; return 0; }
if(!s->cache_pid) return stream_fill_buffer(s);
// cache_stats(s->cache_data);
@@ -488,6 +487,7 @@ int cache_stream_fill_buffer(stream_t *s){
//printf("cache_stream_fill_buffer->read -> %d\n",len);
if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; }
+ s->eof=0;
s->buf_pos=0;
s->buf_len=len;
s->pos+=len;
diff --git a/stream/stream.c b/stream/stream.c
index d4abc69343..cdd9713a20 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -263,7 +263,7 @@ stream_t* open_output_stream(const char* filename, char** options) {
int stream_fill_buffer(stream_t *s){
int len;
- if (/*s->fd == NULL ||*/ s->eof) { return 0; }
+ // we will retry even if we already reached EOF previously.
switch(s->type){
case STREAMTYPE_STREAM:
#ifdef CONFIG_NETWORK
@@ -285,6 +285,9 @@ int stream_fill_buffer(stream_t *s){
len= s->fill_buffer ? s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE) : 0;
}
if(len<=0){ s->eof=1; return 0; }
+ // When reading succeeded we are obviously not at eof.
+ // This e.g. avoids issues with eof getting stuck when lavf seeks in MPEG-TS
+ s->eof=0;
s->buf_pos=0;
s->buf_len=len;
s->pos+=len;