Mercurial > mplayer.hg
comparison stream/cache2.c @ 31169:ac84149bbdaf
Retry reading even if we hit eof before.
This allows playing growing files even with a large cache.
author | reimar |
---|---|
date | Wed, 26 May 2010 18:23:43 +0000 |
parents | 09e3134b649d |
children | e735964b5d56 |
comparison
equal
deleted
inserted
replaced
31168:a0e901aedb04 | 31169:ac84149bbdaf |
---|---|
223 //printf("Buffer fill: %d bytes of %d\n",space,s->buffer_size); | 223 //printf("Buffer fill: %d bytes of %d\n",space,s->buffer_size); |
224 //len=stream_fill_buffer(s->stream); | 224 //len=stream_fill_buffer(s->stream); |
225 //memcpy(&s->buffer[pos],s->stream->buffer,len); // avoid this extra copy! | 225 //memcpy(&s->buffer[pos],s->stream->buffer,len); // avoid this extra copy! |
226 // .... | 226 // .... |
227 len=stream_read(s->stream,&s->buffer[pos],space); | 227 len=stream_read(s->stream,&s->buffer[pos],space); |
228 if(!len) s->eof=1; | 228 s->eof= !len; |
229 | 229 |
230 s->max_filepos+=len; | 230 s->max_filepos+=len; |
231 if(pos+len>=s->buffer_size){ | 231 if(pos+len>=s->buffer_size){ |
232 // wrap... | 232 // wrap... |
233 s->offset+=s->buffer_size; | 233 s->offset+=s->buffer_size; |
475 #endif | 475 #endif |
476 #endif | 476 #endif |
477 | 477 |
478 int cache_stream_fill_buffer(stream_t *s){ | 478 int cache_stream_fill_buffer(stream_t *s){ |
479 int len; | 479 int len; |
480 if(s->eof){ s->buf_pos=s->buf_len=0; return 0; } | |
481 if(!s->cache_pid) return stream_fill_buffer(s); | 480 if(!s->cache_pid) return stream_fill_buffer(s); |
482 | 481 |
483 // cache_stats(s->cache_data); | 482 // cache_stats(s->cache_data); |
484 | 483 |
485 if(s->pos!=((cache_vars_t*)s->cache_data)->read_filepos) mp_msg(MSGT_CACHE,MSGL_ERR,"!!! read_filepos differs!!! report this bug...\n"); | 484 if(s->pos!=((cache_vars_t*)s->cache_data)->read_filepos) mp_msg(MSGT_CACHE,MSGL_ERR,"!!! read_filepos differs!!! report this bug...\n"); |
486 | 485 |
487 len=cache_read(s->cache_data,s->buffer, ((cache_vars_t*)s->cache_data)->sector_size); | 486 len=cache_read(s->cache_data,s->buffer, ((cache_vars_t*)s->cache_data)->sector_size); |
488 //printf("cache_stream_fill_buffer->read -> %d\n",len); | 487 //printf("cache_stream_fill_buffer->read -> %d\n",len); |
489 | 488 |
490 if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; } | 489 if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; } |
490 s->eof=0; | |
491 s->buf_pos=0; | 491 s->buf_pos=0; |
492 s->buf_len=len; | 492 s->buf_len=len; |
493 s->pos+=len; | 493 s->pos+=len; |
494 // printf("[%d]",len);fflush(stdout); | 494 // printf("[%d]",len);fflush(stdout); |
495 return len; | 495 return len; |