End to end test for WebVTT sideloaded subtitles
Enable subtitle output in the PlaybackOutput and disable the text renderer in the MkvPlaybackTest. Add WebvttPlaybackTest to test the output of side-loaded WebVTT subtitles. PiperOrigin-RevId: 402526588
This commit is contained in:
parent
a56af3d0e0
commit
4b3cbfd64f
@ -19,6 +19,7 @@ import android.content.Context;
|
|||||||
import android.graphics.SurfaceTexture;
|
import android.graphics.SurfaceTexture;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.ExoPlayer;
|
import com.google.android.exoplayer2.ExoPlayer;
|
||||||
import com.google.android.exoplayer2.MediaItem;
|
import com.google.android.exoplayer2.MediaItem;
|
||||||
import com.google.android.exoplayer2.Player;
|
import com.google.android.exoplayer2.Player;
|
||||||
@ -29,6 +30,7 @@ import com.google.android.exoplayer2.robolectric.TestPlayerRunHelper;
|
|||||||
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
|
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
|
||||||
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
|
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
|
||||||
import com.google.android.exoplayer2.testutil.FakeClock;
|
import com.google.android.exoplayer2.testutil.FakeClock;
|
||||||
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -65,6 +67,19 @@ public final class MkvPlaybackTest {
|
|||||||
new ExoPlayer.Builder(applicationContext, capturingRenderersFactory)
|
new ExoPlayer.Builder(applicationContext, capturingRenderersFactory)
|
||||||
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
|
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
|
||||||
.build();
|
.build();
|
||||||
|
// TODO(internal b/174661563): Remove the for-loop below to enable the text renderer when
|
||||||
|
// subtitle output is not flaky.
|
||||||
|
for (int textRendererIndex = 0;
|
||||||
|
textRendererIndex < player.getRendererCount();
|
||||||
|
textRendererIndex++) {
|
||||||
|
if (player.getRendererType(textRendererIndex) == C.TRACK_TYPE_TEXT) {
|
||||||
|
player.setTrackSelectionParameters(
|
||||||
|
new DefaultTrackSelector.ParametersBuilder(applicationContext)
|
||||||
|
.setRendererDisabled(textRendererIndex, /* disabled= */ true)
|
||||||
|
.build());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1)));
|
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1)));
|
||||||
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
|
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
|
||||||
|
|
||||||
|
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 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.content.Context;
|
||||||
|
import android.graphics.SurfaceTexture;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.view.Surface;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
|
import com.google.android.exoplayer2.ExoPlayer;
|
||||||
|
import com.google.android.exoplayer2.MediaItem;
|
||||||
|
import com.google.android.exoplayer2.Player;
|
||||||
|
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.source.DefaultMediaSourceFactory;
|
||||||
|
import com.google.android.exoplayer2.source.MediaSourceFactory;
|
||||||
|
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
|
||||||
|
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
|
||||||
|
import com.google.android.exoplayer2.testutil.FakeClock;
|
||||||
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.ParameterizedRobolectricTestRunner;
|
||||||
|
|
||||||
|
/** End-to-end tests using side-loaded WebVTT subtitles. */
|
||||||
|
@RunWith(ParameterizedRobolectricTestRunner.class)
|
||||||
|
public class WebvttPlaybackTest {
|
||||||
|
@ParameterizedRobolectricTestRunner.Parameters(name = "{0}")
|
||||||
|
public static ImmutableList<String> mediaSamples() {
|
||||||
|
return ImmutableList.of("typical");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedRobolectricTestRunner.Parameter public String inputFile;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public ShadowMediaCodecConfig mediaCodecConfig =
|
||||||
|
ShadowMediaCodecConfig.forAllSupportedMimeTypes();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() throws Exception {
|
||||||
|
Context applicationContext = ApplicationProvider.getApplicationContext();
|
||||||
|
CapturingRenderersFactory capturingRenderersFactory =
|
||||||
|
new CapturingRenderersFactory(applicationContext);
|
||||||
|
MediaSourceFactory mediaSourceFactory =
|
||||||
|
new DefaultMediaSourceFactory(applicationContext)
|
||||||
|
.experimentalUseProgressiveMediaSourceForSubtitles(true);
|
||||||
|
ExoPlayer player =
|
||||||
|
new ExoPlayer.Builder(applicationContext, capturingRenderersFactory)
|
||||||
|
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
|
||||||
|
.setMediaSourceFactory(mediaSourceFactory)
|
||||||
|
.build();
|
||||||
|
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1)));
|
||||||
|
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
|
||||||
|
MediaItem mediaItem =
|
||||||
|
new MediaItem.Builder()
|
||||||
|
.setUri("asset:///media/mp4/preroll-5s.mp4")
|
||||||
|
.setSubtitleConfigurations(
|
||||||
|
ImmutableList.of(
|
||||||
|
new MediaItem.SubtitleConfiguration.Builder(
|
||||||
|
Uri.parse("asset:///media/webvtt/" + inputFile))
|
||||||
|
.setMimeType(MimeTypes.TEXT_VTT)
|
||||||
|
.setLanguage("en")
|
||||||
|
.setSelectionFlags(C.SELECTION_FLAG_DEFAULT)
|
||||||
|
.build()))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
player.setMediaItem(mediaItem);
|
||||||
|
player.prepare();
|
||||||
|
player.play();
|
||||||
|
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
|
player.release();
|
||||||
|
|
||||||
|
DumpFileAsserts.assertOutput(
|
||||||
|
applicationContext, playbackOutput, "playbackdumps/webvtt/" + inputFile + ".dump");
|
||||||
|
}
|
||||||
|
}
|
@ -33,6 +33,7 @@ import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
|
|||||||
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
|
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
|
||||||
import com.google.android.exoplayer2.testutil.FakeClock;
|
import com.google.android.exoplayer2.testutil.FakeClock;
|
||||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||||
|
import org.junit.Ignore;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@ -47,6 +48,8 @@ public final class DashPlaybackTest {
|
|||||||
|
|
||||||
// https://github.com/google/ExoPlayer/issues/7985
|
// https://github.com/google/ExoPlayer/issues/7985
|
||||||
@Test
|
@Test
|
||||||
|
@Ignore(
|
||||||
|
"Disabled until subtitles are reliably asserted in robolectric tests [internal b/174661563].")
|
||||||
public void webvttInMp4() throws Exception {
|
public void webvttInMp4() throws Exception {
|
||||||
Context applicationContext = ApplicationProvider.getApplicationContext();
|
Context applicationContext = ApplicationProvider.getApplicationContext();
|
||||||
CapturingRenderersFactory capturingRenderersFactory =
|
CapturingRenderersFactory capturingRenderersFactory =
|
||||||
|
@ -17,8 +17,8 @@ package com.google.android.exoplayer2.robolectric;
|
|||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import com.google.android.exoplayer2.ExoPlayer;
|
||||||
import com.google.android.exoplayer2.Player;
|
import com.google.android.exoplayer2.Player;
|
||||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
|
||||||
import com.google.android.exoplayer2.metadata.Metadata;
|
import com.google.android.exoplayer2.metadata.Metadata;
|
||||||
import com.google.android.exoplayer2.metadata.dvbsi.AppInfoTable;
|
import com.google.android.exoplayer2.metadata.dvbsi.AppInfoTable;
|
||||||
import com.google.android.exoplayer2.metadata.emsg.EventMessage;
|
import com.google.android.exoplayer2.metadata.emsg.EventMessage;
|
||||||
@ -55,8 +55,7 @@ public final class PlaybackOutput implements Dumper.Dumpable {
|
|||||||
private final List<Metadata> metadatas;
|
private final List<Metadata> metadatas;
|
||||||
private final List<List<Cue>> subtitles;
|
private final List<List<Cue>> subtitles;
|
||||||
|
|
||||||
private PlaybackOutput(
|
private PlaybackOutput(ExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
|
||||||
SimpleExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
|
|
||||||
this.capturingRenderersFactory = capturingRenderersFactory;
|
this.capturingRenderersFactory = capturingRenderersFactory;
|
||||||
|
|
||||||
metadatas = Collections.synchronizedList(new ArrayList<>());
|
metadatas = Collections.synchronizedList(new ArrayList<>());
|
||||||
@ -73,7 +72,7 @@ public final class PlaybackOutput implements Dumper.Dumpable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCues(List<Cue> cues) {
|
public void onCues(List<Cue> cues) {
|
||||||
// TODO(internal b/174661563): Output subtitle data when it's not flaky.
|
subtitles.add(cues);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -85,13 +84,13 @@ public final class PlaybackOutput implements Dumper.Dumpable {
|
|||||||
* <p>Must be called <b>before</b> playback to ensure metadata and text output is captured
|
* <p>Must be called <b>before</b> playback to ensure metadata and text output is captured
|
||||||
* correctly.
|
* correctly.
|
||||||
*
|
*
|
||||||
* @param player The {@link SimpleExoPlayer} to capture metadata and text output from.
|
* @param player The {@link ExoPlayer} to capture metadata and text output from.
|
||||||
* @param capturingRenderersFactory The {@link CapturingRenderersFactory} to capture audio and
|
* @param capturingRenderersFactory The {@link CapturingRenderersFactory} to capture audio and
|
||||||
* video output from.
|
* video output from.
|
||||||
* @return A new instance that can be used to dump the playback output.
|
* @return A new instance that can be used to dump the playback output.
|
||||||
*/
|
*/
|
||||||
public static PlaybackOutput register(
|
public static PlaybackOutput register(
|
||||||
SimpleExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
|
ExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
|
||||||
return new PlaybackOutput(player, capturingRenderersFactory);
|
return new PlaybackOutput(player, capturingRenderersFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
375
testdata/src/test/assets/playbackdumps/webvtt/typical.dump
vendored
Normal file
375
testdata/src/test/assets/playbackdumps/webvtt/typical.dump
vendored
Normal file
@ -0,0 +1,375 @@
|
|||||||
|
MediaCodecAdapter (exotest.audio.aac):
|
||||||
|
buffers.length = 218
|
||||||
|
buffers[0] = length 21, hash D57A2CCC
|
||||||
|
buffers[1] = length 4, hash EE9DF
|
||||||
|
buffers[2] = length 4, hash EE9DF
|
||||||
|
buffers[3] = length 4, hash EE9DF
|
||||||
|
buffers[4] = length 4, hash EE9DF
|
||||||
|
buffers[5] = length 4, hash EE9DF
|
||||||
|
buffers[6] = length 4, hash EE9DF
|
||||||
|
buffers[7] = length 4, hash EE9DF
|
||||||
|
buffers[8] = length 4, hash EE9DF
|
||||||
|
buffers[9] = length 4, hash EE9DF
|
||||||
|
buffers[10] = length 4, hash EE9DF
|
||||||
|
buffers[11] = length 4, hash EE9DF
|
||||||
|
buffers[12] = length 4, hash EE9DF
|
||||||
|
buffers[13] = length 4, hash EE9DF
|
||||||
|
buffers[14] = length 4, hash EE9DF
|
||||||
|
buffers[15] = length 4, hash EE9DF
|
||||||
|
buffers[16] = length 4, hash EE9DF
|
||||||
|
buffers[17] = length 4, hash EE9DF
|
||||||
|
buffers[18] = length 4, hash EE9DF
|
||||||
|
buffers[19] = length 4, hash EE9DF
|
||||||
|
buffers[20] = length 4, hash EE9DF
|
||||||
|
buffers[21] = length 4, hash EE9DF
|
||||||
|
buffers[22] = length 4, hash EE9DF
|
||||||
|
buffers[23] = length 4, hash EE9DF
|
||||||
|
buffers[24] = length 4, hash EE9DF
|
||||||
|
buffers[25] = length 4, hash EE9DF
|
||||||
|
buffers[26] = length 4, hash EE9DF
|
||||||
|
buffers[27] = length 4, hash EE9DF
|
||||||
|
buffers[28] = length 4, hash EE9DF
|
||||||
|
buffers[29] = length 4, hash EE9DF
|
||||||
|
buffers[30] = length 4, hash EE9DF
|
||||||
|
buffers[31] = length 4, hash EE9DF
|
||||||
|
buffers[32] = length 4, hash EE9DF
|
||||||
|
buffers[33] = length 4, hash EE9DF
|
||||||
|
buffers[34] = length 4, hash EE9DF
|
||||||
|
buffers[35] = length 4, hash EE9DF
|
||||||
|
buffers[36] = length 4, hash EE9DF
|
||||||
|
buffers[37] = length 4, hash EE9DF
|
||||||
|
buffers[38] = length 4, hash EE9DF
|
||||||
|
buffers[39] = length 4, hash EE9DF
|
||||||
|
buffers[40] = length 4, hash EE9DF
|
||||||
|
buffers[41] = length 4, hash EE9DF
|
||||||
|
buffers[42] = length 4, hash EE9DF
|
||||||
|
buffers[43] = length 4, hash EE9DF
|
||||||
|
buffers[44] = length 4, hash EE9DF
|
||||||
|
buffers[45] = length 4, hash EE9DF
|
||||||
|
buffers[46] = length 4, hash EE9DF
|
||||||
|
buffers[47] = length 4, hash EE9DF
|
||||||
|
buffers[48] = length 4, hash EE9DF
|
||||||
|
buffers[49] = length 4, hash EE9DF
|
||||||
|
buffers[50] = length 4, hash EE9DF
|
||||||
|
buffers[51] = length 4, hash EE9DF
|
||||||
|
buffers[52] = length 4, hash EE9DF
|
||||||
|
buffers[53] = length 4, hash EE9DF
|
||||||
|
buffers[54] = length 4, hash EE9DF
|
||||||
|
buffers[55] = length 4, hash EE9DF
|
||||||
|
buffers[56] = length 4, hash EE9DF
|
||||||
|
buffers[57] = length 4, hash EE9DF
|
||||||
|
buffers[58] = length 4, hash EE9DF
|
||||||
|
buffers[59] = length 4, hash EE9DF
|
||||||
|
buffers[60] = length 4, hash EE9DF
|
||||||
|
buffers[61] = length 4, hash EE9DF
|
||||||
|
buffers[62] = length 4, hash EE9DF
|
||||||
|
buffers[63] = length 4, hash EE9DF
|
||||||
|
buffers[64] = length 4, hash EE9DF
|
||||||
|
buffers[65] = length 4, hash EE9DF
|
||||||
|
buffers[66] = length 4, hash EE9DF
|
||||||
|
buffers[67] = length 4, hash EE9DF
|
||||||
|
buffers[68] = length 4, hash EE9DF
|
||||||
|
buffers[69] = length 4, hash EE9DF
|
||||||
|
buffers[70] = length 4, hash EE9DF
|
||||||
|
buffers[71] = length 4, hash EE9DF
|
||||||
|
buffers[72] = length 4, hash EE9DF
|
||||||
|
buffers[73] = length 4, hash EE9DF
|
||||||
|
buffers[74] = length 4, hash EE9DF
|
||||||
|
buffers[75] = length 4, hash EE9DF
|
||||||
|
buffers[76] = length 4, hash EE9DF
|
||||||
|
buffers[77] = length 4, hash EE9DF
|
||||||
|
buffers[78] = length 4, hash EE9DF
|
||||||
|
buffers[79] = length 4, hash EE9DF
|
||||||
|
buffers[80] = length 4, hash EE9DF
|
||||||
|
buffers[81] = length 4, hash EE9DF
|
||||||
|
buffers[82] = length 4, hash EE9DF
|
||||||
|
buffers[83] = length 4, hash EE9DF
|
||||||
|
buffers[84] = length 4, hash EE9DF
|
||||||
|
buffers[85] = length 4, hash EE9DF
|
||||||
|
buffers[86] = length 4, hash EE9DF
|
||||||
|
buffers[87] = length 4, hash EE9DF
|
||||||
|
buffers[88] = length 4, hash EE9DF
|
||||||
|
buffers[89] = length 4, hash EE9DF
|
||||||
|
buffers[90] = length 4, hash EE9DF
|
||||||
|
buffers[91] = length 4, hash EE9DF
|
||||||
|
buffers[92] = length 4, hash EE9DF
|
||||||
|
buffers[93] = length 4, hash EE9DF
|
||||||
|
buffers[94] = length 4, hash EE9DF
|
||||||
|
buffers[95] = length 4, hash EE9DF
|
||||||
|
buffers[96] = length 4, hash EE9DF
|
||||||
|
buffers[97] = length 4, hash EE9DF
|
||||||
|
buffers[98] = length 4, hash EE9DF
|
||||||
|
buffers[99] = length 4, hash EE9DF
|
||||||
|
buffers[100] = length 4, hash EE9DF
|
||||||
|
buffers[101] = length 4, hash EE9DF
|
||||||
|
buffers[102] = length 4, hash EE9DF
|
||||||
|
buffers[103] = length 4, hash EE9DF
|
||||||
|
buffers[104] = length 4, hash EE9DF
|
||||||
|
buffers[105] = length 4, hash EE9DF
|
||||||
|
buffers[106] = length 4, hash EE9DF
|
||||||
|
buffers[107] = length 4, hash EE9DF
|
||||||
|
buffers[108] = length 4, hash EE9DF
|
||||||
|
buffers[109] = length 4, hash EE9DF
|
||||||
|
buffers[110] = length 4, hash EE9DF
|
||||||
|
buffers[111] = length 4, hash EE9DF
|
||||||
|
buffers[112] = length 4, hash EE9DF
|
||||||
|
buffers[113] = length 4, hash EE9DF
|
||||||
|
buffers[114] = length 4, hash EE9DF
|
||||||
|
buffers[115] = length 4, hash EE9DF
|
||||||
|
buffers[116] = length 4, hash EE9DF
|
||||||
|
buffers[117] = length 4, hash EE9DF
|
||||||
|
buffers[118] = length 4, hash EE9DF
|
||||||
|
buffers[119] = length 4, hash EE9DF
|
||||||
|
buffers[120] = length 4, hash EE9DF
|
||||||
|
buffers[121] = length 4, hash EE9DF
|
||||||
|
buffers[122] = length 4, hash EE9DF
|
||||||
|
buffers[123] = length 4, hash EE9DF
|
||||||
|
buffers[124] = length 4, hash EE9DF
|
||||||
|
buffers[125] = length 4, hash EE9DF
|
||||||
|
buffers[126] = length 4, hash EE9DF
|
||||||
|
buffers[127] = length 4, hash EE9DF
|
||||||
|
buffers[128] = length 4, hash EE9DF
|
||||||
|
buffers[129] = length 4, hash EE9DF
|
||||||
|
buffers[130] = length 4, hash EE9DF
|
||||||
|
buffers[131] = length 4, hash EE9DF
|
||||||
|
buffers[132] = length 4, hash EE9DF
|
||||||
|
buffers[133] = length 4, hash EE9DF
|
||||||
|
buffers[134] = length 4, hash EE9DF
|
||||||
|
buffers[135] = length 4, hash EE9DF
|
||||||
|
buffers[136] = length 4, hash EE9DF
|
||||||
|
buffers[137] = length 4, hash EE9DF
|
||||||
|
buffers[138] = length 4, hash EE9DF
|
||||||
|
buffers[139] = length 4, hash EE9DF
|
||||||
|
buffers[140] = length 4, hash EE9DF
|
||||||
|
buffers[141] = length 4, hash EE9DF
|
||||||
|
buffers[142] = length 4, hash EE9DF
|
||||||
|
buffers[143] = length 4, hash EE9DF
|
||||||
|
buffers[144] = length 4, hash EE9DF
|
||||||
|
buffers[145] = length 4, hash EE9DF
|
||||||
|
buffers[146] = length 4, hash EE9DF
|
||||||
|
buffers[147] = length 4, hash EE9DF
|
||||||
|
buffers[148] = length 4, hash EE9DF
|
||||||
|
buffers[149] = length 4, hash EE9DF
|
||||||
|
buffers[150] = length 4, hash EE9DF
|
||||||
|
buffers[151] = length 4, hash EE9DF
|
||||||
|
buffers[152] = length 4, hash EE9DF
|
||||||
|
buffers[153] = length 4, hash EE9DF
|
||||||
|
buffers[154] = length 4, hash EE9DF
|
||||||
|
buffers[155] = length 4, hash EE9DF
|
||||||
|
buffers[156] = length 4, hash EE9DF
|
||||||
|
buffers[157] = length 4, hash EE9DF
|
||||||
|
buffers[158] = length 4, hash EE9DF
|
||||||
|
buffers[159] = length 4, hash EE9DF
|
||||||
|
buffers[160] = length 4, hash EE9DF
|
||||||
|
buffers[161] = length 4, hash EE9DF
|
||||||
|
buffers[162] = length 4, hash EE9DF
|
||||||
|
buffers[163] = length 4, hash EE9DF
|
||||||
|
buffers[164] = length 4, hash EE9DF
|
||||||
|
buffers[165] = length 4, hash EE9DF
|
||||||
|
buffers[166] = length 4, hash EE9DF
|
||||||
|
buffers[167] = length 4, hash EE9DF
|
||||||
|
buffers[168] = length 4, hash EE9DF
|
||||||
|
buffers[169] = length 4, hash EE9DF
|
||||||
|
buffers[170] = length 4, hash EE9DF
|
||||||
|
buffers[171] = length 4, hash EE9DF
|
||||||
|
buffers[172] = length 4, hash EE9DF
|
||||||
|
buffers[173] = length 4, hash EE9DF
|
||||||
|
buffers[174] = length 4, hash EE9DF
|
||||||
|
buffers[175] = length 4, hash EE9DF
|
||||||
|
buffers[176] = length 4, hash EE9DF
|
||||||
|
buffers[177] = length 4, hash EE9DF
|
||||||
|
buffers[178] = length 4, hash EE9DF
|
||||||
|
buffers[179] = length 4, hash EE9DF
|
||||||
|
buffers[180] = length 4, hash EE9DF
|
||||||
|
buffers[181] = length 4, hash EE9DF
|
||||||
|
buffers[182] = length 4, hash EE9DF
|
||||||
|
buffers[183] = length 4, hash EE9DF
|
||||||
|
buffers[184] = length 4, hash EE9DF
|
||||||
|
buffers[185] = length 4, hash EE9DF
|
||||||
|
buffers[186] = length 4, hash EE9DF
|
||||||
|
buffers[187] = length 4, hash EE9DF
|
||||||
|
buffers[188] = length 4, hash EE9DF
|
||||||
|
buffers[189] = length 4, hash EE9DF
|
||||||
|
buffers[190] = length 4, hash EE9DF
|
||||||
|
buffers[191] = length 4, hash EE9DF
|
||||||
|
buffers[192] = length 4, hash EE9DF
|
||||||
|
buffers[193] = length 4, hash EE9DF
|
||||||
|
buffers[194] = length 4, hash EE9DF
|
||||||
|
buffers[195] = length 4, hash EE9DF
|
||||||
|
buffers[196] = length 4, hash EE9DF
|
||||||
|
buffers[197] = length 4, hash EE9DF
|
||||||
|
buffers[198] = length 4, hash EE9DF
|
||||||
|
buffers[199] = length 4, hash EE9DF
|
||||||
|
buffers[200] = length 4, hash EE9DF
|
||||||
|
buffers[201] = length 4, hash EE9DF
|
||||||
|
buffers[202] = length 4, hash EE9DF
|
||||||
|
buffers[203] = length 4, hash EE9DF
|
||||||
|
buffers[204] = length 4, hash EE9DF
|
||||||
|
buffers[205] = length 4, hash EE9DF
|
||||||
|
buffers[206] = length 4, hash EE9DF
|
||||||
|
buffers[207] = length 4, hash EE9DF
|
||||||
|
buffers[208] = length 4, hash EE9DF
|
||||||
|
buffers[209] = length 4, hash EE9DF
|
||||||
|
buffers[210] = length 4, hash EE9DF
|
||||||
|
buffers[211] = length 4, hash EE9DF
|
||||||
|
buffers[212] = length 4, hash EE9DF
|
||||||
|
buffers[213] = length 4, hash EE9DF
|
||||||
|
buffers[214] = length 4, hash EE9DF
|
||||||
|
buffers[215] = length 4, hash EE9DF
|
||||||
|
buffers[216] = length 4, hash EE9DF
|
||||||
|
buffers[217] = length 0, hash 1
|
||||||
|
MediaCodecAdapter (exotest.video.avc):
|
||||||
|
buffers.length = 126
|
||||||
|
buffers[0] = length 5245, hash C090A41E
|
||||||
|
buffers[1] = length 63, hash 5141C80D
|
||||||
|
buffers[2] = length 22, hash A32E59A1
|
||||||
|
buffers[3] = length 20, hash A09DEAB8
|
||||||
|
buffers[4] = length 18, hash B64DA059
|
||||||
|
buffers[5] = length 28, hash FC8EF2BB
|
||||||
|
buffers[6] = length 22, hash BF8A4A9F
|
||||||
|
buffers[7] = length 18, hash D163DF61
|
||||||
|
buffers[8] = length 18, hash FD82E95
|
||||||
|
buffers[9] = length 28, hash 44A16E72
|
||||||
|
buffers[10] = length 22, hash 31C06057
|
||||||
|
buffers[11] = length 18, hash DC93CC9D
|
||||||
|
buffers[12] = length 18, hash 1B081BD1
|
||||||
|
buffers[13] = length 28, hash 2700AF
|
||||||
|
buffers[14] = length 22, hash 6D292D94
|
||||||
|
buffers[15] = length 18, hash D646C05A
|
||||||
|
buffers[16] = length 18, hash 14BB0F8E
|
||||||
|
buffers[17] = length 28, hash 5DE2C2B
|
||||||
|
buffers[18] = length 22, hash 57E81CD0
|
||||||
|
buffers[19] = length 18, hash E176AD96
|
||||||
|
buffers[20] = length 18, hash 1FEAFCCA
|
||||||
|
buffers[21] = length 28, hash C163BE68
|
||||||
|
buffers[22] = length 22, hash B0C92D0B
|
||||||
|
buffers[23] = length 18, hash 3B013BD2
|
||||||
|
buffers[24] = length 18, hash 79758B06
|
||||||
|
buffers[25] = length 28, hash F72EB1A3
|
||||||
|
buffers[26] = length 22, hash 9B881C48
|
||||||
|
buffers[27] = length 18, hash 4631290E
|
||||||
|
buffers[28] = length 18, hash 84A57842
|
||||||
|
buffers[29] = length 28, hash E1FCF000
|
||||||
|
buffers[30] = length 22, hash 359D2D82
|
||||||
|
buffers[31] = length 18, hash 62DE0FC9
|
||||||
|
buffers[32] = length 18, hash A1525EFD
|
||||||
|
buffers[33] = length 28, hash 5350E8FA
|
||||||
|
buffers[34] = length 22, hash EE2060DF
|
||||||
|
buffers[35] = length 18, hash 77D95125
|
||||||
|
buffers[36] = length 18, hash B64DA059
|
||||||
|
buffers[37] = length 28, hash ED67B37
|
||||||
|
buffers[38] = length 22, hash 4701711B
|
||||||
|
buffers[39] = length 18, hash D163DF61
|
||||||
|
buffers[40] = length 18, hash FD82E95
|
||||||
|
buffers[41] = length 28, hash 44A16E72
|
||||||
|
buffers[42] = length 22, hash 31C06057
|
||||||
|
buffers[43] = length 18, hash DC93CC9D
|
||||||
|
buffers[44] = length 18, hash 1B081BD1
|
||||||
|
buffers[45] = length 28, hash 2700AF
|
||||||
|
buffers[46] = length 22, hash 6D292D94
|
||||||
|
buffers[47] = length 18, hash D646C05A
|
||||||
|
buffers[48] = length 18, hash 14BB0F8E
|
||||||
|
buffers[49] = length 28, hash 5DE2C2B
|
||||||
|
buffers[50] = length 22, hash 57E81CD0
|
||||||
|
buffers[51] = length 18, hash E176AD96
|
||||||
|
buffers[52] = length 18, hash 1FEAFCCA
|
||||||
|
buffers[53] = length 28, hash C163BE68
|
||||||
|
buffers[54] = length 22, hash B0C92D0B
|
||||||
|
buffers[55] = length 18, hash 3B013BD2
|
||||||
|
buffers[56] = length 18, hash 79758B06
|
||||||
|
buffers[57] = length 28, hash F72EB1A3
|
||||||
|
buffers[58] = length 22, hash 9B881C48
|
||||||
|
buffers[59] = length 18, hash 4631290E
|
||||||
|
buffers[60] = length 18, hash 84A57842
|
||||||
|
buffers[61] = length 28, hash E1FCF000
|
||||||
|
buffers[62] = length 22, hash 359D2D82
|
||||||
|
buffers[63] = length 18, hash 62DE0FC9
|
||||||
|
buffers[64] = length 18, hash A1525EFD
|
||||||
|
buffers[65] = length 28, hash 5350E8FA
|
||||||
|
buffers[66] = length 22, hash EE2060DF
|
||||||
|
buffers[67] = length 18, hash 77D95125
|
||||||
|
buffers[68] = length 18, hash B64DA059
|
||||||
|
buffers[69] = length 28, hash ED67B37
|
||||||
|
buffers[70] = length 22, hash 4701711B
|
||||||
|
buffers[71] = length 18, hash D163DF61
|
||||||
|
buffers[72] = length 18, hash FD82E95
|
||||||
|
buffers[73] = length 28, hash 44A16E72
|
||||||
|
buffers[74] = length 22, hash 31C06057
|
||||||
|
buffers[75] = length 18, hash DC93CC9D
|
||||||
|
buffers[76] = length 18, hash 1B081BD1
|
||||||
|
buffers[77] = length 28, hash 2700AF
|
||||||
|
buffers[78] = length 22, hash 6D292D94
|
||||||
|
buffers[79] = length 18, hash D646C05A
|
||||||
|
buffers[80] = length 18, hash 14BB0F8E
|
||||||
|
buffers[81] = length 28, hash 5DE2C2B
|
||||||
|
buffers[82] = length 22, hash 57E81CD0
|
||||||
|
buffers[83] = length 18, hash E176AD96
|
||||||
|
buffers[84] = length 18, hash 1FEAFCCA
|
||||||
|
buffers[85] = length 28, hash C163BE68
|
||||||
|
buffers[86] = length 22, hash B0C92D0B
|
||||||
|
buffers[87] = length 18, hash 3B013BD2
|
||||||
|
buffers[88] = length 18, hash 79758B06
|
||||||
|
buffers[89] = length 28, hash F72EB1A3
|
||||||
|
buffers[90] = length 22, hash 9B881C48
|
||||||
|
buffers[91] = length 18, hash 4631290E
|
||||||
|
buffers[92] = length 18, hash 84A57842
|
||||||
|
buffers[93] = length 33, hash AF5CF49E
|
||||||
|
buffers[94] = length 22, hash 359D2D82
|
||||||
|
buffers[95] = length 18, hash 62DE0FC9
|
||||||
|
buffers[96] = length 18, hash A1525EFD
|
||||||
|
buffers[97] = length 33, hash F4C6DE46
|
||||||
|
buffers[98] = length 22, hash EE2060DF
|
||||||
|
buffers[99] = length 18, hash 77D95125
|
||||||
|
buffers[100] = length 18, hash B64DA059
|
||||||
|
buffers[101] = length 28, hash ED67B37
|
||||||
|
buffers[102] = length 22, hash 4701711B
|
||||||
|
buffers[103] = length 18, hash D163DF61
|
||||||
|
buffers[104] = length 18, hash FD82E95
|
||||||
|
buffers[105] = length 28, hash 44A16E72
|
||||||
|
buffers[106] = length 22, hash 31C06057
|
||||||
|
buffers[107] = length 18, hash DC93CC9D
|
||||||
|
buffers[108] = length 18, hash 1B081BD1
|
||||||
|
buffers[109] = length 28, hash 2700AF
|
||||||
|
buffers[110] = length 22, hash 6D292D94
|
||||||
|
buffers[111] = length 18, hash D646C05A
|
||||||
|
buffers[112] = length 18, hash 14BB0F8E
|
||||||
|
buffers[113] = length 27, hash 5292D9E
|
||||||
|
buffers[114] = length 22, hash 57E81CD0
|
||||||
|
buffers[115] = length 18, hash E176AD96
|
||||||
|
buffers[116] = length 18, hash 1FEAFCCA
|
||||||
|
buffers[117] = length 26, hash B0CAA4C9
|
||||||
|
buffers[118] = length 22, hash B0C92D0B
|
||||||
|
buffers[119] = length 18, hash 3B013BD2
|
||||||
|
buffers[120] = length 18, hash 79758B06
|
||||||
|
buffers[121] = length 26, hash C63A1445
|
||||||
|
buffers[122] = length 22, hash 9B881C48
|
||||||
|
buffers[123] = length 18, hash 4631290E
|
||||||
|
buffers[124] = length 18, hash 84A57842
|
||||||
|
buffers[125] = length 0, hash 1
|
||||||
|
TextOutput:
|
||||||
|
Subtitle[0]:
|
||||||
|
Cues = []
|
||||||
|
Subtitle[1]:
|
||||||
|
Cue[0]:
|
||||||
|
text = This is the first subtitle.
|
||||||
|
textAlignment = ALIGN_CENTER
|
||||||
|
line = -1.0
|
||||||
|
lineType = 1
|
||||||
|
lineAnchor = 0
|
||||||
|
position = 0.5
|
||||||
|
positionAnchor = 1
|
||||||
|
size = 1.0
|
||||||
|
Subtitle[2]:
|
||||||
|
Cues = []
|
||||||
|
Subtitle[3]:
|
||||||
|
Cue[0]:
|
||||||
|
text = This is the second subtitle.
|
||||||
|
textAlignment = ALIGN_CENTER
|
||||||
|
line = -1.0
|
||||||
|
lineType = 1
|
||||||
|
lineAnchor = 0
|
||||||
|
position = 0.5
|
||||||
|
positionAnchor = 1
|
||||||
|
size = 1.0
|
||||||
|
Subtitle[4]:
|
||||||
|
Cues = []
|
Loading…
x
Reference in New Issue
Block a user