mkvmerge: HEVC: normalize parameter set NALUs

Normalization means that each key frame is prefixed with exactly one
set of the currently active picture, sequence & video parameter sets.

Fixes #3034 and prevents the same class of issues where the parameter
sets required to decode do not match the ones in CodecPrivate but
aren't present in front of the key frames. This often happens when
appending files.
This commit is contained in:
Moritz Bunkus 2021-03-04 20:07:20 +01:00
parent f617da2f14
commit e75e9c503e
No known key found for this signature in database
GPG Key ID: 74AF00ADF2E32C85
6 changed files with 36 additions and 76 deletions

View File

@ -56,7 +56,11 @@
* mkvmerge, mkvpropedit: tags: mkvmerge will no longer set the "target type"
for track statistics tags (earlier it used `MOVIE`). The "target type value"
will still be set to `50`. Fixes #3074.
* mkvextract: HEVC/H.265: mkvextract will now normalize the placement of VPS,
* mkvmerge, mkvextract: HEVC/H.265: both programs will now normalize the
placement of VPS, SPS and PPS NALUs. Each key frame is prefixed with exactly
one copy of the currently active parameter sets. This fixes certain classes
of bugs related to splitting/appending. Fixes #3034.
* mkvmerge: HEVC/H.265: mkvextract will now normalize the placement of VPS,
SPS and PPS NALUs. Each key frame is prefixed with exactly one copy of the
currently active parameter sets.

View File

