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}, | ||||
| }; | }; | ||||