Commit 1a00da4c by ibaker Committed by Oliver Woodman

Add CapturingRenderersFactory and use it in Mp4PlaybackTest

I decided not to migrate all the tests in one CL to keep the diff
manageable. I'll make follow-up CLs to migrate the tests, and eventually
delete TeeCodec and all associated logic.

I couldn't completely remove the dump diff because
ShadowMediaCodec.getCodecInfo() (which would give me access to the MIME
type) doesn't seem to work properly - it returned video/avc when
name=exotest.audio.aac, and looking into the code it looks like there's
some native methods that are missing shadow implementations.
PiperOrigin-RevId: 347991956
parent 43886491
Showing with 86 additions and 55 deletions
...@@ -77,14 +77,18 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -77,14 +77,18 @@ public class DefaultRenderersFactory implements RenderersFactory {
/** /**
* Allow use of extension renderers. Extension renderers are indexed before core renderers of the * Allow use of extension renderers. Extension renderers are indexed before core renderers of the
* same type. A {@link TrackSelector} that prefers the first suitable renderer will therefore * same type. A {@link TrackSelector} that prefers the first suitable renderer will therefore
* prefer to use an extension renderer to a core renderer in the case that both are able to play * prefer to use an extension renderer to a core renderer in the case that both are able to play a
* a given track. * given track.
*/ */
public static final int EXTENSION_RENDERER_MODE_PREFER = 2; public static final int EXTENSION_RENDERER_MODE_PREFER = 2;
private static final String TAG = "DefaultRenderersFactory"; /**
* The maximum number of frames that can be dropped between invocations of {@link
* VideoRendererEventListener#onDroppedFrames(int, long)}.
*/
public static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50;
protected static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50; private static final String TAG = "DefaultRenderersFactory";
private final Context context; private final Context context;
@ExtensionRendererMode private int extensionRendererMode; @ExtensionRendererMode private int extensionRendererMode;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
*/ */
package com.google.android.exoplayer2.e2etest; package com.google.android.exoplayer2.e2etest;
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;
...@@ -25,6 +26,7 @@ import com.google.android.exoplayer2.robolectric.PlaybackOutput; ...@@ -25,6 +26,7 @@ import com.google.android.exoplayer2.robolectric.PlaybackOutput;
import com.google.android.exoplayer2.robolectric.ShadowMediaCodecConfig; import com.google.android.exoplayer2.robolectric.ShadowMediaCodecConfig;
import com.google.android.exoplayer2.robolectric.TestPlayerRunHelper; import com.google.android.exoplayer2.robolectric.TestPlayerRunHelper;
import com.google.android.exoplayer2.testutil.AutoAdvancingFakeClock; import com.google.android.exoplayer2.testutil.AutoAdvancingFakeClock;
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.testutil.DumpFileAsserts; import com.google.android.exoplayer2.testutil.DumpFileAsserts;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.junit.Rule; import org.junit.Rule;
...@@ -75,12 +77,15 @@ public class Mp4PlaybackTest { ...@@ -75,12 +77,15 @@ public class Mp4PlaybackTest {
@Test @Test
public void test() throws Exception { public void test() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory renderersFactory = new CapturingRenderersFactory(applicationContext);
SimpleExoPlayer player = SimpleExoPlayer player =
new SimpleExoPlayer.Builder(ApplicationProvider.getApplicationContext()) new SimpleExoPlayer.Builder(applicationContext, renderersFactory)
.setClock(new AutoAdvancingFakeClock()) .setClock(new AutoAdvancingFakeClock())
.build(); .build();
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1))); player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1)));
PlaybackOutput playbackOutput = PlaybackOutput.register(player, mediaCodecConfig);
PlaybackOutput playbackOutput = PlaybackOutput.register(player, renderersFactory);
player.setMediaItem(MediaItem.fromUri("asset:///media/mp4/" + inputFile)); player.setMediaItem(MediaItem.fromUri("asset:///media/mp4/" + inputFile));
player.prepare(); player.prepare();
...@@ -89,8 +94,6 @@ public class Mp4PlaybackTest { ...@@ -89,8 +94,6 @@ public class Mp4PlaybackTest {
player.release(); player.release();
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
ApplicationProvider.getApplicationContext(), applicationContext, playbackOutput, "playbackdumps/mp4/" + inputFile + ".dump");
playbackOutput,
"playbackdumps/mp4/" + inputFile + ".dump");
} }
} }
...@@ -19,6 +19,7 @@ import android.graphics.Bitmap; ...@@ -19,6 +19,7 @@ import android.graphics.Bitmap;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.SimpleExoPlayer; 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.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.testutil.Dumper; import com.google.android.exoplayer2.testutil.Dumper;
import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.Cue;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
...@@ -38,13 +39,18 @@ import java.util.List; ...@@ -38,13 +39,18 @@ import java.util.List;
*/ */
public final class PlaybackOutput implements Dumper.Dumpable { public final class PlaybackOutput implements Dumper.Dumpable {
private final ShadowMediaCodecConfig codecConfig; @Nullable private final ShadowMediaCodecConfig codecConfig;
@Nullable private final CapturingRenderersFactory capturingRenderersFactory;
private final List<Metadata> metadatas; private final List<Metadata> metadatas;
private final List<List<Cue>> subtitles; private final List<List<Cue>> subtitles;
private PlaybackOutput(SimpleExoPlayer player, ShadowMediaCodecConfig codecConfig) { private PlaybackOutput(
SimpleExoPlayer player,
@Nullable ShadowMediaCodecConfig codecConfig,
@Nullable CapturingRenderersFactory capturingRenderersFactory) {
this.codecConfig = codecConfig; this.codecConfig = codecConfig;
this.capturingRenderersFactory = capturingRenderersFactory;
metadatas = Collections.synchronizedList(new ArrayList<>()); metadatas = Collections.synchronizedList(new ArrayList<>());
subtitles = Collections.synchronizedList(new ArrayList<>()); subtitles = Collections.synchronizedList(new ArrayList<>());
...@@ -57,27 +63,38 @@ public final class PlaybackOutput implements Dumper.Dumpable { ...@@ -57,27 +63,38 @@ public final class PlaybackOutput implements Dumper.Dumpable {
/** /**
* Create an instance that captures the metadata and text output from {@code player} and the audio * Create an instance that captures the metadata and text output from {@code player} and the audio
* and video output via the {@link TeeCodec TeeCodecs} exposed by {@code mediaCodecConfig}. * and video output via {@code capturingRenderersFactory}.
* *
* <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 SimpleExoPlayer} to capture metadata and text output from.
* @param mediaCodecConfig The {@link ShadowMediaCodecConfig} to capture audio and video output * @param capturingRenderersFactory The {@link CapturingRenderersFactory} to capture audio and
* 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) {
return new PlaybackOutput(player, /* codecConfig= */ null, capturingRenderersFactory);
}
/** @deprecated Use {@link #register(SimpleExoPlayer, CapturingRenderersFactory)}. */
@Deprecated
public static PlaybackOutput register(
SimpleExoPlayer player, ShadowMediaCodecConfig mediaCodecConfig) { SimpleExoPlayer player, ShadowMediaCodecConfig mediaCodecConfig) {
return new PlaybackOutput(player, mediaCodecConfig); return new PlaybackOutput(player, mediaCodecConfig, /* capturingRenderersFactory= */ null);
} }
@Override @Override
public void dump(Dumper dumper) { public void dump(Dumper dumper) {
ImmutableMap<String, TeeCodec> codecs = codecConfig.getCodecs(); if (codecConfig != null) {
ImmutableList<String> mimeTypes = ImmutableList.sortedCopyOf(codecs.keySet()); ImmutableMap<String, TeeCodec> codecs = codecConfig.getCodecs();
for (String mimeType : mimeTypes) { ImmutableList<String> mimeTypes = ImmutableList.sortedCopyOf(codecs.keySet());
dumper.add(Assertions.checkNotNull(codecs.get(mimeType))); for (String mimeType : mimeTypes) {
dumper.add(Assertions.checkNotNull(codecs.get(mimeType)));
}
} else {
Assertions.checkNotNull(capturingRenderersFactory).dump(dumper);
} }
dumpMetadata(dumper); dumpMetadata(dumper);
......
...@@ -15,8 +15,10 @@ ...@@ -15,8 +15,10 @@
*/ */
package com.google.android.exoplayer2.robolectric; package com.google.android.exoplayer2.robolectric;
import android.media.MediaCodec;
import android.media.MediaCodecInfo; import android.media.MediaCodecInfo;
import android.media.MediaFormat; import android.media.MediaFormat;
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
...@@ -48,6 +50,11 @@ public final class ShadowMediaCodecConfig extends ExternalResource { ...@@ -48,6 +50,11 @@ public final class ShadowMediaCodecConfig extends ExternalResource {
return new ShadowMediaCodecConfig(); return new ShadowMediaCodecConfig();
} }
/**
* @deprecated Use {@link CapturingRenderersFactory} to access {@link MediaCodec} interactions
* instead.
*/
@Deprecated
public ImmutableMap<String, TeeCodec> getCodecs() { public ImmutableMap<String, TeeCodec> getCodecs() {
return ImmutableMap.copyOf(codecsByMimeType); return ImmutableMap.copyOf(codecsByMimeType);
} }
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
*/ */
package com.google.android.exoplayer2.robolectric; package com.google.android.exoplayer2.robolectric;
import android.media.MediaCodec;
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.testutil.Dumper; import com.google.android.exoplayer2.testutil.Dumper;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
...@@ -25,12 +27,10 @@ import java.util.List; ...@@ -25,12 +27,10 @@ import java.util.List;
import org.robolectric.shadows.ShadowMediaCodec; import org.robolectric.shadows.ShadowMediaCodec;
/** /**
* A {@link ShadowMediaCodec.CodecConfig.Codec} for Robolectric's {@link ShadowMediaCodec} that * @deprecated Use {@link CapturingRenderersFactory} to access {@link MediaCodec} interactions
* records the contents of buffers passed to it before copying the contents into the output buffer. * instead.
*
* <p>This also implements {@link Dumper.Dumpable} so the recorded buffers can be written out to a
* dump file.
*/ */
@Deprecated
public final class TeeCodec implements ShadowMediaCodec.CodecConfig.Codec, Dumper.Dumpable { public final class TeeCodec implements ShadowMediaCodec.CodecConfig.Codec, Dumper.Dumpable {
private final String mimeType; private final String mimeType;
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 218 buffers.length = 218
buffers[0] = length 21, hash D57A2CCC buffers[0] = length 21, hash D57A2CCC
buffers[1] = length 4, hash EE9DF buffers[1] = length 4, hash EE9DF
...@@ -218,7 +218,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -218,7 +218,7 @@ MediaCodec (audio/mp4a-latm):
buffers[215] = length 4, hash EE9DF buffers[215] = length 4, hash EE9DF
buffers[216] = length 4, hash EE9DF buffers[216] = length 4, hash EE9DF
buffers[217] = length 0, hash 1 buffers[217] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 126 buffers.length = 126
buffers[0] = length 5252, hash 13893A4C buffers[0] = length 5252, hash 13893A4C
buffers[1] = length 44, hash A05B3BEA buffers[1] = length 44, hash A05B3BEA
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 218 buffers.length = 218
buffers[0] = length 21, hash D57A2CCC buffers[0] = length 21, hash D57A2CCC
buffers[1] = length 4, hash EE9DF buffers[1] = length 4, hash EE9DF
...@@ -218,7 +218,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -218,7 +218,7 @@ MediaCodec (audio/mp4a-latm):
buffers[215] = length 4, hash EE9DF buffers[215] = length 4, hash EE9DF
buffers[216] = length 4, hash EE9DF buffers[216] = length 4, hash EE9DF
buffers[217] = length 0, hash 1 buffers[217] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 126 buffers.length = 126
buffers[0] = length 5384, hash F220EEFD buffers[0] = length 5384, hash F220EEFD
buffers[1] = length 58, hash 897F4173 buffers[1] = length 58, hash 897F4173
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 218 buffers.length = 218
buffers[0] = length 21, hash D57A2CCC buffers[0] = length 21, hash D57A2CCC
buffers[1] = length 4, hash EE9DF buffers[1] = length 4, hash EE9DF
...@@ -218,7 +218,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -218,7 +218,7 @@ MediaCodec (audio/mp4a-latm):
buffers[215] = length 4, hash EE9DF buffers[215] = length 4, hash EE9DF
buffers[216] = length 4, hash EE9DF buffers[216] = length 4, hash EE9DF
buffers[217] = length 0, hash 1 buffers[217] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 126 buffers.length = 126
buffers[0] = length 5245, hash C090A41E buffers[0] = length 5245, hash C090A41E
buffers[1] = length 63, hash 5141C80D buffers[1] = length 63, hash 5141C80D
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 46 buffers.length = 46
buffers[0] = length 23, hash 47DE9131 buffers[0] = length 23, hash 47DE9131
buffers[1] = length 6, hash 31EC5206 buffers[1] = length 6, hash 31EC5206
...@@ -46,7 +46,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -46,7 +46,7 @@ MediaCodec (audio/mp4a-latm):
buffers[43] = length 229, hash FFF98DF0 buffers[43] = length 229, hash FFF98DF0
buffers[44] = length 6, hash 31B22286 buffers[44] = length 6, hash 31B22286
buffers[45] = length 0, hash 1 buffers[45] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 36692, hash D216076E buffers[0] = length 36692, hash D216076E
buffers[1] = length 5312, hash D45D3CA0 buffers[1] = length 5312, hash D45D3CA0
......
MediaCodec (audio/ac3): MediaCodecAdapter (exotest.audio.ac3):
buffers.length = 10 buffers.length = 10
buffers[0] = length 1536, hash 7108D5C2 buffers[0] = length 1536, hash 7108D5C2
buffers[1] = length 1536, hash 80BF3B34 buffers[1] = length 1536, hash 80BF3B34
......
MediaCodec (audio/ac3): MediaCodecAdapter (exotest.audio.ac3):
buffers.length = 10 buffers.length = 10
buffers[0] = length 1536, hash 7108D5C2 buffers[0] = length 1536, hash 7108D5C2
buffers[1] = length 1536, hash 80BF3B34 buffers[1] = length 1536, hash 80BF3B34
......
MediaCodec (audio/ac4): MediaCodecAdapter (exotest.audio.ac4):
buffers.length = 20 buffers.length = 20
buffers[0] = length 367, hash D2762FA buffers[0] = length 367, hash D2762FA
buffers[1] = length 367, hash BDD3224A buffers[1] = length 367, hash BDD3224A
......
MediaCodec (audio/ac4): MediaCodecAdapter (exotest.audio.ac4):
buffers.length = 20 buffers.length = 20
buffers[0] = length 367, hash D2762FA buffers[0] = length 367, hash D2762FA
buffers[1] = length 367, hash BDD3224A buffers[1] = length 367, hash BDD3224A
......
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 8 buffers.length = 8
buffers[0] = length 34656, hash D92B66FF buffers[0] = length 34656, hash D92B66FF
buffers[1] = length 768, hash D0C3B229 buffers[1] = length 768, hash D0C3B229
......
MediaCodec (audio/eac3): MediaCodecAdapter (exotest.audio.eac3):
buffers.length = 55 buffers.length = 55
buffers[0] = length 4000, hash BAEAFB2A buffers[0] = length 4000, hash BAEAFB2A
buffers[1] = length 4000, hash E3C5EBF0 buffers[1] = length 4000, hash E3C5EBF0
......
MediaCodec (audio/eac3): MediaCodecAdapter (exotest.audio.eac3):
buffers.length = 55 buffers.length = 55
buffers[0] = length 4000, hash BAEAFB2A buffers[0] = length 4000, hash BAEAFB2A
buffers[1] = length 4000, hash E3C5EBF0 buffers[1] = length 4000, hash E3C5EBF0
......
MediaCodec (audio/eac3-joc): MediaCodecAdapter (exotest.audio.eac3joc):
buffers.length = 65 buffers.length = 65
buffers[0] = length 2560, hash 882594AD buffers[0] = length 2560, hash 882594AD
buffers[1] = length 2560, hash 41EC8B22 buffers[1] = length 2560, hash 41EC8B22
......
MediaCodec (audio/eac3-joc): MediaCodecAdapter (exotest.audio.eac3joc):
buffers.length = 65 buffers.length = 65
buffers[0] = length 2560, hash 882594AD buffers[0] = length 2560, hash 882594AD
buffers[1] = length 2560, hash 41EC8B22 buffers[1] = length 2560, hash 41EC8B22
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 47 buffers.length = 47
buffers[0] = length 18, hash 96519432 buffers[0] = length 18, hash 96519432
buffers[1] = length 4, hash EE9DF buffers[1] = length 4, hash EE9DF
...@@ -47,7 +47,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -47,7 +47,7 @@ MediaCodec (audio/mp4a-latm):
buffers[44] = length 446, hash D6735B8A buffers[44] = length 446, hash D6735B8A
buffers[45] = length 10, hash A453EEBE buffers[45] = length 10, hash A453EEBE
buffers[46] = length 0, hash 1 buffers[46] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 38070, hash B58E1AEE buffers[0] = length 38070, hash B58E1AEE
buffers[1] = length 8340, hash 8AC449FF buffers[1] = length 8340, hash 8AC449FF
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 47 buffers.length = 47
buffers[0] = length 18, hash 96519432 buffers[0] = length 18, hash 96519432
buffers[1] = length 4, hash EE9DF buffers[1] = length 4, hash EE9DF
...@@ -47,7 +47,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -47,7 +47,7 @@ MediaCodec (audio/mp4a-latm):
buffers[44] = length 446, hash D6735B8A buffers[44] = length 446, hash D6735B8A
buffers[45] = length 10, hash A453EEBE buffers[45] = length 10, hash A453EEBE
buffers[46] = length 0, hash 1 buffers[46] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 38070, hash B58E1AEE buffers[0] = length 38070, hash B58E1AEE
buffers[1] = length 8340, hash 8AC449FF buffers[1] = length 8340, hash 8AC449FF
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 47 buffers.length = 47
buffers[0] = length 18, hash 96519432 buffers[0] = length 18, hash 96519432
buffers[1] = length 4, hash EE9DF buffers[1] = length 4, hash EE9DF
...@@ -47,7 +47,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -47,7 +47,7 @@ MediaCodec (audio/mp4a-latm):
buffers[44] = length 446, hash D6735B8A buffers[44] = length 446, hash D6735B8A
buffers[45] = length 10, hash A453EEBE buffers[45] = length 10, hash A453EEBE
buffers[46] = length 0, hash 1 buffers[46] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 38070, hash B58E1AEE buffers[0] = length 38070, hash B58E1AEE
buffers[1] = length 8340, hash 8AC449FF buffers[1] = length 8340, hash 8AC449FF
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 46 buffers.length = 46
buffers[0] = length 23, hash 47DE9131 buffers[0] = length 23, hash 47DE9131
buffers[1] = length 6, hash 31EC5206 buffers[1] = length 6, hash 31EC5206
...@@ -46,7 +46,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -46,7 +46,7 @@ MediaCodec (audio/mp4a-latm):
buffers[43] = length 229, hash FFF98DF0 buffers[43] = length 229, hash FFF98DF0
buffers[44] = length 6, hash 31B22286 buffers[44] = length 6, hash 31B22286
buffers[45] = length 0, hash 1 buffers[45] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 36692, hash D216076E buffers[0] = length 36692, hash D216076E
buffers[1] = length 5312, hash D45D3CA0 buffers[1] = length 5312, hash D45D3CA0
......
MediaCodec (audio/opus): MediaCodecAdapter (exotest.audio.opus):
buffers.length = 102 buffers.length = 102
buffers[0] = length 3, hash 4732 buffers[0] = length 3, hash 4732
buffers[1] = length 3, hash 4732 buffers[1] = length 3, hash 4732
......
MediaCodec (audio/opus): MediaCodecAdapter (exotest.audio.opus):
buffers.length = 251 buffers.length = 251
buffers[0] = length 326, hash ECC9FF90 buffers[0] = length 326, hash ECC9FF90
buffers[1] = length 326, hash B041EAAC buffers[1] = length 326, hash B041EAAC
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 46 buffers.length = 46
buffers[0] = length 21, hash D57A2CCC buffers[0] = length 21, hash D57A2CCC
buffers[1] = length 6, hash 336D5819 buffers[1] = length 6, hash 336D5819
...@@ -46,7 +46,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -46,7 +46,7 @@ MediaCodec (audio/mp4a-latm):
buffers[43] = length 208, hash 4A050A0D buffers[43] = length 208, hash 4A050A0D
buffers[44] = length 13, hash 2555A7DC buffers[44] = length 13, hash 2555A7DC
buffers[45] = length 0, hash 1 buffers[45] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 37655, hash 265F7BA7 buffers[0] = length 37655, hash 265F7BA7
buffers[1] = length 5023, hash 30768D40 buffers[1] = length 5023, hash 30768D40
......
MediaCodec (audio/mp4a-latm): MediaCodecAdapter (exotest.audio.aac):
buffers.length = 45 buffers.length = 45
buffers[0] = length 9, hash 67CB703F buffers[0] = length 9, hash 67CB703F
buffers[1] = length 9, hash A820BF4B buffers[1] = length 9, hash A820BF4B
...@@ -45,7 +45,7 @@ MediaCodec (audio/mp4a-latm): ...@@ -45,7 +45,7 @@ MediaCodec (audio/mp4a-latm):
buffers[42] = length 242, hash B5863406 buffers[42] = length 242, hash B5863406
buffers[43] = length 239, hash F56D62C3 buffers[43] = length 239, hash F56D62C3
buffers[44] = length 0, hash 1 buffers[44] = length 0, hash 1
MediaCodec (video/avc): MediaCodecAdapter (exotest.video.avc):
buffers.length = 31 buffers.length = 31
buffers[0] = length 16086, hash 5D23AFBA buffers[0] = length 16086, hash 5D23AFBA
buffers[1] = length 2539, hash 597403A0 buffers[1] = length 2539, hash 597403A0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment