AppRTCMobile support to turn off the WebRTC AGC and HPF

This CL adds support for turning off the WebRTC AGC
and HPF in AppRTCMobile.

BUG=webrtc:6183,webrtc:6220

Review-Url: https://codereview.webrtc.org/2871393002
Cr-Commit-Position: refs/heads/master@{#18204}
This commit is contained in:
peah
2017-05-18 15:09:33 -07:00
committed by Commit bot
parent 93e4522105
commit b274204feb
7 changed files with 75 additions and 42 deletions

View File

@ -152,6 +152,10 @@
<string name="pref_enable_level_control_title">Enable level control.</string> <string name="pref_enable_level_control_title">Enable level control.</string>
<string name="pref_enable_level_control_default">false</string> <string name="pref_enable_level_control_default">false</string>
<string name="pref_disable_webrtc_agc_and_hpf_key">disable_webrtc_agc_and_hpf_preference</string>
<string name="pref_disable_webrtc_agc_and_hpf_title">Disable WebRTC AGC and HPF.</string>
<string name="pref_disable_webrtc_agc_default">false</string>
<string name="pref_speakerphone_key">speakerphone_preference</string> <string name="pref_speakerphone_key">speakerphone_preference</string>
<string name="pref_speakerphone_title">Speakerphone.</string> <string name="pref_speakerphone_title">Speakerphone.</string>
<string name="pref_speakerphone_dlg">Speakerphone.</string> <string name="pref_speakerphone_dlg">Speakerphone.</string>

View File

@ -152,6 +152,11 @@
android:title="@string/pref_enable_level_control_title" android:title="@string/pref_enable_level_control_title"
android:defaultValue="@string/pref_enable_level_control_default" /> android:defaultValue="@string/pref_enable_level_control_default" />
<CheckBoxPreference
android:key="@string/pref_disable_webrtc_agc_and_hpf_key"
android:title="@string/pref_disable_webrtc_agc_and_hpf_title"
android:defaultValue="@string/pref_disable_webrtc_agc_default" />
<ListPreference <ListPreference
android:key="@string/pref_speakerphone_key" android:key="@string/pref_speakerphone_key"
android:title="@string/pref_speakerphone_title" android:title="@string/pref_speakerphone_title"

View File

@ -106,6 +106,8 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven
public static final String EXTRA_DISABLE_BUILT_IN_AGC = "org.appspot.apprtc.DISABLE_BUILT_IN_AGC"; public static final String EXTRA_DISABLE_BUILT_IN_AGC = "org.appspot.apprtc.DISABLE_BUILT_IN_AGC";
public static final String EXTRA_DISABLE_BUILT_IN_NS = "org.appspot.apprtc.DISABLE_BUILT_IN_NS"; public static final String EXTRA_DISABLE_BUILT_IN_NS = "org.appspot.apprtc.DISABLE_BUILT_IN_NS";
public static final String EXTRA_ENABLE_LEVEL_CONTROL = "org.appspot.apprtc.ENABLE_LEVEL_CONTROL"; public static final String EXTRA_ENABLE_LEVEL_CONTROL = "org.appspot.apprtc.ENABLE_LEVEL_CONTROL";
public static final String EXTRA_DISABLE_WEBRTC_AGC_AND_HPF =
"org.appspot.apprtc.DISABLE_WEBRTC_GAIN_CONTROL";
public static final String EXTRA_DISPLAY_HUD = "org.appspot.apprtc.DISPLAY_HUD"; public static final String EXTRA_DISPLAY_HUD = "org.appspot.apprtc.DISPLAY_HUD";
public static final String EXTRA_TRACING = "org.appspot.apprtc.TRACING"; public static final String EXTRA_TRACING = "org.appspot.apprtc.TRACING";
public static final String EXTRA_CMDLINE = "org.appspot.apprtc.CMDLINE"; public static final String EXTRA_CMDLINE = "org.appspot.apprtc.CMDLINE";
@ -323,7 +325,8 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven
intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AEC, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AEC, false),
intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false),
intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false),
intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false), dataChannelParameters); intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false),
intent.getBooleanExtra(EXTRA_DISABLE_WEBRTC_AGC_AND_HPF, false), dataChannelParameters);
commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false); commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false);
runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0); runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0);

