|
|
|
@@ -128,7 +128,7 @@ typedef struct MatroskaMuxContext { |
|
|
|
|
|
|
|
AVPacket cur_audio_pkt; |
|
|
|
|
|
|
|
int have_attachments; |
|
|
|
unsigned nb_attachments; |
|
|
|
int have_video; |
|
|
|
|
|
|
|
int reserve_cues_space; |
|
|
|
@@ -1113,7 +1113,6 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, |
|
|
|
AVDictionaryEntry *tag; |
|
|
|
|
|
|
|
if (par->codec_type == AVMEDIA_TYPE_ATTACHMENT) { |
|
|
|
mkv->have_attachments = 1; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -1370,6 +1369,9 @@ static int mkv_write_tracks(AVFormatContext *s) |
|
|
|
AVIOContext *pb = s->pb; |
|
|
|
int i, ret, default_stream_exists = 0; |
|
|
|
|
|
|
|
if (mkv->nb_attachments == s->nb_streams) |
|
|
|
return 0; |
|
|
|
|
|
|
|
mkv_add_seekhead_entry(mkv, MATROSKA_ID_TRACKS, avio_tell(pb)); |
|
|
|
|
|
|
|
ret = start_ebml_master_crc32(&mkv->tracks_bc, mkv); |
|
|
|
@@ -1619,7 +1621,7 @@ static int mkv_write_tags(AVFormatContext *s) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (mkv->have_attachments && mkv->mode != MODE_WEBM) { |
|
|
|
if (mkv->nb_attachments && mkv->mode != MODE_WEBM) { |
|
|
|
for (i = 0; i < s->nb_streams; i++) { |
|
|
|
mkv_track *track = &mkv->tracks[i]; |
|
|
|
AVStream *st = s->streams[i]; |
|
|
|
@@ -1653,7 +1655,7 @@ static int mkv_write_attachments(AVFormatContext *s) |
|
|
|
AVIOContext *dyn_cp = NULL, *pb = s->pb; |
|
|
|
int i, ret; |
|
|
|
|
|
|
|
if (!mkv->have_attachments) |
|
|
|
if (!mkv->nb_attachments) |
|
|
|
return 0; |
|
|
|
|
|
|
|
mkv_add_seekhead_entry(mkv, MATROSKA_ID_ATTACHMENTS, avio_tell(pb)); |
|
|
|
@@ -2499,9 +2501,12 @@ static int mkv_write_trailer(AVFormatContext *s) |
|
|
|
put_ebml_float(mkv->info_bc, MATROSKA_ID_DURATION, mkv->duration); |
|
|
|
end_ebml_master_crc32(pb, &mkv->info_bc, mkv, MATROSKA_ID_INFO, 0, 0); |
|
|
|
|
|
|
|
// write tracks master |
|
|
|
avio_seek(pb, mkv->tracks_pos, SEEK_SET); |
|
|
|
end_ebml_master_crc32(pb, &mkv->tracks_bc, mkv, MATROSKA_ID_TRACKS, 0, 0); |
|
|
|
if (mkv->tracks_bc) { |
|
|
|
// write Tracks master |
|
|
|
avio_seek(pb, mkv->tracks_pos, SEEK_SET); |
|
|
|
end_ebml_master_crc32(pb, &mkv->tracks_bc, mkv, |
|
|
|
MATROSKA_ID_TRACKS, 0, 0); |
|
|
|
} |
|
|
|
|
|
|
|
// update stream durations |
|
|
|
if (mkv->tags_bc) { |
|
|
|
@@ -2649,6 +2654,7 @@ static int mkv_init(struct AVFormatContext *s) |
|
|
|
av_log(s, AV_LOG_WARNING, "Stream %d will be ignored " |
|
|
|
"as WebM doesn't support attachments.\n", i); |
|
|
|
} |
|
|
|
mkv->nb_attachments++; |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
|