Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: webrtc/video_engine/vie_channel_group.cc

Issue 1411723002: Move ownership of receive ViEChannel to VideoReceiveStream. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: pbos review Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/video_engine/vie_channel_group.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « webrtc/video_engine/vie_channel_group.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698