[FFmpeg-devel] [PATCH 2/3] avformat: remove more unneeded avio_flush() calls

Marton Balint cus at passwd.hu
Fri Jan 3 20:15:47 EET 2020


Throughout libavformat there are lots of avio_flush() calls which are unneeded:
- Instances found at the end of write_header, write_packet and write_trailer
  callbacks. These are handled by the generic code in libavformat/mux.c.
- Instances in the middle of write_header and write_trailer which are
  redundant or are present becuase avio_flush() used to be required before
  doing a seekback. That is no longer the case, aviobuf code does the flush
  automatically on seek.

So this patch removes those cases. Removing explicit avio_flush() calls helps
us to buffer more data and avoid flushing the IO context too often which causes
reduced IO throughput for non-streamed file output.

The user can still control flushing behaviour using the -flush_packets option,
the default typically means to flush unless a non-streamed file output is used.

Signed-off-by: Marton Balint <cus at passwd.hu>
---
 libavformat/aiffenc.c     |  5 -----
 libavformat/amr.c         |  1 -
 libavformat/asfenc.c      |  3 ---
 libavformat/assenc.c      |  1 -
 libavformat/astenc.c      |  3 ---
 libavformat/au.c          |  2 --
 libavformat/avienc.c      |  3 ---
 libavformat/cafenc.c      |  2 --
 libavformat/ffmetaenc.c   |  1 -
 libavformat/flacenc.c     |  1 -
 libavformat/framehash.c   |  1 -
 libavformat/gxfenc.c      |  3 ---
 libavformat/hashenc.c     |  2 --
 libavformat/icoenc.c      |  2 --
 libavformat/idroqenc.c    |  1 -
 libavformat/ilbc.c        |  1 -
 libavformat/img2enc.c     |  1 -
 libavformat/jacosubenc.c  |  1 -
 libavformat/matroskaenc.c |  2 --
 libavformat/microdvdenc.c |  1 -
 libavformat/mmf.c         |  4 ----
 libavformat/movenc.c      |  3 ---
 libavformat/mpegenc.c     |  1 -
 libavformat/mpjpeg.c      |  1 -
 libavformat/mxfenc.c      |  3 ---
 libavformat/nutenc.c      |  2 --
 libavformat/rmenc.c       |  1 -
 libavformat/rsoenc.c      |  2 --
 libavformat/segafilmenc.c |  2 --
 libavformat/smjpegenc.c   |  1 -
 libavformat/soxenc.c      |  4 ----
 libavformat/swfenc.c      |  1 -
 libavformat/ttaenc.c      |  1 -
 libavformat/vc1testenc.c  |  1 -
 libavformat/wavenc.c      | 11 -----------
 libavformat/webvttenc.c   |  1 -
 libavformat/wtvenc.c      |  2 --
 tests/ref/fate/movenc     | 24 ++++++++----------------
 38 files changed, 8 insertions(+), 94 deletions(-)

diff --git a/libavformat/aiffenc.c b/libavformat/aiffenc.c
index e25794d185..0145596bec 100644
--- a/libavformat/aiffenc.c
+++ b/libavformat/aiffenc.c
@@ -199,9 +199,6 @@ static int aiff_write_header(AVFormatContext *s)
     avpriv_set_pts_info(s->streams[aiff->audio_stream_idx], 64, 1,
                         s->streams[aiff->audio_stream_idx]->codecpar->sample_rate);
 
-    /* Data is starting here */
-    avio_flush(pb);
-
     return 0;
 }
 
@@ -266,8 +263,6 @@ static int aiff_write_trailer(AVFormatContext *s)
         file_size = avio_tell(pb);
         avio_seek(pb, aiff->form, SEEK_SET);
         avio_wb32(pb, file_size - aiff->form - 4);
-
-        avio_flush(pb);
     }
 
     return ret;
diff --git a/libavformat/amr.c b/libavformat/amr.c
index 42840a50a3..650b565b1b 100644
--- a/libavformat/amr.c
+++ b/libavformat/amr.c
@@ -60,7 +60,6 @@ static int amr_write_header(AVFormatContext *s)
     } else {
         return -1;
     }
-    avio_flush(pb);
     return 0;
 }
 
