avformat/aviobuf: fix flushing write buffers after seeking backward or forward
authorMarton Balint <cus@passwd.hu>
Sat, 3 Jun 2017 23:15:50 +0000 (01:15 +0200)
committerMarton Balint <cus@passwd.hu>
Sat, 24 Jun 2017 16:51:29 +0000 (18:51 +0200)
commitc14fa7a330f634738003bee731f17ff4c5717228
treec0a48fc4bd9c2a5b8b4642c833c9f9245de1cbb4
parentdc81f1a2cef11538401ee1ca13b76e61838283e6
avformat/aviobuf: fix flushing write buffers after seeking backward or forward

This patch makes aviobuf work more like traditinal file IO, which is how people
think about it.

For example, in the past, aviobuf only flushed buffers until the current buffer
position, even if more data was written to it previously, and a backward seek
was used to reposition the IO context.

From now, aviobuf will keep track of the written data, so no explicit seek will
be required till the end of the buffer, or till the end of file before flushing.

This fixes at least one regression, fate-vsynth3-flv was broken if
flush_packets option was set to false, an explicit seek was removed in
4e3cc4bdd8acedbcc703607ed0efbb64bb5c3cc4.

Also from now on, if a forward seek in the write buffer were to cause a gap
between the already written data and the new file position, a flush will
happen.

The must_flush varable is also removed, which might have caused needless
flushes with multiple seeks whithin the write buffer. Since we know the amount
of data written to it, we will know when to flush.

Signed-off-by: Marton Balint <cus@passwd.hu>
libavformat/avio.h
libavformat/aviobuf.c
libavformat/version.h