From e75e9c503ea482a065d5418d44a246eb5904f05d Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Thu, 4 Mar 2021 20:07:20 +0100 Subject: [PATCH] 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. --- NEWS.md | 6 +++- src/input/r_qtmp4.cpp | 7 ----- src/output/p_hevc.cpp | 66 ++++++++++------------------------------ src/output/p_hevc.h | 4 --- src/output/p_hevc_es.cpp | 1 + tests/results.txt | 28 ++++++++--------- 6 files changed, 36 insertions(+), 76 deletions(-) diff --git a/NEWS.md b/NEWS.md index 3d59f917f..c0b6f64be 100644 --- a/NEWS.md +++ b/NEWS.md @@ -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. diff --git a/src/input/r_qtmp4.cpp b/src/input/r_qtmp4.cpp index 8c8dcbe36..09bc0af89 100644 --- a/src/input/r_qtmp4.cpp +++ b/src/input/r_qtmp4.cpp @@ -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_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)); } diff --git a/src/output/p_hevc.cpp b/src/output/p_hevc.cpp index 4b372cf01..efdd1e117 100644 --- a/src/output/p_hevc.cpp +++ b/src/output/p_hevc.cpp @@ -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 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)); diff --git a/src/output/p_hevc.h b/src/output/p_hevc.h index cbc783c5f..306b80d2b 100644 --- a/src/output/p_hevc.h +++ b/src/output/p_hevc.h @@ -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(); }; diff --git a/src/output/p_hevc_es.cpp b/src/output/p_hevc_es.cpp index 873a6f8b9..b71477268 100644 --- a/src/output/p_hevc_es.cpp +++ b/src/output/p_hevc_es.cpp @@ -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 diff --git a/tests/results.txt b/tests/results.txt index c1ebae852..8135c7cf8 100644 --- a/tests/results.txt +++ b/tests/results.txt @@ -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