diff --git a/libavformat/asfenc.c b/libavformat/asfenc.c
index 44e11fc763..8eaa9d40ce 100644
--- a/libavformat/asfenc.c
+++ b/libavformat/asfenc.c
@@ -801,8 +801,6 @@ static int asf_write_header(AVFormatContext *s)
         return -1;
     }
 
-    avio_flush(s->pb);
-
     asf->packet_nb_payloads     = 0;
     asf->packet_timestamp_start = -1;
     asf->packet_timestamp_end   = -1;
@@ -1132,7 +1130,6 @@ static int asf_write_trailer(AVFormatContext *s)
             return ret;
         asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->next_start_sec);
     }
-    avio_flush(s->pb);
 
     if (asf->is_streamed || !(s->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
         put_chunk(s, 0x4524, 0, 0); /* end of stream */
diff --git a/libavformat/assenc.c b/libavformat/assenc.c
index 12aadca171..68c3396e5a 100644
--- a/libavformat/assenc.c
+++ b/libavformat/assenc.c
@@ -77,7 +77,6 @@ static int write_header(AVFormatContext *s)
             avio_printf(s->pb, "[Events]\r\nFormat: %s, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n",
                         ass->ssa_mode ? "Marked" : "Layer");
     }
-    avio_flush(s->pb);
 
     return 0;
 }
diff --git a/libavformat/astenc.c b/libavformat/astenc.c
index 578e658891..e0b94b8b63 100644
--- a/libavformat/astenc.c
+++ b/libavformat/astenc.c
@@ -101,8 +101,6 @@ static int ast_write_header(AVFormatContext *s)
     avio_wb64(pb, 0);
     avio_wb32(pb, 0);
 
-    avio_flush(pb);
-
     return 0;
 }
 
@@ -180,7 +178,6 @@ static int ast_write_trailer(AVFormatContext *s)
         }
 
         avio_seek(pb, file_size, SEEK_SET);
-        avio_flush(pb);
     }
     return 0;
 }
diff --git a/libavformat/au.c b/libavformat/au.c
index cb48e67feb..4afee85a94 100644
--- a/libavformat/au.c
+++ b/libavformat/au.c
@@ -311,7 +311,6 @@ static int au_write_header(AVFormatContext *s)
     } else {
         avio_wb64(pb, 0); /* annotation field */
     }
-    avio_flush(pb);
 
     return 0;
 }
@@ -327,7 +326,6 @@ static int au_write_trailer(AVFormatContext *s)
         avio_seek(pb, 8, SEEK_SET);
         avio_wb32(pb, (uint32_t)(file_size - au->header_size));
         avio_seek(pb, file_size, SEEK_SET);
-        avio_flush(pb);
     }
 
     return 0;
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 940ea33510..d6cfb1b783 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -580,8 +580,6 @@ static int avi_write_header(AVFormatContext *s)
     avi->movi_list = ff_start_tag(pb, "LIST");
     ffio_wfourcc(pb, "movi");
 
-    avio_flush(pb);
-
     return 0;
 }
 
@@ -593,7 +591,6 @@ static void update_odml_entry(AVFormatContext *s, int stream_index, int64_t ix,
     int64_t pos;
     int au_byterate, au_ssize, au_scale;
 
-    avio_flush(pb);
     pos = avio_tell(pb);
 
     /* Updating one entry in the AVI OpenDML master index */
diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c
index 0f7c4ebbb3..98d4d9212f 100644
--- a/libavformat/cafenc.c
+++ b/libavformat/cafenc.c
@@ -203,7 +203,6 @@ static int caf_write_header(AVFormatContext *s)
     avio_wb64(pb, -1);        //< mChunkSize
     avio_wb32(pb, 0);         //< mEditCount
 
-    avio_flush(pb);
     return 0;
 }
 
@@ -259,7 +258,6 @@ static int caf_write_trailer(AVFormatContext *s)
             avio_write(pb, caf->pkt_sizes, caf->size_entries_used);
             caf->size_buffer_size = 0;
         }
-        avio_flush(pb);
     }
     av_freep(&caf->pkt_sizes);
     return 0;
