Call native codec factories from Android ones.
Android video codec factories are expected to be synchronised with the native ones in terms on supported codecs. But before this change there were differences: 1. Native decoder factory keeps AV1 support behind RTC_DAV1D_IN_INTERNAL_DECODER_FACTORY while Android decoder factory advertises AV1 unconditionally; 2. Native encoder factory advertises AV1 if RTC_USE_LIBAOM_AV1_ENCODER is enabled while Android encoder factory never advertises AV1. This CL synchronises the codecs set in Android factories with that of native factories by calling native factories from Android ones. Bug: webrtc:13573, b/257272020 Change-Id: I99d801eda0c5f3400bac222b9b08d719f1a6ed72 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/282240 Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Xavier Lepaul <xalep@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38583}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
be400e465b
commit
937a59268e
@ -16,40 +16,33 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class SoftwareVideoDecoderFactory implements VideoDecoderFactory {
|
||||
private static final String TAG = "SoftwareVideoDecoderFactory";
|
||||
|
||||
private final long nativeFactory;
|
||||
|
||||
public SoftwareVideoDecoderFactory() {
|
||||
this.nativeFactory = nativeCreateFactory();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public VideoDecoder createDecoder(VideoCodecInfo codecInfo) {
|
||||
String codecName = codecInfo.getName();
|
||||
|
||||
if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.name())) {
|
||||
return new LibvpxVp8Decoder();
|
||||
}
|
||||
if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.name())
|
||||
&& LibvpxVp9Decoder.nativeIsSupported()) {
|
||||
return new LibvpxVp9Decoder();
|
||||
}
|
||||
if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.name())) {
|
||||
return new Dav1dDecoder();
|
||||
}
|
||||
|
||||
return null;
|
||||
public VideoDecoder createDecoder(VideoCodecInfo info) {
|
||||
return new WrappedNativeVideoDecoder() {
|
||||
@Override
|
||||
public long createNativeVideoDecoder() {
|
||||
return nativeCreateDecoder(nativeFactory, info);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public VideoCodecInfo[] getSupportedCodecs() {
|
||||
return supportedCodecs();
|
||||
return nativeGetSupportedCodecs(nativeFactory).toArray(new VideoCodecInfo[0]);
|
||||
}
|
||||
|
||||
static VideoCodecInfo[] supportedCodecs() {
|
||||
List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>();
|
||||
private static native long nativeCreateFactory();
|
||||
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
|
||||
if (LibvpxVp9Decoder.nativeIsSupported()) {
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
|
||||
}
|
||||
private static native long nativeCreateDecoder(long factory, VideoCodecInfo videoCodecInfo);
|
||||
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
|
||||
|
||||
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
|
||||
}
|
||||
private static native List<VideoCodecInfo> nativeGetSupportedCodecs(long factory);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user