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 b60daf4ed59f22b70fafb5d34e6d17989531b17f..c7ed7e978fd564051250d84c9a69421acb07a843 100644 |
| --- a/content/renderer/media/media_stream_dependency_factory.cc |
| +++ b/content/renderer/media/media_stream_dependency_factory.cc |
| @@ -70,23 +70,12 @@ struct { |
| webrtc::MediaConstraintsInterface::kValueTrue}, |
| }; |
| -class WebAudioConstraints : public RTCMediaConstraints { |
| - public: |
| - WebAudioConstraints() |
| - : RTCMediaConstraints(WebKit::WebMediaConstraints()) { |
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kWebAudioConstraints); ++i) { |
| - webrtc::MediaConstraintsInterface::Constraint constraint; |
| - constraint.key = kWebAudioConstraints[i].key; |
| - constraint.value = kWebAudioConstraints[i].value; |
| - |
| - DVLOG(1) << "WebAudioConstraints: " << constraint.key |
| - << " : " << constraint.value; |
| - mandatory_.push_back(constraint); |
| - } |
| +void ApplyFixedWebAudioConstraints(RTCMediaConstraints* constraints) { |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kWebAudioConstraints); ++i) { |
| + constraints->AddMandatory(kWebAudioConstraints[i].key, |
| + kWebAudioConstraints[i].value, false); |
| } |
| - |
| - virtual ~WebAudioConstraints() {} |
| -}; |
| +} |
| class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface { |
| public: |
| @@ -325,6 +314,10 @@ void MediaStreamDependencyFactory::CreateNativeMediaSources( |
| DLOG(WARNING) << "Failed to create the capturer for device " |
| << device_info.device.id; |
| sources_created.Run(web_stream, false); |
| + // TODO(xians): Don't we need to check if source_observer is observing |
| + // something? If not, then it looks like we have a leak here. |
| + // OTOH, if it _is_ observing something, then the callback might |
| + // be called multiple times which is likely also a bug. |
| return; |
| } |
| @@ -390,12 +383,16 @@ bool MediaStreamDependencyFactory::AddNativeMediaStreamTrack( |
| MediaStreamSourceExtraData* source_data = |
| static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
| + // In the future the constraints will belong to the track itself, but |
| + // right now they're on the source, so we fetch them from there. |
|
henrika (OOO until Aug 14)
2013/08/26 11:34:55
TODO()?
tommi (sloooow) - chröme
2013/08/27 10:58:22
This isn't really a todo but more of an explanatio
|
| + RTCMediaConstraints track_constraints(source.constraints()); |
| + |
| scoped_refptr<WebRtcAudioCapturer> capturer; |
| if (!source_data) { |
| if (source.requiresAudioConsumer()) { |
| // We're adding a WebAudio MediaStream. |
| // Create a specific capturer for each WebAudio consumer. |
| - capturer = CreateWebAudioSource(&source); |
| + capturer = CreateWebAudioSource(&source, &track_constraints); |
| source_data = |
| static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
| } else { |
| @@ -418,7 +415,8 @@ bool MediaStreamDependencyFactory::AddNativeMediaStreamTrack( |
| scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
| CreateLocalAudioTrack(track_id, |
| capturer, |
| - source_data->local_audio_source())); |
| + source_data->local_audio_source(), |
| + &track_constraints)); |
| audio_track->set_enabled(track.isEnabled()); |
| return native_stream->AddTrack(audio_track.get()); |
| } else { |
| @@ -598,7 +596,8 @@ MediaStreamDependencyFactory::CreateLocalVideoSource( |
| scoped_refptr<WebRtcAudioCapturer> |
| MediaStreamDependencyFactory::CreateWebAudioSource( |
| - WebKit::WebMediaStreamSource* source) { |
| + WebKit::WebMediaStreamSource* source, |
| + RTCMediaConstraints* constraints) { |
| DVLOG(1) << "MediaStreamDependencyFactory::CreateWebAudioSource()"; |
| DCHECK(GetWebRtcAudioDevice()); |
| @@ -621,9 +620,8 @@ MediaStreamDependencyFactory::CreateWebAudioSource( |
| // echo cancellation, automatic gain control, noise suppression and |
| // high-pass filter. SetLocalAudioSource() affects core audio parts in |
| // third_party/Libjingle. |
| - WebAudioConstraints webaudio_audio_constraints_all_true; |
| - source_data->SetLocalAudioSource( |
| - CreateLocalAudioSource(&webaudio_audio_constraints_all_true).get()); |
| + ApplyFixedWebAudioConstraints(constraints); |
| + source_data->SetLocalAudioSource(CreateLocalAudioSource(constraints).get()); |
| source->setExtraData(source_data); |
| // Replace the default source with WebAudio as source instead. |
| @@ -659,12 +657,13 @@ scoped_refptr<webrtc::AudioTrackInterface> |
| MediaStreamDependencyFactory::CreateLocalAudioTrack( |
| const std::string& id, |
| const scoped_refptr<WebRtcAudioCapturer>& capturer, |
| - webrtc::AudioSourceInterface* source) { |
| + webrtc::AudioSourceInterface* source, |
| + const webrtc::MediaConstraintsInterface* constraints) { |
| // TODO(xians): Merge |source| to the capturer(). We can't do this today |
| // because only one capturer() is supported while one |source| is created |
| // for each audio track. |
| scoped_refptr<WebRtcLocalAudioTrack> audio_track( |
| - WebRtcLocalAudioTrack::Create(id, capturer, source)); |
| + WebRtcLocalAudioTrack::Create(id, capturer, source, constraints)); |
| // Add the WebRtcAudioDevice as the sink to the local audio track. |
| audio_track->AddSink(GetWebRtcAudioDevice()); |
| // Start the audio track. This will hook the |audio_track| to the capturer |