diff --git a/libavformat/ffmetaenc.c b/libavformat/ffmetaenc.c
index a9adbb1d19..800fb1887c 100644
--- a/libavformat/ffmetaenc.c
+++ b/libavformat/ffmetaenc.c
@@ -54,7 +54,6 @@ static int write_header(AVFormatContext *s)
     avio_write(s->pb, ID_STRING, sizeof(ID_STRING) - 1);
     avio_w8(s->pb, '1');          // version
     avio_w8(s->pb, '\n');
-    avio_flush(s->pb);
     return 0;
 }
 
diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c
index abbed38f89..1aae0c97e0 100644
--- a/libavformat/flacenc.c
+++ b/libavformat/flacenc.c
@@ -349,7 +349,6 @@ static int flac_write_trailer(struct AVFormatContext *s)
         avio_seek(pb, 8, SEEK_SET);
         avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE);
         avio_seek(pb, file_size, SEEK_SET);
-        avio_flush(pb);
     } else {
         av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n");
     }
diff --git a/libavformat/framehash.c b/libavformat/framehash.c
index 3ae9092c61..8d90793d7c 100644
--- a/libavformat/framehash.c
+++ b/libavformat/framehash.c
@@ -45,7 +45,6 @@ int ff_framehash_write_header(AVFormatContext *s)
             avio_printf(s->pb, "#sar %d: %d/%d\n", i, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den);
             break;
         }
-        avio_flush(s->pb);
     }
     return 0;
 }
diff --git a/libavformat/gxfenc.c b/libavformat/gxfenc.c
index ad9ddea887..e09b8d7625 100644
--- a/libavformat/gxfenc.c
+++ b/libavformat/gxfenc.c
@@ -834,7 +834,6 @@ static int gxf_write_header(AVFormatContext *s)
 
     gxf->packet_count = 3;
 
-    avio_flush(pb);
     return 0;
 }
 
@@ -864,13 +863,11 @@ static int gxf_write_trailer(AVFormatContext *s)
         return ret;
     gxf_write_flt_packet(s);
     gxf_write_umf_packet(s);
-    avio_flush(pb);
     /* update duration in all map packets */
     for (i = 1; i < gxf->map_offsets_nb; i++) {
         avio_seek(pb, gxf->map_offsets[i], SEEK_SET);
         if ((ret = gxf_write_map_packet(s, 1)) < 0)
             return ret;
-        avio_flush(pb);
     }
 
     avio_seek(pb, end, SEEK_SET);
diff --git a/libavformat/hashenc.c b/libavformat/hashenc.c
index 34a8fd1f50..ce609f6efa 100644
--- a/libavformat/hashenc.c
+++ b/libavformat/hashenc.c
@@ -152,7 +152,6 @@ static int hash_write_trailer(struct AVFormatContext *s)
         av_hash_final_hex(c->hashes[i], buf + strlen(buf), sizeof(buf) - strlen(buf));
         av_strlcatf(buf, sizeof(buf), "\n");
         avio_write(s->pb, buf, strlen(buf));
-        avio_flush(s->pb);
     }
 
     return 0;
@@ -325,7 +324,6 @@ static int framehash_write_packet(struct AVFormatContext *s, AVPacket *pkt)
     }
 
     avio_printf(s->pb, "\n");
-    avio_flush(s->pb);
     return 0;
 }
 
diff --git a/libavformat/icoenc.c b/libavformat/icoenc.c
index 975c3466bf..a7df8b72bc 100644
--- a/libavformat/icoenc.c
+++ b/libavformat/icoenc.c
@@ -106,8 +106,6 @@ static int ico_write_header(AVFormatContext *s)
     if (!ico->images)
         return AVERROR(ENOMEM);
 
-    avio_flush(pb);
-
     return 0;
 }
 
diff --git a/libavformat/idroqenc.c b/libavformat/idroqenc.c
index 8122efef83..261f21939c 100644
--- a/libavformat/idroqenc.c
+++ b/libavformat/idroqenc.c
@@ -55,7 +55,6 @@ static int roq_write_header(struct AVFormatContext *s)
     }
 
     avio_write(s->pb, header, 8);
-    avio_flush(s->pb);
 
     return 0;
 }
diff --git a/libavformat/ilbc.c b/libavformat/ilbc.c
index ba11953b59..01c7112ad1 100644
--- a/libavformat/ilbc.c
+++ b/libavformat/ilbc.c
@@ -49,7 +49,6 @@ static int ilbc_write_header(AVFormatContext *s)
         av_log(s, AV_LOG_ERROR, "Unsupported mode\n");
         return AVERROR(EINVAL);
     }
