From f13058942a84fd3b73e982f045c3a7434612f81c Mon Sep 17 00:00:00 2001 From: ibaker Date: Tue, 10 Nov 2020 09:29:11 +0000 Subject: [PATCH] Add Robolectric playback tests for existing FLV assets PiperOrigin-RevId: 341573808 --- .../exoplayer2/e2etest/FlvPlaybackTest.java | 74 +++++++++++++++++ .../flv/sample-with-key-frame-index.flv.dump | 74 +++++++++++++++++ .../assets/playbackdumps/flv/sample.flv.dump | 81 +++++++++++++++++++ 3 files changed, 229 insertions(+) create mode 100644 library/core/src/test/java/com/google/android/exoplayer2/e2etest/FlvPlaybackTest.java create mode 100644 testdata/src/test/assets/playbackdumps/flv/sample-with-key-frame-index.flv.dump create mode 100644 testdata/src/test/assets/playbackdumps/flv/sample.flv.dump diff --git a/library/core/src/test/java/com/google/android/exoplayer2/e2etest/FlvPlaybackTest.java b/library/core/src/test/java/com/google/android/exoplayer2/e2etest/FlvPlaybackTest.java new file mode 100644 index 0000000000..98bba2cc45 --- /dev/null +++ b/library/core/src/test/java/com/google/android/exoplayer2/e2etest/FlvPlaybackTest.java @@ -0,0 +1,74 @@ +/* + * 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 FLV samples. */ +// TODO(b/143232359): Remove once https://issuetracker.google.com/143232359 is resolved. +@Config(sdk = 29) +@RunWith(ParameterizedRobolectricTestRunner.class) +public final class FlvPlaybackTest { + @Parameters(name = "{0}") + public static ImmutableList mediaSamples() { + return ImmutableList.of("sample.flv", "sample-with-key-frame-index.flv"); + } + + @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/flv/" + inputFile)); + player.prepare(); + player.play(); + TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED); + player.release(); + + DumpFileAsserts.assertOutput( + ApplicationProvider.getApplicationContext(), + playbackOutput, + "playbackdumps/flv/" + inputFile + ".dump"); + } +} diff --git a/testdata/src/test/assets/playbackdumps/flv/sample-with-key-frame-index.flv.dump b/testdata/src/test/assets/playbackdumps/flv/sample-with-key-frame-index.flv.dump new file mode 100644 index 0000000000..a6942b6345 --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/flv/sample-with-key-frame-index.flv.dump @@ -0,0 +1,74 @@ +MediaCodec (video/avc): + buffers.length = 72 + buffers[0] = length 747, hash 59AEB08 + buffers[1] = length 117, hash 57A315CB + buffers[2] = length 16, hash 7E8FA845 + buffers[3] = length 13, hash 7AEB9BE0 + buffers[4] = length 16, hash 644DA4CC + buffers[5] = length 200, hash E5BF3A39 + buffers[6] = length 167, hash 74FCA726 + buffers[7] = length 134, hash 3B12FEC0 + buffers[8] = length 264, hash 7D9323C7 + buffers[9] = length 141, hash B5AAF09F + buffers[10] = length 229, hash 181AD475 + buffers[11] = length 279, hash 11A95D98 + buffers[12] = length 39, hash 6F87AFD9 + buffers[13] = length 88, hash 6E7EC1EF + buffers[14] = length 481, hash 82246706 + buffers[15] = length 103, hash A201C852 + buffers[16] = length 85, hash 7D6F33C4 + buffers[17] = length 659, hash 3BF583EF + buffers[18] = length 134, hash 46C97FD9 + buffers[19] = length 153, hash 5E737D26 + buffers[20] = length 652, hash E3151CCE + buffers[21] = length 86, hash A1884AD8 + buffers[22] = length 150, hash 6C7DEF31 + buffers[23] = length 316, hash E7867 + buffers[24] = length 1950, hash 28E6760E + buffers[25] = length 561, hash 8394BDB5 + buffers[26] = length 130, hash B50D0F26 + buffers[27] = length 185, hash 359FC134 + buffers[28] = length 130, hash C53797EC + buffers[29] = length 867, hash B87AD770 + buffers[30] = length 155, hash 73B4B0E7 + buffers[31] = length 168, hash 9C9C9994 + buffers[32] = length 145, hash 2D3F2527 + buffers[33] = length 991, hash 78143488 + buffers[34] = length 174, hash 6C778CE7 + buffers[35] = length 82, hash D605F20D + buffers[36] = length 125, hash 248E8190 + buffers[37] = length 1095, hash 21B08B6C + buffers[38] = length 238, hash AE5854DF + buffers[39] = length 151, hash DF20C082 + buffers[40] = length 45, hash 35165468 + buffers[41] = length 1425, hash D20DA4F0 + buffers[42] = length 67, hash 49E25397 + buffers[43] = length 72, hash EEDD2F83 + buffers[44] = length 1382, hash 6C35D237 + buffers[45] = length 186, hash CDE97917 + buffers[46] = length 80, hash 923EC2C + buffers[47] = length 122, hash EB3EEF54 + buffers[48] = length 4380, hash 9221E054 + buffers[49] = length 819, hash 46A722D6 + buffers[50] = length 140, hash E9AA6D8B + buffers[51] = length 711, hash C49CB26 + buffers[52] = length 111, hash A53830B7 + buffers[53] = length 1062, hash B95BF284 + buffers[54] = length 312, hash 1C667DA3 + buffers[55] = length 132, hash 59C0F906 + buffers[56] = length 149, hash B7F8F4A5 + buffers[57] = length 1040, hash 82D4CCFD + buffers[58] = length 349, hash C1236BA4 + buffers[59] = length 140, hash 67015D1B + buffers[60] = length 186, hash C0DF4AB0 + buffers[61] = length 811, hash EEA6FBFF + buffers[62] = length 356, hash A9847C12 + buffers[63] = length 156, hash 61E72801 + buffers[64] = length 212, hash F1F7EBE8 + buffers[65] = length 681, hash FA95355F + buffers[66] = length 351, hash F771D4DD + buffers[67] = length 174, hash 325A7512 + buffers[68] = length 199, hash A22FAA40 + buffers[69] = length 322, hash C494E5A7 + buffers[70] = length 171, hash 2DA9ECEC + buffers[71] = length 0, hash 1 diff --git a/testdata/src/test/assets/playbackdumps/flv/sample.flv.dump b/testdata/src/test/assets/playbackdumps/flv/sample.flv.dump new file mode 100644 index 0000000000..d65c8edaf1 --- /dev/null +++ b/testdata/src/test/assets/playbackdumps/flv/sample.flv.dump @@ -0,0 +1,81 @@ +MediaCodec (audio/mp4a-latm): + buffers.length = 46 + buffers[0] = length 23, hash 47DE9131 + buffers[1] = length 6, hash 31EC5206 + buffers[2] = length 148, hash 894A176B + buffers[3] = length 189, hash CEF235A1 + buffers[4] = length 205, hash BBF5F7B0 + buffers[5] = length 210, hash F278B193 + buffers[6] = length 210, hash 82DA1589 + buffers[7] = length 207, hash 5BE231DF + buffers[8] = length 225, hash 18819EE1 + buffers[9] = length 215, hash CA7FA67B + buffers[10] = length 211, hash 581A1C18 + buffers[11] = length 216, hash ADB88187 + buffers[12] = length 229, hash 2E8BA4DC + buffers[13] = length 232, hash 22F0C510 + buffers[14] = length 235, hash 867AD0DC + buffers[15] = length 231, hash 84E823A8 + buffers[16] = length 226, hash 1BEF3A95 + buffers[17] = length 216, hash EAA345AE + buffers[18] = length 229, hash 6957411F + buffers[19] = length 219, hash 41275022 + buffers[20] = length 241, hash 6495DF96 + buffers[21] = length 228, hash 63D95906 + buffers[22] = length 238, hash 34F676F9 + buffers[23] = length 234, hash E5CBC045 + buffers[24] = length 231, hash 5FC43661 + buffers[25] = length 217, hash 682708ED + buffers[26] = length 239, hash D43780FC + buffers[27] = length 243, hash C5E17980 + buffers[28] = length 231, hash AC5837BA + buffers[29] = length 230, hash 169EE895 + buffers[30] = length 238, hash C48FF3F1 + buffers[31] = length 225, hash 531E4599 + buffers[32] = length 232, hash CB3C6B8D + buffers[33] = length 243, hash F8C94C7 + buffers[34] = length 232, hash A646A7D0 + buffers[35] = length 237, hash E8B787A5 + buffers[36] = length 228, hash 3FA7A29F + buffers[37] = length 235, hash B9B33B0A + buffers[38] = length 264, hash 71A4869E + buffers[39] = length 257, hash D049B54C + buffers[40] = length 227, hash 66757231 + buffers[41] = length 227, hash BD374F1B + buffers[42] = length 235, hash 999477F6 + buffers[43] = length 229, hash FFF98DF0 + buffers[44] = length 6, hash 31B22286 + buffers[45] = 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