mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Add ImageRenderer in CapturingRenderersFactory by default
DefaultRenderersFactory now instantiates an ImageRenderer by default, so CapturingRenderersFactory will too. PiperOrigin-RevId: 582307243
This commit is contained in:
parent
28c095d8d0
commit
877d26abdc
@ -70,7 +70,7 @@ public final class ExternallyLoadedImagePlaybackTest {
|
||||
throws Exception {
|
||||
Context applicationContext = ApplicationProvider.getApplicationContext();
|
||||
CapturingRenderersFactory renderersFactory =
|
||||
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true)
|
||||
new CapturingRenderersFactory(applicationContext)
|
||||
.setImageDecoderFactory(new CustomImageDecoderFactory());
|
||||
Clock clock = new FakeClock(/* isAutoAdvancing= */ true);
|
||||
AtomicInteger externalLoaderCallCount = new AtomicInteger();
|
||||
@ -113,7 +113,7 @@ public final class ExternallyLoadedImagePlaybackTest {
|
||||
public void imagePlayback_externalLoaderFutureFails_propagatesFailure() throws Exception {
|
||||
Context applicationContext = ApplicationProvider.getApplicationContext();
|
||||
CapturingRenderersFactory renderersFactory =
|
||||
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true)
|
||||
new CapturingRenderersFactory(applicationContext)
|
||||
.setImageDecoderFactory(new CustomImageDecoderFactory());
|
||||
ListeningExecutorService listeningExecutorService =
|
||||
MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
|
||||
@ -146,7 +146,7 @@ public final class ExternallyLoadedImagePlaybackTest {
|
||||
public void imagePlayback_loadingCompletedWhenFutureCompletes() throws Exception {
|
||||
Context applicationContext = ApplicationProvider.getApplicationContext();
|
||||
CapturingRenderersFactory renderersFactory =
|
||||
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true)
|
||||
new CapturingRenderersFactory(applicationContext)
|
||||
.setImageDecoderFactory(new CustomImageDecoderFactory());
|
||||
ListeningExecutorService listeningExecutorService =
|
||||
MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
|
||||
|
@ -70,8 +70,7 @@ public class ImagePlaybackTest {
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
Context applicationContext = ApplicationProvider.getApplicationContext();
|
||||
CapturingRenderersFactory renderersFactory =
|
||||
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true);
|
||||
CapturingRenderersFactory renderersFactory = new CapturingRenderersFactory(applicationContext);
|
||||
Clock clock = new FakeClock(/* isAutoAdvancing= */ true);
|
||||
ExoPlayer player =
|
||||
new ExoPlayer.Builder(applicationContext, renderersFactory).setClock(clock).build();
|
||||
|
@ -64,6 +64,7 @@ public final class CapturingImageOutput implements Dumpable, ImageOutput {
|
||||
|
||||
@Override
|
||||
public void dump(Dumper dumper) {
|
||||
if (imageCount > 0) {
|
||||
dumper.startBlock("ImageOutput");
|
||||
dumper.add("rendered image count", imageCount);
|
||||
for (Dumpable dumpable : renderedBitmaps) {
|
||||
@ -72,3 +73,4 @@ public final class CapturingImageOutput implements Dumpable, ImageOutput {
|
||||
dumper.endBlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpable {
|
||||
|
||||
private final Context context;
|
||||
private final boolean addImageRenderer;
|
||||
private final CapturingMediaCodecAdapter.Factory mediaCodecAdapterFactory;
|
||||
private final CapturingAudioSink audioSink;
|
||||
private final CapturingImageOutput imageOutput;
|
||||
@ -78,40 +77,24 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* <p>The factory will not include an {@link ImageRenderer}.
|
||||
* @param context The {@link Context}.
|
||||
*/
|
||||
public CapturingRenderersFactory(Context context) {
|
||||
this(context, /* addImageRenderer= */ false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* @param context The {@link Context}.
|
||||
* @param addImageRenderer Whether to add the image renderer to the list of renderers created in
|
||||
* {@link #createRenderers}.
|
||||
*/
|
||||
public CapturingRenderersFactory(Context context, boolean addImageRenderer) {
|
||||
this.context = context;
|
||||
this.mediaCodecAdapterFactory = new CapturingMediaCodecAdapter.Factory();
|
||||
this.audioSink = new CapturingAudioSink(new DefaultAudioSink.Builder(context).build());
|
||||
this.imageOutput = new CapturingImageOutput();
|
||||
this.addImageRenderer = addImageRenderer;
|
||||
this.imageDecoderFactory = ImageDecoder.Factory.DEFAULT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link ImageDecoder.Factory} used by the {@link ImageRenderer}.
|
||||
*
|
||||
* <p>Must {@code addImageRenderer} when creating the {@link
|
||||
* CapturingRenderersFactory#CapturingRenderersFactory(Context, boolean)}.
|
||||
*
|
||||
* @param imageDecoderFactory The {@link ImageDecoder.Factory}.
|
||||
* @return This factory, for convenience.
|
||||
*/
|
||||
public CapturingRenderersFactory setImageDecoderFactory(
|
||||
ImageDecoder.Factory imageDecoderFactory) {
|
||||
checkState(addImageRenderer);
|
||||
this.imageDecoderFactory = imageDecoderFactory;
|
||||
return this;
|
||||
}
|
||||
@ -123,8 +106,8 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
|
||||
AudioRendererEventListener audioRendererEventListener,
|
||||
TextOutput textRendererOutput,
|
||||
MetadataOutput metadataRendererOutput) {
|
||||
ArrayList<Renderer> temp = new ArrayList<>();
|
||||
temp.add(
|
||||
ArrayList<Renderer> renderers = new ArrayList<>();
|
||||
renderers.add(
|
||||
new MediaCodecVideoRenderer(
|
||||
context,
|
||||
mediaCodecAdapterFactory,
|
||||
@ -154,7 +137,7 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
|
||||
return false;
|
||||
}
|
||||
});
|
||||
temp.add(
|
||||
renderers.add(
|
||||
new MediaCodecAudioRenderer(
|
||||
context,
|
||||
mediaCodecAdapterFactory,
|
||||
@ -163,23 +146,19 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
|
||||
eventHandler,
|
||||
audioRendererEventListener,
|
||||
audioSink));
|
||||
temp.add(new TextRenderer(textRendererOutput, eventHandler.getLooper()));
|
||||
temp.add(new MetadataRenderer(metadataRendererOutput, eventHandler.getLooper()));
|
||||
renderers.add(new TextRenderer(textRendererOutput, eventHandler.getLooper()));
|
||||
renderers.add(new MetadataRenderer(metadataRendererOutput, eventHandler.getLooper()));
|
||||
renderers.add(new ImageRenderer(imageDecoderFactory, imageOutput));
|
||||
|
||||
if (addImageRenderer) {
|
||||
temp.add(new ImageRenderer(imageDecoderFactory, imageOutput));
|
||||
}
|
||||
return temp.toArray(new Renderer[] {});
|
||||
return renderers.toArray(new Renderer[] {});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dump(Dumper dumper) {
|
||||
mediaCodecAdapterFactory.dump(dumper);
|
||||
audioSink.dump(dumper);
|
||||
if (addImageRenderer) {
|
||||
imageOutput.dump(dumper);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A {@link MediaCodecAdapter} that captures interactions and exposes them for test assertions via
|
||||
|
Loading…
x
Reference in New Issue
Block a user