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 |