| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 const rtc::scoped_ptr<ProcessThread> module_process_thread_; | 116 const rtc::scoped_ptr<ProcessThread> module_process_thread_; |
| 117 const rtc::scoped_ptr<ChannelGroup> channel_group_; | 117 const rtc::scoped_ptr<ChannelGroup> channel_group_; |
| 118 volatile int next_channel_id_; | 118 volatile int next_channel_id_; |
| 119 Call::Config config_; | 119 Call::Config config_; |
| 120 | 120 |
| 121 // Needs to be held while write-locking |receive_crit_| or |send_crit_|. This | 121 // Needs to be held while write-locking |receive_crit_| or |send_crit_|. This |
| 122 // ensures that we have a consistent network state signalled to all senders | 122 // ensures that we have a consistent network state signalled to all senders |
| 123 // and receivers. | 123 // and receivers. |
| 124 rtc::CriticalSection network_enabled_crit_; | 124 rtc::CriticalSection network_enabled_crit_; |
| 125 bool network_enabled_ GUARDED_BY(network_enabled_crit_); | 125 bool network_enabled_ GUARDED_BY(network_enabled_crit_); |
| 126 TransportAdapter transport_adapter_; | |
| 127 | 126 |
| 128 rtc::scoped_ptr<RWLockWrapper> receive_crit_; | 127 rtc::scoped_ptr<RWLockWrapper> receive_crit_; |
| 129 std::map<uint32_t, AudioReceiveStream*> audio_receive_ssrcs_ | 128 std::map<uint32_t, AudioReceiveStream*> audio_receive_ssrcs_ |
| 130 GUARDED_BY(receive_crit_); | 129 GUARDED_BY(receive_crit_); |
| 131 std::map<uint32_t, VideoReceiveStream*> video_receive_ssrcs_ | 130 std::map<uint32_t, VideoReceiveStream*> video_receive_ssrcs_ |
| 132 GUARDED_BY(receive_crit_); | 131 GUARDED_BY(receive_crit_); |
| 133 std::set<VideoReceiveStream*> video_receive_streams_ | 132 std::set<VideoReceiveStream*> video_receive_streams_ |
| 134 GUARDED_BY(receive_crit_); | 133 GUARDED_BY(receive_crit_); |
| 135 std::map<std::string, AudioReceiveStream*> sync_stream_mapping_ | 134 std::map<std::string, AudioReceiveStream*> sync_stream_mapping_ |
| 136 GUARDED_BY(receive_crit_); | 135 GUARDED_BY(receive_crit_); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 153 | 152 |
| 154 namespace internal { | 153 namespace internal { |
| 155 | 154 |
| 156 Call::Call(const Call::Config& config) | 155 Call::Call(const Call::Config& config) |
| 157 : num_cpu_cores_(CpuInfo::DetectNumberOfCores()), | 156 : num_cpu_cores_(CpuInfo::DetectNumberOfCores()), |
| 158 module_process_thread_(ProcessThread::Create()), | 157 module_process_thread_(ProcessThread::Create()), |
| 159 channel_group_(new ChannelGroup(module_process_thread_.get())), | 158 channel_group_(new ChannelGroup(module_process_thread_.get())), |
| 160 next_channel_id_(0), | 159 next_channel_id_(0), |
| 161 config_(config), | 160 config_(config), |
| 162 network_enabled_(true), | 161 network_enabled_(true), |
| 163 transport_adapter_(nullptr), | |
| 164 receive_crit_(RWLockWrapper::CreateRWLock()), | 162 receive_crit_(RWLockWrapper::CreateRWLock()), |
| 165 send_crit_(RWLockWrapper::CreateRWLock()) { | 163 send_crit_(RWLockWrapper::CreateRWLock()) { |
| 166 DCHECK(config.send_transport != nullptr); | |
| 167 | |
| 168 DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); | 164 DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); |
| 169 DCHECK_GE(config.bitrate_config.start_bitrate_bps, | 165 DCHECK_GE(config.bitrate_config.start_bitrate_bps, |
| 170 config.bitrate_config.min_bitrate_bps); | 166 config.bitrate_config.min_bitrate_bps); |
| 171 if (config.bitrate_config.max_bitrate_bps != -1) { | 167 if (config.bitrate_config.max_bitrate_bps != -1) { |
| 172 DCHECK_GE(config.bitrate_config.max_bitrate_bps, | 168 DCHECK_GE(config.bitrate_config.max_bitrate_bps, |
| 173 config.bitrate_config.start_bitrate_bps); | 169 config.bitrate_config.start_bitrate_bps); |
| 174 } | 170 } |
| 175 | 171 |
| 176 Trace::CreateTrace(); | 172 Trace::CreateTrace(); |
| 177 module_process_thread_->Start(); | 173 module_process_thread_->Start(); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 webrtc::VideoSendStream* Call::CreateVideoSendStream( | 242 webrtc::VideoSendStream* Call::CreateVideoSendStream( |
| 247 const webrtc::VideoSendStream::Config& config, | 243 const webrtc::VideoSendStream::Config& config, |
| 248 const VideoEncoderConfig& encoder_config) { | 244 const VideoEncoderConfig& encoder_config) { |
| 249 TRACE_EVENT0("webrtc", "Call::CreateVideoSendStream"); | 245 TRACE_EVENT0("webrtc", "Call::CreateVideoSendStream"); |
| 250 LOG(LS_INFO) << "CreateVideoSendStream: " << config.ToString(); | 246 LOG(LS_INFO) << "CreateVideoSendStream: " << config.ToString(); |
| 251 DCHECK(!config.rtp.ssrcs.empty()); | 247 DCHECK(!config.rtp.ssrcs.empty()); |
| 252 | 248 |
| 253 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if | 249 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if |
| 254 // the call has already started. | 250 // the call has already started. |
| 255 VideoSendStream* send_stream = new VideoSendStream( | 251 VideoSendStream* send_stream = new VideoSendStream( |
| 256 config_.send_transport, overuse_observer_proxy_.get(), num_cpu_cores_, | 252 overuse_observer_proxy_.get(), num_cpu_cores_, |
| 257 module_process_thread_.get(), channel_group_.get(), | 253 module_process_thread_.get(), channel_group_.get(), |
| 258 rtc::AtomicOps::Increment(&next_channel_id_), config, encoder_config, | 254 rtc::AtomicOps::Increment(&next_channel_id_), config, encoder_config, |
| 259 suspended_video_send_ssrcs_); | 255 suspended_video_send_ssrcs_); |
| 260 | 256 |
| 261 // This needs to be taken before send_crit_ as both locks need to be held | 257 // This needs to be taken before send_crit_ as both locks need to be held |
| 262 // while changing network state. | 258 // while changing network state. |
| 263 rtc::CritScope lock(&network_enabled_crit_); | 259 rtc::CritScope lock(&network_enabled_crit_); |
| 264 WriteLockScoped write_lock(*send_crit_); | 260 WriteLockScoped write_lock(*send_crit_); |
| 265 for (uint32_t ssrc : config.rtp.ssrcs) { | 261 for (uint32_t ssrc : config.rtp.ssrcs) { |
| 266 DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); | 262 DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 delete send_stream_impl; | 302 delete send_stream_impl; |
| 307 } | 303 } |
| 308 | 304 |
| 309 webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream( | 305 webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream( |
| 310 const webrtc::VideoReceiveStream::Config& config) { | 306 const webrtc::VideoReceiveStream::Config& config) { |
| 311 TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream"); | 307 TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream"); |
| 312 LOG(LS_INFO) << "CreateVideoReceiveStream: " << config.ToString(); | 308 LOG(LS_INFO) << "CreateVideoReceiveStream: " << config.ToString(); |
| 313 VideoReceiveStream* receive_stream = new VideoReceiveStream( | 309 VideoReceiveStream* receive_stream = new VideoReceiveStream( |
| 314 num_cpu_cores_, channel_group_.get(), | 310 num_cpu_cores_, channel_group_.get(), |
| 315 rtc::AtomicOps::Increment(&next_channel_id_), config, | 311 rtc::AtomicOps::Increment(&next_channel_id_), config, |
| 316 config_.send_transport, config_.voice_engine); | 312 config_.voice_engine); |
| 317 | 313 |
| 318 // This needs to be taken before receive_crit_ as both locks need to be held | 314 // This needs to be taken before receive_crit_ as both locks need to be held |
| 319 // while changing network state. | 315 // while changing network state. |
| 320 rtc::CritScope lock(&network_enabled_crit_); | 316 rtc::CritScope lock(&network_enabled_crit_); |
| 321 WriteLockScoped write_lock(*receive_crit_); | 317 WriteLockScoped write_lock(*receive_crit_); |
| 322 DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == | 318 DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == |
| 323 video_receive_ssrcs_.end()); | 319 video_receive_ssrcs_.end()); |
| 324 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; | 320 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; |
| 325 // TODO(pbos): Configure different RTX payloads per receive payload. | 321 // TODO(pbos): Configure different RTX payloads per receive payload. |
| 326 VideoReceiveStream::Config::Rtp::RtxMap::const_iterator it = | 322 VideoReceiveStream::Config::Rtp::RtxMap::const_iterator it = |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 540 const uint8_t* packet, | 536 const uint8_t* packet, |
| 541 size_t length) { | 537 size_t length) { |
| 542 if (RtpHeaderParser::IsRtcp(packet, length)) | 538 if (RtpHeaderParser::IsRtcp(packet, length)) |
| 543 return DeliverRtcp(media_type, packet, length); | 539 return DeliverRtcp(media_type, packet, length); |
| 544 | 540 |
| 545 return DeliverRtp(media_type, packet, length); | 541 return DeliverRtp(media_type, packet, length); |
| 546 } | 542 } |
| 547 | 543 |
| 548 } // namespace internal | 544 } // namespace internal |
| 549 } // namespace webrtc | 545 } // namespace webrtc |
| OLD | NEW |