mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-31 20:02:07 +00:00
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@gmail.com>
This commit is contained in:
parent
86de864741
commit
4dd63ae86c
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user