aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-01-16 05:49:15 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2020-01-17 20:17:55 +0100
commit42df71d0c5df25958e6c53a61716961a94eb06cd (patch)
treef71086abaf6cf708554d2a4d15f282521ba2f17a
parent61e0d71946f58e8864776d7495318103c0552754 (diff)
downloadffmpeg-42df71d0c5df25958e6c53a61716961a94eb06cd.tar.gz
avformat/flvenc: Avoid unnecessary seek
When shifting the already written data in order to write the keyframe index, the flv muxer would first store the pre-shift size, then calculate how big the index will be eventually, then perform some seeks to update some size fields, then seek back to the end of the file to get the new position, followed by a seek to the position where writing will really start. Seeking back to the (already known) end position (that is actually used to perform this seek) to get the end position is of course unnecessary. It has been removed. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/flvenc.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
index 1aaf0333ca..5cf3ce8a1a 100644
--- a/libavformat/flvenc.c
+++ b/libavformat/flvenc.c
@@ -580,7 +580,7 @@ static int shift_data(AVFormatContext *s)
int n = 0;
int64_t metadata_size = 0;
FLVContext *flv = s->priv_data;
- int64_t pos, pos_end = avio_tell(s->pb);
+ int64_t pos, pos_end = avio_tell(s->pb); /* Save the pre-shift size. */
uint8_t *buf, *read_buf[2];
int read_buf_id = 0;
int read_size[2];
@@ -608,7 +608,6 @@ static int shift_data(AVFormatContext *s)
avio_seek(s->pb, flv->metadata_totalsize_pos, SEEK_SET);
avio_wb32(s->pb, flv->metadata_totalsize + 11 + metadata_size);
- avio_seek(s->pb, pos_end, SEEK_SET);
/* Shift the data: the AVIO context of the output can only be used for
* writing, so we re-open the same output, but for reading. It also avoids
@@ -621,9 +620,7 @@ static int shift_data(AVFormatContext *s)
goto end;
}
- /* mark the end of the shift to up to the last data we wrote, and get ready
- * for writing */
- pos_end = avio_tell(s->pb);
+ /* Get ready for writing. */
avio_seek(s->pb, flv->keyframes_info_offset + metadata_size, SEEK_SET);
/* start reading at where the keyframe index information will be placed */