summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
Diffstat (limited to 'stream')
-rw-r--r--stream/cache2.c6
-rw-r--r--stream/stream.h1
-rw-r--r--stream/stream_file.c1
3 files changed, 7 insertions, 1 deletions
diff --git a/stream/cache2.c b/stream/cache2.c
index d7a8005917..2785a0c60f 100644
--- a/stream/cache2.c
+++ b/stream/cache2.c
@@ -39,6 +39,7 @@
#include <unistd.h>
#include <errno.h>
+#include "libavutil/avutil.h"
#include "osdep/shmem.h"
#include "osdep/timer.h"
#if defined(__MINGW32__)
@@ -168,6 +169,7 @@ static int cache_fill(cache_vars_t *s)
{
int back,back2,newb,space,len,pos;
off_t read=s->read_filepos;
+ int read_chunk;
if(read<s->min_filepos || read>s->max_filepos){
// seek...
@@ -213,7 +215,9 @@ static int cache_fill(cache_vars_t *s)
if(space>s->buffer_size-pos) space=s->buffer_size-pos;
// limit one-time block size
- if(space>4*s->sector_size) space=4*s->sector_size;
+ read_chunk = s->stream->read_chunk;
+ if (!read_chunk) read_chunk = 4*s->sector_size;
+ space = FFMIN(space, read_chunk);
#if 1
// back+newb+space <= buffer_size
diff --git a/stream/stream.h b/stream/stream.h
index 24a140d255..021296b247 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -155,6 +155,7 @@ typedef struct stream {
int type; // see STREAMTYPE_*
int flags;
int sector_size; // sector size (seek will be aligned on this size if non 0)
+ int read_chunk; // maximum amount of data to read at once to limit latency (0 for default)
unsigned int buf_pos,buf_len;
off_t pos,start_pos,end_pos;
int eof;
diff --git a/stream/stream_file.c b/stream/stream_file.c
index f506a0f644..22be803fba 100644
--- a/stream/stream_file.c
+++ b/stream/stream_file.c
@@ -187,6 +187,7 @@ static int open_f(stream_t *stream,int mode, void* opts, int* file_format) {
stream->fill_buffer = fill_buffer;
stream->write_buffer = write_buffer;
stream->control = control;
+ stream->read_chunk = 64*1024;
m_struct_free(&stream_opts,opts);
return STREAM_OK;