Message ID | 20170618220254.21682-2-cus@passwd.hu |
---|---|
State | Superseded |
Headers | show |
On Mon, Jun 19, 2017 at 12:02:52AM +0200, Marton Balint wrote: > Signed-off-by: Marton Balint <cus@passwd.hu> > --- > libavformat/avio.h | 13 ++++++++++++- > libavformat/aviobuf.c | 7 +++++++ > libavformat/url.h | 1 + > libavformat/version.h | 2 +- > 4 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/libavformat/avio.h b/libavformat/avio.h > index 844a5723d3..f14b003ba5 100644 > --- a/libavformat/avio.h > +++ b/libavformat/avio.h > @@ -137,7 +137,13 @@ enum AVIODataMarkerType { > * Trailer data, which doesn't contain actual content, but only for > * 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, > }; needs APIChanges entry i think [...] > diff --git a/libavformat/url.h b/libavformat/url.h > index 910f1e00b3..df90333059 100644 > --- a/libavformat/url.h > +++ b/libavformat/url.h > @@ -42,6 +42,7 @@ typedef struct URLContext { > char *filename; /**< specified URL */ > int flags; > int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ > + int min_packet_size; /**< if non zero, the stream is packetized with this min packet size */ > int is_streamed; /**< true if streamed (no seek possible), default = false */ > int is_connected; > AVIOInterruptCB interrupt_callback; i was hesitating for a moment when i saw this. Is the location, that is in the middle instead of the end of the struct intended ? is nothig outside libavformat using url.h ? (i was thinking libavdevice but it seems not directly include it) patch LGTM otherwise thx [...]
On Mon, 19 Jun 2017, Michael Niedermayer wrote: > On Mon, Jun 19, 2017 at 12:02:52AM +0200, Marton Balint wrote: >> Signed-off-by: Marton Balint <cus@passwd.hu> >> --- >> libavformat/avio.h | 13 ++++++++++++- >> libavformat/aviobuf.c | 7 +++++++ >> libavformat/url.h | 1 + >> libavformat/version.h | 2 +- >> 4 files changed, 21 insertions(+), 2 deletions(-) >> >> diff --git a/libavformat/avio.h b/libavformat/avio.h >> index 844a5723d3..f14b003ba5 100644 >> --- a/libavformat/avio.h >> +++ b/libavformat/avio.h >> @@ -137,7 +137,13 @@ enum AVIODataMarkerType { >> * Trailer data, which doesn't contain actual content, but only for >> * 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, >> }; > > needs APIChanges entry i think > ok. > > [...] >> diff --git a/libavformat/url.h b/libavformat/url.h >> index 910f1e00b3..df90333059 100644 >> --- a/libavformat/url.h >> +++ b/libavformat/url.h >> @@ -42,6 +42,7 @@ typedef struct URLContext { >> char *filename; /**< specified URL */ >> int flags; >> int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ >> + int min_packet_size; /**< if non zero, the stream is packetized with this min packet size */ >> int is_streamed; /**< true if streamed (no seek possible), default = false */ >> int is_connected; >> AVIOInterruptCB interrupt_callback; > > i was hesitating for a moment when i saw this. Is the location, that is > in the middle instead of the end of the struct intended ? > is nothig outside libavformat using url.h ? > (i was thinking libavdevice but it seems not directly include it) > I just assumed that since it is not AV-prefixed, it is a private context, therefore it doesn't matter where to put it. Regards, Marton
diff --git a/libavformat/avio.h b/libavformat/avio.h index 844a5723d3..f14b003ba5 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -137,7 +137,13 @@ enum AVIODataMarkerType { * Trailer data, which doesn't contain actual content, but only for * 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 { * used keeping track of already written data for a later flush. */ unsigned char *buf_ptr_max; + + /** + * Try to buffer at least this amount of data before flushing it + */ + int min_packet_size; } AVIOContext; /** diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index dcb91570d8..7f4e740a33 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -104,6 +104,7 @@ int ffio_init_context(AVIOContext *s, s->eof_reached = 0; s->error = 0; s->seekable = seek ? AVIO_SEEKABLE_NORMAL : 0; + s->min_packet_size = 0; s->max_packet_size = 0; s->update_checksum = NULL; s->short_seek_threshold = SHORT_SEEK_THRESHOLD; @@ -489,6 +490,11 @@ void avio_wb24(AVIOContext *s, unsigned int val) 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) return; // If ignoring boundary points, just treat it as unknown @@ -941,6 +947,7 @@ int ffio_fdopen(AVIOContext **s, URLContext *h) (*s)->seekable = h->is_streamed ? 0 : AVIO_SEEKABLE_NORMAL; (*s)->max_packet_size = max_packet_size; + (*s)->min_packet_size = h->min_packet_size; if(h->prot) { (*s)->read_pause = io_read_pause; (*s)->read_seek = io_read_seek; diff --git a/libavformat/url.h b/libavformat/url.h index 910f1e00b3..df90333059 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -42,6 +42,7 @@ typedef struct URLContext { char *filename; /**< specified URL */ int flags; int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ + int min_packet_size; /**< if non zero, the stream is packetized with this min packet size */ int is_streamed; /**< true if streamed (no seek possible), default = false */ int is_connected; AVIOInterruptCB interrupt_callback; diff --git a/libavformat/version.h b/libavformat/version.h index 1fb8ffb2b9..44c16ac75a 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 57 -#define LIBAVFORMAT_VERSION_MINOR 74 +#define LIBAVFORMAT_VERSION_MINOR 75 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
Signed-off-by: Marton Balint <cus@passwd.hu> --- libavformat/avio.h | 13 ++++++++++++- libavformat/aviobuf.c | 7 +++++++ libavformat/url.h | 1 + libavformat/version.h | 2 +- 4 files changed, 21 insertions(+), 2 deletions(-)