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;