-    avio_flush(pb);
     return 0;
 }
 
diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c
index 39398f37a3..5ee99890ce 100644
--- a/libavformat/img2enc.c
+++ b/libavformat/img2enc.c
@@ -118,7 +118,6 @@ static int write_packet_pipe(AVFormatContext *s, AVPacket *pkt)
             return ret;
     } else {
         avio_write(s->pb, pkt->data, pkt->size);
-        avio_flush(s->pb);
     }
     img->img_number++;
     return 0;
diff --git a/libavformat/jacosubenc.c b/libavformat/jacosubenc.c
index 0954f5f058..77575c6b3c 100644
--- a/libavformat/jacosubenc.c
+++ b/libavformat/jacosubenc.c
@@ -25,7 +25,6 @@ static int jacosub_write_header(AVFormatContext *s)
 
     if (par->extradata_size) {
         avio_write(s->pb, par->extradata, par->extradata_size - 1);
-        avio_flush(s->pb);
     }
     return 0;
 }
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 9dcd1946e8..4b6d14b435 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -2000,8 +2000,6 @@ static int mkv_write_header(AVFormatContext *s)
     mkv->cur_audio_pkt.size = 0;
     mkv->cluster_pos = -1;
 
-    avio_flush(pb);
-
     // start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or
     // after 4k and on a keyframe
     if (pb->seekable & AVIO_SEEKABLE_NORMAL) {
diff --git a/libavformat/microdvdenc.c b/libavformat/microdvdenc.c
index 80e6fa8674..1cd215d8de 100644
--- a/libavformat/microdvdenc.c
+++ b/libavformat/microdvdenc.c
@@ -37,7 +37,6 @@ static int microdvd_write_header(struct AVFormatContext *s)
         avio_write(s->pb, "{DEFAULT}{}", 11);
         avio_write(s->pb, par->extradata, par->extradata_size);
         avio_w8(s->pb, '\n');
-        avio_flush(s->pb);
     }
 
     avpriv_set_pts_info(s->streams[0], 64, framerate.num, framerate.den);
diff --git a/libavformat/mmf.c b/libavformat/mmf.c
index 917113066a..e4768db064 100644
--- a/libavformat/mmf.c
+++ b/libavformat/mmf.c
@@ -123,8 +123,6 @@ static int mmf_write_header(AVFormatContext *s)
 
     avpriv_set_pts_info(s->streams[0], 64, 1, s->streams[0]->codecpar->sample_rate);
 
-    avio_flush(pb);
-
     return 0;
 }
 
@@ -173,8 +171,6 @@ static int mmf_write_trailer(AVFormatContext *s)
         avio_write(pb, "\x00\x00\x00\x00", 4);
 
         avio_seek(pb, pos, SEEK_SET);
-
-        avio_flush(pb);
     }
     return 0;
 }
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index e422bdd071..84d73a36d1 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -6570,8 +6570,6 @@ static int mov_write_header(AVFormatContext *s)
         }
     }
 
-    avio_flush(pb);
-
     if (mov->flags & FF_MOV_FLAG_ISML)
         mov_write_isml_manifest(pb, mov, s);
 
@@ -6579,7 +6577,6 @@ static int mov_write_header(AVFormatContext *s)
         !(mov->flags & FF_MOV_FLAG_DELAY_MOOV)) {
         if ((ret = mov_write_moov_tag(pb, mov, s)) < 0)
             return ret;
-        avio_flush(pb);
         mov->moov_written = 1;
         if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX)
             mov->reserved_header_pos = avio_tell(pb);
diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index f6980231a2..f8039a42c0 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -1244,7 +1244,6 @@ static int mpeg_mux_end(AVFormatContext *ctx)
      * it as it is usually not needed by decoders and because it
      * complicates MPEG stream concatenation. */
     // avio_wb32(ctx->pb, ISO_11172_END_CODE);
