diff mbox series

[FFmpeg-devel,2/6] avformat: remove uneeded avio_flush() calls from the end of write_header functions

Message ID 20200105131413.22707-2-cus@passwd.hu
State New
Headers show
Series [FFmpeg-devel,1/6] avformat: remove unneded avio_flush() calls before calling avio_close_dyn_buf()
Related show

Checks

Context Check Description
andriy/ffmpeg-patchwork pending
andriy/ffmpeg-patchwork success Applied patch
andriy/ffmpeg-patchwork success Configure finished
andriy/ffmpeg-patchwork success Make finished
andriy/ffmpeg-patchwork success Make fate finished

Commit Message

Marton Balint Jan. 5, 2020, 1:14 p.m. UTC
The IO context is flushed by libavformat/mux.c after writing the header by calling
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_UNKNOWN), so this
change should have no effect at all.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavformat/aiffenc.c     | 3 ---
 libavformat/amr.c         | 1 -
 libavformat/asfenc.c      | 2 --
 libavformat/assenc.c      | 1 -
 libavformat/astenc.c      | 2 --
 libavformat/au.c          | 1 -
 libavformat/avienc.c      | 2 --
 libavformat/cafenc.c      | 1 -
 libavformat/ffmetaenc.c   | 1 -
 libavformat/framehash.c   | 1 -
 libavformat/gxfenc.c      | 1 -
 libavformat/icoenc.c      | 2 --
 libavformat/idroqenc.c    | 1 -
 libavformat/ilbc.c        | 1 -
 libavformat/jacosubenc.c  | 1 -
 libavformat/matroskaenc.c | 2 --
 libavformat/microdvdenc.c | 1 -
 libavformat/mmf.c         | 2 --
 libavformat/movenc.c      | 1 -
 libavformat/mpjpeg.c      | 1 -
 libavformat/nutenc.c      | 2 --
 libavformat/rmenc.c       | 1 -
 libavformat/rsoenc.c      | 2 --
 libavformat/smjpegenc.c   | 1 -
 libavformat/soxenc.c      | 2 --
 libavformat/swfenc.c      | 1 -
 libavformat/wavenc.c      | 2 --
 libavformat/webvttenc.c   | 1 -
 28 files changed, 40 deletions(-)

Comments

Martin Storsjö Jan. 5, 2020, 8:31 p.m. UTC | #1
On Sun, 5 Jan 2020, Marton Balint wrote:

> The IO context is flushed by libavformat/mux.c after writing the header by calling
> avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_UNKNOWN), so this
> change should have no effect at all.
>
> Signed-off-by: Marton Balint <cus@passwd.hu>

If I read avio_write_marker correctly, it won't do an implicit flush on 
these calls unless the user actually has set the s->write_data_type 
function pointer - which only is set when used by direct API users.

So for normal cases, if I read it correctly, one can't assume 
avio_write_marker implies a flush in general.

// Martin
Marton Balint Jan. 6, 2020, 12:01 a.m. UTC | #2
On Sun, 5 Jan 2020, Martin Storsjö wrote:

> On Sun, 5 Jan 2020, Marton Balint wrote:
>
>> The IO context is flushed by libavformat/mux.c after writing the header by 
>> calling
>> avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_UNKNOWN), so this
>> change should have no effect at all.
>> 
>> Signed-off-by: Marton Balint <cus@passwd.hu>
>
> If I read avio_write_marker correctly, it won't do an implicit flush on these 
> calls unless the user actually has set the s->write_data_type function 
> pointer - which only is set when used by direct API users.
>
> So for normal cases, if I read it correctly, one can't assume 
> avio_write_marker implies a flush in general.

Yes, you are right, I missed that too... I believe the patch is still 
correct if I fix the commit message:

avformat: remove avio_flush() calls from the end of write_header functions

To make it consistent with other muxers.

The user can still control the generic flushing behaviour after 
write_header (same way as after packets) using the -flush_packets option, 
the default typically means to flush unless a non-streamed file output is 
used.

Therefore this change should have no adverse effect on streaming, even if 
it is assumed that the first packet has a clean buffer, so small seekbacks 
within the output buffer work even when the IO context is not seekable.

Thanks,
Marton
Martin Storsjö Jan. 6, 2020, 11:47 a.m. UTC | #3
On Mon, 6 Jan 2020, Marton Balint wrote:

>
>
> On Sun, 5 Jan 2020, Martin Storsjö wrote:
>
>> On Sun, 5 Jan 2020, Marton Balint wrote:
>>
>>> The IO context is flushed by libavformat/mux.c after writing the header by 
>>> calling
>>> avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_UNKNOWN), so 
> this
>>> change should have no effect at all.
>>> 
>>> Signed-off-by: Marton Balint <cus@passwd.hu>
>>
>> If I read avio_write_marker correctly, it won't do an implicit flush on 
> these 
>> calls unless the user actually has set the s->write_data_type function 
>> pointer - which only is set when used by direct API users.
>>
>> So for normal cases, if I read it correctly, one can't assume 
>> avio_write_marker implies a flush in general.
>
> Yes, you are right, I missed that too... I believe the patch is still 
> correct if I fix the commit message:
>
> avformat: remove avio_flush() calls from the end of write_header functions

Hmm, yes, with that reasoning I think it is ok.

// Martin
Marton Balint Jan. 7, 2020, 9:21 p.m. UTC | #4
On Mon, 6 Jan 2020, Martin Storsjö wrote:

> On Mon, 6 Jan 2020, Marton Balint wrote:
>
>>
>>
>> On Sun, 5 Jan 2020, Martin Storsjö wrote:
>>
>>> On Sun, 5 Jan 2020, Marton Balint wrote:
>>>
>>>> The IO context is flushed by libavformat/mux.c after writing the header 
> by 
>>>> calling
>>>> avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_UNKNOWN), so 
>> this
>>>> change should have no effect at all.
>>>> 
>>>> Signed-off-by: Marton Balint <cus@passwd.hu>
>>>
>>> If I read avio_write_marker correctly, it won't do an implicit flush on 
>> these 
>>> calls unless the user actually has set the s->write_data_type function 
>>> pointer - which only is set when used by direct API users.
>>>
>>> So for normal cases, if I read it correctly, one can't assume 
>>> avio_write_marker implies a flush in general.
>>
>> Yes, you are right, I missed that too... I believe the patch is still 
>> correct if I fix the commit message:
>>
>> avformat: remove avio_flush() calls from the end of write_header functions
>
> Hmm, yes, with that reasoning I think it is ok.

Thanks for your reviews, I have pushed the series.

Regards,
Marton
diff mbox series

Patch

diff --git a/libavformat/aiffenc.c b/libavformat/aiffenc.c
index e25794d185..ec2c7db09a 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;
 }
 
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..d03cff91c0 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;
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..d38a3aab38 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;
 }
 
diff --git a/libavformat/au.c b/libavformat/au.c
index cb48e67feb..19a0f56963 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;
 }
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 940ea33510..23cc58ea76 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;
 }
 
diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c
index 0f7c4ebbb3..8fe1dcef19 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;
 }
 
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/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..c9fb0dcd91 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;
 }
 
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/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..4e087fc920 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;
 }
 
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index e422bdd071..e20eea7571 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -6579,7 +6579,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/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/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/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..7259131b03 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;
 }
 
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/wavenc.c b/libavformat/wavenc.c
index 2b28149056..c44d6d26e9 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;
 }
 
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;
 }