| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 ChannelGroup::~ChannelGroup() { | 184 ChannelGroup::~ChannelGroup() { |
| 185 pacer_thread_->Stop(); | 185 pacer_thread_->Stop(); |
| 186 pacer_thread_->DeRegisterModule(pacer_.get()); | 186 pacer_thread_->DeRegisterModule(pacer_.get()); |
| 187 process_thread_->DeRegisterModule(bitrate_controller_.get()); | 187 process_thread_->DeRegisterModule(bitrate_controller_.get()); |
| 188 process_thread_->DeRegisterModule(call_stats_.get()); | 188 process_thread_->DeRegisterModule(call_stats_.get()); |
| 189 process_thread_->DeRegisterModule(remote_bitrate_estimator_.get()); | 189 process_thread_->DeRegisterModule(remote_bitrate_estimator_.get()); |
| 190 process_thread_->DeRegisterModule(remote_estimator_proxy_.get()); | 190 process_thread_->DeRegisterModule(remote_estimator_proxy_.get()); |
| 191 call_stats_->DeregisterStatsObserver(remote_bitrate_estimator_.get()); | 191 call_stats_->DeregisterStatsObserver(remote_bitrate_estimator_.get()); |
| 192 if (transport_feedback_adapter_.get()) | 192 if (transport_feedback_adapter_.get()) |
| 193 call_stats_->DeregisterStatsObserver(transport_feedback_adapter_.get()); | 193 call_stats_->DeregisterStatsObserver(transport_feedback_adapter_.get()); |
| 194 RTC_DCHECK(channel_map_.empty()); | |
| 195 RTC_DCHECK(!remb_->InUse()); | 194 RTC_DCHECK(!remb_->InUse()); |
| 196 RTC_DCHECK(encoders_.empty()); | 195 RTC_DCHECK(encoders_.empty()); |
| 197 } | 196 } |
| 198 | 197 |
| 199 bool ChannelGroup::CreateReceiveChannel( | |
| 200 int channel_id, | |
| 201 Transport* transport, | |
| 202 int number_of_cores, | |
| 203 const VideoReceiveStream::Config& config) { | |
| 204 bool send_side_bwe = false; | |
| 205 for (const RtpExtension& extension : config.rtp.extensions) { | |
| 206 if (extension.name == RtpExtension::kTransportSequenceNumber) { | |
| 207 send_side_bwe = true; | |
| 208 break; | |
| 209 } | |
| 210 } | |
| 211 | |
| 212 RemoteBitrateEstimator* bitrate_estimator; | |
| 213 if (send_side_bwe) { | |
| 214 bitrate_estimator = remote_estimator_proxy_.get(); | |
| 215 } else { | |
| 216 bitrate_estimator = remote_bitrate_estimator_.get(); | |
| 217 } | |
| 218 return CreateChannel(channel_id, transport, number_of_cores, 1, false, | |
| 219 bitrate_estimator, nullptr); | |
| 220 } | |
| 221 | |
| 222 bool ChannelGroup::CreateChannel(int channel_id, | |
| 223 Transport* transport, | |
| 224 int number_of_cores, | |
| 225 size_t max_rtp_streams, | |
| 226 bool sender, | |
| 227 RemoteBitrateEstimator* bitrate_estimator, | |
| 228 TransportFeedbackObserver* feedback_observer) { | |
| 229 rtc::scoped_ptr<ViEChannel> channel(new ViEChannel( | |
| 230 number_of_cores, transport, process_thread_, | |
| 231 encoder_state_feedback_->GetRtcpIntraFrameObserver(), | |
| 232 bitrate_controller_->CreateRtcpBandwidthObserver(), feedback_observer, | |
| 233 bitrate_estimator, call_stats_->rtcp_rtt_stats(), pacer_.get(), | |
| 234 packet_router_.get(), max_rtp_streams, sender)); | |
| 235 if (channel->Init() != 0) { | |
| 236 return false; | |
| 237 } | |
| 238 | |
| 239 // Register the channel to receive stats updates. | |
| 240 call_stats_->RegisterStatsObserver(channel->GetStatsObserver()); | |
| 241 | |
| 242 // Store the channel and add it to the channel group. | |
| 243 channel_map_[channel_id] = channel.release(); | |
| 244 return true; | |
| 245 } | |
| 246 | |
| 247 void ChannelGroup::DeleteChannel(int channel_id) { | |
| 248 ViEChannel* vie_channel = PopChannel(channel_id); | |
| 249 | |
| 250 call_stats_->DeregisterStatsObserver(vie_channel->GetStatsObserver()); | |
| 251 SetChannelRembStatus(false, false, vie_channel); | |
| 252 | |
| 253 unsigned int remote_ssrc = vie_channel->GetRemoteSSRC(); | |
| 254 channel_map_.erase(channel_id); | |
| 255 remote_bitrate_estimator_->RemoveStream(remote_ssrc); | |
| 256 | |
| 257 delete vie_channel; | |
| 258 | |
| 259 LOG(LS_VERBOSE) << "Channel deleted " << channel_id; | |
| 260 } | |
| 261 | |
| 262 ViEChannel* ChannelGroup::GetChannel(int channel_id) const { | |
| 263 ChannelMap::const_iterator it = channel_map_.find(channel_id); | |
| 264 if (it == channel_map_.end()) { | |
| 265 LOG(LS_ERROR) << "Channel doesn't exist " << channel_id; | |
| 266 return NULL; | |
| 267 } | |
| 268 return it->second; | |
| 269 } | |
| 270 | |
| 271 void ChannelGroup::AddEncoder(const std::vector<uint32_t>& ssrcs, | 198 void ChannelGroup::AddEncoder(const std::vector<uint32_t>& ssrcs, |
| 272 ViEEncoder* encoder) { | 199 ViEEncoder* encoder) { |
| 273 encoder_state_feedback_->AddEncoder(ssrcs, encoder); | 200 encoder_state_feedback_->AddEncoder(ssrcs, encoder); |
| 274 rtc::CritScope lock(&encoder_crit_); | 201 rtc::CritScope lock(&encoder_crit_); |
| 275 encoders_.push_back(encoder); | 202 encoders_.push_back(encoder); |
| 276 } | 203 } |
| 277 | 204 |
| 278 void ChannelGroup::RemoveEncoder(ViEEncoder* encoder) { | 205 void ChannelGroup::RemoveEncoder(ViEEncoder* encoder) { |
| 279 encoder_state_feedback_->RemoveEncoder(encoder); | 206 encoder_state_feedback_->RemoveEncoder(encoder); |
| 280 rtc::CritScope lock(&encoder_crit_); | 207 rtc::CritScope lock(&encoder_crit_); |
| 281 for (auto it = encoders_.begin(); it != encoders_.end(); ++it) { | 208 for (auto it = encoders_.begin(); it != encoders_.end(); ++it) { |
| 282 if (*it == encoder) { | 209 if (*it == encoder) { |
| 283 encoders_.erase(it); | 210 encoders_.erase(it); |
| 284 return; | 211 return; |
| 285 } | 212 } |
| 286 } | 213 } |
| 287 } | 214 } |
| 288 | 215 |
| 289 ViEChannel* ChannelGroup::PopChannel(int channel_id) { | |
| 290 ChannelMap::iterator c_it = channel_map_.find(channel_id); | |
| 291 RTC_DCHECK(c_it != channel_map_.end()); | |
| 292 ViEChannel* channel = c_it->second; | |
| 293 channel_map_.erase(c_it); | |
| 294 | |
| 295 return channel; | |
| 296 } | |
| 297 | |
| 298 void ChannelGroup::SetSyncInterface(VoEVideoSync* sync_interface) { | |
| 299 for (auto channel : channel_map_) | |
| 300 channel.second->SetVoiceChannel(-1, sync_interface); | |
| 301 } | |
| 302 | |
| 303 void ChannelGroup::SetBweBitrates(int min_bitrate_bps, | 216 void ChannelGroup::SetBweBitrates(int min_bitrate_bps, |
| 304 int start_bitrate_bps, | 217 int start_bitrate_bps, |
| 305 int max_bitrate_bps) { | 218 int max_bitrate_bps) { |
| 306 if (start_bitrate_bps > 0) | 219 if (start_bitrate_bps > 0) |
| 307 bitrate_controller_->SetStartBitrate(start_bitrate_bps); | 220 bitrate_controller_->SetStartBitrate(start_bitrate_bps); |
| 308 bitrate_controller_->SetMinMaxBitrate(min_bitrate_bps, max_bitrate_bps); | 221 bitrate_controller_->SetMinMaxBitrate(min_bitrate_bps, max_bitrate_bps); |
| 309 if (remote_bitrate_estimator_.get()) | 222 if (remote_bitrate_estimator_.get()) |
| 310 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); | 223 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); |
| 311 if (transport_feedback_adapter_.get()) | 224 if (transport_feedback_adapter_.get()) |
| 312 transport_feedback_adapter_->GetBitrateEstimator()->SetMinBitrate( | 225 transport_feedback_adapter_->GetBitrateEstimator()->SetMinBitrate( |
| 313 min_bitrate_bps); | 226 min_bitrate_bps); |
| 314 min_bitrate_bps_ = min_bitrate_bps; | 227 min_bitrate_bps_ = min_bitrate_bps; |
| 315 } | 228 } |
| 316 | 229 |
| 317 BitrateController* ChannelGroup::GetBitrateController() const { | 230 BitrateController* ChannelGroup::GetBitrateController() const { |
| 318 return bitrate_controller_.get(); | 231 return bitrate_controller_.get(); |
| 319 } | 232 } |
| 320 | 233 |
| 321 RemoteBitrateEstimator* ChannelGroup::GetRemoteBitrateEstimator() const { | 234 RemoteBitrateEstimator* ChannelGroup::GetRemoteBitrateEstimator( |
| 322 return remote_bitrate_estimator_.get(); | 235 bool send_side_bwe) const { |
| 236 |
| 237 if (send_side_bwe) |
| 238 return remote_estimator_proxy_.get(); |
| 239 else |
| 240 return remote_bitrate_estimator_.get(); |
| 323 } | 241 } |
| 324 | 242 |
| 325 CallStats* ChannelGroup::GetCallStats() const { | 243 CallStats* ChannelGroup::GetCallStats() const { |
| 326 return call_stats_.get(); | 244 return call_stats_.get(); |
| 327 } | 245 } |
| 328 | 246 |
| 329 TransportFeedbackObserver* ChannelGroup::GetTransportFeedbackObserver() { | 247 TransportFeedbackObserver* ChannelGroup::GetTransportFeedbackObserver() { |
| 330 if (transport_feedback_adapter_.get() == nullptr) { | 248 if (transport_feedback_adapter_.get() == nullptr) { |
| 331 transport_feedback_adapter_.reset(new TransportFeedbackAdapter( | 249 transport_feedback_adapter_.reset(new TransportFeedbackAdapter( |
| 332 bitrate_controller_->CreateRtcpBandwidthObserver(), | 250 bitrate_controller_->CreateRtcpBandwidthObserver(), |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 pad_up_to_bitrate_bps / 1000); | 311 pad_up_to_bitrate_bps / 1000); |
| 394 } | 312 } |
| 395 | 313 |
| 396 void ChannelGroup::OnSentPacket(const rtc::SentPacket& sent_packet) { | 314 void ChannelGroup::OnSentPacket(const rtc::SentPacket& sent_packet) { |
| 397 if (transport_feedback_adapter_) { | 315 if (transport_feedback_adapter_) { |
| 398 transport_feedback_adapter_->UpdateSendTime(sent_packet.packet_id, | 316 transport_feedback_adapter_->UpdateSendTime(sent_packet.packet_id, |
| 399 sent_packet.send_time_ms); | 317 sent_packet.send_time_ms); |
| 400 } | 318 } |
| 401 } | 319 } |
| 402 } // namespace webrtc | 320 } // namespace webrtc |
| OLD | NEW |