Chromium Code Reviews| 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, |
| + ¶ms->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; |
| } |