Note: a lot of muxers already do the flushing explicitly.tags/n2.0
@@ -151,6 +151,11 @@ been without shifting. | |||||
Also note that this affects only leading negative timestamps, and not | Also note that this affects only leading negative timestamps, and not | ||||
non-monotonic negative timestamps. | non-monotonic negative timestamps. | ||||
@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. | |||||
@end table | @end table | ||||
@c man end FORMAT OPTIONS | @c man end FORMAT OPTIONS | ||||
@@ -1213,6 +1213,13 @@ typedef struct AVFormatContext { | |||||
*/ | */ | ||||
int seek2any; | int seek2any; | ||||
/** | |||||
* Flush the I/O context after each packet. | |||||
* - encoding: Set by user via AVOptions (NO direct access) | |||||
* - decoding: unused | |||||
*/ | |||||
int flush_packets; | |||||
/***************************************************************** | /***************************************************************** | ||||
* All fields below this line are not part of the public API. They | * All fields below this line are not part of the public API. They | ||||
* may not be used outside of libavformat and can be changed and | * may not be used outside of libavformat and can be changed and | ||||
@@ -494,6 +494,8 @@ static inline int split_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
did_split = av_packet_split_side_data(pkt); | did_split = av_packet_split_side_data(pkt); | ||||
ret = s->oformat->write_packet(s, pkt); | ret = s->oformat->write_packet(s, pkt); | ||||
if (s->flush_packets && s->pb && s->pb->error >= 0) | |||||
avio_flush(s->pb); | |||||
if (did_split) | if (did_split) | ||||
av_packet_merge_side_data(pkt); | av_packet_merge_side_data(pkt); | ||||
return ret; | return ret; | ||||
@@ -75,6 +75,7 @@ static const AVOption options[]={ | |||||
{"avoid_negative_ts", "shift timestamps to make them positive. 1 enables, 0 disables, default of -1 enables when required by target format.", OFFSET(avoid_negative_ts), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, E}, | {"avoid_negative_ts", "shift timestamps to make them positive. 1 enables, 0 disables, default of -1 enables when required by target format.", OFFSET(avoid_negative_ts), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, E}, | ||||
{"skip_initial_bytes", "skip initial bytes", OFFSET(skip_initial_bytes), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX-1, D}, | {"skip_initial_bytes", "skip initial bytes", OFFSET(skip_initial_bytes), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX-1, D}, | ||||
{"correct_ts_overflow", "correct single timestamp overflows", OFFSET(correct_ts_overflow), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, D}, | {"correct_ts_overflow", "correct single timestamp overflows", OFFSET(correct_ts_overflow), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, D}, | ||||
{"flush_packets", "enable flushing of the I/O context after each packet", OFFSET(flush_packets), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E}, | |||||
{NULL}, | {NULL}, | ||||
}; | }; | ||||