diff --git a/library/core/src/test/java/com/google/android/exoplayer2/e2etest/Vp9PlaybackTest.java b/library/core/src/test/java/com/google/android/exoplayer2/e2etest/Vp9PlaybackTest.java new file mode 100644 index 0000000000..45f8ba6b9d --- /dev/null +++ b/library/core/src/test/java/com/google/android/exoplayer2/e2etest/Vp9PlaybackTest.java @@ -0,0 +1,78 @@ +/* + * 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 VP9 samples. */ +// TODO(b/143232359): Remove once https://issuetracker.google.com/143232359 is resolved. +@Config(sdk = 29) +@RunWith(ParameterizedRobolectricTestRunner.class) +public final class Vp9PlaybackTest { + @Parameters(name = "{0}") + public static ImmutableList mediaSamples() { + return ImmutableList.of( + "bear-vp9-odd-dimensions.webm", + "bear-vp9.webm", + "invalid-bitstream.webm", + "roadtrip-vp92-10bit.webm"); + } + + @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/vp9/" + inputFile)); + player.prepare(); + player.play(); + TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED); + player.release(); + + DumpFileAsserts.assertOutput( + ApplicationProvider.getApplicationContext(), + playbackOutput, + "playbackdumps/vp9/" + inputFile + ".dump"); + } +} diff --git a/testdata/src/test/assets/playbackdumps/vp9/bear-vp9-odd-dimensions.webm.dump b/testdata/src/test/assets/playbackdumps/vp9/bear-vp9-odd-dimensions.webm.dump new file mode 100644 index 0000000000..72476f023f --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/vp9/bear-vp9-odd-dimensions.webm.dump @@ -0,0 +1,33 @@ +MediaCodec (video/x-vnd.on2.vp9): + buffers.length = 31 + buffers[0] = length 10658, hash E48B4B1D + buffers[1] = length 5866, hash 59922F8F + buffers[2] = length 248, hash A39B2D24 + buffers[3] = length 754, hash FD304EFB + buffers[4] = length 333, hash 246D89D4 + buffers[5] = length 459, hash BA2A967C + buffers[6] = length 387, hash EDFD8392 + buffers[7] = length 407, hash 49159738 + buffers[8] = length 380, hash 67F173C9 + buffers[9] = length 242, hash 9C3FBC87 + buffers[10] = length 20, hash 8199A61 + buffers[11] = length 3551, hash 86834065 + buffers[12] = length 586, hash 56F9001 + buffers[13] = length 462, hash 74FAC6C4 + buffers[14] = length 451, hash 9D8C95CB + buffers[15] = length 471, hash 99164341 + buffers[16] = length 388, hash 5108D935 + buffers[17] = length 414, hash 59D4D209 + buffers[18] = length 432, hash A50BE20 + buffers[19] = length 260, hash 1453AACE + buffers[20] = length 21, hash 358CAA22 + buffers[21] = length 302, hash 9B71370F + buffers[22] = length 439, hash 1CC94A39 + buffers[23] = length 545, hash 28B26B20 + buffers[24] = length 331, hash E03847CC + buffers[25] = length 580, hash DD364645 + buffers[26] = length 444, hash 569F0F7C + buffers[27] = length 514, hash 4D031D97 + buffers[28] = length 374, hash 2682FDF4 + buffers[29] = length 547, hash EE67E734 + buffers[30] = length 0, hash 1 diff --git a/testdata/src/test/assets/playbackdumps/vp9/bear-vp9.webm.dump b/testdata/src/test/assets/playbackdumps/vp9/bear-vp9.webm.dump new file mode 100644 index 0000000000..d0515dc610 --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/vp9/bear-vp9.webm.dump @@ -0,0 +1,85 @@ +MediaCodec (video/x-vnd.on2.vp9): + buffers.length = 83 + buffers[0] = length 3792, hash 70319132 + buffers[1] = length 64, hash 2661DD32 + buffers[2] = length 119, hash 8432D13B + buffers[3] = length 154, hash 3C2605A6 + buffers[4] = length 217, hash 35901EAB + buffers[5] = length 240, hash BB8C64E0 + buffers[6] = length 279, hash 1049FA3C + buffers[7] = length 241, hash 2A6B3915 + buffers[8] = length 320, hash 8668600B + buffers[9] = length 367, hash DE9678EF + buffers[10] = length 350, hash 8DB6DF03 + buffers[11] = length 498, hash AE21B561 + buffers[12] = length 616, hash 63F6CCE + buffers[13] = length 496, hash F783D2A6 + buffers[14] = length 646, hash E994A0D5 + buffers[15] = length 778, hash 4FBCB2DC + buffers[16] = length 836, hash 9CCB96 + buffers[17] = length 741, hash 26E9D761 + buffers[18] = length 971, hash 7B860A38 + buffers[19] = length 707, hash A9897854 + buffers[20] = length 999, hash 16298027 + buffers[21] = length 531, hash F882C9C1 + buffers[22] = length 637, hash 97C5D538 + buffers[23] = length 1129, hash CC0A23BD + buffers[24] = length 762, hash 494FB8F9 + buffers[25] = length 816, hash 9968424D + buffers[26] = length 883, hash 839D8C8E + buffers[27] = length 782, hash 66DAE49C + buffers[28] = length 1315, hash 1C101FF0 + buffers[29] = length 816, hash CE02A2FF + buffers[30] = length 794, hash EE87059A + buffers[31] = length 958, hash 68AC94E6 + buffers[32] = length 662, hash EBFBE047 + buffers[33] = length 1217, hash 76A5D68A + buffers[34] = length 517, hash D477B6B8 + buffers[35] = length 730, hash 9C95EAB3 + buffers[36] = length 1949, hash 4AE29A38 + buffers[37] = length 351, hash 31A3F42E + buffers[38] = length 1195, hash 4DD3358B + buffers[39] = length 560, hash 4068738D + buffers[40] = length 1161, hash D915A8DC + buffers[41] = length 773, hash CC627770 + buffers[42] = length 894, hash CF894838 + buffers[43] = length 1043, hash 63D5425C + buffers[44] = length 887, hash C06D34D5 + buffers[45] = length 868, hash 54669AE6 + buffers[46] = length 762, hash 62FE7CAE + buffers[47] = length 967, hash 8D562A0A + buffers[48] = length 962, hash DBB8BE73 + buffers[49] = length 1124, hash 2F923F45 + buffers[50] = length 642, hash CBF0CACF + buffers[51] = length 947, hash 952CD416 + buffers[52] = length 686, hash 6CB0BF25 + buffers[53] = length 1058, hash B3646F35 + buffers[54] = length 675, hash 119697F5 + buffers[55] = length 997, hash D545FB46 + buffers[56] = length 685, hash F047293D + buffers[57] = length 734, hash EC9DAC21 + buffers[58] = length 859, hash B90A4269 + buffers[59] = length 760, hash 88D61733 + buffers[60] = length 1135, hash F7F5C800 + buffers[61] = length 606, hash B8EC917D + buffers[62] = length 972, hash AFDDB2F3 + buffers[63] = length 738, hash 6DC4AED6 + buffers[64] = length 705, hash A663DB5 + buffers[65] = length 798, hash 30B04936 + buffers[66] = length 918, hash 1EB1F2B3 + buffers[67] = length 748, hash EA6C4D06 + buffers[68] = length 889, hash E5EFA513 + buffers[69] = length 731, hash 1AB901F8 + buffers[70] = length 803, hash 6BAA963C + buffers[71] = length 921, hash BA37A6B6 + buffers[72] = length 1024, hash A9C805C7 + buffers[73] = length 494, hash A6C0C1B2 + buffers[74] = length 1400, hash 2287A7CF + buffers[75] = length 429, hash ABDCC827 + buffers[76] = length 1377, hash CD2B3EBA + buffers[77] = length 563, hash FA6638F5 + buffers[78] = length 489, hash 6B15C453 + buffers[79] = length 1395, hash 8B44582D + buffers[80] = length 367, hash 1094C45C + buffers[81] = length 1427, hash 476F6455 + buffers[82] = length 0, hash 1 diff --git a/testdata/src/test/assets/playbackdumps/vp9/invalid-bitstream.webm.dump b/testdata/src/test/assets/playbackdumps/vp9/invalid-bitstream.webm.dump new file mode 100644 index 0000000000..8c64783eec --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/vp9/invalid-bitstream.webm.dump @@ -0,0 +1,54 @@ +MediaCodec (video/x-vnd.on2.vp9): + buffers.length = 52 + buffers[0] = length 17828, hash 64E34D2F + buffers[1] = length 51, hash 5A1B8385 + buffers[2] = length 254, hash 575105A5 + buffers[3] = length 342, hash 6B055BD4 + buffers[4] = length 335, hash F904CBC8 + buffers[5] = length 334, hash F43B3237 + buffers[6] = length 258, hash A017022F + buffers[7] = length 1135, hash 41096949 + buffers[8] = length 602, hash C643AFC4 + buffers[9] = length 478, hash D339CAFA + buffers[10] = length 591, hash AF60E428 + buffers[11] = length 577, hash 8A598896 + buffers[12] = length 496, hash 5A381CED + buffers[13] = length 614, hash C7ACEA2 + buffers[14] = length 498, hash C4D430D8 + buffers[15] = length 423, hash BF7565AE + buffers[16] = length 355, hash 67B19C3A + buffers[17] = length 2004, hash D3A28F8D + buffers[18] = length 319, hash D2AE1A26 + buffers[19] = length 544, hash 6672203F + buffers[20] = length 265, hash B6273EEA + buffers[21] = length 387, hash 536D5C4C + buffers[22] = length 835, hash 4151EC39 + buffers[23] = length 323, hash 388D1332 + buffers[24] = length 331, hash BB845272 + buffers[25] = length 453, hash BB524F83 + buffers[26] = length 1678, hash C4C3029F + buffers[27] = length 349, hash 722F6EA5 + buffers[28] = length 362, hash 7C261649 + buffers[29] = length 354, hash 1C0B6E1B + buffers[30] = length 442, hash EEA0BEBA + buffers[31] = length 841, hash CA8E17DF + buffers[32] = length 270, hash 30E44750 + buffers[33] = length 515, hash 3DF64E3F + buffers[34] = length 1334, hash 91475436 + buffers[35] = length 259, hash DB6AB4F7 + buffers[36] = length 358, hash B48F6BA4 + buffers[37] = length 310, hash D44CD0B1 + buffers[38] = length 429, hash 193EFB03 + buffers[39] = length 853, hash 199DE714 + buffers[40] = length 514, hash 50A0C7E4 + buffers[41] = length 494, hash BC72BF6E + buffers[42] = length 888, hash F2CD52E2 + buffers[43] = length 426, hash 26457D2C + buffers[44] = length 485, hash C807DBB + buffers[45] = length 449, hash 3B44AE53 + buffers[46] = length 503, hash FD1A91A3 + buffers[47] = length 1017, hash 96FBA2FA + buffers[48] = length 317, hash 571D2938 + buffers[49] = length 238, hash 8D1B5E68 + buffers[50] = length 1477, hash 3DE95602 + buffers[51] = length 0, hash 1 diff --git a/testdata/src/test/assets/playbackdumps/vp9/roadtrip-vp92-10bit.webm.dump b/testdata/src/test/assets/playbackdumps/vp9/roadtrip-vp92-10bit.webm.dump new file mode 100644 index 0000000000..a956ba7acf --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/vp9/roadtrip-vp92-10bit.webm.dump @@ -0,0 +1,83 @@ +MediaCodec (video/x-vnd.on2.vp9): + buffers.length = 81 + buffers[0] = length 2673, hash 35AEF916 + buffers[1] = length 5013, hash 3F74CFB8 + buffers[2] = length 410, hash 7968D37 + buffers[3] = length 768, hash F6447190 + buffers[4] = length 630, hash 867A116C + buffers[5] = length 652, hash 3F71264E + buffers[6] = length 280, hash 9F01C36A + buffers[7] = length 459, hash B7EF7C95 + buffers[8] = length 426, hash E3787BD6 + buffers[9] = length 383, hash 379EEC2F + buffers[10] = length 358, hash EE661625 + buffers[11] = length 361, hash 4F23D5EC + buffers[12] = length 322, hash AE6B8711 + buffers[13] = length 93, hash B22E7607 + buffers[14] = length 4818, hash 5FDA8F99 + buffers[15] = length 431, hash A7A2572 + buffers[16] = length 443, hash 620B58D4 + buffers[17] = length 400, hash 837F3F3E + buffers[18] = length 475, hash 4145A530 + buffers[19] = length 425, hash 4832CA81 + buffers[20] = length 471, hash DD97E54 + buffers[21] = length 409, hash CC2B93A5 + buffers[22] = length 377, hash 7C8E856 + buffers[23] = length 393, hash EA7F1EF3 + buffers[24] = length 374, hash 16D8AE4F + buffers[25] = length 342, hash 62066EA0 + buffers[26] = length 309, hash A29E204 + buffers[27] = length 257, hash B4115850 + buffers[28] = length 133, hash 67A871FE + buffers[29] = length 1509, hash 8B9F3F08 + buffers[30] = length 311, hash A8BAEC79 + buffers[31] = length 363, hash DB890218 + buffers[32] = length 357, hash 67A8435D + buffers[33] = length 333, hash 38DBDEEA + buffers[34] = length 319, hash 20121DD2 + buffers[35] = length 268, hash CB27F791 + buffers[36] = length 72, hash DB77BC41 + buffers[37] = length 2590, hash F13AD144 + buffers[38] = length 325, hash 25689FF4 + buffers[39] = length 443, hash 86D58034 + buffers[40] = length 459, hash BE8EA85A + buffers[41] = length 464, hash AC45359D + buffers[42] = length 478, hash 9DF43BCB + buffers[43] = length 390, hash 47EE958D + buffers[44] = length 343, hash 83D39070 + buffers[45] = length 87, hash DF45BCB1 + buffers[46] = length 9655, hash CC481976 + buffers[47] = length 7854, hash DA933E72 + buffers[48] = length 1746, hash E25C46AB + buffers[49] = length 2019, hash 39C2D0C + buffers[50] = length 2079, hash C98E0DB1 + buffers[51] = length 2092, hash 6B944554 + buffers[52] = length 2243, hash 5F36FB0F + buffers[53] = length 2407, hash 2F58E0FA + buffers[54] = length 2484, hash F3A19F31 + buffers[55] = length 2490, hash 18EB7DFE + buffers[56] = length 2501, hash 1C7304F3 + buffers[57] = length 2304, hash A8A5AE14 + buffers[58] = length 1773, hash 2413EA3A + buffers[59] = length 22, hash C8D9EF35 + buffers[60] = length 6216, hash E546B988 + buffers[61] = length 2275, hash D1DA8420 + buffers[62] = length 2354, hash 76B4270 + buffers[63] = length 2148, hash 2C75215E + buffers[64] = length 2060, hash 1A938209 + buffers[65] = length 1680, hash 1EEF4344 + buffers[66] = length 25, hash 797DB048 + buffers[67] = length 5343, hash CCF05351 + buffers[68] = length 1716, hash 6C9FB973 + buffers[69] = length 1882, hash 654A280 + buffers[70] = length 1872, hash 9A40CEAE + buffers[71] = length 1797, hash F21739B0 + buffers[72] = length 1619, hash 515E799 + buffers[73] = length 1448, hash 61A57499 + buffers[74] = length 1234, hash 43AD6895 + buffers[75] = length 48, hash E84CF63C + buffers[76] = length 5807, hash D7B3B47F + buffers[77] = length 5222, hash 663BA03A + buffers[78] = length 773, hash 1E0E52F8 + buffers[79] = length 807, hash 6D656F9B + buffers[80] = length 0, hash 1