avio_flush() did nothing useful for read streams. Fix it to behave as expected, and discard the currently read buffer properly. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.5
| @@ -289,10 +289,14 @@ int url_feof(AVIOContext *s); | |||||
| int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); | int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); | ||||
| /** | /** | ||||
| * Force flushing of buffered data to the output s. | |||||
| * Force flushing of buffered data. | |||||
| * | * | ||||
| * Force the buffered data to be immediately written to the output, | |||||
| * For write streams, force the buffered data to be immediately written to the output, | |||||
| * without to wait to fill the internal buffer. | * without to wait to fill the internal buffer. | ||||
| * | |||||
| * For read streams, discard all currently buffered data, and advance the | |||||
| * reported file position to that of the underlying stream. This does not | |||||
| * read new data, and does not perform any seeks. | |||||
| */ | */ | ||||
| void avio_flush(AVIOContext *s); | void avio_flush(AVIOContext *s); | ||||
| @@ -139,7 +139,7 @@ static void writeout(AVIOContext *s, const uint8_t *data, int len) | |||||
| static void flush_buffer(AVIOContext *s) | static void flush_buffer(AVIOContext *s) | ||||
| { | { | ||||
| if (s->buf_ptr > s->buffer) { | |||||
| if (s->write_flag && s->buf_ptr > s->buffer) { | |||||
| writeout(s, s->buffer, s->buf_ptr - s->buffer); | writeout(s, s->buffer, s->buf_ptr - s->buffer); | ||||
| if (s->update_checksum) { | if (s->update_checksum) { | ||||
| s->checksum = s->update_checksum(s->checksum, s->checksum_ptr, | s->checksum = s->update_checksum(s->checksum, s->checksum_ptr, | ||||
| @@ -148,6 +148,8 @@ static void flush_buffer(AVIOContext *s) | |||||
| } | } | ||||
| } | } | ||||
| s->buf_ptr = s->buffer; | s->buf_ptr = s->buffer; | ||||
| if (!s->write_flag) | |||||
| s->buf_end = s->buffer; | |||||
| } | } | ||||
| void avio_w8(AVIOContext *s, int b) | void avio_w8(AVIOContext *s, int b) | ||||