From a9d25569645e4031cd789ddbf696baaf6918f9dc Mon Sep 17 00:00:00 2001
From: Konstantin Shpinev <mail@ksotik.com>
Date: Tue, 22 Jul 2014 17:06:07 +0600
Subject: [PATCH] fix flush_buffer in aviobuf.c to produce constant packet
 size, see https://trac.ffmpeg.org/ticket/2748

---
 libavformat/aviobuf.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 738459e..38bf4e2 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -138,7 +138,7 @@ static void writeout(AVIOContext *s, const uint8_t *data, int len)
 
 static void flush_buffer(AVIOContext *s)
 {
-    if (s->buf_ptr > s->buffer) {
+    if (s->buf_ptr > s->buffer && (!s->max_packet_size || s->buf_ptr - s->buffer == s->max_packet_size)) {
         writeout(s, s->buffer, s->buf_ptr - s->buffer);
         if (s->update_checksum) {
             s->checksum     = s->update_checksum(s->checksum, s->checksum_ptr,
@@ -146,7 +146,9 @@ static void flush_buffer(AVIOContext *s)
             s->checksum_ptr = s->buffer;
         }
     }
-    s->buf_ptr = s->buffer;
+    if (s->buf_ptr - s->buffer == 0 || !s->max_packet_size || s->buf_ptr - s->buffer == s->max_packet_size) {
+        s->buf_ptr = s->buffer;
+    }
 }
 
 void avio_w8(AVIOContext *s, int b)
-- 
1.8.5.2 (Apple Git-48)

