Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1716)

Unified Diff: content/renderer/media/media_stream_dependency_factory.cc

Issue 99033003: Enable platform echo cancellation through the AudioRecord path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_dependency_factory.cc
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/media_stream_dependency_factory.cc
index 6172e06a8e31da352c32b056fc1cf6585ef2dcc6..231eafe635e107e8a713a90cbb446d01f5446255 100644
--- a/content/renderer/media/media_stream_dependency_factory.cc
+++ b/content/renderer/media/media_stream_dependency_factory.cc
@@ -96,6 +96,40 @@ void ApplyFixedAudioConstraints(RTCMediaConstraints* constraints) {
}
}
+void TransferConstraintToPlatformEffect(RTCMediaConstraints* constraints,
tommi (sloooow) - chröme 2013/12/06 12:11:34 Please document all the arguments. |platform_effe
ajm 2013/12/10 06:37:16 I tried returning the output effect and using just
+ const char* key,
+ bool* platform_effect) {
+ bool value;
+ if (!webrtc::FindConstraint(constraints, key, &value, NULL) ||
+ value == false) {
+ // If the constraint does not exist, or is set to false, disable the
+ // corresponding platform effect.
+ *platform_effect = false;
+ DVLOG(1) << "Disabling platform effect: " << key;
+ } else {
+ if (*platform_effect) {
tommi (sloooow) - chröme 2013/12/06 12:11:34 nit: you can save one scope: } else if (*platform_
ajm 2013/12/10 06:37:16 Done.
+ // If the constraint is set to true, and the corresponding platform effect
+ // is available, disable the constraint.
+ constraints->AddMandatory(key,
+ webrtc::MediaConstraintsInterface::kValueFalse, true);
+ DVLOG(1) << "Disabling constraint: " << key;
+ }
+ }
+}
+
+// Any true constraint with an available corresponding platform effect will be
+// set to false. Any false constraint will cause the corresponding platform
+// effect to be disabled.
+//
+// This currently only deals with AEC, but is prepared for expansion to other
+// platform effects.
+void TransferConstraintsToPlatformEffects(RTCMediaConstraints* constraints,
+ MediaStreamDevice::AudioDeviceParameters* params) {
tommi (sloooow) - chröme 2013/12/06 12:11:34 please document that both parameters are in+out an
ajm 2013/12/10 06:37:16 Done. Hopefully you think it's sufficiently clear
+ TransferConstraintToPlatformEffect(constraints,
+ webrtc::MediaConstraintsInterface::kEchoCancellation,
+ &params->use_platform_aec);
+}
+
class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface {
public:
P2PPortAllocatorFactory(
@@ -323,7 +357,17 @@ void MediaStreamDependencyFactory::CreateNativeMediaSources(
// TODO(xians): Create a new capturer for difference microphones when we
// support multiple microphones. See issue crbug/262117 .
- const StreamDeviceInfo device_info = source_data->device_info();
+ StreamDeviceInfo device_info = source_data->device_info();
+
+ RTCMediaConstraints platform_constraints = native_audio_constraints;
+ // This causes constraint settings to be transferred to their corresponding
+ // platform effects. For example, if a platform AEC is available, and the
+ // AEC constraint is set to true, we should leave the platform AEC
+ // enabled, and disable the software AEC by setting the constraint to false.
+ // Contrariwise, if the AEC constraint is set to false, we should disable
+ // the platform AEC even if available.
tommi (sloooow) - chröme 2013/12/06 12:11:34 This comment is good but I think it would be good
henrika (OOO until Aug 14) 2013/12/06 12:52:21 is it correct to assume that everything should wor
ajm 2013/12/10 06:37:16 If an AudioManager claims that a platform AEC exis
+ TransferConstraintsToPlatformEffects(&platform_constraints,
+ &device_info.device.input);
scoped_refptr<WebRtcAudioCapturer> capturer(
MaybeCreateAudioCapturer(render_view_id, device_info));
if (!capturer.get()) {
@@ -341,7 +385,7 @@ void MediaStreamDependencyFactory::CreateNativeMediaSources(
// Creates a LocalAudioSource object which holds audio options.
// TODO(xians): The option should apply to the track instead of the source.
source_data->SetLocalAudioSource(
- CreateLocalAudioSource(&native_audio_constraints).get());
+ CreateLocalAudioSource(&platform_constraints).get());
source_observer->AddSource(source_data->local_audio_source());
}
@@ -910,7 +954,8 @@ MediaStreamDependencyFactory::MaybeCreateAudioCapturer(
device_info.session_id,
device_info.device.id,
device_info.device.matched_output.sample_rate,
- device_info.device.matched_output.frames_per_buffer)) {
+ device_info.device.matched_output.frames_per_buffer,
+ device_info.device.input.use_platform_aec)) {
return NULL;
}

Powered by Google App Engine
This is Rietveld 408576698