@ -1761,18 +1761,11 @@ qtmp4_reader_c::create_video_packetizer_mpegh_p2(qtmp4_demuxer_c &dmx) {
auto packetizer = new hevc_video_packetizer_c(this, m_ti, 0.0, dmx.v_width, dmx.v_height);
dmx.ptzr = add_packetizer(packetizer);
// rederive_timestamp_order() makes use of m_htrack_default_duration, so we set it early here
if (dmx.frame_rate.numerator()) {
auto duration = boost::rational_cast<int64_t>(int64_rational_c{dmx.frame_rate.denominator(), dmx.frame_rate.numerator()} * 1'000'000'000ll);
packetizer->set_track_default_duration(duration);
}
if (dmx.raw_frame_offset_table.empty()) {
mxdebug_if(m_debug_headers, fmt::format("HEVC/H.265 track {0} doesn't have a CTTS atom; enabling re-ordering of timestamps\n", dmx.id));
packetizer->rederive_timestamp_order();
}
show_packetizer_info(dmx.id, ptzr(dmx.ptzr));
}

View File

@ -27,8 +27,7 @@ class hevc_video_packetizer_private_c {
public:
int nalu_size_len{};
int64_t max_nalu_size{};
bool rederive_timestamp_order{};
std::unique_ptr<mtx::hevc::es_parser_c> parser;
mtx::hevc::es_parser_c parser;
};
hevc_video_packetizer_c::
@ -40,12 +39,18 @@ hevc_video_packetizer_c(generic_reader_c *p_reader,
: generic_video_packetizer_c{p_reader, p_ti, MKV_V_MPEGH_HEVC, fps, width, height}
, p_ptr{new hevc_video_packetizer_private_c}
{
auto &p = *p_func();
m_relaxed_timestamp_checking = true;
if (23 <= m_ti.m_private_data->get_size())
p_ptr->nalu_size_len = (m_ti.m_private_data->get_buffer()[21] & 0x03) + 1;
set_codec_private(m_ti.m_private_data);
p.parser.normalize_parameter_sets();
p.parser.set_hevcc(m_hcodec_private);
p.parser.set_container_default_duration(m_htrack_default_duration);
}
void
@ -84,19 +89,15 @@ int
hevc_video_packetizer_c::process(packet_cptr packet) {
auto &p = *p_func();
if (p.rederive_timestamp_order) {
process_rederiving_timestamp_order(*packet);
return FILE_STATUS_MOREDATA;
}
if (packet->is_key_frame() && (VFT_PFRAMEAUTOMATIC != packet->bref))
p.parser.set_next_i_slice_is_key_frame();
if (VFT_PFRAMEAUTOMATIC == packet->bref) {
packet->fref = -1;
packet->bref = m_ref_timestamp;
}
if (packet->has_timestamp())
p.parser.add_timestamp(packet->timestamp);
m_ref_timestamp = packet->timestamp;
p.parser.add_bytes_framed(packet->data, p.nalu_size_len);
add_packet(packet);
flush_frames();
return FILE_STATUS_MOREDATA;
}
@ -116,43 +117,11 @@ hevc_video_packetizer_c::can_connect_to(generic_packetizer_c *src,
return CAN_CONNECT_YES;
}
void
hevc_video_packetizer_c::rederive_timestamp_order() {
auto &p = *p_func();
if (p.rederive_timestamp_order)
return;
p.rederive_timestamp_order = true;
p.parser.reset(new mtx::hevc::es_parser_c);
p.parser->set_hevcc(m_hcodec_private);
p.parser->set_container_default_duration(m_htrack_default_duration);
}
void
hevc_video_packetizer_c::process_rederiving_timestamp_order(packet_t &packet) {
auto &p = *p_func();
if (packet.is_key_frame() && (VFT_PFRAMEAUTOMATIC != packet.bref))
p.parser->set_next_i_slice_is_key_frame();
if (packet.has_timestamp())
p.parser->add_timestamp(packet.timestamp);
p.parser->add_bytes_framed(packet.data, p.nalu_size_len);
flush_frames();
}
void
hevc_video_packetizer_c::flush_impl() {
auto &p = *p_func();
if (!p.rederive_timestamp_order)
return;
p.parser->flush();
p.parser.flush();
flush_frames();
}
@ -160,11 +129,8 @@ void
hevc_video_packetizer_c::flush_frames() {
auto &p = *p_func();
if (!p.rederive_timestamp_order)
return;
while (p.parser->frame_available()) {
auto frame = p.parser->get_frame();
while (p.parser.frame_available()) {
auto frame = p.parser.get_frame();
add_packet(new packet_t(frame.m_data, frame.m_start,
frame.m_end > frame.m_start ? frame.m_end - frame.m_start : m_htrack_default_duration,
frame.m_keyframe ? -1 : frame.m_start + frame.m_ref1));

View File

@ -36,13 +36,9 @@ public:
return YT("HEVC/H.265");
}
virtual void rederive_timestamp_order();
protected:
virtual void extract_aspect_ratio();
virtual void process_rederiving_timestamp_order(packet_t &packet);
virtual void flush_impl() override;
virtual void flush_frames();
};

View File

@ -39,6 +39,7 @@ hevc_es_video_packetizer_c::hevc_es_video_packetizer_c(generic_reader_c *p_reade
set_codec_id(MKV_V_MPEGH_HEVC);
m_parser.normalize_parameter_sets();
m_parser.set_keep_ar_info(false);
// If no external timestamp file has been specified then mkvmerge

View File

@ -287,17 +287,17 @@ T_439pcm_in_m2ts:f3150327983d09ff2e5f3013d036c1d4-4769a6942eaa57839df8f4a39c1aef
T_440chapter_display_language_default_value:5327301bd7fdd9fff7d161efed1a3738:passed:20140929-142306:0.021103552
T_441mkvmerge_mp4_big_endian_pcm:7b62ec44804bd2a157dbd93e2c3ef370:passed:20141104-190420:0.278181073
T_442ui_locale_ca_ES:e799c32fad802af9eb581be621be42e1-efc218c7d73104f27e852a4d6b66412e:passed:20141105-201811:0.070000034
T_443hevc_keep_user_data:39daf2d167d04e6382febea32771f1e3:passed:20141105-202533:1.308417598
T_443hevc_keep_user_data:a56d77d8fe7fcfb5247d1ff807d122ab:passed:20141105-202533:1.308417598
T_444pcm_statistics_from_packaged_sources:8d309cc7ecf4d7e71fa79a71415f6a99-8d309cc7ecf4d7e71fa79a71415f6a99-e21f94eb844b07ee9a3519d02ee1f13b-e21f94eb844b07ee9a3519d02ee1f13b-+++:passed:20141205-220805:0.604375231
T_445teletext_subs_missing_second_line:cc2447aafd0db7bc535a8f2e35e2c8c5:passed:20141210-224823:5.420908642
T_446mkvinfo_output:5695a5439c153157e19a934269cdaea1-f15a8da9d1b6540855635ebeb5ccdc2a-8b35490726ece183fc682b4bc233740c-7a01d6443aeb4c2b47f7e5d7e84dec93-91201bb0e71414cb6554a3d1a9b4e1aa-864509262328b6f06a60593fe67faccc-02891151a2676dd06a94e14fe4a04edd-131db4e7dbfa080f36bc53c48d2da664-3a537c6bd77f7d63ca79a1ea6fc6ddc2-d5adc00145461d15d24eb60745f7514a-28ec4d5c3836d91ae42fa89847866d3d-ac5293a69a3e6b20d968ec58d87df5ae-f73e5025f2b7a77684bf1947491b852f-6cc8fc3fea0eddb69256494c5162e02a-d1f7ead1fba5d3bb3970c1d0b7737877-b6e946c3229627d31f75246559875bcc-775bc7eecc1585bb4f4138a32a8d6dbd-eb9d1a0f16c5f9d6dc895f6edae287a4-b4a1f55ed7340e4a3f0734724333050e-84a0de136c7956183120eabacbcd0917-21795d7ac3bfa3584cd9256751e8d23a-2b223ce13a45cef99354d6fb64a428b6-f1cb0361a5d41e71dd73b4605e3b259f-b4928d1b6883924051bac4bbe8687c4e:passed:20141216-165433:1.564089101
T_447mkvinfo_rounded_timecodes:96f93a99dcdd5302278d4f94fb37b2a9-3ae00f30fa7122c199c2dbccf3fde84d-3351fe5245b6f149cb26656e36d7ab86:passed:20141216-172642:1.712081143
T_448mpeg_ts_with_hevc:887d72c932aa9454d8c7ef88fd4379a7:passed:20141216-181650:1.133097273
T_448mpeg_ts_with_hevc:0a0908c207ce81bac75074136a8d0e44:passed:20141216-181650:1.133097273
T_449segfaults_assertions:error-2bacc50e6e28fb2a92d2abf2583405f5-ok-2684a2b671068c517bafd3a2cfb2aaca-844bf63953a1f092ccc04de6ad1d59d1-e5293923eb3aaba5cd05b7f1c48a6363-error-error-ok-7966d6b314d81a3e51cad800120732b5-2f684dad1036c815e45ac781e6ede014-2684a2b671068c517bafd3a2cfb2aaca-2684a2b671068c517bafd3a2cfb2aaca-27e77e74c5180c3ea71c18bfbcdd6918-73a5bdca335a3447cf164a3e9ad8c166-27e77e74c5180c3ea71c18bfbcdd6918:passed:20141219-195127:0.830949441
T_450aac_loas_latm_in_mpeg_ts:a4191415fb0a8158762d5cf35f4c32a9:passed:20141229-210738:0.515183095
T_451aac_loas_latm_raw:42355259d1e77342631bc2f70ca5d466:passed:20141230-155351:0.589778873
T_452mkvinfo_track_statistics_frame_order:7958a8037e571d10a5203abf2599da93-4299e6b9e7d46b9ceb7ea1705193afd2:passed:20141230-182428:1.579605124
T_453mp4_with_hevc:b8e9ec85250882a9a7a90f1ae681aeee:passed:20141231-125834:0.046223562
T_453mp4_with_hevc:78a0a07fc14c6a7003f597d2272d5e20:passed:20141231-125834:0.046223562
T_454mp4_dash:7f5f4a08b1a5c2b501ec103b55b5900a-f320e2bc2d06131aa2e0e93879a80b3d:passed:20141231-214733:0.429881173
T_455he_aacv2_ps:d6b01c56fc2b08d7334861d2470b842f:passed:20150101-152553:0.075964546
T_456tta:7b0a56cc36a856d5ee42090558d65944-a3f2a14c15e709027c05445ac91b0659:passed:20150103-140714:0.148697252
@ -308,7 +308,7 @@ T_460truehd:1d67400d0fd744bf0e517d08c73a77f3-1d67400d0fd744bf0e517d08c73a77f3-21
T_461truehd_from_mpeg_ts:1634caaf0a89d00b92f9c2a5bcbf4f32-4fae7596114c027701fec3d802eab3c7-aa1e1f6d0c23ce024747bac295d0c75f:passed:20150212-134650:2.270775532
T_462dtshd_reduce_to_core:c32b270c5c388d445a1c59fc1d88b440-3c1a2b2fe3057219f02d8a89ada5cf4d-3c1a2b2fe3057219f02d8a89ada5cf4d:passed:20150212-223839:1.367529862
T_463a_ms_acm_with_track_tags:2bf54d21a74f7dd7fdbf0698430d5987-fe30f98d8d272955de99e8606c0e9504:passed:20150218-142924:0.139369636
T_464mp4_mp3_track_sampling_rate_0:61930ae06135006ffe56a873b2c0abde-bb7671a49c94ea3c44f688d5b35c1caf:passed:20150223-190257:0.939161518
T_464mp4_mp3_track_sampling_rate_0:61930ae06135006ffe56a873b2c0abde-137a5bf2670c30b266145cfbce80e335:passed:20150223-190257:0.939161518
T_465propedit_gaps_of_130_bytes:d29c6a18e3e50373aacc94ff7084e2bf:passed:20150223-210006:0.085134008
T_466mkvextract_avi_8bpp:2327a134fc9d96098b29af8f69bdbf1d:passed:20150223-213412:0.034601052
T_467mpeg_ts_eac3_type_0xa1:e1c088eee6aa69b1eef4340829419b0c:passed:20150223-221854:0.595330952
@ -320,13 +320,13 @@ T_472flv_headers_signal_no_tracks:39a6f05e58c67e7da1963f91cc93afb9-0d77aa09fc0ea
T_473quicktime_cinepak_pcm:f254c7778d19189fa7f2ac157c386ce1-cc4a770c90ada1679570fc9401d9a37e:passed:20150309-204710:0.096409655
T_474quicktime_rpza:8bd78122ba8c2f6e7f67392d52c5e98a-4013c1e321377b75b51fbfdfaf0749ba:passed:20150311-192934:0.095698493
T_475quicktime_ima4_audio:136ed706317d2860c4811788d67cf803-de5209f35607c208efa02b0361baf5e9-e1c3ec561c7b4461715d013579c451de:passed:20150313-221230:0.210750769
T_476hevc_append_and_set_default_duration:8c28ec9d0b1e435d3c1a1802f1545584:passed:20150323-142700:2.506816653
T_476hevc_append_and_set_default_duration:aa5d943073e7463ab340483013866f5c:passed:20150323-142700:2.506816653
T_477ui_locale_sv_SE:23026ac2ed9767541e89f2261bcf8b60-938dc06fdd5c54793ae6c09b8a0268b1:passed:20150324-123356:0.061418784
T_478ui_locale_sr_RS_latin:e82297022868c560a80c41513033ef39-2cdbfc8453e871653f2243f91e7a8fcb:passed:20150829-204735:0.0
T_479dts_7_1_channels:d13b000f3b54077ab055d32e54e3f7c9-2d5d0b0ea0802b943e7b42f255f3ac4d:passed:20150325-221521:0.561800769
T_480dts_express:4105cd08dca7b609457595bf03ae6748-8da74dea2cf7e847d938e0419da06729:passed:20150326-093608:0.611162252
T_481dts_hd_high_resolution:658c221478f89eece2bdac12044dbdb9-8294c8bd689dfec52adb007535caa7be:passed:20150326-184450:1.647462876
T_482hevc_no_aspect_ratio_in_sps:ef5a2a9176fa333f9e7f614aca098019-08a4efa5f845b3e7f5534db6a379f7a5-04642eaafb7c9991033da5ee98f69774:passed:20150327-125855:0.880932303
T_482hevc_no_aspect_ratio_in_sps:d6ac876cc0fd6cfffcb91eae6414c074-3e64038cf5c12639dd74971b74367b8a-37a016fc555ba72d08299ae1f392fca1:passed:20150327-125855:0.880932303
T_483select_tracks_by_language:9aadbbf250c067503aedc1cdd6d777bf+6172de439dd72f20fb9c24c5ecc3d07e+6172de439dd72f20fb9c24c5ecc3d07e+6172de439dd72f20fb9c24c5ecc3d07e+7a2fa3c61bbb664f25c31906d1e68388:passed:20150328-191349:0.156972906
T_484dts_without_core_xll_substream:87eab42156241ff854373c2c4a127e0e:passed:20150328-221149:0.468020256
T_485dtshd_file_format:83597fac63db25651db2746a32194a22:passed:20150329-085728:1.683480773
@ -360,12 +360,12 @@ T_512json_identification:ca389d7ad7ae1cefc1c333dc40e25e12+ok-d6bc41ba31b316b0b8b
T_513vp9_10bit_key_frame_detection:9e596ecef1666b63700108a76bcc427d:passed:20151208-224613:0.267556245
T_514remove_track_statistics_tags_during_remux:8a924fac03de11cd7e9c3148fa8d0de4-56ee3da3b3f74d085ef65564d09446bd-2906a498c2e4fb853748979f93151db3:passed:20151215-134129:1.426290351
T_515aac_sampling_frequency_8000_is_not_sbr:9363a64297da2dde3229694180e37eda:passed:20151219-130357:0.066237884
T_516hevc_rap_sample_grouping:cd47a3414f73d42877b6dbed31b3fdce:passed:20151228-124607:0.066873869
T_516hevc_rap_sample_grouping:86c29cc883ebafa604c25a686b70d824:passed:20151228-124607:0.066873869
T_517h264_forbidden_byte_sequence_in_slice_nalu:5eb8fefb739ea5941e8a152b690de802:passed:20151228-134333:3.276176597
T_518mlp:38c3b2e0d7ed9f20a73a59dddfd5bb90-17ba892be8142e5da03b6d7315cd5767:passed:20151229-134422:0.895368448
T_519truehd:1d67400d0fd744bf0e517d08c73a77f3-1d67400d0fd744bf0e517d08c73a77f3:passed:20151229-135950:3.160459472
T_520truehd_mlp_atmos_detection:933082e71876ab5c89ce44aff9638f0e+true-d034d80ecde122fcfb1026b43a9b7032+true-af66c888721d3db496ddbeef57f7b2b6+true-7651394bf8e7025e83da2372eac987c3+true-0658d75a3ec6df57bf5e831c190eb633+true-100d3563880ec3050601c14ce8b38ac7+true:passed:20151229-160649:2.357134495
T_521mp4_edit_list_constant_offset_with_segment_duration_not_0:fc93941f3e81e984c9836a4d757fbdda:passed:20151228-185646:0.621563048
T_521mp4_edit_list_constant_offset_with_segment_duration_not_0:6ce671af756698217d4d18f4b9db4aa7:passed:20151228-185646:0.621563048
T_522mpeg_1_2_es_no_start_code_at_beginning:cf63c8454526e94c6947a0b72e7963cf:passed:20151230-182435:0.299243222
T_523mpeg_ts_pes_size_0:269b81a37c485e548031ad54e0ab111c-35a8e3a06d95bb550f6e487ed5983955:passed:20151230-221825:1.635929691
T_524mpeg2_misdetected_as_truehd:dacc8284272cc17cb3915b479b4f771a:passed:20160102-222743:1.10526128
@ -432,19 +432,19 @@ T_584ac_3_misdetected_as_mp3:true-b3c4c9e4757905313128b07c2a571b3b:passed:201702
T_585h264_wrong_mapping_of_timestamps_to_frames:3bc231f5cfa33f000042ef2252dc127a:passed:20170318-172210:0.580192044
T_586h265_invalid_default_display_window_in_sps_vui:99f6874e8f58d2eb6ff2a607c80da291:passed:20170319-185708:0.186032079
T_587X_ssa_ass_shorter_non_standard_event_format:8a247e76b55536c66e8f0c6b03b14de7:passed:20170320-133053:0.011749409
T_588h265_must_copy_bitstream_restriction_info_in_vui_parameters:a8f7644087054917b95b0a97f1e5b962:passed:20170330-194958:0.579648793
T_588h265_must_copy_bitstream_restriction_info_in_vui_parameters:f17659a6ebff69fb58fed6de16babde4:passed:20170330-194958:0.579648793
T_589h264_forcing_default_duration_in_fields_with_source_matroska:fd687775aafcb7887717e394d57a878e-40000000+40000000+true-8e11753bffe1de085e619bdf29f68072-20000000+20000000+true-e8152f044bf9618451c393e91f4ba54e-30000000+30000000+true-bc2dc3f586b697d39716894f1da322c3-60000000+60000000+true-6483de763cf7c9e7b7c8749eb5c2b432-20000000+20000000+true:passed:20170331-165013:0.244234938
T_590invalid_track_language_elements:932e0b7ab000f4a53a6f94ebe7d0813c-4eb5321ba9ff98752b71189cefabf0fa-8488fd0b4e87c5bb39c10ae1428d254b:passed:20170404-191832:0.036965692
T_591hevc_wrong_number_of_parameter_sets:f0d25e7086be97ac132d46bf379fc567:passed:20170412-165246:0.341087191
T_591hevc_wrong_number_of_parameter_sets:1c777902076fbb1bf28ddacf39991c69:passed:20170412-165246:0.341087191
T_592mpeg_ts_aac_wrong_track_parameters_detected:d986c815f8444d6a8a3e1c572add1291:passed:20170412-225238:0.044257474
T_593flac_with_picture_metadata:96befda4a6b99c2ba9d81f35005d9f03-1de8998bf5c2c17d7b108d5efcfb6b97-52c76cb0d0bad1903e256fb0347b8160-857ffa1fa84136979180969bd3d0a911-a082abba609f947bdadcc2ea4e9f978b:passed:20170415-182414:0.302331784
T_594hevc_split_parts_discarding_start_endless_loop:dd2902d494423cf02b370e01428c208c:passed:20170416-073513:0.635225717
T_594hevc_split_parts_discarding_start_endless_loop:0bddbee68772d04fcef5034a1515af58:passed:20170416-073513:0.635225717
T_595h264_bogus_timing_info:aa1e3df38f8d6995fedc4382d901ff61:passed:20170417-200233:0.368456672
T_596mpeg_ts_aac_loas_latm_misdetected_as_adts:e9db08be02d5ae53ba5064c26c37ad5f:passed:20170424-170304:0.084835812
T_597mpeg_ts_starting_with_avc_start_code:bcc02dbd864ffd8c8485741d76ba27db:passed:20170510-145746:0.077795359
T_598aac_track_not_listed_in_pmt:b6e0c694e25b1f54b38c4ea70ef87f1a-AAC:passed:20170511-221910:0.0849745
T_599mp4_nclx_colour_type_in_colr_atom:ac9f61752d75e0befd31dc436f0486a9:passed:20170514-203828:0.018287634
T_600mpeg_ts_multiple_programs:f08568c8d84c134ba1a7842317cb732b-04be4f1923a0f10a879f082c5918d8a3-29e90852776c8838b628c3625843b679-b0e15c07da6080b43a60e4b635b02e99:passed:20170522-193901:1.342170107
T_600mpeg_ts_multiple_programs:5f4df9d046141143a2d77d0a43e00cf1-04be4f1923a0f10a879f082c5918d8a3-5ce6dace8374feb727ab086e1ff0b1a4-b0e15c07da6080b43a60e4b635b02e99:passed:20170522-193901:1.342170107
T_601mp4_mpeg2_via_esds:53b9f5312b833253edcabe6d8b9891ed:passed:20170618-150319:0.386032567
T_602vob_with_garbage_at_start:8af88c4ad2e460c323e5e58207b55cf8:passed:20170619-185256:0.236132323
T_603mpeg_ps_ac3_not_enough_data_in_first_packet:1+189+128+AC_3-2+189+129+AC_3-3+189+130+AC_3-4+189+131+AC_3-5+189+132+AC_3-6+189+133+AC_3-7+189+134+AC_3:passed:20170624-092201:0.028142136
@ -535,7 +535,7 @@ T_687h264_additional_sps_pps_in_middle:1b6937d78f2c07fa7209da8a39d364ef:passed:2
T_688opus_single_page:b886629f73c6b5c42dfbf33ae186376c:passed:20200113-193521:0.011219948
T_689mpeg_ts_mpeg_2_two_frames_only:9cfdf7877746ca1f38107a7fcc5a0c67:passed:20200126-124111:0.034034657
T_690mp4_single_video_frame_duration:946e269336cb13cc20ee1265b52004c1:passed:20200313-151900:0.040140889
T_691hevc_in_mp4_no_ctts_atom_no_sei_nalus:fd46d88f2ece25cb9c97a50265e1ab75:passed:20200412-163012:0.114639239
T_691hevc_in_mp4_no_ctts_atom_no_sei_nalus:01509ffa66d6d99597ceee4f978eaab3:passed:20200412-163012:0.114639239
T_692splitting_chapter_name_in_file_name:f90456eacc7f481da6c37f3e0fc897ff:passed:20200425-145924:0.063961157
T_693keeping_source_id_tags:29cddd39e26363ec1aa77c0ada2648f8:passed:20200426-123650:0.067781165
T_694fix_tags_when_regenerating_chapter_uids:e79fdeddda645093e3ccae446c6a2c3c:passed:20200501-084512:0.046681713
@ -546,7 +546,7 @@ T_698ac3_dolby_surround_ex:true-true-true:passed:20200622-173931:0.051167592
T_699default_track_forced_off_vs_default_by_type:1bf55bff0c8ea54b9cccf56e80f5e6a0-true-1bf55bff0c8ea54b9cccf56e80f5e6a0-true-93017142f94c855c1395e9f6a2bc666b-true:passed:20200629-201706:0.073934952
T_700X_usf:1dac49aebe86754fa619c001725eb418-46001697d31d3a435ac65008cd37ea5a:passed:20200712-180338:0.023615368
T_701subtitles_duration_rounding:d727b6c1522504da6e3187e027e69145:passed:20200801-150217:0.017355231
T_702block_addition_mapping:21a1140e1363f557f332f123966c0293-165a4660aab1881872f2be9db37ac868:passed:20200801-175839:0.377324674
T_702block_addition_mapping:21a1140e1363f557f332f123966c0293-fb306a8eb5ea6dd00f50f871e28b593a:passed:20200801-175839:0.377324674
T_703bcp47_mkvmerge_tracks:649c3b23ddd919260aacfc3843d2dee0-ok-6cea988df7bc3f16fc29a9eedbcb24dd-ok-2efc761eef0ab7b1611eab03ccfa1e73-ok-4142b618710c418f5f6b990debfb81dd-ok-1cddfc894acaaf967841284adc68d95d-ok-8a924fac03de11cd7e9c3148fa8d0de4-ok-6803f90aae01a5188a4b423f5663019b-ok-26253739e9b8bf8388d196406d26a637-ok-080774d207e6b0145490ef9462ee91d0-ok-0e8434cc7cc1ba21b365fef2fd1d17fa-ok-ok-b856b48371435e5db128cb76df8234cd-ok-605073d366cfcfe925aa539fb51e098b-ok-635db9fdd14824a6482035249e7721a1-ok-34c5d55b43d935ff2c35681173c6d789-ok-b856b48371435e5db128cb76df8234cd-ok-05c550764fac8bd16b4c0e677d708b60-ok-6803f90aae01a5188a4b423f5663019b-3b3e46a20511894f386d0b4d55790692-ok-6803f90aae01a5188a4b423f5663019b-1372aed480ce909f3c03a7d9716f49a5-ok-6803f90aae01a5188a4b423f5663019b-3b3e46a20511894f386d0b4d55790692-ok-6803f90aae01a5188a4b423f5663019b-5dcb7e7d5e26a5496bb610f4eaf130a5-ok-6803f90aae01a5188a4b423f5663019b-5dcb7e7d5e26a5496bb610f4eaf130a5-ok-6803f90aae01a5188a4b423f5663019b-3b3e46a20511894f386d0b4d55790692-ok:passed:20200818-174121:0.0
T_704bcp47_mkvmerge_chapters:3a427d08de294be5b9b01cb655b6e913-ok-e4ec6dbdcd7fdeef92b43a8a78dbb607-ok-472d719ce168ebdc9544ad0020f1609e-ok-e81be6aceccadb0946852871f7e506d8-ok-e81be6aceccadb0946852871f7e506d8-ok-e81be6aceccadb0946852871f7e506d8-ok-e1ed73dc53b2d05ee75e70ad6f3b47bf-ok-96e8031d45ad9e182734f52e3f2c7f46-ok-fb5d5e2d83287d45d3294b59d4d1dea0-ok-5b2283fc43b8ce5908fc0e004d9148ee-ok-5b2283fc43b8ce5908fc0e004d9148ee-ok-5b2283fc43b8ce5908fc0e004d9148ee-ok:passed:20200818-180751:0.24733742
T_705bcp47_propedit_language_ietf:649c3b23ddd919260aacfc3843d2dee0-und+und+ok+ger+de_CH+ok+ger+pt_BR+ok+ger++ok+spa+es_MX+ok+eng++ok:passed:20200822-114509:0.096933015