View File

@ -74,6 +74,7 @@ public class ConnectActivity extends Activity {
private String keyprefDisableBuiltInAgc; private String keyprefDisableBuiltInAgc;
private String keyprefDisableBuiltInNs; private String keyprefDisableBuiltInNs;
private String keyprefEnableLevelControl; private String keyprefEnableLevelControl;
private String keyprefDisableWebRtcAGCAndHPF;
private String keyprefDisplayHud; private String keyprefDisplayHud;
private String keyprefTracing; private String keyprefTracing;
private String keyprefRoomServerUrl; private String keyprefRoomServerUrl;
@ -118,6 +119,7 @@ public class ConnectActivity extends Activity {
keyprefDisableBuiltInAgc = getString(R.string.pref_disable_built_in_agc_key); keyprefDisableBuiltInAgc = getString(R.string.pref_disable_built_in_agc_key);
keyprefDisableBuiltInNs = getString(R.string.pref_disable_built_in_ns_key); keyprefDisableBuiltInNs = getString(R.string.pref_disable_built_in_ns_key);
keyprefEnableLevelControl = getString(R.string.pref_enable_level_control_key); keyprefEnableLevelControl = getString(R.string.pref_enable_level_control_key);
keyprefDisableWebRtcAGCAndHPF = getString(R.string.pref_disable_webrtc_agc_and_hpf_key);
keyprefDisplayHud = getString(R.string.pref_displayhud_key); keyprefDisplayHud = getString(R.string.pref_displayhud_key);
keyprefTracing = getString(R.string.pref_tracing_key); keyprefTracing = getString(R.string.pref_tracing_key);
keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key); keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key);
@ -393,6 +395,11 @@ public class ConnectActivity extends Activity {
CallActivity.EXTRA_ENABLE_LEVEL_CONTROL, R.string.pref_enable_level_control_key, CallActivity.EXTRA_ENABLE_LEVEL_CONTROL, R.string.pref_enable_level_control_key,
useValuesFromIntent); useValuesFromIntent);
// Check Disable gain control
boolean disableWebRtcAGCAndHPF = sharedPrefGetBoolean(
R.string.pref_disable_webrtc_agc_and_hpf_key, CallActivity.EXTRA_DISABLE_WEBRTC_AGC_AND_HPF,
R.string.pref_disable_webrtc_agc_and_hpf_key, useValuesFromIntent);
// Get video resolution from settings. // Get video resolution from settings.
int videoWidth = 0; int videoWidth = 0;
int videoHeight = 0; int videoHeight = 0;
@ -521,6 +528,7 @@ public class ConnectActivity extends Activity {
intent.putExtra(CallActivity.EXTRA_DISABLE_BUILT_IN_AGC, disableBuiltInAGC); intent.putExtra(CallActivity.EXTRA_DISABLE_BUILT_IN_AGC, disableBuiltInAGC);
intent.putExtra(CallActivity.EXTRA_DISABLE_BUILT_IN_NS, disableBuiltInNS); intent.putExtra(CallActivity.EXTRA_DISABLE_BUILT_IN_NS, disableBuiltInNS);
intent.putExtra(CallActivity.EXTRA_ENABLE_LEVEL_CONTROL, enableLevelControl); intent.putExtra(CallActivity.EXTRA_ENABLE_LEVEL_CONTROL, enableLevelControl);
intent.putExtra(CallActivity.EXTRA_DISABLE_WEBRTC_AGC_AND_HPF, disableWebRtcAGCAndHPF);
intent.putExtra(CallActivity.EXTRA_AUDIO_BITRATE, audioStartBitrate); intent.putExtra(CallActivity.EXTRA_AUDIO_BITRATE, audioStartBitrate);
intent.putExtra(CallActivity.EXTRA_AUDIOCODEC, audioCodec); intent.putExtra(CallActivity.EXTRA_AUDIOCODEC, audioCodec);
intent.putExtra(CallActivity.EXTRA_DISPLAY_HUD, displayHud); intent.putExtra(CallActivity.EXTRA_DISPLAY_HUD, displayHud);

View File

@ -87,6 +87,8 @@ public class PeerConnectionClient {
private static final String VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL = "WebRTC-IntelVP8/Enabled/"; private static final String VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL = "WebRTC-IntelVP8/Enabled/";
private static final String VIDEO_H264_HIGH_PROFILE_FIELDTRIAL = private static final String VIDEO_H264_HIGH_PROFILE_FIELDTRIAL =
"WebRTC-H264HighProfile/Enabled/"; "WebRTC-H264HighProfile/Enabled/";
private static final String DISABLE_WEBRTC_AGC_FIELDTRIAL =
"WebRTC-Audio-MinimizeResamplingOnMobile/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";
@ -190,6 +192,7 @@ public class PeerConnectionClient {
public final boolean disableBuiltInAGC; public final boolean disableBuiltInAGC;
public final boolean disableBuiltInNS; public final boolean disableBuiltInNS;
public final boolean enableLevelControl; public final boolean enableLevelControl;
public final boolean disableWebRtcAGCAndHPF;
private final DataChannelParameters dataChannelParameters; private final DataChannelParameters dataChannelParameters;
public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing, public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing,
@ -197,11 +200,11 @@ public class PeerConnectionClient {
boolean videoCodecHwAcceleration, boolean videoFlexfecEnabled, int audioStartBitrate, boolean videoCodecHwAcceleration, boolean videoFlexfecEnabled, int audioStartBitrate,
String audioCodec, boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES, String audioCodec, boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES,
boolean disableBuiltInAEC, boolean disableBuiltInAGC, boolean disableBuiltInNS, boolean disableBuiltInAEC, boolean disableBuiltInAGC, boolean disableBuiltInNS,
boolean enableLevelControl) { boolean enableLevelControl, boolean disableWebRtcAGCAndHPF) {
this(videoCallEnabled, loopback, tracing, videoWidth, videoHeight, videoFps, videoMaxBitrate, this(videoCallEnabled, loopback, tracing, videoWidth, videoHeight, videoFps, videoMaxBitrate,
videoCodec, videoCodecHwAcceleration, videoFlexfecEnabled, audioStartBitrate, audioCodec, videoCodec, videoCodecHwAcceleration, videoFlexfecEnabled, audioStartBitrate, audioCodec,
noAudioProcessing, aecDump, useOpenSLES, disableBuiltInAEC, disableBuiltInAGC, noAudioProcessing, aecDump, useOpenSLES, disableBuiltInAEC, disableBuiltInAGC,
disableBuiltInNS, enableLevelControl, null); disableBuiltInNS, enableLevelControl, disableWebRtcAGCAndHPF, null);
} }
public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing, public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing,
@ -209,7 +212,8 @@ public class PeerConnectionClient {
boolean videoCodecHwAcceleration, boolean videoFlexfecEnabled, int audioStartBitrate, boolean videoCodecHwAcceleration, boolean videoFlexfecEnabled, int audioStartBitrate,
String audioCodec, boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES, String audioCodec, boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES,
boolean disableBuiltInAEC, boolean disableBuiltInAGC, boolean disableBuiltInNS, boolean disableBuiltInAEC, boolean disableBuiltInAGC, boolean disableBuiltInNS,
boolean enableLevelControl, DataChannelParameters dataChannelParameters) { boolean enableLevelControl, boolean disableWebRtcAGCAndHPF,
DataChannelParameters dataChannelParameters) {
this.videoCallEnabled = videoCallEnabled; this.videoCallEnabled = videoCallEnabled;
this.loopback = loopback; this.loopback = loopback;
this.tracing = tracing; this.tracing = tracing;
@ -229,6 +233,7 @@ public class PeerConnectionClient {
this.disableBuiltInAGC = disableBuiltInAGC; this.disableBuiltInAGC = disableBuiltInAGC;
this.disableBuiltInNS = disableBuiltInNS; this.disableBuiltInNS = disableBuiltInNS;
this.enableLevelControl = enableLevelControl; this.enableLevelControl = enableLevelControl;
this.disableWebRtcAGCAndHPF = disableWebRtcAGCAndHPF;
this.dataChannelParameters = dataChannelParameters; this.dataChannelParameters = dataChannelParameters;
} }
} }
@ -389,6 +394,10 @@ public class PeerConnectionClient {
Log.d(TAG, "Enable FlexFEC field trial."); Log.d(TAG, "Enable FlexFEC field trial.");
} }
fieldTrials += VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL; fieldTrials += VIDEO_VP8_INTEL_HW_ENCODER_FIELDTRIAL;
if (peerConnectionParameters.disableWebRtcAGCAndHPF) {
fieldTrials += DISABLE_WEBRTC_AGC_FIELDTRIAL;
Log.d(TAG, "Disable WebRTC AGC field trial.");
}
// Check preferred video codec. // Check preferred video codec.
preferredVideoCodec = VIDEO_CODEC_VP8; preferredVideoCodec = VIDEO_CODEC_VP8;

