On Mon, 19 Jun 2017, Michael Niedermayer wrote:
On Mon, Jun 19, 2017 at 12:02:53AM +0200, Marton Balint wrote:
If flushing is not disabled, then mux.c will signal the end of the packets with
an AVIO_DATA_MARKER_FLUSH_POINT, and aviobuf will be able to decide to flush or
not based on the preferred minimum packet size set by the used protocol.
Signed-off-by: Marton Balint <c...@passwd.hu>
---
doc/formats.texi | 7 ++++---
libavformat/mux.c | 12 +++++++++---
libavformat/options_table.h | 4 ++--
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/doc/formats.texi b/doc/formats.texi
index c51d4086db..ddd7743548 100644
--- a/doc/formats.texi
+++ b/doc/formats.texi
@@ -182,9 +182,10 @@ Default is 0.
Correct single timestamp overflows if set to 1. Default is 1.
@item flush_packets @var{integer} (@emph{output})
-Flush the underlying I/O stream after each packet. Default 1 enables it, and
-has the effect of reducing the latency; 0 disables it and may slightly
-increase performance in some cases.
+Flush the underlying I/O stream after each packet. Default is -1 (auto), which
+means that the underlying protocol will decide, 1 enables it, and has the
+effect of reducing the latency, 0 disables it and may increase IO throughput in
+some cases.
@item output_ts_offset @var{offset} (@emph{output})
Set the output time offset.
diff --git a/libavformat/mux.c b/libavformat/mux.c
index e1e49a81be..7c97b77881 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -479,8 +479,10 @@ static int write_header_internal(AVFormatContext *s)
s->internal->write_header_ret = ret;
if (ret < 0)
return ret;
- if (s->flush_packets && s->pb && s->pb->error >= 0 && s->flags &
AVFMT_FLAG_FLUSH_PACKETS)
+ if ((s->flush_packets == 1 || s->flags & AVFMT_FLAG_FLUSH_PACKETS) && s->pb &&
s->pb->error >= 0)
avio_flush(s->pb);
+ if (s->flush_packets && !(s->oformat->flags & AVFMT_NOFILE) && s->pb &&
s->pb->error >= 0)
+ avio_write_marker(s->pb, AV_NOPTS_VALUE,
AVIO_DATA_MARKER_FLUSH_POINT);
[...]
if (s->pb && ret >= 0) {
- if (s->flush_packets && s->flags & AVFMT_FLAG_FLUSH_PACKETS)
+ if (s->flush_packets == 1 || s->flags & AVFMT_FLAG_FLUSH_PACKETS)
avio_flush(s->pb);
+ if (s->flush_packets && !(s->oformat->flags & AVFMT_NOFILE))
+ avio_write_marker(s->pb, AV_NOPTS_VALUE,
AVIO_DATA_MARKER_FLUSH_POINT);
are these inteded to be if() instead of else if() ?
It does not really make a difference in the current code, I will change it
to else if.
Either way iam in favor of this patch
Great, thanks.
Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel