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}
54 lines
1.5 KiB
Java
54 lines
1.5 KiB
Java
/*
|
|
* Copyright 2017 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
package org.webrtc;
|
|
|
|
import androidx.annotation.Nullable;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
|
|
public class SoftwareVideoEncoderFactory implements VideoEncoderFactory {
|
|
private static final String TAG = "SoftwareVideoEncoderFactory";
|
|
|
|
private final long nativeFactory;
|
|
|
|
public SoftwareVideoEncoderFactory() {
|
|
this.nativeFactory = nativeCreateFactory();
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public VideoEncoder createEncoder(VideoCodecInfo info) {
|
|
return new WrappedNativeVideoEncoder() {
|
|
@Override
|
|
public long createNativeVideoEncoder() {
|
|
return nativeCreateEncoder(nativeFactory, info);
|
|
}
|
|
|
|
@Override
|
|
public boolean isHardwareEncoder() {
|
|
return false;
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override
|
|
public VideoCodecInfo[] getSupportedCodecs() {
|
|
return nativeGetSupportedCodecs(nativeFactory).toArray(new VideoCodecInfo[0]);
|
|
}
|
|
|
|
private static native long nativeCreateFactory();
|
|
|
|
private static native long nativeCreateEncoder(long factory, VideoCodecInfo videoCodecInfo);
|
|
|
|
private static native List<VideoCodecInfo> nativeGetSupportedCodecs(long factory);
|
|
}
|