View File

@ -47,6 +47,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
private String keyprefDisableBuiltInAGC; private String keyprefDisableBuiltInAGC;
private String keyprefDisableBuiltInNS; private String keyprefDisableBuiltInNS;
private String keyprefEnableLevelControl; private String keyprefEnableLevelControl;
private String keyprefDisableWebRtcAGCAndHPF;
private String keyprefSpeakerphone; private String keyprefSpeakerphone;
private String keyPrefRoomServerUrl; private String keyPrefRoomServerUrl;
@ -87,6 +88,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
keyprefDisableBuiltInAGC = getString(R.string.pref_disable_built_in_agc_key); keyprefDisableBuiltInAGC = getString(R.string.pref_disable_built_in_agc_key);
keyprefDisableBuiltInNS = getString(R.string.pref_disable_built_in_ns_key); keyprefDisableBuiltInNS = getString(R.string.pref_disable_built_in_ns_key);
keyprefEnableLevelControl = getString(R.string.pref_enable_level_control_key); keyprefEnableLevelControl = getString(R.string.pref_enable_level_control_key);
keyprefDisableWebRtcAGCAndHPF = getString(R.string.pref_disable_webrtc_agc_and_hpf_key);
keyprefSpeakerphone = getString(R.string.pref_speakerphone_key); keyprefSpeakerphone = getString(R.string.pref_speakerphone_key);
keyprefEnableDataChannel = getString(R.string.pref_enable_datachannel_key); keyprefEnableDataChannel = getString(R.string.pref_enable_datachannel_key);
@ -141,6 +143,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
updateSummaryB(sharedPreferences, keyprefDisableBuiltInAGC); updateSummaryB(sharedPreferences, keyprefDisableBuiltInAGC);
updateSummaryB(sharedPreferences, keyprefDisableBuiltInNS); updateSummaryB(sharedPreferences, keyprefDisableBuiltInNS);
updateSummaryB(sharedPreferences, keyprefEnableLevelControl); updateSummaryB(sharedPreferences, keyprefEnableLevelControl);
updateSummaryB(sharedPreferences, keyprefDisableWebRtcAGCAndHPF);
updateSummaryList(sharedPreferences, keyprefSpeakerphone); updateSummaryList(sharedPreferences, keyprefSpeakerphone);
updateSummaryB(sharedPreferences, keyprefEnableDataChannel); updateSummaryB(sharedPreferences, keyprefEnableDataChannel);
@ -234,6 +237,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
|| key.equals(keyprefDisableBuiltInAGC) || key.equals(keyprefDisableBuiltInAGC)
|| key.equals(keyprefDisableBuiltInNS) || key.equals(keyprefDisableBuiltInNS)
|| key.equals(keyprefEnableLevelControl) || key.equals(keyprefEnableLevelControl)
|| key.equals(keyprefDisableWebRtcAGCAndHPF)
|| key.equals(keyPrefDisplayHud) || key.equals(keyPrefDisplayHud)
|| key.equals(keyprefEnableDataChannel) || key.equals(keyprefEnableDataChannel)
|| key.equals(keyprefOrdered) || key.equals(keyprefOrdered)

