Android: Add software fallback wrapper in Default video codec factories
When both SW and HW video codec is available, create a fallback wrapper. This CL also makes the ctor public for injecting an external HW codec factory. This will be useful when making the legacy video codecs injectable. Bug: webrtc:7925 Change-Id: I250b18f0c2d5123495436ff432c0442755ab0e94 Reviewed-on: https://webrtc-review.googlesource.com/88366 Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23961}
This commit is contained in:
committed by
Commit Bot
parent
b5d3802b7a
commit
443959b800
@ -10,27 +10,36 @@
|
||||
|
||||
package org.webrtc;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** Helper class that combines HW and SW decoders. */
|
||||
public class DefaultVideoDecoderFactory implements VideoDecoderFactory {
|
||||
private final HardwareVideoDecoderFactory hardwareVideoDecoderFactory;
|
||||
private final SoftwareVideoDecoderFactory softwareVideoDecoderFactory;
|
||||
private final VideoDecoderFactory hardwareVideoDecoderFactory;
|
||||
private final VideoDecoderFactory softwareVideoDecoderFactory = new SoftwareVideoDecoderFactory();
|
||||
|
||||
/** Create decoder factory using default hardware decoder factory. */
|
||||
public DefaultVideoDecoderFactory(EglBase.Context eglContext) {
|
||||
hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory(eglContext);
|
||||
softwareVideoDecoderFactory = new SoftwareVideoDecoderFactory();
|
||||
this.hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory(eglContext);
|
||||
}
|
||||
|
||||
/** Create decoder factory using explicit hardware decoder factory. */
|
||||
DefaultVideoDecoderFactory(VideoDecoderFactory hardwareVideoDecoderFactory) {
|
||||
this.hardwareVideoDecoderFactory = hardwareVideoDecoderFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable VideoDecoder createDecoder(String codecType) {
|
||||
VideoDecoder decoder = hardwareVideoDecoderFactory.createDecoder(codecType);
|
||||
if (decoder != null) {
|
||||
return decoder;
|
||||
final VideoDecoder softwareDecoder = softwareVideoDecoderFactory.createDecoder(codecType);
|
||||
final VideoDecoder hardwareDecoder = hardwareVideoDecoderFactory.createDecoder(codecType);
|
||||
if (hardwareDecoder != null && softwareDecoder != null) {
|
||||
// Both hardware and software supported, wrap it in a software fallback
|
||||
return new VideoDecoderFallback(
|
||||
/* fallback= */ softwareDecoder, /* primary= */ hardwareDecoder);
|
||||
}
|
||||
return softwareVideoDecoderFactory.createDecoder(codecType);
|
||||
return hardwareDecoder != null ? hardwareDecoder : softwareDecoder;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user