summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
7206117)
The dynamic AVIOContext would get closed pointing to the wrong position
in the buffer.
This is a regression since
650e17d88b63b5aca6e0a43483e89e64b0f7d2dd.
Reviewed-by: Dave Rice <dave@dericed.com>
Signed-off-by: James Almer <jamrial@gmail.com>
end_ebml_master_crc32(pb, &mkv->info_bc, mkv, mkv->info);
// update stream durations
end_ebml_master_crc32(pb, &mkv->info_bc, mkv, mkv->info);
// update stream durations
- if (mkv->stream_durations) {
+ if (!mkv->is_live && mkv->stream_durations) {
+ int64_t curr = avio_tell(mkv->tags_bc);
for (i = 0; i < s->nb_streams; ++i) {
AVStream *st = s->streams[i];
for (i = 0; i < s->nb_streams; ++i) {
AVStream *st = s->streams[i];
- double duration_sec = mkv->stream_durations[i] * av_q2d(st->time_base);
- char duration_string[20] = "";
- av_log(s, AV_LOG_DEBUG, "stream %d end duration = %" PRIu64 "\n", i,
- mkv->stream_durations[i]);
+ if (mkv->stream_duration_offsets[i] > 0) {
+ double duration_sec = mkv->stream_durations[i] * av_q2d(st->time_base);
+ char duration_string[20] = "";
+
+ av_log(s, AV_LOG_DEBUG, "stream %d end duration = %" PRIu64 "\n", i,
+ mkv->stream_durations[i]);
- if (!mkv->is_live && mkv->stream_duration_offsets[i] > 0) {
avio_seek(mkv->tags_bc, mkv->stream_duration_offsets[i], SEEK_SET);
snprintf(duration_string, 20, "%02d:%02d:%012.9f",
avio_seek(mkv->tags_bc, mkv->stream_duration_offsets[i], SEEK_SET);
snprintf(duration_string, 20, "%02d:%02d:%012.9f",
put_ebml_binary(mkv->tags_bc, MATROSKA_ID_TAGSTRING, duration_string, 20);
}
}
put_ebml_binary(mkv->tags_bc, MATROSKA_ID_TAGSTRING, duration_string, 20);
}
}
+ avio_seek(mkv->tags_bc, curr, SEEK_SET);
}
if (mkv->tags.pos && !mkv->is_live) {
avio_seek(pb, mkv->tags.pos, SEEK_SET);
}
if (mkv->tags.pos && !mkv->is_live) {
avio_seek(pb, mkv->tags.pos, SEEK_SET);