View File

@ -263,25 +263,25 @@ public class PeerConnectionClientTest implements PeerConnectionEvents {
} }
private PeerConnectionParameters createParametersForAudioCall() { private PeerConnectionParameters createParametersForAudioCall() {
PeerConnectionParameters peerConnectionParameters = PeerConnectionParameters peerConnectionParameters = new PeerConnectionParameters(
new PeerConnectionParameters(false, /* videoCallEnabled */ false, /* videoCallEnabled */
true, /* loopback */ true, /* loopback */
false, /* tracing */ false, /* tracing */
// Video codec parameters. // Video codec parameters.
0, /* videoWidth */ 0, /* videoWidth */
0, /* videoHeight */ 0, /* videoHeight */
0, /* videoFps */ 0, /* videoFps */
0, /* videoStartBitrate */ 0, /* videoStartBitrate */
"", /* videoCodec */ "", /* videoCodec */
true, /* videoCodecHwAcceleration */ true, /* videoCodecHwAcceleration */
false, /* videoFlexfecEnabled */ false, /* videoFlexfecEnabled */
// Audio codec parameters. // Audio codec parameters.
0, /* audioStartBitrate */ 0, /* audioStartBitrate */
"OPUS", /* audioCodec */ "OPUS", /* audioCodec */
false, /* noAudioProcessing */ false, /* noAudioProcessing */
false, /* aecDump */ false, /* aecDump */
false /* useOpenSLES */, false /* disableBuiltInAEC */, false /* disableBuiltInAGC */, false /* useOpenSLES */, false /* disableBuiltInAEC */, false /* disableBuiltInAGC */,
false /* disableBuiltInNS */, false /* enableLevelControl */); false /* disableBuiltInNS */, false /* enableLevelControl */, false /* disableWebRtcAGC */);
return peerConnectionParameters; return peerConnectionParameters;
} }
@ -301,25 +301,25 @@ public class PeerConnectionClientTest implements PeerConnectionEvents {
} }
private PeerConnectionParameters createParametersForVideoCall(String videoCodec) { private PeerConnectionParameters createParametersForVideoCall(String videoCodec) {
PeerConnectionParameters peerConnectionParameters = PeerConnectionParameters peerConnectionParameters = new PeerConnectionParameters(
new PeerConnectionParameters(true, /* videoCallEnabled */ true, /* videoCallEnabled */
true, /* loopback */ true, /* loopback */
false, /* tracing */ false, /* tracing */
// Video codec parameters. // Video codec parameters.
0, /* videoWidth */ 0, /* videoWidth */
0, /* videoHeight */ 0, /* videoHeight */
0, /* videoFps */ 0, /* videoFps */
0, /* videoStartBitrate */ 0, /* videoStartBitrate */
videoCodec, /* videoCodec */ videoCodec, /* videoCodec */
true, /* videoCodecHwAcceleration */ true, /* videoCodecHwAcceleration */
false, /* videoFlexfecEnabled */ false, /* videoFlexfecEnabled */
// Audio codec parameters. // Audio codec parameters.
0, /* audioStartBitrate */ 0, /* audioStartBitrate */
"OPUS", /* audioCodec */ "OPUS", /* audioCodec */
false, /* noAudioProcessing */ false, /* noAudioProcessing */
false, /* aecDump */ false, /* aecDump */
false /* useOpenSLES */, false /* disableBuiltInAEC */, false /* disableBuiltInAGC */, false /* useOpenSLES */, false /* disableBuiltInAEC */, false /* disableBuiltInAGC */,
false /* disableBuiltInNS */, false /* enableLevelControl */); false /* disableBuiltInNS */, false /* enableLevelControl */, false /* disableWebRtcAGC */);
return peerConnectionParameters; return peerConnectionParameters;
} }