avformat/matroskaenc: Write additional mappings for webm

The elements written in mkv_write_blockadditionmapping
(MaxBlockAdditionID, BlockAddIDType and BlockAddIDValue) are all
allowed in WebM as well. Move them out of the "if (!IS_WEBM)"
block.

Matroska spec:
https://www.matroska.org/technical/elements.html#MaxBlockAdditionID
(See column with title "W" which shows WebM availability).

WebM spec:
https://www.webmproject.org/docs/container/#MaxBlockAdditionID

Signed-off-by: Vignesh Venkat <vigneshv@google.com>
This commit is contained in:
Vignesh Venkat
2026-05-07 15:28:07 -07:00
parent c8a4770599
commit 8518599cd1
5 changed files with 27 additions and 30 deletions
+18 -21
View File
@@ -2145,8 +2145,7 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv,
return AVERROR(EINVAL);
}
if (!IS_WEBM(mkv))
mkv_write_blockadditionmapping(s, mkv, par, pb, track, st);
mkv_write_blockadditionmapping(s, mkv, par, pb, track, st);
if (!IS_WEBM(mkv) || par->codec_id != AV_CODEC_ID_WEBVTT) {
uint8_t *codecpriv;
@@ -3372,30 +3371,28 @@ after_cues:
if (mkv->track.bc) {
// write Tracks master
if (!IS_WEBM(mkv)) {
AVIOContext *track_bc = mkv->track.bc;
AVIOContext *track_bc = mkv->track.bc;
for (unsigned i = 0; i < s->nb_streams; i++) {
const mkv_track *track = &mkv->tracks[i];
for (unsigned i = 0; i < s->nb_streams; i++) {
const mkv_track *track = &mkv->tracks[i];
if (!track->max_blockaddid)
continue;
if (!track->max_blockaddid)
continue;
// We reserved a single byte to write this value.
av_assert0(track->max_blockaddid <= 0xFF);
// We reserved a single byte to write this value.
av_assert0(track->max_blockaddid <= 0xFF);
avio_seek(track_bc, track->blockadditionmapping_offset, SEEK_SET);
avio_seek(track_bc, track->blockadditionmapping_offset, SEEK_SET);
put_ebml_uint(track_bc, MATROSKA_ID_TRACKMAXBLKADDID,
track->max_blockaddid);
if (track->max_blockaddid == MATROSKA_BLOCK_ADD_ID_ITU_T_T35) {
ebml_master mapping_master = start_ebml_master(track_bc, MATROSKA_ID_TRACKBLKADDMAPPING, 8);
put_ebml_uint(track_bc, MATROSKA_ID_BLKADDIDTYPE,
MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35);
put_ebml_uint(track_bc, MATROSKA_ID_BLKADDIDVALUE,
MATROSKA_BLOCK_ADD_ID_ITU_T_T35);
end_ebml_master(track_bc, mapping_master);
}
put_ebml_uint(track_bc, MATROSKA_ID_TRACKMAXBLKADDID,
track->max_blockaddid);
if (track->max_blockaddid == MATROSKA_BLOCK_ADD_ID_ITU_T_T35) {
ebml_master mapping_master = start_ebml_master(track_bc, MATROSKA_ID_TRACKBLKADDMAPPING, 8);
put_ebml_uint(track_bc, MATROSKA_ID_BLKADDIDTYPE,
MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35);
put_ebml_uint(track_bc, MATROSKA_ID_BLKADDIDVALUE,
MATROSKA_BLOCK_ADD_ID_ITU_T_T35);
end_ebml_master(track_bc, mapping_master);
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
dc7593b977b092e522018de7e0d12681 *tests/data/fate/webm-av1-extradata-update.webm
23047 tests/data/fate/webm-av1-extradata-update.webm
4be8d56dd9c4c94b704d41c8b354f3e7 *tests/data/fate/webm-av1-extradata-update.webm
23062 tests/data/fate/webm-av1-extradata-update.webm
#extradata 0: 35, 0x527207cd
#tb 0: 1/1000
#media_type 0: video
+2 -2
View File
@@ -1,5 +1,5 @@
e2d3d812e6d9cf05a36eaefe02801a99 *tests/data/fate/webm-dash-chapters.webm
111149 tests/data/fate/webm-dash-chapters.webm
d3146d0817d9f3471b4bda4fa61cc090 *tests/data/fate/webm-dash-chapters.webm
111153 tests/data/fate/webm-dash-chapters.webm
#extradata 0: 3469, 0xc6769ddc
#tb 0: 1/1000
#media_type 0: audio
+3 -3
View File
@@ -1,5 +1,5 @@
7c5ae91189589c07f92aa97cb9b3d9e1 *tests/data/fate/webm-hdr10-plus-remux.webm
13842 tests/data/fate/webm-hdr10-plus-remux.webm
4bd2b26ae7c25c3e873ee76229ecbe7c *tests/data/fate/webm-hdr10-plus-remux.webm
13857 tests/data/fate/webm-hdr10-plus-remux.webm
#tb 0: 1/1000
#media_type 0: video
#codec_id 0: vp9
@@ -16,7 +16,7 @@ dts_time=0.000000
duration=40
duration_time=0.040000
size=13350
pos=392
pos=407
flags=K__
[SIDE_DATA]
side_data_type=HDR10+ Dynamic Metadata (SMPTE 2094-40)
+2 -2
View File
@@ -1,5 +1,5 @@
c372c76c062d368f1d17373c19f83579 *tests/data/fate/webm-webvtt-remux.webm
6524 tests/data/fate/webm-webvtt-remux.webm
22d1105067d2ac031ecc21542750255e *tests/data/fate/webm-webvtt-remux.webm
6540 tests/data/fate/webm-webvtt-remux.webm
#tb 0: 1/1000
#media_type 0: subtitle
#codec_id 0: webvtt