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:
magjed
2017-01-11 00:57:43 -08:00
committed by Commit bot
parent 9ba57b51b3
commit cecf86e9b0
2 changed files with 21 additions and 10 deletions

View File

@ -73,6 +73,7 @@ public class PeerConnectionClient {
private static final String AUDIO_CODEC_ISAC = "ISAC"; 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_CODEC_PARAM_START_BITRATE = "x-google-start-bitrate";
private static final String VIDEO_FLEXFEC_FIELDTRIAL = "WebRTC-FlexFEC-03/Enabled/"; 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_CODEC_PARAM_BITRATE = "maxaveragebitrate";
private static final String AUDIO_ECHO_CANCELLATION_CONSTRAINT = "googEchoCancellation"; private static final String AUDIO_ECHO_CANCELLATION_CONSTRAINT = "googEchoCancellation";
private static final String AUDIO_AUTO_GAIN_CONTROL_CONSTRAINT = "googAutoGainControl"; private static final String AUDIO_AUTO_GAIN_CONTROL_CONSTRAINT = "googAutoGainControl";
@ -371,12 +372,13 @@ public class PeerConnectionClient {
isError = false; isError = false;
// Initialize field trials. // Initialize field trials.
String fieldTrials = "";
if (peerConnectionParameters.videoFlexfecEnabled) { if (peerConnectionParameters.videoFlexfecEnabled) {
PeerConnectionFactory.initializeFieldTrials(VIDEO_FLEXFEC_FIELDTRIAL); fieldTrials += VIDEO_FLEXFEC_FIELDTRIAL;
Log.d(TAG, "Enable FlexFEC field trial."); Log.d(TAG, "Enable FlexFEC field trial.");
} else {
PeerConnectionFactory.initializeFieldTrials("");
} }
fieldTrials += VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL;
PeerConnectionFactory.initializeFieldTrials(fieldTrials);
// Check preferred video codec. // Check preferred video codec.
preferredVideoCodec = VIDEO_CODEC_VP8; preferredVideoCodec = VIDEO_CODEC_VP8;

View File

@ -20,8 +20,8 @@ import android.opengl.GLES20;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.Surface; import android.view.Surface;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@ -114,8 +114,17 @@ public class MediaCodecVideoEncoder {
"OMX.qcom.", Build.VERSION_CODES.KITKAT, BitrateAdjustmentType.NO_ADJUSTMENT); "OMX.qcom.", Build.VERSION_CODES.KITKAT, BitrateAdjustmentType.NO_ADJUSTMENT);
private static final MediaCodecProperties exynosVp8HwProperties = new MediaCodecProperties( private static final MediaCodecProperties exynosVp8HwProperties = new MediaCodecProperties(
"OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.DYNAMIC_ADJUSTMENT); "OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.DYNAMIC_ADJUSTMENT);
private static final MediaCodecProperties[] vp8HwList = private static final MediaCodecProperties intelVp8HwProperties = new MediaCodecProperties(
new MediaCodecProperties[] {qcomVp8HwProperties, exynosVp8HwProperties}; "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. // List of supported HW VP9 encoders.
private static final MediaCodecProperties qcomVp9HwProperties = new MediaCodecProperties( private static final MediaCodecProperties qcomVp9HwProperties = new MediaCodecProperties(
@ -203,14 +212,14 @@ public class MediaCodecVideoEncoder {
// Functions to query if HW encoding is supported. // Functions to query if HW encoding is supported.
public static boolean isVp8HwSupported() { public static boolean isVp8HwSupported() {
return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE) return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)
&& (findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedColorList) != null); && (findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedColorList) != null);
} }
public static EncoderProperties vp8HwEncoderProperties() { public static EncoderProperties vp8HwEncoderProperties() {
if (hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)) { if (hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)) {
return null; return null;
} else { } 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() { public static boolean isVp8HwSupportedUsingTextures() {
return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE) return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)
&& (findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedSurfaceColorList) != null); && (findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedSurfaceColorList) != null);
} }
public static boolean isVp9HwSupportedUsingTextures() { public static boolean isVp9HwSupportedUsingTextures() {
@ -387,7 +396,7 @@ public class MediaCodecVideoEncoder {
if (type == VideoCodecType.VIDEO_CODEC_VP8) { if (type == VideoCodecType.VIDEO_CODEC_VP8) {
mime = VP8_MIME_TYPE; mime = VP8_MIME_TYPE;
properties = findHwEncoder( properties = findHwEncoder(
VP8_MIME_TYPE, vp8HwList, useSurface ? supportedSurfaceColorList : supportedColorList); VP8_MIME_TYPE, vp8HwList(), useSurface ? supportedSurfaceColorList : supportedColorList);
keyFrameIntervalSec = 100; keyFrameIntervalSec = 100;
} else if (type == VideoCodecType.VIDEO_CODEC_VP9) { } else if (type == VideoCodecType.VIDEO_CODEC_VP9) {
mime = VP9_MIME_TYPE; mime = VP9_MIME_TYPE;