[FFmpeg-cvslog] avformat/matroskaenc: Don't use size of inexistent Cluster
Andreas Rheinhardt
git at videolan.org
Tue Apr 21 08:41:09 EEST 2020
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Wed Jan 22 20:01:30 2020 +0100| [4dd63ae86c311da269426803d440d907cd9f66a2] | committer: Andreas Rheinhardt
avformat/matroskaenc: Don't use size of inexistent Cluster
In order to determine whether the current Cluster needs to be closed
because of the limits on clustersize and clustertime,
mkv_write_packet() would first get the size of the current Cluster by
applying avio_tell() on the dynamic buffer holding the current Cluster.
It did this without checking whether there is a dynamic buffer for
writing Clusters open right now.
In this case (which happens when writing the first packet)
avio_tell() returned AVERROR(EINVAL); yet it is not good to rely on
avio_tell() (or actually, avio_seek()) to handle the situation
gracefully.
Fixing this is easy: Only check whether a Cluster needs to be closed
if a Cluster is in fact open.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4dd63ae86c311da269426803d440d907cd9f66a2
---
libavformat/matroskaenc.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 2cd5933da8..5e0346d341 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -2332,6 +2332,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
if (ret < 0)
return ret;
+ if (mkv->cluster_pos != -1) {
if (mkv->tracks[pkt->stream_index].write_dts)
cluster_time = pkt->dts - mkv->cluster_pts;
else
@@ -2359,9 +2360,10 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
start_new_cluster = 0;
}
- if (mkv->cluster_pos != -1 && start_new_cluster) {
+ if (start_new_cluster) {
mkv_end_cluster(s);
}
+ }
if (!mkv->cluster_pos)
avio_write_marker(s->pb,
More information about the ffmpeg-cvslog
mailing list