Chromium Code Reviews| Index: webrtc/api/peerconnectionfactory.cc | 
| diff --git a/webrtc/api/peerconnectionfactory.cc b/webrtc/api/peerconnectionfactory.cc | 
| index c05cd852f605faada5dbd47e68e7b2ec8afd94e8..caa64f788b8d3235fb2be9580f5c62e4897759cc 100644 | 
| --- a/webrtc/api/peerconnectionfactory.cc | 
| +++ b/webrtc/api/peerconnectionfactory.cc | 
| @@ -14,6 +14,7 @@ | 
| #include "webrtc/api/audiotrack.h" | 
| #include "webrtc/api/localaudiosource.h" | 
| +#include "webrtc/api/mediaconstraintsinterface.h" | 
| #include "webrtc/api/mediastream.h" | 
| #include "webrtc/api/mediastreamproxy.h" | 
| #include "webrtc/api/mediastreamtrackproxy.h" | 
| @@ -198,6 +199,14 @@ PeerConnectionFactory::CreateAudioSource( | 
| return source; | 
| } | 
| +rtc::scoped_refptr<AudioSourceInterface> | 
| +PeerConnectionFactory::CreateAudioSource(const cricket::AudioOptions& options) { | 
| + RTC_DCHECK(signaling_thread_->IsCurrent()); | 
| + rtc::scoped_refptr<LocalAudioSource> source( | 
| + LocalAudioSource::Create(options_, &options)); | 
| + return source; | 
| +} | 
| + | 
| rtc::scoped_refptr<VideoSourceInterface> | 
| PeerConnectionFactory::CreateVideoSource( | 
| cricket::VideoCapturer* capturer, | 
| @@ -208,6 +217,14 @@ PeerConnectionFactory::CreateVideoSource( | 
| return VideoSourceProxy::Create(signaling_thread_, source); | 
| } | 
| +rtc::scoped_refptr<VideoSourceInterface> | 
| +PeerConnectionFactory::CreateVideoSource(cricket::VideoCapturer* capturer) { | 
| + RTC_DCHECK(signaling_thread_->IsCurrent()); | 
| + rtc::scoped_refptr<VideoSource> source( | 
| + VideoSource::Create(channel_manager_.get(), capturer, false)); | 
| + return VideoSourceProxy::Create(signaling_thread_, source); | 
| +} | 
| + | 
| bool PeerConnectionFactory::StartAecDump(rtc::PlatformFile file, | 
| int64_t max_size_bytes) { | 
| RTC_DCHECK(signaling_thread_->IsCurrent()); | 
| @@ -231,13 +248,29 @@ void PeerConnectionFactory::StopRtcEventLog() { | 
| rtc::scoped_refptr<PeerConnectionInterface> | 
| PeerConnectionFactory::CreatePeerConnection( | 
| - const PeerConnectionInterface::RTCConfiguration& configuration, | 
| + const PeerConnectionInterface::RTCConfiguration& configuration_in, | 
| const MediaConstraintsInterface* constraints, | 
| rtc::scoped_ptr<cricket::PortAllocator> allocator, | 
| rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | 
| PeerConnectionObserver* observer) { | 
| RTC_DCHECK(signaling_thread_->IsCurrent()); | 
| + // We merge constraints and configuration into a single configuration. | 
| + PeerConnectionInterface::RTCConfiguration configuration = configuration_in; | 
| + CopyConstraintsIntoRtcConfiguration(constraints, &configuration); | 
| 
 
perkj_webrtc
2016/03/02 14:46:27
This Copy... might need a test.
 
hta - Chromium
2016/03/03 11:51:03
Test added (some aspects). Look at test to see beh
 
 | 
| + | 
| + return CreatePeerConnection(configuration, std::move(allocator), | 
| + std::move(dtls_identity_store), observer); | 
| +} | 
| + | 
| +rtc::scoped_refptr<PeerConnectionInterface> | 
| +PeerConnectionFactory::CreatePeerConnection( | 
| + const PeerConnectionInterface::RTCConfiguration& configuration, | 
| + rtc::scoped_ptr<cricket::PortAllocator> allocator, | 
| + rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | 
| + PeerConnectionObserver* observer) { | 
| + RTC_DCHECK(signaling_thread_->IsCurrent()); | 
| + | 
| if (!dtls_identity_store.get()) { | 
| // Because |pc|->Initialize takes ownership of the store we need a new | 
| // wrapper object that can be deleted without deleting the underlying | 
| @@ -254,7 +287,24 @@ PeerConnectionFactory::CreatePeerConnection( | 
| rtc::scoped_refptr<PeerConnection> pc( | 
| new rtc::RefCountedObject<PeerConnection>(this)); | 
| - if (!pc->Initialize(configuration, constraints, std::move(allocator), | 
| + // We rely on default values when constraints aren't found. | 
| + cricket::MediaConfig media_config; | 
| + | 
| + media_config.video.disable_prerenderer_smoothing = | 
| + configuration.disable_prerenderer_smoothing; | 
| + if (configuration.enable_dscp) { | 
| + media_config.enable_dscp = *(configuration.enable_dscp); | 
| + } | 
| + if (configuration.cpu_overuse_detection) { | 
| + media_config.video.enable_cpu_overuse_detection = | 
| + *(configuration.cpu_overuse_detection); | 
| + } | 
| + if (configuration.suspend_below_min_bitrate) { | 
| + media_config.video.suspend_below_min_bitrate = | 
| + *(configuration.suspend_below_min_bitrate); | 
| + } | 
| + | 
| + if (!pc->Initialize(media_config, configuration, std::move(allocator), | 
| std::move(dtls_identity_store), observer)) { | 
| return nullptr; | 
| } |