From 40a5d31753f432607af29497bea5db060d00e85f Mon Sep 17 00:00:00 2001 From: dancho Date: Fri, 5 Jul 2024 06:42:57 -0700 Subject: [PATCH] Parse the H264 bitstream of mp4 files to identify sample dependencies Changes to Mp4Extractor to parse additional sample dependency information and mark output samples as "no other sample depend on this". Only applies to H.264 tracks. Controlled by new mp4 flag: FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES PiperOrigin-RevId: 649640184 --- RELEASENOTES.md | 2 + .../main/java/androidx/media3/common/C.java | 6 + .../media3/container/NalUnitUtil.java | 35 + .../media3/extractor/mp4/Mp4Extractor.java | 85 +- .../mp4/Mp4ExtractorParameterizedTest.java | 177 ++--- ...ding_within_gop_sample_dependencies.0.dump | 338 ++++++++ ...ding_within_gop_sample_dependencies.1.dump | 290 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 230 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 170 ++++ ...op_sample_dependencies.unknown_length.dump | 338 ++++++++ ...ding_within_gop_sample_dependencies.0.dump | 541 +++++++++++++ ...ding_within_gop_sample_dependencies.1.dump | 405 ++++++++++ ...ding_within_gop_sample_dependencies.2.dump | 237 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 89 +++ ...op_sample_dependencies.unknown_length.dump | 541 +++++++++++++ ...ding_within_gop_sample_dependencies.0.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.1.dump | 295 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 235 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 175 +++++ ...op_sample_dependencies.unknown_length.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.0.dump | 151 ++++ ...ding_within_gop_sample_dependencies.1.dump | 151 ++++ ...ding_within_gop_sample_dependencies.2.dump | 151 ++++ ...ding_within_gop_sample_dependencies.3.dump | 151 ++++ ...op_sample_dependencies.unknown_length.dump | 151 ++++ ...ding_within_gop_sample_dependencies.0.dump | 58 ++ ...ding_within_gop_sample_dependencies.1.dump | 46 ++ ...ding_within_gop_sample_dependencies.2.dump | 34 + ...ding_within_gop_sample_dependencies.3.dump | 26 + ...op_sample_dependencies.unknown_length.dump | 58 ++ ...ding_within_gop_sample_dependencies.0.dump | 96 +++ ...ding_within_gop_sample_dependencies.1.dump | 96 +++ ...ding_within_gop_sample_dependencies.2.dump | 96 +++ ...ding_within_gop_sample_dependencies.3.dump | 96 +++ ...op_sample_dependencies.unknown_length.dump | 96 +++ ...ding_within_gop_sample_dependencies.0.dump | 58 ++ ...ding_within_gop_sample_dependencies.1.dump | 58 ++ ...ding_within_gop_sample_dependencies.2.dump | 58 ++ ...ding_within_gop_sample_dependencies.3.dump | 58 ++ ...op_sample_dependencies.unknown_length.dump | 58 ++ ...ding_within_gop_sample_dependencies.0.dump | 148 ++++ ...ding_within_gop_sample_dependencies.1.dump | 116 +++ ...ding_within_gop_sample_dependencies.2.dump | 84 ++ ...ding_within_gop_sample_dependencies.3.dump | 52 ++ ...op_sample_dependencies.unknown_length.dump | 148 ++++ ...ding_within_gop_sample_dependencies.0.dump | 237 ++++++ ...ding_within_gop_sample_dependencies.1.dump | 165 ++++ ...ding_within_gop_sample_dependencies.2.dump | 93 +++ ...ding_within_gop_sample_dependencies.3.dump | 25 + ...op_sample_dependencies.unknown_length.dump | 237 ++++++ ...ding_within_gop_sample_dependencies.0.dump | 277 +++++++ ...ding_within_gop_sample_dependencies.1.dump | 193 +++++ ...ding_within_gop_sample_dependencies.2.dump | 109 +++ ...ding_within_gop_sample_dependencies.3.dump | 25 + ...op_sample_dependencies.unknown_length.dump | 277 +++++++ ...ding_within_gop_sample_dependencies.0.dump | 736 ++++++++++++++++++ ...ding_within_gop_sample_dependencies.1.dump | 592 ++++++++++++++ ...ding_within_gop_sample_dependencies.2.dump | 316 ++++++++ ...ding_within_gop_sample_dependencies.3.dump | 172 ++++ ...op_sample_dependencies.unknown_length.dump | 736 ++++++++++++++++++ ...ding_within_gop_sample_dependencies.0.dump | 345 ++++++++ ...ding_within_gop_sample_dependencies.1.dump | 293 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 233 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 173 ++++ ...op_sample_dependencies.unknown_length.dump | 345 ++++++++ ...ding_within_gop_sample_dependencies.0.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.1.dump | 295 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 235 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 175 +++++ ...op_sample_dependencies.unknown_length.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.0.dump | 139 ++++ ...ding_within_gop_sample_dependencies.1.dump | 139 ++++ ...ding_within_gop_sample_dependencies.2.dump | 139 ++++ ...ding_within_gop_sample_dependencies.3.dump | 43 + ...op_sample_dependencies.unknown_length.dump | 139 ++++ ...ding_within_gop_sample_dependencies.0.dump | 371 +++++++++ ...ding_within_gop_sample_dependencies.1.dump | 255 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 139 ++++ ...ding_within_gop_sample_dependencies.3.dump | 75 ++ ...op_sample_dependencies.unknown_length.dump | 371 +++++++++ ...ding_within_gop_sample_dependencies.0.dump | 140 ++++ ...ding_within_gop_sample_dependencies.1.dump | 140 ++++ ...ding_within_gop_sample_dependencies.2.dump | 140 ++++ ...ding_within_gop_sample_dependencies.3.dump | 44 ++ ...op_sample_dependencies.unknown_length.dump | 140 ++++ ...ding_within_gop_sample_dependencies.0.dump | 372 +++++++++ ...ding_within_gop_sample_dependencies.1.dump | 256 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 140 ++++ ...ding_within_gop_sample_dependencies.3.dump | 76 ++ ...op_sample_dependencies.unknown_length.dump | 372 +++++++++ ...ding_within_gop_sample_dependencies.0.dump | 257 ++++++ ...ding_within_gop_sample_dependencies.1.dump | 257 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 157 ++++ ...ding_within_gop_sample_dependencies.3.dump | 57 ++ ...op_sample_dependencies.unknown_length.dump | 257 ++++++ ...ding_within_gop_sample_dependencies.0.dump | 258 ++++++ ...ding_within_gop_sample_dependencies.1.dump | 258 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 158 ++++ ...ding_within_gop_sample_dependencies.3.dump | 58 ++ ...op_sample_dependencies.unknown_length.dump | 258 ++++++ ...ding_within_gop_sample_dependencies.0.dump | 428 ++++++++++ ...ding_within_gop_sample_dependencies.1.dump | 232 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 40 + ...ding_within_gop_sample_dependencies.3.dump | 28 + ...op_sample_dependencies.unknown_length.dump | 428 ++++++++++ ...ding_within_gop_sample_dependencies.0.dump | 148 ++++ ...ding_within_gop_sample_dependencies.1.dump | 148 ++++ ...ding_within_gop_sample_dependencies.2.dump | 148 ++++ ...ding_within_gop_sample_dependencies.3.dump | 148 ++++ ...op_sample_dependencies.unknown_length.dump | 148 ++++ ...ding_within_gop_sample_dependencies.0.dump | 143 ++++ ...ding_within_gop_sample_dependencies.1.dump | 127 +++ ...ding_within_gop_sample_dependencies.2.dump | 111 +++ ...ding_within_gop_sample_dependencies.3.dump | 95 +++ ...op_sample_dependencies.unknown_length.dump | 143 ++++ ...ding_within_gop_sample_dependencies.0.dump | 461 +++++++++++ ...ding_within_gop_sample_dependencies.1.dump | 405 ++++++++++ ...ding_within_gop_sample_dependencies.2.dump | 345 ++++++++ ...ding_within_gop_sample_dependencies.3.dump | 289 +++++++ ...op_sample_dependencies.unknown_length.dump | 461 +++++++++++ ...ding_within_gop_sample_dependencies.0.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.1.dump | 295 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 235 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 175 +++++ ...op_sample_dependencies.unknown_length.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.0.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.1.dump | 295 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 235 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 175 +++++ ...op_sample_dependencies.unknown_length.dump | 343 ++++++++ ...ding_within_gop_sample_dependencies.0.dump | 478 ++++++++++++ ...ding_within_gop_sample_dependencies.1.dump | 386 +++++++++ ...ding_within_gop_sample_dependencies.2.dump | 202 +++++ ...ding_within_gop_sample_dependencies.3.dump | 78 ++ ...op_sample_dependencies.unknown_length.dump | 478 ++++++++++++ 135 files changed, 28498 insertions(+), 127 deletions(-) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/bt601.mov.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/bt601.mov.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/bt601.mov.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/bt601.mov.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/bt601.mov.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/pixel-motion-photo-2-hevc-tracks.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/pixel-motion-photo-2-hevc-tracks.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/pixel-motion-photo-2-hevc-tracks.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/pixel-motion-photo-2-hevc-tracks.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/pixel-motion-photo-2-hevc-tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac3.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac3.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac3.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac3.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac3.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac4.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac4.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac4.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac4.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_ac4.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_android_slow_motion.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_android_slow_motion.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_android_slow_motion.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_android_slow_motion.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_android_slow_motion.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_dthd.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_dthd.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_dthd.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_dthd.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_dthd.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3joc.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3joc.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3joc.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3joc.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_eac3joc.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_edit_list.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_edit_list.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_edit_list.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_edit_list.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_edit_list.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_empty_track.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_empty_track.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_empty_track.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_empty_track.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_empty_track.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mdat_too_long.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mdat_too_long.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mdat_too_long.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mdat_too_long.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mdat_too_long.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_cicp1.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_cicp1.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_cicp1.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_cicp1.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_cicp1.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_configchange.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_configchange.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_configchange.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_configchange.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_bl_configchange.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_cicp1.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_cicp1.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_cicp1.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_cicp1.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_cicp1.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_configchange.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_configchange.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_configchange.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_configchange.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mhm1_lcbl_configchange.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mha1.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mha1.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mha1.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mha1.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mha1.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mhm1.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mhm1.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mhm1.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mhm1.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_mpegh_mhm1.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_opus.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_opus.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_opus.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_opus.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_opus.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_color_info.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_color_info.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_color_info.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_color_info.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_color_info.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_original_quicktime_specification.mov.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_original_quicktime_specification.mov.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_original_quicktime_specification.mov.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_original_quicktime_specification.mov.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_original_quicktime_specification.mov.reading_within_gop_sample_dependencies.unknown_length.dump diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e7ea5063d9..dbfd78d627 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -11,6 +11,8 @@ * Transformer: * Track Selection: * Extractors: + * Allow `Mp4Extractor` to identify H264 samples that are not used as + reference by subsequent samples. * Audio: * Video: * Text: diff --git a/libraries/common/src/main/java/androidx/media3/common/C.java b/libraries/common/src/main/java/androidx/media3/common/C.java index 286ddf6942..cf3eb9abaa 100644 --- a/libraries/common/src/main/java/androidx/media3/common/C.java +++ b/libraries/common/src/main/java/androidx/media3/common/C.java @@ -620,6 +620,7 @@ public final class C { *