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 {
|
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());
|
||||||
|
@ -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();
|
||||||
|
@ -64,6 +64,7 @@ public final class CapturingImageOutput implements Dumpable, ImageOutput {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dump(Dumper dumper) {
|
public void dump(Dumper dumper) {
|
||||||
|
if (imageCount > 0) {
|
||||||
dumper.startBlock("ImageOutput");
|
dumper.startBlock("ImageOutput");
|
||||||
dumper.add("rendered image count", imageCount);
|
dumper.add("rendered image count", imageCount);
|
||||||
for (Dumpable dumpable : renderedBitmaps) {
|
for (Dumpable dumpable : renderedBitmaps) {
|
||||||
@ -72,3 +73,4 @@ public final class CapturingImageOutput implements Dumpable, ImageOutput {
|
|||||||
dumper.endBlock();
|
dumper.endBlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -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,23 +146,19 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link MediaCodecAdapter} that captures interactions and exposes them for test assertions via
|
* A {@link MediaCodecAdapter} that captures interactions and exposes them for test assertions via
|
||||||
|
Loading…
x
Reference in New Issue
Block a user