Commit 09891c53 authored by Marton Balint's avatar Marton Balint

avformat/aviobuf: add support for specifying minimum packet size and marking flush points

Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent c14fa7a3
...@@ -15,6 +15,9 @@ libavutil: 2015-08-28 ...@@ -15,6 +15,9 @@ libavutil: 2015-08-28
API changes, most recent first: API changes, most recent first:
2017-06-24 - xxxxxxx - lavf 57.75.100 - avio.h
Add AVIO_DATA_MARKER_FLUSH_POINT to signal preferred flush points to aviobuf.
2017-06-14 - xxxxxxx - lavu 55.66.100 - hwcontext.h 2017-06-14 - xxxxxxx - lavu 55.66.100 - hwcontext.h
av_hwframe_ctx_create_derived() now takes some AV_HWFRAME_MAP_* combination av_hwframe_ctx_create_derived() now takes some AV_HWFRAME_MAP_* combination
as its flags argument (which was previously unused). as its flags argument (which was previously unused).
......
...@@ -137,7 +137,13 @@ enum AVIODataMarkerType { ...@@ -137,7 +137,13 @@ enum AVIODataMarkerType {
* Trailer data, which doesn't contain actual content, but only for * Trailer data, which doesn't contain actual content, but only for
* finalizing the output file. * finalizing the output file.
*/ */
AVIO_DATA_MARKER_TRAILER AVIO_DATA_MARKER_TRAILER,
/**
* A point in the output bytestream where the underlying AVIOContext might
* flush the buffer depending on latency or buffering requirements. Typically
* means the end of a packet.
*/
AVIO_DATA_MARKER_FLUSH_POINT,
}; };
/** /**
...@@ -339,6 +345,11 @@ typedef struct AVIOContext { ...@@ -339,6 +345,11 @@ typedef struct AVIOContext {
* used keeping track of already written data for a later flush. * used keeping track of already written data for a later flush.
*/ */
unsigned char *buf_ptr_max; unsigned char *buf_ptr_max;
/**
* Try to buffer at least this amount of data before flushing it
*/
int min_packet_size;
} AVIOContext; } AVIOContext;
/** /**
......
...@@ -104,6 +104,7 @@ int ffio_init_context(AVIOContext *s, ...@@ -104,6 +104,7 @@ int ffio_init_context(AVIOContext *s,
s->eof_reached = 0; s->eof_reached = 0;
s->error = 0; s->error = 0;
s->seekable = seek ? AVIO_SEEKABLE_NORMAL : 0; s->seekable = seek ? AVIO_SEEKABLE_NORMAL : 0;
s->min_packet_size = 0;
s->max_packet_size = 0; s->max_packet_size = 0;
s->update_checksum = NULL; s->update_checksum = NULL;
s->short_seek_threshold = SHORT_SEEK_THRESHOLD; s->short_seek_threshold = SHORT_SEEK_THRESHOLD;
...@@ -489,6 +490,11 @@ void avio_wb24(AVIOContext *s, unsigned int val) ...@@ -489,6 +490,11 @@ void avio_wb24(AVIOContext *s, unsigned int val)
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type) void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type)
{ {
if (type == AVIO_DATA_MARKER_FLUSH_POINT) {
if (s->buf_ptr - s->buffer >= s->min_packet_size)
avio_flush(s);
return;
}
if (!s->write_data_type) if (!s->write_data_type)
return; return;
// If ignoring boundary points, just treat it as unknown // If ignoring boundary points, just treat it as unknown
...@@ -941,6 +947,7 @@ int ffio_fdopen(AVIOContext **s, URLContext *h) ...@@ -941,6 +947,7 @@ int ffio_fdopen(AVIOContext **s, URLContext *h)
(*s)->seekable = h->is_streamed ? 0 : AVIO_SEEKABLE_NORMAL; (*s)->seekable = h->is_streamed ? 0 : AVIO_SEEKABLE_NORMAL;
(*s)->max_packet_size = max_packet_size; (*s)->max_packet_size = max_packet_size;
(*s)->min_packet_size = h->min_packet_size;
if(h->prot) { if(h->prot) {
(*s)->read_pause = io_read_pause; (*s)->read_pause = io_read_pause;
(*s)->read_seek = io_read_seek; (*s)->read_seek = io_read_seek;
......
...@@ -48,6 +48,7 @@ typedef struct URLContext { ...@@ -48,6 +48,7 @@ typedef struct URLContext {
int64_t rw_timeout; /**< maximum time to wait for (network) read/write operation completion, in mcs */ int64_t rw_timeout; /**< maximum time to wait for (network) read/write operation completion, in mcs */
const char *protocol_whitelist; const char *protocol_whitelist;
const char *protocol_blacklist; const char *protocol_blacklist;
int min_packet_size; /**< if non zero, the stream is packetized with this min packet size */
} URLContext; } URLContext;
typedef struct URLProtocol { typedef struct URLProtocol {
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here // Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 57 #define LIBAVFORMAT_VERSION_MAJOR 57
#define LIBAVFORMAT_VERSION_MINOR 74 #define LIBAVFORMAT_VERSION_MINOR 75
#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment