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..8da7b14cb7120cc0a1d05b5b84c2414896d433fa 100644 |
| --- a/content/renderer/media/media_stream_dependency_factory.cc |
| +++ b/content/renderer/media/media_stream_dependency_factory.cc |
| @@ -78,6 +78,15 @@ struct { |
| webrtc::MediaConstraintsInterface::kValueTrue }, |
| }; |
| +// Map of corresponding media constraints and platform effects. |
| +struct { |
| + const char* constraint; |
| + const media::AudioParameters::PlatformEffectsMask effect; |
| +} const kConstraintEffectMap[] = { |
| + { webrtc::MediaConstraintsInterface::kEchoCancellation, |
| + media::AudioParameters::ECHO_CANCELLER}, |
| +}; |
| + |
| // Merge |constraints| with |kDefaultAudioConstraints|. For any key which exists |
| // in both, the value from |constraints| is maintained, including its |
| // mandatory/optional status. New values from |kDefaultAudioConstraints| will |
| @@ -323,7 +332,36 @@ 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 constraints = native_audio_constraints; |
| + |
| + // If any platform effects are available, check them against the |
| + // constraints. Disable effects to match false constraints, but if a |
| + // constraint is true, set the constraint to false to later disable the |
| + // software effect. |
| + int effects = device_info.device.input.effects; |
| + if (effects != media::AudioParameters::NO_EFFECTS) { |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kConstraintEffectMap); ++i) { |
| + bool value; |
| + if (!webrtc::FindConstraint(&constraints, |
| + kConstraintEffectMap[i].constraint, &value, NULL) || !value) { |
| + // If the constraint is false, or does not exist, disable the platform |
| + // effect. |
| + effects &= ~kConstraintEffectMap[i].effect; |
| + DVLOG(1) << "Disabling constraint: " |
| + << kConstraintEffectMap[i].constraint; |
| + } else if (effects & kConstraintEffectMap[i].effect) { |
| + // If the constraint is true, leave the platform effect enabled, and |
| + // set the constraint to false to later disable the software effect. |
| + constraints.AddMandatory(kConstraintEffectMap[i].constraint, |
| + webrtc::MediaConstraintsInterface::kValueFalse, true); |
| + DVLOG(1) << "Disabling platform effect: " |
| + << kConstraintEffectMap[i].constraint; |
| + } |
| + } |
| + device_info.device.input.effects = effects; |
| + } |
| + |
| scoped_refptr<WebRtcAudioCapturer> capturer( |
| MaybeCreateAudioCapturer(render_view_id, device_info)); |
| if (!capturer.get()) { |
| @@ -341,7 +379,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(&constraints).get()); |
|
no longer working on chromium
2013/12/30 14:55:56
you modify the constraints and save the change in
ajm
2014/01/08 01:35:02
We only need to update the constraints for paths w
|
| source_observer->AddSource(source_data->local_audio_source()); |
| } |
| @@ -910,7 +948,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.effects)) { |
| return NULL; |
| } |