Added a level controller initialization value to MediaConstraints.

An audio track with a level controller with the correct initialization
value can be created by a combination of
PeerConnectionFactory::CreateAudioTrack(..., audio_source) and
either
audio_source = PeerConnectionFactory::CreateAudioSource(constraints) or
audio_source = PeerConnectionFactory::CreateAudioSource(audio_options).

NOTRY=True
BUG=webrtc:6386

Review-Url: https://codereview.webrtc.org/2408143003
Cr-Commit-Position: refs/heads/master@{#14693}
This commit is contained in:
aleloi 2016-10-20 01:53:27 -07:00 committed by Commit bot
parent 647915fb95
commit e33c5d918a
5 changed files with 29 additions and 1 deletions

View File

@ -66,6 +66,18 @@ void FromConstraints(const MediaConstraintsInterface::Constraints& constraints,
entry.value = rtc::Optional<bool>(value);
}
}
// Set non-boolean constraints.
std::string value;
if (constraints.FindFirst(
MediaConstraintsInterface::kLevelControlInitialPeakLevelDBFS,
&value)) {
float level_control_initial_peak_level_dbfs;
if (rtc::FromString(value, &level_control_initial_peak_level_dbfs)) {
options->level_control_initial_peak_level_dbfs =
rtc::Optional<float>(level_control_initial_peak_level_dbfs);
}
}
}
} // namespace

View File

@ -49,6 +49,8 @@ const char MediaConstraintsInterface::kExperimentalNoiseSuppression[] =
const char MediaConstraintsInterface::kIntelligibilityEnhancer[] =
"intelligibilityEnhancer";
const char MediaConstraintsInterface::kLevelControl[] = "levelControl";
const char MediaConstraintsInterface::kLevelControlInitialPeakLevelDBFS[] =
"levelControlInitialPeakLevelDBFS";
const char MediaConstraintsInterface::kHighpassFilter[] =
"googHighpassFilter";
const char MediaConstraintsInterface::kTypingNoiseDetection[] =

View File

@ -75,6 +75,8 @@ class MediaConstraintsInterface {
static const char kExperimentalNoiseSuppression[]; // googNoiseSuppression2
static const char kIntelligibilityEnhancer[]; // intelligibilityEnhancer
static const char kLevelControl[]; // levelControl
static const char
kLevelControlInitialPeakLevelDBFS[]; // levelControlInitialPeakLevelDBFS
static const char kHighpassFilter[]; // googHighpassFilter
static const char kTypingNoiseDetection[]; // googTypingNoiseDetection
static const char kAudioMirroring[]; // googAudioMirroring

View File

@ -168,6 +168,8 @@ struct AudioOptions {
SetFrom(&recording_sample_rate, change.recording_sample_rate);
SetFrom(&playout_sample_rate, change.playout_sample_rate);
SetFrom(&combined_audio_video_bwe, change.combined_audio_video_bwe);
SetFrom(&level_control_initial_peak_level_dbfs,
change.level_control_initial_peak_level_dbfs);
}
bool operator==(const AudioOptions& o) const {
@ -195,7 +197,9 @@ struct AudioOptions {
tx_agc_limiter == o.tx_agc_limiter &&
recording_sample_rate == o.recording_sample_rate &&
playout_sample_rate == o.playout_sample_rate &&
combined_audio_video_bwe == o.combined_audio_video_bwe;
combined_audio_video_bwe == o.combined_audio_video_bwe &&
level_control_initial_peak_level_dbfs ==
o.level_control_initial_peak_level_dbfs;
}
bool operator!=(const AudioOptions& o) const { return !(*this == o); }
@ -220,6 +224,8 @@ struct AudioOptions {
ost << ToStringIfSet("experimental_ns", experimental_ns);
ost << ToStringIfSet("intelligibility_enhancer", intelligibility_enhancer);
ost << ToStringIfSet("level_control", level_control);
ost << ToStringIfSet("level_control_initial_peak_level_dbfs",
level_control_initial_peak_level_dbfs);
ost << ToStringIfSet("tx_agc_target_dbov", tx_agc_target_dbov);
ost << ToStringIfSet("tx_agc_digital_compression_gain",
tx_agc_digital_compression_gain);
@ -256,6 +262,8 @@ struct AudioOptions {
rtc::Optional<bool> experimental_ns;
rtc::Optional<bool> intelligibility_enhancer;
rtc::Optional<bool> level_control;
// Specifies an optional initialization value for the level controller.
rtc::Optional<float> level_control_initial_peak_level_dbfs;
// Note that tx_agc_* only applies to non-experimental AGC.
rtc::Optional<uint16_t> tx_agc_target_dbov;
rtc::Optional<uint16_t> tx_agc_digital_compression_gain;

View File

@ -872,6 +872,10 @@ bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) {
webrtc::AudioProcessing::Config apm_config;
if (level_control_) {
apm_config.level_controller.enabled = *level_control_;
if (options.level_control_initial_peak_level_dbfs) {
apm_config.level_controller.initial_peak_level_dbfs =
*options.level_control_initial_peak_level_dbfs;
}
}
// We check audioproc for the benefit of tests, since FakeWebRtcVoiceEngine