Commit 3414115c authored by Marton Balint's avatar Marton Balint

avformat: convert some avio_flush() calls to avio_write_marker(AVIO_DATA_MARKER_FLUSH_POINT)

Converting 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 control FLUSH_POINT flushing behaviour using the -flush_packets
option, the default typically means to flush unless a non-streamed file output
is used, so this change should have no adverse effect on streaming even if it
is assumed that after an avio_flush() the output buffer is clean so small
seekbacks within the output buffer will work even when the IO context is not
seekable.
Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent f4a8ea7f
...@@ -892,7 +892,8 @@ static void flush_packet(AVFormatContext *s) ...@@ -892,7 +892,8 @@ static void flush_packet(AVFormatContext *s)
avio_write(s->pb, asf->packet_buf, s->packet_size - packet_hdr_size); avio_write(s->pb, asf->packet_buf, s->packet_size - packet_hdr_size);
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
asf->nb_packets++; asf->nb_packets++;
asf->packet_nb_payloads = 0; asf->packet_nb_payloads = 0;
asf->packet_timestamp_start = -1; asf->packet_timestamp_start = -1;
......
...@@ -2235,7 +2235,7 @@ static void mkv_end_cluster(AVFormatContext *s) ...@@ -2235,7 +2235,7 @@ static void mkv_end_cluster(AVFormatContext *s)
end_ebml_master_crc32(s->pb, &mkv->cluster_bc, mkv); end_ebml_master_crc32(s->pb, &mkv->cluster_bc, mkv);
mkv->cluster_pos = -1; mkv->cluster_pos = -1;
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
} }
static int mkv_check_new_extra_data(AVFormatContext *s, AVPacket *pkt) static int mkv_check_new_extra_data(AVFormatContext *s, AVPacket *pkt)
......
...@@ -5152,7 +5152,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force) ...@@ -5152,7 +5152,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
if (mov->flags & FF_MOV_FLAG_DELAY_MOOV) { if (mov->flags & FF_MOV_FLAG_DELAY_MOOV) {
if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX) if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX)
mov->reserved_header_pos = avio_tell(s->pb); mov->reserved_header_pos = avio_tell(s->pb);
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
mov->moov_written = 1; mov->moov_written = 1;
return 0; return 0;
} }
...@@ -5176,7 +5176,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force) ...@@ -5176,7 +5176,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
mov->tracks[i].entry = 0; mov->tracks[i].entry = 0;
mov->tracks[i].end_reliable = 0; mov->tracks[i].end_reliable = 0;
} }
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
return 0; return 0;
} }
...@@ -5241,7 +5241,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force) ...@@ -5241,7 +5241,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
} }
if (write_moof) { if (write_moof) {
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
mov_write_moof_tag(s->pb, mov, moof_tracks, mdat_size); mov_write_moof_tag(s->pb, mov, moof_tracks, mdat_size);
mov->fragments++; mov->fragments++;
...@@ -5273,7 +5273,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force) ...@@ -5273,7 +5273,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
mov->mdat_size = 0; mov->mdat_size = 0;
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
return 0; return 0;
} }
......
...@@ -928,7 +928,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, ...@@ -928,7 +928,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index,
for (i = 0; i < zero_trail_bytes; i++) for (i = 0; i < zero_trail_bytes; i++)
avio_w8(ctx->pb, 0x00); avio_w8(ctx->pb, 0x00);
avio_flush(ctx->pb); avio_write_marker(ctx->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
s->packet_number++; s->packet_number++;
...@@ -957,7 +957,7 @@ static void put_vcd_padding_sector(AVFormatContext *ctx) ...@@ -957,7 +957,7 @@ static void put_vcd_padding_sector(AVFormatContext *ctx)
s->vcd_padding_bytes_written += s->packet_size; s->vcd_padding_bytes_written += s->packet_size;
avio_flush(ctx->pb); avio_write_marker(ctx->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
/* increasing the packet number is correct. The SCR of the following packs /* increasing the packet number is correct. The SCR of the following packs
* is calculated from the packet_number and it has to include the padding * is calculated from the packet_number and it has to include the padding
......
...@@ -1936,7 +1936,7 @@ static int mxf_write_partition(AVFormatContext *s, int bodysid, ...@@ -1936,7 +1936,7 @@ static int mxf_write_partition(AVFormatContext *s, int bodysid,
} }
if(key) if(key)
avio_flush(pb); avio_write_marker(pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
return 0; return 0;
} }
......
...@@ -139,7 +139,7 @@ static int ogg_write_page(AVFormatContext *s, OGGPage *page, int extra_flags) ...@@ -139,7 +139,7 @@ static int ogg_write_page(AVFormatContext *s, OGGPage *page, int extra_flags)
return size; return size;
avio_write(s->pb, buf, size); avio_write(s->pb, buf, size);
avio_flush(s->pb); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_FLUSH_POINT);
av_free(buf); av_free(buf);
oggstream->page_count--; oggstream->page_count--;
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment