Reland of Android: Add field trial for Intel HW Vp8 encoder (patchset #1 id:1 of https://codereview.webrtc.org/2624143002/ )
Reason for revert: Fixed external test issues. Original issue's description: > Revert of Android: Add field trial for Intel HW Vp8 encoder (patchset #1 id:1 of https://codereview.webrtc.org/2614373004/ ) > > Reason for revert: > Breaks external test code. > > Original issue's description: > > 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} > > Committed:cecf86e9b0> > TBR=sakal@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:6683 > > Review-Url: https://codereview.webrtc.org/2624143002 > Cr-Commit-Position: refs/heads/master@{#16005} > Committed:c999a08128TBR=sakal@webrtc.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=webrtc:6683 Review-Url: https://codereview.webrtc.org/2625903005 Cr-Commit-Position: refs/heads/master@{#16025}
This commit is contained in:
@ -75,6 +75,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";
|
||||||
@ -373,12 +374,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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -17,8 +17,15 @@ import java.util.List;
|
|||||||
* the PeerConnection API for clients.
|
* the PeerConnection API for clients.
|
||||||
*/
|
*/
|
||||||
public class PeerConnectionFactory {
|
public class PeerConnectionFactory {
|
||||||
|
private static volatile boolean nativeLibLoaded;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
try {
|
||||||
System.loadLibrary("jingle_peerconnection_so");
|
System.loadLibrary("jingle_peerconnection_so");
|
||||||
|
nativeLibLoaded = true;
|
||||||
|
} catch (UnsatisfiedLinkError t) {
|
||||||
|
nativeLibLoaded = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String TAG = "PeerConnectionFactory";
|
private static final String TAG = "PeerConnectionFactory";
|
||||||
@ -64,7 +71,10 @@ public class PeerConnectionFactory {
|
|||||||
// } else {
|
// } else {
|
||||||
// method2();
|
// method2();
|
||||||
// }
|
// }
|
||||||
public static native String fieldTrialsFindFullName(String name);
|
public static String fieldTrialsFindFullName(String name) {
|
||||||
|
return nativeLibLoaded ? nativeFieldTrialsFindFullName(name) : "";
|
||||||
|
}
|
||||||
|
private static native String nativeFieldTrialsFindFullName(String name);
|
||||||
// Internal tracing initialization. Must be called before PeerConnectionFactory is created to
|
// Internal tracing initialization. Must be called before PeerConnectionFactory is created to
|
||||||
// prevent racing with tracing code.
|
// prevent racing with tracing code.
|
||||||
public static native void initializeInternalTracer();
|
public static native void initializeInternalTracer();
|
||||||
|
|||||||
@ -1145,7 +1145,7 @@ JOW(void, PeerConnectionFactory_initializeInternalTracer)(JNIEnv* jni, jclass) {
|
|||||||
rtc::tracing::SetupInternalTracer();
|
rtc::tracing::SetupInternalTracer();
|
||||||
}
|
}
|
||||||
|
|
||||||
JOW(jstring, PeerConnectionFactory_fieldTrialsFindFullName)
|
JOW(jstring, PeerConnectionFactory_nativeFieldTrialsFindFullName)
|
||||||
(JNIEnv* jni, jclass, jstring j_name) {
|
(JNIEnv* jni, jclass, jstring j_name) {
|
||||||
return JavaStringFromStdString(
|
return JavaStringFromStdString(
|
||||||
jni, webrtc::field_trial::FindFullName(JavaToStdString(jni, j_name)));
|
jni, webrtc::field_trial::FindFullName(JavaToStdString(jni, j_name)));
|
||||||
|
|||||||
Reference in New Issue
Block a user