-    // avio_flush(ctx->pb);
 
     for (i = 0; i < ctx->nb_streams; i++) {
         stream = ctx->streams[i]->priv_data;
diff --git a/libavformat/mpjpeg.c b/libavformat/mpjpeg.c
index 80f83c5871..e410e84801 100644
--- a/libavformat/mpjpeg.c
+++ b/libavformat/mpjpeg.c
@@ -34,7 +34,6 @@ static int mpjpeg_write_header(AVFormatContext *s)
 {
     MPJPEGContext *mpj = s->priv_data;
     avio_printf(s->pb, "--%s\r\n", mpj->boundary_tag);
-    avio_flush(s->pb);
     return 0;
 }
 
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index e187b3845d..396768d51f 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -2799,7 +2799,6 @@ static int mxf_write_opatom_packet(AVFormatContext *s, AVPacket *pkt, MXFIndexEn
     mxf->edit_units_count++;
     avio_write(pb, pkt->data, pkt->size);
     mxf->body_offset += pkt->size;
-    avio_flush(pb);
 
     return 0;
 }
@@ -2937,8 +2936,6 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
         mxf->body_offset += 16+4+pkt->size + klv_fill_size(16+4+pkt->size);
     }
 
-    avio_flush(pb);
-
     return 0;
 }
 
diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
index 46dce7722d..44773924dd 100644
--- a/libavformat/nutenc.c
+++ b/libavformat/nutenc.c
@@ -768,8 +768,6 @@ static int nut_write_header(AVFormatContext *s)
     if (s->avoid_negative_ts < 0)
         s->avoid_negative_ts = 1;
 
-    avio_flush(bc);
-
     return 0;
 }
 
diff --git a/libavformat/rmenc.c b/libavformat/rmenc.c
index 3bff4daf0a..e137dbc44f 100644
--- a/libavformat/rmenc.c
+++ b/libavformat/rmenc.c
@@ -360,7 +360,6 @@ static int rm_write_header(AVFormatContext *s)
 
     if (rv10_write_header(s, 0, 0))
         return AVERROR_INVALIDDATA;
-    avio_flush(s->pb);
     return 0;
 }
 
diff --git a/libavformat/rsoenc.c b/libavformat/rsoenc.c
index e34e2c64e2..3159f0c427 100644
--- a/libavformat/rsoenc.c
+++ b/libavformat/rsoenc.c
@@ -60,8 +60,6 @@ static int rso_write_header(AVFormatContext *s)
     avio_wb16(pb, par->sample_rate);
     avio_wb16(pb, 0x0000);           /* play mode ? (0x0000 = don't loop) */
 
-    avio_flush(pb);
-
     return 0;
 }
 
diff --git a/libavformat/segafilmenc.c b/libavformat/segafilmenc.c
index f1048ff808..812d0ad64e 100644
--- a/libavformat/segafilmenc.c
+++ b/libavformat/segafilmenc.c
@@ -362,8 +362,6 @@ static int film_write_header(AVFormatContext *format_context)
 
     avio_wb32(pb, film->packet_count);
 
-    avio_flush(pb);
-
     /* Finally, write out each packet's data to the header */
     packet = film->start;
     while (packet != NULL) {
diff --git a/libavformat/smjpegenc.c b/libavformat/smjpegenc.c
index 68a128647e..c3c1a6346c 100644
--- a/libavformat/smjpegenc.c
+++ b/libavformat/smjpegenc.c
@@ -88,7 +88,6 @@ static int smjpeg_write_header(AVFormatContext *s)
     }
 
     avio_wl32(pb, SMJPEG_HEND);
-    avio_flush(pb);
 
     return 0;
 }
diff --git a/libavformat/soxenc.c b/libavformat/soxenc.c
index 7b37bd4848..ce276f88b5 100644
--- a/libavformat/soxenc.c
+++ b/libavformat/soxenc.c
@@ -80,8 +80,6 @@ static int sox_write_header(AVFormatContext *s)
 
     ffio_fill(pb, 0, comment_size - comment_len);
 
-    avio_flush(pb);
-
     return 0;
 }
 
@@ -101,8 +99,6 @@ static int sox_write_trailer(AVFormatContext *s)
         } else
             avio_wb64(pb, num_samples);
         avio_seek(pb, file_size, SEEK_SET);
-
-        avio_flush(pb);
     }
 
     return 0;
