[FFmpeg-devel] [PATCH 3/4] avformat: make flush_packets a tri-state and set it to -1 (auto) by default
Marton Balint
cus at passwd.hu
Tue Jun 20 00:13:52 EEST 2017
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 <cus at 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
More information about the ffmpeg-devel
mailing list