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:
lpribanic 2023-11-14 06:56:12 -08:00 committed by Copybara-Service
parent 28c095d8d0
commit 877d26abdc
4 changed files with 20 additions and 40 deletions

View File

@ -70,7 +70,7 @@ public final class ExternallyLoadedImagePlaybackTest {
throws Exception { throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext(); Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory renderersFactory = CapturingRenderersFactory renderersFactory =
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true) new CapturingRenderersFactory(applicationContext)
.setImageDecoderFactory(new CustomImageDecoderFactory()); .setImageDecoderFactory(new CustomImageDecoderFactory());
Clock clock = new FakeClock(/* isAutoAdvancing= */ true); Clock clock = new FakeClock(/* isAutoAdvancing= */ true);
AtomicInteger externalLoaderCallCount = new AtomicInteger(); AtomicInteger externalLoaderCallCount = new AtomicInteger();
@ -113,7 +113,7 @@ public final class ExternallyLoadedImagePlaybackTest {
public void imagePlayback_externalLoaderFutureFails_propagatesFailure() throws Exception { public void imagePlayback_externalLoaderFutureFails_propagatesFailure() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext(); Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory renderersFactory = CapturingRenderersFactory renderersFactory =
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true) new CapturingRenderersFactory(applicationContext)
.setImageDecoderFactory(new CustomImageDecoderFactory()); .setImageDecoderFactory(new CustomImageDecoderFactory());
ListeningExecutorService listeningExecutorService = ListeningExecutorService listeningExecutorService =
MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
@ -146,7 +146,7 @@ public final class ExternallyLoadedImagePlaybackTest {
public void imagePlayback_loadingCompletedWhenFutureCompletes() throws Exception { public void imagePlayback_loadingCompletedWhenFutureCompletes() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext(); Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory renderersFactory = CapturingRenderersFactory renderersFactory =
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true) new CapturingRenderersFactory(applicationContext)
.setImageDecoderFactory(new CustomImageDecoderFactory()); .setImageDecoderFactory(new CustomImageDecoderFactory());
ListeningExecutorService listeningExecutorService = ListeningExecutorService listeningExecutorService =
MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());

View File

@ -70,8 +70,7 @@ public class ImagePlaybackTest {
@Test @Test
public void test() throws Exception { public void test() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext(); Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory renderersFactory = CapturingRenderersFactory renderersFactory = new CapturingRenderersFactory(applicationContext);
new CapturingRenderersFactory(applicationContext, /* addImageRenderer= */ true);
Clock clock = new FakeClock(/* isAutoAdvancing= */ true); Clock clock = new FakeClock(/* isAutoAdvancing= */ true);
ExoPlayer player = ExoPlayer player =
new ExoPlayer.Builder(applicationContext, renderersFactory).setClock(clock).build(); new ExoPlayer.Builder(applicationContext, renderersFactory).setClock(clock).build();

View File

@ -64,11 +64,13 @@ public final class CapturingImageOutput implements Dumpable, ImageOutput {
@Override @Override
public void dump(Dumper dumper) { public void dump(Dumper dumper) {
dumper.startBlock("ImageOutput"); if (imageCount > 0) {
dumper.add("rendered image count", imageCount); dumper.startBlock("ImageOutput");
for (Dumpable dumpable : renderedBitmaps) { dumper.add("rendered image count", imageCount);
dumpable.dump(dumper); for (Dumpable dumpable : renderedBitmaps) {
dumpable.dump(dumper);
}
dumper.endBlock();
} }
dumper.endBlock();
} }
} }

View File

@ -69,7 +69,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpable { public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpable {
private final Context context; private final Context context;
private final boolean addImageRenderer;
private final CapturingMediaCodecAdapter.Factory mediaCodecAdapterFactory; private final CapturingMediaCodecAdapter.Factory mediaCodecAdapterFactory;
private final CapturingAudioSink audioSink; private final CapturingAudioSink audioSink;
private final CapturingImageOutput imageOutput; private final CapturingImageOutput imageOutput;
@ -78,40 +77,24 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
/** /**
* Creates an instance. * Creates an instance.
* *
* <p>The factory will not include an {@link ImageRenderer}. * @param context The {@link Context}.
*/ */
public CapturingRenderersFactory(Context 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.context = context;
this.mediaCodecAdapterFactory = new CapturingMediaCodecAdapter.Factory(); this.mediaCodecAdapterFactory = new CapturingMediaCodecAdapter.Factory();
this.audioSink = new CapturingAudioSink(new DefaultAudioSink.Builder(context).build()); this.audioSink = new CapturingAudioSink(new DefaultAudioSink.Builder(context).build());
this.imageOutput = new CapturingImageOutput(); this.imageOutput = new CapturingImageOutput();
this.addImageRenderer = addImageRenderer;
this.imageDecoderFactory = ImageDecoder.Factory.DEFAULT; this.imageDecoderFactory = ImageDecoder.Factory.DEFAULT;
} }
/** /**
* Sets the {@link ImageDecoder.Factory} used by the {@link ImageRenderer}. * 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}. * @param imageDecoderFactory The {@link ImageDecoder.Factory}.
* @return This factory, for convenience. * @return This factory, for convenience.
*/ */
public CapturingRenderersFactory setImageDecoderFactory( public CapturingRenderersFactory setImageDecoderFactory(
ImageDecoder.Factory imageDecoderFactory) { ImageDecoder.Factory imageDecoderFactory) {
checkState(addImageRenderer);
this.imageDecoderFactory = imageDecoderFactory; this.imageDecoderFactory = imageDecoderFactory;
return this; return this;
} }
@ -123,8 +106,8 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
AudioRendererEventListener audioRendererEventListener, AudioRendererEventListener audioRendererEventListener,
TextOutput textRendererOutput, TextOutput textRendererOutput,
MetadataOutput metadataRendererOutput) { MetadataOutput metadataRendererOutput) {
ArrayList<Renderer> temp = new ArrayList<>(); ArrayList<Renderer> renderers = new ArrayList<>();
temp.add( renderers.add(
new MediaCodecVideoRenderer( new MediaCodecVideoRenderer(
context, context,
mediaCodecAdapterFactory, mediaCodecAdapterFactory,
@ -154,7 +137,7 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
return false; return false;
} }
}); });
temp.add( renderers.add(
new MediaCodecAudioRenderer( new MediaCodecAudioRenderer(
context, context,
mediaCodecAdapterFactory, mediaCodecAdapterFactory,
@ -163,22 +146,18 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa
eventHandler, eventHandler,
audioRendererEventListener, audioRendererEventListener,
audioSink)); audioSink));
temp.add(new TextRenderer(textRendererOutput, eventHandler.getLooper())); renderers.add(new TextRenderer(textRendererOutput, eventHandler.getLooper()));
temp.add(new MetadataRenderer(metadataRendererOutput, eventHandler.getLooper())); renderers.add(new MetadataRenderer(metadataRendererOutput, eventHandler.getLooper()));
renderers.add(new ImageRenderer(imageDecoderFactory, imageOutput));
if (addImageRenderer) { return renderers.toArray(new Renderer[] {});
temp.add(new ImageRenderer(imageDecoderFactory, imageOutput));
}
return temp.toArray(new Renderer[] {});
} }
@Override @Override
public void dump(Dumper dumper) { public void dump(Dumper dumper) {
mediaCodecAdapterFactory.dump(dumper); mediaCodecAdapterFactory.dump(dumper);
audioSink.dump(dumper); audioSink.dump(dumper);
if (addImageRenderer) { imageOutput.dump(dumper);
imageOutput.dump(dumper);
}
} }
/** /**