提交 ec6eed4c 编写于 作者: Z Zhang Rui

ijkavformat/async: make capacity optional

上级 25cf5140
......@@ -44,8 +44,6 @@
#include <unistd.h>
#endif
#define BUFFER_CAPACITY (4 * 1024 * 1024)
#define READ_BACK_CAPACITY (4 * 1024 * 1024)
#define SHORT_SEEK_THRESHOLD (256 * 1024)
typedef struct RingBuffer
......@@ -84,16 +82,18 @@ typedef struct Context {
/* options */
int64_t opaque;
int64_t forwards_capacity;
int64_t backwards_capacity;
} Context;
static int ring_init(RingBuffer *ring, unsigned int capacity, int read_back_capacity)
static int ring_init(RingBuffer *ring, int64_t capacity, int64_t read_back_capacity)
{
memset(ring, 0, sizeof(RingBuffer));
ring->fifo = av_fifo_alloc(capacity + read_back_capacity);
ring->fifo = av_fifo_alloc((unsigned int)(capacity + read_back_capacity));
if (!ring->fifo)
return AVERROR(ENOMEM);
ring->read_back_capacity = read_back_capacity;
ring->read_back_capacity = (int)read_back_capacity;
return 0;
}
......@@ -190,7 +190,7 @@ static void call_inject(URLContext *h)
stat.size = sizeof(stat);
stat.buf_forwards = ring_size(&c->ring);
stat.buf_backwards = ring_size_of_read_back(&c->ring);
stat.buf_capacity = BUFFER_CAPACITY + READ_BACK_CAPACITY;
stat.buf_capacity = c->forwards_capacity + c->backwards_capacity;
inject_callback(opaque, IJKAVINJECT_ASYNC_STATISTIC, &stat, sizeof(stat));
}
......@@ -273,7 +273,7 @@ static int async_open(URLContext *h, const char *arg, int flags, AVDictionary **
av_strstart(arg, "async:", &arg);
ret = ring_init(&c->ring, BUFFER_CAPACITY, READ_BACK_CAPACITY);
ret = ring_init(&c->ring, c->forwards_capacity, c->backwards_capacity);
if (ret < 0)
goto fifo_fail;
......@@ -502,6 +502,10 @@ static int64_t async_seek(URLContext *h, int64_t pos, int whence)
static const AVOption options[] = {
{ "ijkinject-opaque", "private data of user, passed with custom callback",
OFFSET(opaque), IJKAV_OPTION_INT64(0, INT64_MIN, INT64_MAX) },
{ "async-forwards-capacity", "max bytes that may be read forward in background",
OFFSET(forwards_capacity), IJKAV_OPTION_INT64(128 * 1024, 128 * 1024, 128 * 1024 * 1024) },
{ "async-backwards-capacity", "max bytes that may be seek backward without seeking in inner protocol",
OFFSET(backwards_capacity), IJKAV_OPTION_INT64(128 * 1024, 128 * 1024, 128 * 1024 * 1024) },
{NULL},
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册