diff --git a/library/core/src/test/java/com/google/android/exoplayer2/e2etest/MkvPlaybackTest.java b/library/core/src/test/java/com/google/android/exoplayer2/e2etest/MkvPlaybackTest.java new file mode 100644 index 0000000000..5a20835fd7 --- /dev/null +++ b/library/core/src/test/java/com/google/android/exoplayer2/e2etest/MkvPlaybackTest.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.exoplayer2.e2etest; + +import android.graphics.SurfaceTexture; +import android.view.Surface; +import androidx.test.core.app.ApplicationProvider; +import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.robolectric.PlaybackOutput; +import com.google.android.exoplayer2.robolectric.ShadowMediaCodecConfig; +import com.google.android.exoplayer2.robolectric.TestPlayerRunHelper; +import com.google.android.exoplayer2.testutil.AutoAdvancingFakeClock; +import com.google.android.exoplayer2.testutil.DumpFileAsserts; +import com.google.common.collect.ImmutableList; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.ParameterizedRobolectricTestRunner; +import org.robolectric.ParameterizedRobolectricTestRunner.Parameters; +import org.robolectric.annotation.Config; + +/** End-to-end tests using MKV samples. */ +// TODO(b/143232359): Remove once https://issuetracker.google.com/143232359 is resolved. +@Config(sdk = 29) +@RunWith(ParameterizedRobolectricTestRunner.class) +public final class MkvPlaybackTest { + @Parameters(name = "{0}") + public static ImmutableList mediaSamples() { + return ImmutableList.of( + "sample.mkv", + "sample_with_htc_rotation_track_name.mkv", + "sample_with_srt.mkv"); + } + + @ParameterizedRobolectricTestRunner.Parameter public String inputFile; + + @Rule + public ShadowMediaCodecConfig mediaCodecConfig = + ShadowMediaCodecConfig.forAllSupportedMimeTypes(); + + @Test + public void test() throws Exception { + SimpleExoPlayer player = + new SimpleExoPlayer.Builder(ApplicationProvider.getApplicationContext()) + .setClock(new AutoAdvancingFakeClock()) + .build(); + player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1))); + PlaybackOutput playbackOutput = PlaybackOutput.register(player, mediaCodecConfig); + + player.setMediaItem(MediaItem.fromUri("asset:///media/mkv/" + inputFile)); + player.prepare(); + player.play(); + TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED); + player.release(); + + DumpFileAsserts.assertOutput( + ApplicationProvider.getApplicationContext(), + playbackOutput, + "playbackdumps/mkv/" + inputFile + ".dump"); + } +} diff --git a/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/ShadowMediaCodecConfig.java b/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/ShadowMediaCodecConfig.java index 1c72912ba8..7faf0b6456 100644 --- a/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/ShadowMediaCodecConfig.java +++ b/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/ShadowMediaCodecConfig.java @@ -73,6 +73,11 @@ public final class ShadowMediaCodecConfig extends ExternalResource { MimeTypes.VIDEO_MPEG2, ImmutableList.of(mpeg2ProfileLevel), ImmutableList.of(MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible)); + configureCodec( + /* codecName= */ "exotest.video.vp9", + MimeTypes.VIDEO_VP9, + ImmutableList.of(), + ImmutableList.of(MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible)); // Audio codecs configureCodec("exotest.audio.aac", MimeTypes.AUDIO_AAC); diff --git a/testdata/src/test/assets/playbackdumps/mkv/sample.mkv.dump b/testdata/src/test/assets/playbackdumps/mkv/sample.mkv.dump new file mode 100644 index 0000000000..9cae6de0ca --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/mkv/sample.mkv.dump @@ -0,0 +1,65 @@ +MediaCodec (audio/ac3): + buffers.length = 30 + buffers[0] = length 416, hash 211F2286 + buffers[1] = length 418, hash 77425A86 + buffers[2] = length 418, hash A0FE5CA1 + buffers[3] = length 418, hash 2309B066 + buffers[4] = length 418, hash 928A653B + buffers[5] = length 418, hash 3422F0CB + buffers[6] = length 418, hash EFF43D5B + buffers[7] = length 418, hash FC8093C7 + buffers[8] = length 418, hash CCC08A16 + buffers[9] = length 418, hash 2A6EE863 + buffers[10] = length 418, hash D69A9251 + buffers[11] = length 418, hash BCFB758D + buffers[12] = length 418, hash 11B66799 + buffers[13] = length 418, hash C824D392 + buffers[14] = length 418, hash C167D872 + buffers[15] = length 418, hash 4221C855 + buffers[16] = length 418, hash 4D4FF934 + buffers[17] = length 418, hash 984AA025 + buffers[18] = length 418, hash BB788B46 + buffers[19] = length 418, hash 9EFBFD97 + buffers[20] = length 418, hash DF1A460C + buffers[21] = length 418, hash 2BDB56A + buffers[22] = length 418, hash CA230060 + buffers[23] = length 418, hash D2F19F41 + buffers[24] = length 418, hash AF392D79 + buffers[25] = length 418, hash C5D7F2A3 + buffers[26] = length 418, hash 733A35AE + buffers[27] = length 418, hash DE46E5D3 + buffers[28] = length 418, hash 56AB8D37 + buffers[29] = length 0, hash 1 +MediaCodec (video/avc): + buffers.length = 31 + buffers[0] = length 36477, hash F0F36CFE + buffers[1] = length 5341, hash 40B85E2 + buffers[2] = length 596, hash 357B4D92 + buffers[3] = length 7704, hash A39EDA06 + buffers[4] = length 989, hash 2813C72D + buffers[5] = length 721, hash C50D1C73 + buffers[6] = length 519, hash 65FE1911 + buffers[7] = length 6160, hash E1CAC0EC + buffers[8] = length 953, hash 7160C661 + buffers[9] = length 620, hash 7A7AE07C + buffers[10] = length 405, hash 5CC7F4E7 + buffers[11] = length 4852, hash 9DB6979D + buffers[12] = length 547, hash E31A6979 + buffers[13] = length 570, hash FEC40D00 + buffers[14] = length 5525, hash 7C478F7E + buffers[15] = length 1082, hash DA07059A + buffers[16] = length 807, hash 93478E6B + buffers[17] = length 744, hash 9A8E6026 + buffers[18] = length 4732, hash C73B23C0 + buffers[19] = length 1004, hash 8A19A228 + buffers[20] = length 794, hash 8126022C + buffers[21] = length 645, hash F08300E5 + buffers[22] = length 2684, hash 727FE378 + buffers[23] = length 787, hash 419A7821 + buffers[24] = length 649, hash 5C159346 + buffers[25] = length 509, hash F912D655 + buffers[26] = length 1226, hash 29815C21 + buffers[27] = length 898, hash D997AD0A + buffers[28] = length 476, hash A0423645 + buffers[29] = length 486, hash DDF32CBB + buffers[30] = length 0, hash 1 diff --git a/testdata/src/test/assets/playbackdumps/mkv/sample_with_htc_rotation_track_name.mkv.dump b/testdata/src/test/assets/playbackdumps/mkv/sample_with_htc_rotation_track_name.mkv.dump new file mode 100644 index 0000000000..9cae6de0ca --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/mkv/sample_with_htc_rotation_track_name.mkv.dump @@ -0,0 +1,65 @@ +MediaCodec (audio/ac3): + buffers.length = 30 + buffers[0] = length 416, hash 211F2286 + buffers[1] = length 418, hash 77425A86 + buffers[2] = length 418, hash A0FE5CA1 + buffers[3] = length 418, hash 2309B066 + buffers[4] = length 418, hash 928A653B + buffers[5] = length 418, hash 3422F0CB + buffers[6] = length 418, hash EFF43D5B + buffers[7] = length 418, hash FC8093C7 + buffers[8] = length 418, hash CCC08A16 + buffers[9] = length 418, hash 2A6EE863 + buffers[10] = length 418, hash D69A9251 + buffers[11] = length 418, hash BCFB758D + buffers[12] = length 418, hash 11B66799 + buffers[13] = length 418, hash C824D392 + buffers[14] = length 418, hash C167D872 + buffers[15] = length 418, hash 4221C855 + buffers[16] = length 418, hash 4D4FF934 + buffers[17] = length 418, hash 984AA025 + buffers[18] = length 418, hash BB788B46 + buffers[19] = length 418, hash 9EFBFD97 + buffers[20] = length 418, hash DF1A460C + buffers[21] = length 418, hash 2BDB56A + buffers[22] = length 418, hash CA230060 + buffers[23] = length 418, hash D2F19F41 + buffers[24] = length 418, hash AF392D79 + buffers[25] = length 418, hash C5D7F2A3 + buffers[26] = length 418, hash 733A35AE + buffers[27] = length 418, hash DE46E5D3 + buffers[28] = length 418, hash 56AB8D37 + buffers[29] = length 0, hash 1 +MediaCodec (video/avc): + buffers.length = 31 + buffers[0] = length 36477, hash F0F36CFE + buffers[1] = length 5341, hash 40B85E2 + buffers[2] = length 596, hash 357B4D92 + buffers[3] = length 7704, hash A39EDA06 + buffers[4] = length 989, hash 2813C72D + buffers[5] = length 721, hash C50D1C73 + buffers[6] = length 519, hash 65FE1911 + buffers[7] = length 6160, hash E1CAC0EC + buffers[8] = length 953, hash 7160C661 + buffers[9] = length 620, hash 7A7AE07C + buffers[10] = length 405, hash 5CC7F4E7 + buffers[11] = length 4852, hash 9DB6979D + buffers[12] = length 547, hash E31A6979 + buffers[13] = length 570, hash FEC40D00 + buffers[14] = length 5525, hash 7C478F7E + buffers[15] = length 1082, hash DA07059A + buffers[16] = length 807, hash 93478E6B + buffers[17] = length 744, hash 9A8E6026 + buffers[18] = length 4732, hash C73B23C0 + buffers[19] = length 1004, hash 8A19A228 + buffers[20] = length 794, hash 8126022C + buffers[21] = length 645, hash F08300E5 + buffers[22] = length 2684, hash 727FE378 + buffers[23] = length 787, hash 419A7821 + buffers[24] = length 649, hash 5C159346 + buffers[25] = length 509, hash F912D655 + buffers[26] = length 1226, hash 29815C21 + buffers[27] = length 898, hash D997AD0A + buffers[28] = length 476, hash A0423645 + buffers[29] = length 486, hash DDF32CBB + buffers[30] = length 0, hash 1 diff --git a/testdata/src/test/assets/playbackdumps/mkv/sample_with_srt.mkv.dump b/testdata/src/test/assets/playbackdumps/mkv/sample_with_srt.mkv.dump new file mode 100644 index 0000000000..9cae6de0ca --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/mkv/sample_with_srt.mkv.dump @@ -0,0 +1,65 @@ +MediaCodec (audio/ac3): + buffers.length = 30 + buffers[0] = length 416, hash 211F2286 + buffers[1] = length 418, hash 77425A86 + buffers[2] = length 418, hash A0FE5CA1 + buffers[3] = length 418, hash 2309B066 + buffers[4] = length 418, hash 928A653B + buffers[5] = length 418, hash 3422F0CB + buffers[6] = length 418, hash EFF43D5B + buffers[7] = length 418, hash FC8093C7 + buffers[8] = length 418, hash CCC08A16 + buffers[9] = length 418, hash 2A6EE863 + buffers[10] = length 418, hash D69A9251 + buffers[11] = length 418, hash BCFB758D + buffers[12] = length 418, hash 11B66799 + buffers[13] = length 418, hash C824D392 + buffers[14] = length 418, hash C167D872 + buffers[15] = length 418, hash 4221C855 + buffers[16] = length 418, hash 4D4FF934 + buffers[17] = length 418, hash 984AA025 + buffers[18] = length 418, hash BB788B46 + buffers[19] = length 418, hash 9EFBFD97 + buffers[20] = length 418, hash DF1A460C + buffers[21] = length 418, hash 2BDB56A + buffers[22] = length 418, hash CA230060 + buffers[23] = length 418, hash D2F19F41 + buffers[24] = length 418, hash AF392D79 + buffers[25] = length 418, hash C5D7F2A3 + buffers[26] = length 418, hash 733A35AE + buffers[27] = length 418, hash DE46E5D3 + buffers[28] = length 418, hash 56AB8D37 + buffers[29] = length 0, hash 1 +MediaCodec (video/avc): + buffers.length = 31 + buffers[0] = length 36477, hash F0F36CFE + buffers[1] = length 5341, hash 40B85E2 + buffers[2] = length 596, hash 357B4D92 + buffers[3] = length 7704, hash A39EDA06 + buffers[4] = length 989, hash 2813C72D + buffers[5] = length 721, hash C50D1C73 + buffers[6] = length 519, hash 65FE1911 + buffers[7] = length 6160, hash E1CAC0EC + buffers[8] = length 953, hash 7160C661 + buffers[9] = length 620, hash 7A7AE07C + buffers[10] = length 405, hash 5CC7F4E7 + buffers[11] = length 4852, hash 9DB6979D + buffers[12] = length 547, hash E31A6979 + buffers[13] = length 570, hash FEC40D00 + buffers[14] = length 5525, hash 7C478F7E + buffers[15] = length 1082, hash DA07059A + buffers[16] = length 807, hash 93478E6B + buffers[17] = length 744, hash 9A8E6026 + buffers[18] = length 4732, hash C73B23C0 + buffers[19] = length 1004, hash 8A19A228 + buffers[20] = length 794, hash 8126022C + buffers[21] = length 645, hash F08300E5 + buffers[22] = length 2684, hash 727FE378 + buffers[23] = length 787, hash 419A7821 + buffers[24] = length 649, hash 5C159346 + buffers[25] = length 509, hash F912D655 + buffers[26] = length 1226, hash 29815C21 + buffers[27] = length 898, hash D997AD0A + buffers[28] = length 476, hash A0423645 + buffers[29] = length 486, hash DDF32CBB + buffers[30] = length 0, hash 1