diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1 index ad8652b22f..efff1147ce 100644 --- a/DOCS/man/en/mplayer.1 +++ b/DOCS/man/en/mplayer.1 @@ -818,9 +818,10 @@ Playback will start when the cache has been filled up to of the total. . .TP -.B \-cache-prefill (not yet implemented) -When the cache is emptied MPlayer will pause and restart playback when -the cache prefill threshold set with this option is reached. +.B \-cache-seek-min (not yet implemented) +If seek is to be done and it is within seek-min range, MPlayer will wait +cache to be filled to this position rather than performing an stream seek. +(default:50) . .TP .B \-cdda (CDDA only) diff --git a/TOOLS/netstream/netstream.c b/TOOLS/netstream/netstream.c index 88a65fa194..68de83b26a 100644 --- a/TOOLS/netstream/netstream.c +++ b/TOOLS/netstream/netstream.c @@ -375,7 +375,7 @@ int main(int argc, char** argv) { //---- For libmpdemux -float stream_cache_prefill_percent=5.0; +float stream_cache_seek_min_percent=50.0; float stream_cache_min_percent=20.0; #include diff --git a/cfg-common.h b/cfg-common.h index 4b623c3830..f4b278d8bd 100644 --- a/cfg-common.h +++ b/cfg-common.h @@ -16,7 +16,7 @@ {"cache", &stream_cache_size, CONF_TYPE_INT, CONF_RANGE, 32, 1048576, NULL}, {"nocache", &stream_cache_size, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"cache-min", &stream_cache_min_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL}, - {"cache-prefill", &stream_cache_prefill_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL}, + {"cache-seek-min", &stream_cache_seek_min_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL}, #else {"cache", "MPlayer was compiled without cache2 support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, #endif diff --git a/libmpdemux/cache2.c b/libmpdemux/cache2.c index 686e5a7361..a499c016b8 100644 --- a/libmpdemux/cache2.c +++ b/libmpdemux/cache2.c @@ -42,7 +42,7 @@ typedef struct { int sector_size; // size of a single sector (2048/2324) int back_size; // we should keep back_size amount of old bytes for backward seek int fill_limit; // we should fill buffer only if space>=fill_limit - int prefill; // we should fill min prefill bytes if cache gets empty + int seek_limit; // keep filling cache if distanse is less that seek limit // filler's pointers: int eof; off_t min_filepos; // buffer contain only a part of the file, from min-max pos @@ -122,7 +122,7 @@ int cache_fill(cache_vars_t* s){ mp_msg(MSGT_CACHE,MSGL_DBG2,"Out of boundaries... seeking to 0x%X \n",read); // streaming: drop cache contents only if seeking backward or too much fwd: if(s->stream->type!=STREAMTYPE_STREAM || - readmin_filepos || read>=s->max_filepos+s->buffer_size) + readmin_filepos || read>=s->max_filepos+s->seek_limit) { s->offset= // FIXME!? s->min_filepos=s->max_filepos=read; // drop cache content :( @@ -250,7 +250,7 @@ static void exit_sighandler(int x){ exit(0); } -int stream_enable_cache(stream_t *stream,int size,int min,int prefill){ +int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){ int ss=(stream->type==STREAMTYPE_VCD)?VCD_SECTOR_DATA:STREAM_BUFFER_SIZE; cache_vars_t* s; @@ -264,13 +264,13 @@ int stream_enable_cache(stream_t *stream,int size,int min,int prefill){ if(s == NULL) return 0; stream->cache_data=s; s->stream=stream; // callback - s->prefill=prefill; + s->seek_limit=seek_limit; //make sure that we won't wait from cache_fill //more data than it is alowed to fill - if (s->prefill > s->buffer_size - s->fill_limit ){ - s->prefill = s->buffer_size - s->fill_limit; + if (s->seek_limit > s->buffer_size - s->fill_limit ){ + s->seek_limit = s->buffer_size - s->fill_limit; } if (min > s->buffer_size - s->fill_limit) { min = s->buffer_size - s->fill_limit; diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 5297c0f928..dcf6459260 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -1375,7 +1375,7 @@ int audio_stream_cache = 0; extern int hr_mp3_seek; extern float stream_cache_min_percent; -extern float stream_cache_prefill_percent; +extern float stream_cache_seek_min_percent; demuxer_t* demux_open(stream_t *vs,int file_format,int audio_id,int video_id,int dvdsub_id,char* filename){ stream_t *as = NULL,*ss = NULL; @@ -1392,7 +1392,7 @@ demuxer_t* demux_open(stream_t *vs,int file_format,int audio_id,int video_id,int } if(audio_stream_cache) { if(!stream_enable_cache(as,audio_stream_cache*1024,audio_stream_cache*1024*(stream_cache_min_percent / 100.0), - audio_stream_cache*1024*(stream_cache_prefill_percent / 100.0))) { + audio_stream_cache*1024*(stream_cache_seek_min_percent / 100.0))) { free_stream(as); mp_msg(MSGT_DEMUXER,MSGL_ERR,"Can't enable audio stream cache\n"); return NULL; diff --git a/mencoder.c b/mencoder.c index 9015291b44..8e1f9d9da3 100644 --- a/mencoder.c +++ b/mencoder.c @@ -98,7 +98,7 @@ int stream_cache_size=-1; extern int cache_fill_status; float stream_cache_min_percent=20.0; -float stream_cache_prefill_percent=5.0; +float stream_cache_seek_min_percent=50.0; #else #define cache_fill_status 0 #endif diff --git a/mplayer.c b/mplayer.c index ca8be17f8c..d99a223069 100644 --- a/mplayer.c +++ b/mplayer.c @@ -266,7 +266,7 @@ int forced_subs_only=0; extern int cache_fill_status; float stream_cache_min_percent=20.0; -float stream_cache_prefill_percent=5.0; +float stream_cache_seek_min_percent=50.0; #else #define cache_fill_status 0 #endif @@ -1640,7 +1640,9 @@ goto_enable_cache: #endif if(stream_cache_size>0){ current_module="enable_cache"; - if(!stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024*(stream_cache_min_percent / 100.0),stream_cache_size*1024*(stream_cache_prefill_percent / 100.0))) + if(!stream_enable_cache(stream,stream_cache_size*1024, + stream_cache_size*1024*(stream_cache_min_percent / 100.0), + stream_cache_size*1024*(stream_cache_seek_min_percent / 100.0))) if((eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file; }