Android: Add field trial for Intel HW Vp8 encoder
Also enable Intel HW Vp8 encoder by default in AppRTCMobile. BUG=webrtc:6683 Review-Url: https://codereview.webrtc.org/2614373004 Cr-Commit-Position: refs/heads/master@{#16002}
This commit is contained in:
@ -73,6 +73,7 @@ public class PeerConnectionClient {
|
||||
private static final String AUDIO_CODEC_ISAC = "ISAC";
|
||||
private static final String VIDEO_CODEC_PARAM_START_BITRATE = "x-google-start-bitrate";
|
||||
private static final String VIDEO_FLEXFEC_FIELDTRIAL = "WebRTC-FlexFEC-03/Enabled/";
|
||||
private static final String VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL = "WebRTC-IntelVP8/Enabled/";
|
||||
private static final String AUDIO_CODEC_PARAM_BITRATE = "maxaveragebitrate";
|
||||
private static final String AUDIO_ECHO_CANCELLATION_CONSTRAINT = "googEchoCancellation";
|
||||
private static final String AUDIO_AUTO_GAIN_CONTROL_CONSTRAINT = "googAutoGainControl";
|
||||
@ -371,12 +372,13 @@ public class PeerConnectionClient {
|
||||
isError = false;
|
||||
|
||||
// Initialize field trials.
|
||||
String fieldTrials = "";
|
||||
if (peerConnectionParameters.videoFlexfecEnabled) {
|
||||
PeerConnectionFactory.initializeFieldTrials(VIDEO_FLEXFEC_FIELDTRIAL);
|
||||
fieldTrials += VIDEO_FLEXFEC_FIELDTRIAL;
|
||||
Log.d(TAG, "Enable FlexFEC field trial.");
|
||||
} else {
|
||||
PeerConnectionFactory.initializeFieldTrials("");
|
||||
}
|
||||
fieldTrials += VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL;
|
||||
PeerConnectionFactory.initializeFieldTrials(fieldTrials);
|
||||
|
||||
// Check preferred video codec.
|
||||
preferredVideoCodec = VIDEO_CODEC_VP8;
|
||||
|
||||
@ -20,8 +20,8 @@ import android.opengl.GLES20;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.Surface;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@ -114,8 +114,17 @@ public class MediaCodecVideoEncoder {
|
||||
"OMX.qcom.", Build.VERSION_CODES.KITKAT, BitrateAdjustmentType.NO_ADJUSTMENT);
|
||||
private static final MediaCodecProperties exynosVp8HwProperties = new MediaCodecProperties(
|
||||
"OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.DYNAMIC_ADJUSTMENT);
|
||||
private static final MediaCodecProperties[] vp8HwList =
|
||||
new MediaCodecProperties[] {qcomVp8HwProperties, exynosVp8HwProperties};
|
||||
private static final MediaCodecProperties intelVp8HwProperties = new MediaCodecProperties(
|
||||
"OMX.Intel.", Build.VERSION_CODES.LOLLIPOP, BitrateAdjustmentType.NO_ADJUSTMENT);
|
||||
private static MediaCodecProperties[] vp8HwList() {
|
||||
final ArrayList<MediaCodecProperties> supported_codecs = new ArrayList<MediaCodecProperties>();
|
||||
supported_codecs.add(qcomVp8HwProperties);
|
||||
supported_codecs.add(exynosVp8HwProperties);
|
||||
if (PeerConnectionFactory.fieldTrialsFindFullName("WebRTC-IntelVP8").equals("Enabled")) {
|
||||
supported_codecs.add(intelVp8HwProperties);
|
||||
}
|
||||
return supported_codecs.toArray(new MediaCodecProperties[supported_codecs.size()]);
|
||||
}
|
||||
|
||||
// List of supported HW VP9 encoders.
|
||||
private static final MediaCodecProperties qcomVp9HwProperties = new MediaCodecProperties(
|
||||
@ -203,14 +212,14 @@ public class MediaCodecVideoEncoder {
|
||||
// Functions to query if HW encoding is supported.
|
||||
public static boolean isVp8HwSupported() {
|
||||
return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)
|
||||
&& (findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedColorList) != null);
|
||||
&& (findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedColorList) != null);
|
||||
}
|
||||
|
||||
public static EncoderProperties vp8HwEncoderProperties() {
|
||||
if (hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)) {
|
||||
return null;
|
||||
} else {
|
||||
return findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedColorList);
|
||||
return findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedColorList);
|
||||
}
|
||||
}
|
||||
|
||||
@ -226,7 +235,7 @@ public class MediaCodecVideoEncoder {
|
||||
|
||||
public static boolean isVp8HwSupportedUsingTextures() {
|
||||
return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)
|
||||
&& (findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedSurfaceColorList) != null);
|
||||
&& (findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedSurfaceColorList) != null);
|
||||
}
|
||||
|
||||
public static boolean isVp9HwSupportedUsingTextures() {
|
||||
@ -387,7 +396,7 @@ public class MediaCodecVideoEncoder {
|
||||
if (type == VideoCodecType.VIDEO_CODEC_VP8) {
|
||||
mime = VP8_MIME_TYPE;
|
||||
properties = findHwEncoder(
|
||||
VP8_MIME_TYPE, vp8HwList, useSurface ? supportedSurfaceColorList : supportedColorList);
|
||||
VP8_MIME_TYPE, vp8HwList(), useSurface ? supportedSurfaceColorList : supportedColorList);
|
||||
keyFrameIntervalSec = 100;
|
||||
} else if (type == VideoCodecType.VIDEO_CODEC_VP9) {
|
||||
mime = VP9_MIME_TYPE;
|
||||
|
||||
Reference in New Issue
Block a user