From 9554a844e9daef9a702004957f0d74aabacd8403 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 20 Feb 2010 18:53:07 +0000 Subject: Do not discard stream buffer on eof, instead reuse it to slightly improve format autodetection with -nocache and non-seekable streams. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30668 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/stream.c | 8 ++++---- stream/stream.h | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'stream') diff --git a/stream/stream.c b/stream/stream.c index 203e2ed291..bcd1f907c3 100644 --- a/stream/stream.c +++ b/stream/stream.c @@ -264,7 +264,7 @@ stream_t* open_output_stream(char* filename,char** options) { int stream_fill_buffer(stream_t *s){ int len; - if (/*s->fd == NULL ||*/ s->eof) { s->buf_pos = s->buf_len = 0; return 0; } + if (/*s->fd == NULL ||*/ s->eof) { return 0; } switch(s->type){ case STREAMTYPE_STREAM: #ifdef CONFIG_NETWORK @@ -285,7 +285,7 @@ int stream_fill_buffer(stream_t *s){ default: len= s->fill_buffer ? s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE) : 0; } - if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; } + if(len<=0){ s->eof=1; return 0; } s->buf_pos=0; s->buf_len=len; s->pos+=len; @@ -392,8 +392,8 @@ while(stream_fill_buffer(s) > 0 && pos >= 0) { void stream_reset(stream_t *s){ if(s->eof){ - s->pos=0; //ftell(f); -// s->buf_pos=s->buf_len=0; + s->pos=0; + s->buf_pos=s->buf_len=0; s->eof=0; } if(s->control) s->control(s,STREAM_CTRL_RESET,NULL); diff --git a/stream/stream.h b/stream/stream.h index a995b8119f..e281a266f3 100644 --- a/stream/stream.h +++ b/stream/stream.h @@ -282,6 +282,8 @@ inline static int stream_seek(stream_t *s,off_t pos){ mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%qX\n",(long long)pos); + if(s->eof) + return 0; if(pospos){ off_t x=pos-(s->pos-s->buf_len); if(x>=0){ -- cgit v1.2.3