diff --git a/libavformat/swfenc.c b/libavformat/swfenc.c
index f53db0fb2b..84f924eda5 100644
--- a/libavformat/swfenc.c
+++ b/libavformat/swfenc.c
@@ -337,7 +337,6 @@ static int swf_write_header(AVFormatContext *s)
         put_swf_end_tag(s);
     }
 
-    avio_flush(s->pb);
     return 0;
 }
 
diff --git a/libavformat/ttaenc.c b/libavformat/ttaenc.c
index 73c29ae936..4860aab4c1 100644
--- a/libavformat/ttaenc.c
+++ b/libavformat/ttaenc.c
@@ -154,7 +154,6 @@ static int tta_write_trailer(AVFormatContext *s)
     tta_queue_flush(s);
 
     ff_ape_write_tag(s);
-    avio_flush(s->pb);
 
     return 0;
 }
diff --git a/libavformat/vc1testenc.c b/libavformat/vc1testenc.c
index cf95d1d80d..1365bdd660 100644
--- a/libavformat/vc1testenc.c
+++ b/libavformat/vc1testenc.c
@@ -76,7 +76,6 @@ static int vc1test_write_trailer(AVFormatContext *s)
     if (s->pb->seekable & AVIO_SEEKABLE_NORMAL) {
         avio_seek(pb, 0, SEEK_SET);
         avio_wl24(pb, ctx->frames);
-        avio_flush(pb);
     }
     return 0;
 }
diff --git a/libavformat/wavenc.c b/libavformat/wavenc.c
index 2b28149056..f6f5710802 100644
--- a/libavformat/wavenc.c
+++ b/libavformat/wavenc.c
@@ -361,8 +361,6 @@ static int wav_write_header(AVFormatContext *s)
         wav->data = ff_start_tag(pb, "data");
     }
 
-    avio_flush(pb);
-
     return 0;
 }
 
@@ -413,17 +411,13 @@ static int wav_write_trailer(AVFormatContext *s)
     int rf64 = 0;
     int ret = 0;
 
-    avio_flush(pb);
-
     if (s->pb->seekable & AVIO_SEEKABLE_NORMAL) {
         if (wav->write_peak != PEAK_ONLY && avio_tell(pb) - wav->data < UINT32_MAX) {
             ff_end_tag(pb, wav->data);
-            avio_flush(pb);
         }
 
         if (wav->write_peak && wav->peak_output) {
             ret = peak_write_chunk(s);
-            avio_flush(pb);
         }
 
         /* update file size */
@@ -435,8 +429,6 @@ static int wav_write_trailer(AVFormatContext *s)
             avio_seek(pb, 4, SEEK_SET);
             avio_wl32(pb, (uint32_t)(file_size - 8));
             avio_seek(pb, file_size, SEEK_SET);
-
-            avio_flush(pb);
         } else {
             av_log(s, AV_LOG_ERROR,
                    "Filesize %"PRId64" invalid for wav, output file will be broken\n",
@@ -456,7 +448,6 @@ static int wav_write_trailer(AVFormatContext *s)
             } else {
                 avio_wl32(pb, number_of_samples);
                 avio_seek(pb, file_size, SEEK_SET);
-                avio_flush(pb);
             }
         }
 
@@ -480,7 +471,6 @@ static int wav_write_trailer(AVFormatContext *s)
             avio_wl32(pb, -1);
 
             avio_seek(pb, file_size, SEEK_SET);
-            avio_flush(pb);
         }
     }
 
@@ -607,7 +597,6 @@ static int w64_write_trailer(AVFormatContext *s)
         }
 
         avio_seek(pb, file_size, SEEK_SET);
-        avio_flush(pb);
     }
 
     return 0;
diff --git a/libavformat/webvttenc.c b/libavformat/webvttenc.c
index 61b7f54622..cbd989dcb6 100644
--- a/libavformat/webvttenc.c
+++ b/libavformat/webvttenc.c
@@ -57,7 +57,6 @@ static int webvtt_write_header(AVFormatContext *ctx)
     avpriv_set_pts_info(s, 64, 1, 1000);
 
     avio_printf(pb, "WEBVTT\n");
-    avio_flush(pb);
 
     return 0;
 }
