diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/TsPlaybackTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/TsPlaybackTest.java index c20a248b34..893630a8a2 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/TsPlaybackTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/TsPlaybackTest.java @@ -63,6 +63,7 @@ public class TsPlaybackTest { "sample_h264_mpeg_audio.ts", "sample_h264_no_access_unit_delimiters.ts", "sample_h265.ts", + "sample_h265_rps_pred.ts", "sample_latm.ts", "sample_scte35.ts", "sample_with_id3.adts", diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java index 3b372c63be..48c29c8e39 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java @@ -91,6 +91,11 @@ public final class TsExtractorTest { public void sampleWithH265() throws Exception { ExtractorAsserts.assertBehavior(TsExtractor::new, "media/ts/sample_h265.ts", simulationConfig); } + + @Test + public void sampleWithH265RpsPred() throws Exception { + ExtractorAsserts.assertBehavior(TsExtractor::new, "media/ts/sample_h265_rps_pred.ts", simulationConfig); + } @Test public void sampleWithScte35() throws Exception { diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.0.dump new file mode 100644 index 0000000000..d4dc0a7863 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.0.dump @@ -0,0 +1,81 @@ +seekMap: + isSeekable = true + duration = 1000000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(500000) = [[timeUs=500000, position=7134]] + getPosition(1000000) = [[timeUs=1000000, position=14457]] +numberOfTracks = 1 +track 256: + total output bytes = 10004 + sample count = 15 + format 0: + id = 1/256 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L63.90 + width = 914 + height = 686 + pixelWidthHeightRatio = 1.0003651 + initializationData: + data = length 146, hash 61554FEF + sample 0: + time = 266666 + flags = 1 + data = length 7464, hash EBF8518B + sample 1: + time = 1200000 + flags = 0 + data = length 1042, hash F69C93E1 + sample 2: + time = 733333 + flags = 0 + data = length 465, hash 2B469969 + sample 3: + time = 466666 + flags = 0 + data = length 177, hash 79777966 + sample 4: + time = 333333 + flags = 0 + data = length 65, hash 63DA4886 + sample 5: + time = 400000 + flags = 0 + data = length 33, hash EFE759C6 + sample 6: + time = 600000 + flags = 0 + data = length 88, hash 98333D02 + sample 7: + time = 533333 + flags = 0 + data = length 49, hash F9A023E1 + sample 8: + time = 666666 + flags = 0 + data = length 58, hash 74F1E9D9 + sample 9: + time = 933333 + flags = 0 + data = length 114, hash FA033C4D + sample 10: + time = 800000 + flags = 0 + data = length 87, hash 1A1C57E4 + sample 11: + time = 866666 + flags = 0 + data = length 65, hash 59F937BE + sample 12: + time = 1066666 + flags = 0 + data = length 94, hash 5D02AC81 + sample 13: + time = 1000000 + flags = 0 + data = length 57, hash 2750D207 + sample 14: + time = 1133333 + flags = 0 + data = length 46, hash CE770A40 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.1.dump new file mode 100644 index 0000000000..cfe07b53a9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.1.dump @@ -0,0 +1,65 @@ +seekMap: + isSeekable = true + duration = 1000000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(500000) = [[timeUs=500000, position=7134]] + getPosition(1000000) = [[timeUs=1000000, position=14457]] +numberOfTracks = 1 +track 256: + total output bytes = 856 + sample count = 11 + format 0: + id = 1/256 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L63.90 + width = 914 + height = 686 + pixelWidthHeightRatio = 1.0003651 + initializationData: + data = length 146, hash 61554FEF + sample 0: + time = 333333 + flags = 0 + data = length 65, hash 63DA4886 + sample 1: + time = 400000 + flags = 0 + data = length 33, hash EFE759C6 + sample 2: + time = 600000 + flags = 0 + data = length 88, hash 98333D02 + sample 3: + time = 533333 + flags = 0 + data = length 49, hash F9A023E1 + sample 4: + time = 666666 + flags = 0 + data = length 58, hash 74F1E9D9 + sample 5: + time = 933333 + flags = 0 + data = length 114, hash FA033C4D + sample 6: + time = 800000 + flags = 0 + data = length 87, hash 1A1C57E4 + sample 7: + time = 866666 + flags = 0 + data = length 65, hash 59F937BE + sample 8: + time = 1066666 + flags = 0 + data = length 94, hash 5D02AC81 + sample 9: + time = 1000000 + flags = 0 + data = length 57, hash 2750D207 + sample 10: + time = 1133333 + flags = 0 + data = length 46, hash CE770A40 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.2.dump new file mode 100644 index 0000000000..c3e8198155 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.2.dump @@ -0,0 +1,45 @@ +seekMap: + isSeekable = true + duration = 1000000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(500000) = [[timeUs=500000, position=7134]] + getPosition(1000000) = [[timeUs=1000000, position=14457]] +numberOfTracks = 1 +track 256: + total output bytes = 563 + sample count = 6 + format 0: + id = 1/256 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L63.90 + width = 914 + height = 686 + pixelWidthHeightRatio = 1.0003651 + initializationData: + data = length 146, hash 61554FEF + sample 0: + time = 933333 + flags = 0 + data = length 114, hash FA033C4D + sample 1: + time = 800000 + flags = 0 + data = length 87, hash 1A1C57E4 + sample 2: + time = 866666 + flags = 0 + data = length 65, hash 59F937BE + sample 3: + time = 1066666 + flags = 0 + data = length 94, hash 5D02AC81 + sample 4: + time = 1000000 + flags = 0 + data = length 57, hash 2750D207 + sample 5: + time = 1133333 + flags = 0 + data = length 46, hash CE770A40 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.3.dump new file mode 100644 index 0000000000..d10958f482 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.3.dump @@ -0,0 +1,25 @@ +seekMap: + isSeekable = true + duration = 1000000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(500000) = [[timeUs=500000, position=7134]] + getPosition(1000000) = [[timeUs=1000000, position=14457]] +numberOfTracks = 1 +track 256: + total output bytes = 146 + sample count = 1 + format 0: + id = 1/256 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L63.90 + width = 914 + height = 686 + pixelWidthHeightRatio = 1.0003651 + initializationData: + data = length 146, hash 61554FEF + sample 0: + time = 1133333 + flags = 0 + data = length 46, hash CE770A40 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.unknown_length.dump new file mode 100644 index 0000000000..85ddd41279 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_h265_rps_pred.ts.unknown_length.dump @@ -0,0 +1,78 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 256: + total output bytes = 10004 + sample count = 15 + format 0: + id = 1/256 + sampleMimeType = video/hevc + codecs = hvc1.1.6.L63.90 + width = 914 + height = 686 + pixelWidthHeightRatio = 1.0003651 + initializationData: + data = length 146, hash 61554FEF + sample 0: + time = 266666 + flags = 1 + data = length 7464, hash EBF8518B + sample 1: + time = 1200000 + flags = 0 + data = length 1042, hash F69C93E1 + sample 2: + time = 733333 + flags = 0 + data = length 465, hash 2B469969 + sample 3: + time = 466666 + flags = 0 + data = length 177, hash 79777966 + sample 4: + time = 333333 + flags = 0 + data = length 65, hash 63DA4886 + sample 5: + time = 400000 + flags = 0 + data = length 33, hash EFE759C6 + sample 6: + time = 600000 + flags = 0 + data = length 88, hash 98333D02 + sample 7: + time = 533333 + flags = 0 + data = length 49, hash F9A023E1 + sample 8: + time = 666666 + flags = 0 + data = length 58, hash 74F1E9D9 + sample 9: + time = 933333 + flags = 0 + data = length 114, hash FA033C4D + sample 10: + time = 800000 + flags = 0 + data = length 87, hash 1A1C57E4 + sample 11: + time = 866666 + flags = 0 + data = length 65, hash 59F937BE + sample 12: + time = 1066666 + flags = 0 + data = length 94, hash 5D02AC81 + sample 13: + time = 1000000 + flags = 0 + data = length 57, hash 2750D207 + sample 14: + time = 1133333 + flags = 0 + data = length 46, hash CE770A40 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/ts/sample_h265_rps_pred.ts b/libraries/test_data/src/test/assets/media/ts/sample_h265_rps_pred.ts new file mode 100644 index 0000000000..b5d336564d Binary files /dev/null and b/libraries/test_data/src/test/assets/media/ts/sample_h265_rps_pred.ts differ diff --git a/libraries/test_data/src/test/assets/playbackdumps/ts/sample_h265_rps_pred.ts.dump b/libraries/test_data/src/test/assets/playbackdumps/ts/sample_h265_rps_pred.ts.dump new file mode 100644 index 0000000000..e69de29bb2