summaryrefslogtreecommitdiff
blob: b12ffdb403b33222e6a11024723606aaa6603966 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
diff -Naur MPlayer-1.0pre4.orig/cfg-common.h MPlayer-1.0pre4/cfg-common.h
--- MPlayer-1.0pre4.orig/cfg-common.h	2004-04-26 01:53:41.000000000 -0700
+++ MPlayer-1.0pre4/cfg-common.h	2004-07-03 03:32:15.000000000 -0700
@@ -10,8 +10,10 @@
 // ------------------------- stream options --------------------
 
 #ifdef USE_STREAM_CACHE
-	{"cache", &stream_cache_size, CONF_TYPE_INT, CONF_RANGE, 4, 65536, NULL},
+	{"cache", &stream_cache_size, CONF_TYPE_INT, CONF_RANGE, 32, 262144, 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},
 #else
 	{"cache", "MPlayer was compiled WITHOUT cache2 support\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
 #endif
diff -Naur MPlayer-1.0pre4.orig/etc/example.conf MPlayer-1.0pre4/etc/example.conf
--- MPlayer-1.0pre4.orig/etc/example.conf	2004-01-13 01:55:40.000000000 -0800
+++ MPlayer-1.0pre4/etc/example.conf	2004-07-03 03:32:15.000000000 -0700
@@ -116,6 +116,8 @@
 			# etc)
 
 cache		= 8192	# use 8Mb input cache by default
+cache-min	= 20.0  # Prefill 20% of the cache before initially playing
+cache-prefill	= 5.0   # Prefill 5% of the cache before restarting playback if it empties
 
 # slang		= en	# DVD : display english subtitles if available
 # alang		= en	# DVD : play english audio tracks if available
diff -Naur MPlayer-1.0pre4.orig/libmpdemux/cache2.c MPlayer-1.0pre4/libmpdemux/cache2.c
--- MPlayer-1.0pre4.orig/libmpdemux/cache2.c	2003-06-09 05:15:45.000000000 -0700
+++ MPlayer-1.0pre4/libmpdemux/cache2.c	2004-07-05 14:49:03.441387677 -0700
@@ -33,6 +33,8 @@
 int stream_fill_buffer(stream_t *s);
 int stream_seek_long(stream_t *s,off_t pos);
 
+extern float stream_cache_min_percent;
+extern float stream_cache_prefill_percent;
 extern int mp_input_check_interrupt(int time);
 
 typedef struct {
@@ -207,7 +209,7 @@
 #endif
   s->fill_limit=8*sector;
   s->back_size=size/2;
-  s->prefill=size/20; // default: 5%
+  s->prefill=size * stream_cache_prefill_percent / 100.0;
   return s;
 }
 
@@ -265,7 +267,26 @@
     // wait until cache is filled at least prefill_init %
     mp_msg(MSGT_CACHE,MSGL_V,"CACHE_PRE_INIT: %d [%d] %d  pre:%d  eof:%d  \n",
 	s->min_filepos,s->read_filepos,s->max_filepos,min,s->eof);
-    while(s->read_filepos<s->min_filepos || s->max_filepos-s->read_filepos<min){
+
+    // The buffer is determined to be full in cache_fill() when this condition is true:
+    // s->buffer_size - (s->max_filepos - s->read_filepos) < s->fill_limit
+    // So we need to make sure that min does not go over s->buffer_size - s->fill_limit
+    // ie this needs to be always be true:
+    //     s->buffer_size - (data_in_buffer) >= s->fill_limit
+    // ==> data_in_buffer <= s->buffer_size - s->fill_limit
+    //
+    // So we need to make sure that our min is safe with this condition or else we
+    // will wait forever for cache_fill() to get to min.
+    if (min > s->buffer_size - s->fill_limit) {
+        min = s->buffer_size - s->fill_limit;
+    }
+
+    // Keep waiting for the buffer to fill while:
+    // We still want to read more: (s->max_filepos - s->read_filepos < min) || (s->read_filepos < s->min_filepos)
+    // There is data to read in the file: (!s->eof)
+    while( (s->max_filepos - s->read_filepos < min) || 
+           (s->read_filepos < s->min_filepos)) {
+
 	mp_msg(MSGT_CACHE,MSGL_STATUS,"\rCache fill: %5.2f%% (%d bytes)    ",
 	    100.0*(float)(s->max_filepos-s->read_filepos)/(float)(s->buffer_size),
 	    s->max_filepos-s->read_filepos
diff -Naur MPlayer-1.0pre4.orig/libmpdemux/demuxer.c MPlayer-1.0pre4/libmpdemux/demuxer.c
--- MPlayer-1.0pre4.orig/libmpdemux/demuxer.c	2004-04-17 09:46:40.000000000 -0700
+++ MPlayer-1.0pre4/libmpdemux/demuxer.c	2004-07-03 03:32:15.000000000 -0700
@@ -1374,6 +1374,9 @@
 
 extern int hr_mp3_seek;
 
+extern float stream_cache_min_percent;
+extern float stream_cache_prefill_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;
   demuxer_t *vd,*ad = NULL,*sd = NULL;
@@ -1386,8 +1389,8 @@
       return NULL;
     }
     if(audio_stream_cache) {
-      if(!stream_enable_cache(as,audio_stream_cache*1024,audio_stream_cache*1024/5,
-			      audio_stream_cache*1024/20)) {
+      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))) {
 	free_stream(as);
 	mp_msg(MSGT_DEMUXER,MSGL_ERR,"Can't enable audio stream cache\n");
 	return NULL;
diff -Naur MPlayer-1.0pre4.orig/mencoder.c MPlayer-1.0pre4/mencoder.c
--- MPlayer-1.0pre4.orig/mencoder.c	2004-04-17 09:46:40.000000000 -0700
+++ MPlayer-1.0pre4/mencoder.c	2004-07-03 03:32:15.000000000 -0700
@@ -100,6 +100,9 @@
 int stream_cache_size=-1;
 #ifdef USE_STREAM_CACHE
 extern int cache_fill_status;
+
+float stream_cache_min_percent=20.0;
+float stream_cache_prefill_percent=5.0;
 #else
 #define cache_fill_status 0
 #endif
diff -Naur MPlayer-1.0pre4.orig/mplayer.c MPlayer-1.0pre4/mplayer.c
--- MPlayer-1.0pre4.orig/mplayer.c	2004-04-26 14:15:13.000000000 -0700
+++ MPlayer-1.0pre4/mplayer.c	2004-07-03 03:32:15.000000000 -0700
@@ -249,6 +249,9 @@
        int stream_cache_size=-1;
 #ifdef USE_STREAM_CACHE
 extern int cache_fill_status;
+
+float stream_cache_min_percent=20.0;
+float stream_cache_prefill_percent=5.0;
 #else
 #define cache_fill_status 0
 #endif
@@ -1368,7 +1371,7 @@
 #endif
 if(stream_cache_size>0){
   current_module="enable_cache";
-  if(!stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024/5,stream_cache_size*1024/20))
+  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((eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file;
 }