diff --git a/libavformat/wtvenc.c b/libavformat/wtvenc.c
index 4a68b8133f..498bc64019 100644
--- a/libavformat/wtvenc.c
+++ b/libavformat/wtvenc.c
@@ -823,8 +823,6 @@ static int write_trailer(AVFormatContext *s)
     avio_seek(pb, 0x5c, SEEK_SET);
     avio_wl32(pb, file_end_pos >> WTV_SECTOR_BITS);
 
-    avio_flush(pb);
-
     av_free(wctx->sp_pairs);
     av_free(wctx->st_pairs);
     av_packet_unref(&wctx->thumbnail);
diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc
index 5c6a054c1a..d5ef89124a 100644
--- a/tests/ref/fate/movenc
+++ b/tests/ref/fate/movenc
@@ -13,28 +13,24 @@ write_data len 2629, time nopts, type header atom -
 write_data len 908, time 1000000, type sync atom moof
 write_data len 110, time nopts, type trailer atom -
 e9f6fa032d6d8265d67aef5de81a48bf 3683 non-empty-moov-no-elst
-write_data len 24, time nopts, type header atom ftyp
-write_data len 1171, time nopts, type header atom -
+write_data len 1195, time nopts, type header atom ftyp
 write_data len 728, time 0, type sync atom moof
 write_data len 828, time nopts, type unknown atom -
 write_data len 728, time 1046439, type sync atom moof
 write_data len 812, time nopts, type unknown atom -
 write_data len 148, time nopts, type trailer atom -
 a7c93f998e88fee1159580b6ca7e3d2b 4439 ismv
-write_data len 36, time nopts, type header atom ftyp
-write_data len 1123, time nopts, type header atom -
+write_data len 1159, time nopts, type header atom ftyp
 write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
 e6a4b15443d006efd727a80f6624b7db 2891 empty-moov
-write_data len 36, time nopts, type header atom ftyp
-write_data len 1123, time nopts, type header atom -
+write_data len 1159, time nopts, type header atom ftyp
 write_data len 1068, time 0, type sync atom moof
 write_data len 908, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
 800f854aff2ac76dfaddebd0562c75b9 3283 empty-moov-no-elst
-write_data len 36, time nopts, type header atom ftyp
-write_data len 1123, time nopts, type header atom -
+write_data len 1159, time nopts, type header atom ftyp
 write_data len 900, time -33333, type sync atom moof
 write_data len 908, time 966667, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
@@ -58,8 +54,7 @@ write_data len 360, time 0, type sync atom moof
 write_data len 360, time 1000000, type sync atom moof
 write_data len 86, time nopts, type trailer atom -
 8805d72a27b340ea229c16edde78f974 2001 delay-moov-empty-track-flush
-write_data len 36, time nopts, type header atom ftyp
-write_data len 1123, time nopts, type header atom -
+write_data len 1159, time nopts, type header atom ftyp
 351ae2c8b6d35d98b4848c309cce6704 1159 empty-moov-header
 write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
@@ -71,14 +66,12 @@ write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
 a0165f4a26a409212b0946e981bdefb9 1584 delay-moov-content
 write_data len 148, time nopts, type trailer atom -
-write_data len 28, time nopts, type header atom -
-write_data len 1123, time nopts, type header atom -
+write_data len 1151, time nopts, type header atom -
 write_data len 884, time 0, type sync atom sidx
 write_data len 876, time 1000000, type sync atom sidx
 272a474cfd2a68cc5f05b426b14a2b7d 876 empty-moov-second-frag
 write_data len 148, time nopts, type trailer atom -
-write_data len 28, time nopts, type header atom -
-write_data len 1123, time nopts, type header atom -
+write_data len 1151, time nopts, type header atom -
 write_data len 876, time 1000000, type sync atom sidx
 272a474cfd2a68cc5f05b426b14a2b7d 876 empty-moov-second-frag-discont
 write_data len 110, time nopts, type trailer atom -
@@ -145,8 +138,7 @@ write_data len 916, time 0, type sync atom moof
 write_data len 908, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
 c200a345c365dd35a31e7e62a9ae6c10 3203 delay-moov-elst-neg-cts
-write_data len 36, time nopts, type header atom ftyp
-write_data len 1123, time nopts, type header atom -
+write_data len 1159, time nopts, type header atom ftyp
 write_data len 1188, time 0, type sync atom moof
 write_data len 908, time 1033333, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-- 
2.16.4



More information about the ffmpeg-devel mailing list