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

Side by Side Diff: webrtc/video/call.cc

Issue 1267683002: Hooked up RtcEventLog. It lives in Voice Engine and pointers are propagated to ACM and Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Initial version Created 5 years, 4 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
OLDNEW
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 14 matching lines...) Expand all
25 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" 25 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
26 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 26 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
27 #include "webrtc/modules/video_render/include/video_render.h" 27 #include "webrtc/modules/video_render/include/video_render.h"
28 #include "webrtc/system_wrappers/interface/cpu_info.h" 28 #include "webrtc/system_wrappers/interface/cpu_info.h"
29 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 29 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
30 #include "webrtc/system_wrappers/interface/logging.h" 30 #include "webrtc/system_wrappers/interface/logging.h"
31 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h" 31 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
32 #include "webrtc/system_wrappers/interface/trace.h" 32 #include "webrtc/system_wrappers/interface/trace.h"
33 #include "webrtc/system_wrappers/interface/trace_event.h" 33 #include "webrtc/system_wrappers/interface/trace_event.h"
34 #include "webrtc/video/audio_receive_stream.h" 34 #include "webrtc/video/audio_receive_stream.h"
35 #include "webrtc/video/rtc_event_log.h"
35 #include "webrtc/video/video_receive_stream.h" 36 #include "webrtc/video/video_receive_stream.h"
36 #include "webrtc/video/video_send_stream.h" 37 #include "webrtc/video/video_send_stream.h"
38 #include "webrtc/voice_engine/include/voe_base.h"
37 39
38 namespace webrtc { 40 namespace webrtc {
39 41
40 const int Call::Config::kDefaultStartBitrateBps = 300000; 42 const int Call::Config::kDefaultStartBitrateBps = 300000;
41 43
42 namespace internal { 44 namespace internal {
43 45
44 class CpuOveruseObserverProxy : public webrtc::CpuOveruseObserver { 46 class CpuOveruseObserverProxy : public webrtc::CpuOveruseObserver {
45 public: 47 public:
46 explicit CpuOveruseObserverProxy(LoadObserver* overuse_callback) 48 explicit CpuOveruseObserverProxy(LoadObserver* overuse_callback)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 GUARDED_BY(receive_crit_); 138 GUARDED_BY(receive_crit_);
137 139
138 rtc::scoped_ptr<RWLockWrapper> send_crit_; 140 rtc::scoped_ptr<RWLockWrapper> send_crit_;
139 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_); 141 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_);
140 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_); 142 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_);
141 143
142 rtc::scoped_ptr<CpuOveruseObserverProxy> overuse_observer_proxy_; 144 rtc::scoped_ptr<CpuOveruseObserverProxy> overuse_observer_proxy_;
143 145
144 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_; 146 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_;
145 147
148 RtcEventLog* event_log_;
149
146 DISALLOW_COPY_AND_ASSIGN(Call); 150 DISALLOW_COPY_AND_ASSIGN(Call);
147 }; 151 };
148 } // namespace internal 152 } // namespace internal
149 153
150 Call* Call::Create(const Call::Config& config) { 154 Call* Call::Create(const Call::Config& config) {
151 return new internal::Call(config); 155 return new internal::Call(config);
152 } 156 }
153 157
154 namespace internal { 158 namespace internal {
155 159
156 Call::Call(const Call::Config& config) 160 Call::Call(const Call::Config& config)
157 : num_cpu_cores_(CpuInfo::DetectNumberOfCores()), 161 : num_cpu_cores_(CpuInfo::DetectNumberOfCores()),
158 module_process_thread_(ProcessThread::Create()), 162 module_process_thread_(ProcessThread::Create()),
159 channel_group_(new ChannelGroup(module_process_thread_.get())), 163 channel_group_(new ChannelGroup(module_process_thread_.get())),
160 next_channel_id_(0), 164 next_channel_id_(0),
161 config_(config), 165 config_(config),
162 network_enabled_(true), 166 network_enabled_(true),
163 transport_adapter_(nullptr), 167 transport_adapter_(nullptr),
164 receive_crit_(RWLockWrapper::CreateRWLock()), 168 receive_crit_(RWLockWrapper::CreateRWLock()),
165 send_crit_(RWLockWrapper::CreateRWLock()) { 169 send_crit_(RWLockWrapper::CreateRWLock()) {
166 DCHECK(config.send_transport != nullptr); 170 DCHECK(config.send_transport != nullptr);
167 171
168 DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); 172 DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
169 DCHECK_GE(config.bitrate_config.start_bitrate_bps, 173 DCHECK_GE(config.bitrate_config.start_bitrate_bps,
170 config.bitrate_config.min_bitrate_bps); 174 config.bitrate_config.min_bitrate_bps);
171 if (config.bitrate_config.max_bitrate_bps != -1) { 175 if (config.bitrate_config.max_bitrate_bps != -1) {
172 DCHECK_GE(config.bitrate_config.max_bitrate_bps, 176 DCHECK_GE(config.bitrate_config.max_bitrate_bps,
173 config.bitrate_config.start_bitrate_bps); 177 config.bitrate_config.start_bitrate_bps);
174 } 178 }
179 if (config.voice_engine) {
180 VoEBase* voe_base = VoEBase::GetInterface(config.voice_engine);
181 event_log_ = voe_base->GetEventLog();
182 voe_base->Release();
terelius 2015/07/30 12:34:43 I don't understand what 'sub-API' means in the doc
ivoc 2015/07/30 15:10:23 Good point on null pointer, I added a check. Abo
183 }
175 184
176 Trace::CreateTrace(); 185 Trace::CreateTrace();
177 module_process_thread_->Start(); 186 module_process_thread_->Start();
178 187
179 if (config.overuse_callback) { 188 if (config.overuse_callback) {
180 overuse_observer_proxy_.reset( 189 overuse_observer_proxy_.reset(
181 new CpuOveruseObserverProxy(config.overuse_callback)); 190 new CpuOveruseObserverProxy(config.overuse_callback));
182 } 191 }
183 192
184 SetBitrateControllerConfig(config_.bitrate_config); 193 SetBitrateControllerConfig(config_.bitrate_config);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 // This needs to be taken before send_crit_ as both locks need to be held 270 // This needs to be taken before send_crit_ as both locks need to be held
262 // while changing network state. 271 // while changing network state.
263 rtc::CritScope lock(&network_enabled_crit_); 272 rtc::CritScope lock(&network_enabled_crit_);
264 WriteLockScoped write_lock(*send_crit_); 273 WriteLockScoped write_lock(*send_crit_);
265 for (uint32_t ssrc : config.rtp.ssrcs) { 274 for (uint32_t ssrc : config.rtp.ssrcs) {
266 DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); 275 DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end());
267 video_send_ssrcs_[ssrc] = send_stream; 276 video_send_ssrcs_[ssrc] = send_stream;
268 } 277 }
269 video_send_streams_.insert(send_stream); 278 video_send_streams_.insert(send_stream);
270 279
280 if (event_log_)
281 event_log_->LogVideoSendStreamConfig(config);
282
271 if (!network_enabled_) 283 if (!network_enabled_)
272 send_stream->SignalNetworkState(kNetworkDown); 284 send_stream->SignalNetworkState(kNetworkDown);
273 return send_stream; 285 return send_stream;
274 } 286 }
275 287
276 void Call::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) { 288 void Call::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) {
277 TRACE_EVENT0("webrtc", "Call::DestroyVideoSendStream"); 289 TRACE_EVENT0("webrtc", "Call::DestroyVideoSendStream");
278 DCHECK(send_stream != nullptr); 290 DCHECK(send_stream != nullptr);
279 291
280 send_stream->Stop(); 292 send_stream->Stop();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 config.rtp.rtx.begin(); 339 config.rtp.rtx.begin();
328 if (it != config.rtp.rtx.end()) 340 if (it != config.rtp.rtx.end())
329 video_receive_ssrcs_[it->second.ssrc] = receive_stream; 341 video_receive_ssrcs_[it->second.ssrc] = receive_stream;
330 video_receive_streams_.insert(receive_stream); 342 video_receive_streams_.insert(receive_stream);
331 343
332 ConfigureSync(config.sync_group); 344 ConfigureSync(config.sync_group);
333 345
334 if (!network_enabled_) 346 if (!network_enabled_)
335 receive_stream->SignalNetworkState(kNetworkDown); 347 receive_stream->SignalNetworkState(kNetworkDown);
336 348
349 if (event_log_)
350 event_log_->LogVideoReceiveStreamConfig(config);
351
337 return receive_stream; 352 return receive_stream;
338 } 353 }
339 354
340 void Call::DestroyVideoReceiveStream( 355 void Call::DestroyVideoReceiveStream(
341 webrtc::VideoReceiveStream* receive_stream) { 356 webrtc::VideoReceiveStream* receive_stream) {
342 TRACE_EVENT0("webrtc", "Call::DestroyVideoReceiveStream"); 357 TRACE_EVENT0("webrtc", "Call::DestroyVideoReceiveStream");
343 DCHECK(receive_stream != nullptr); 358 DCHECK(receive_stream != nullptr);
344 VideoReceiveStream* receive_stream_impl = nullptr; 359 VideoReceiveStream* receive_stream_impl = nullptr;
345 { 360 {
346 WriteLockScoped write_lock(*receive_crit_); 361 WriteLockScoped write_lock(*receive_crit_);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 const uint8_t* packet, 503 const uint8_t* packet,
489 size_t length) { 504 size_t length) {
490 // TODO(pbos): Figure out what channel needs it actually. 505 // TODO(pbos): Figure out what channel needs it actually.
491 // Do NOT broadcast! Also make sure it's a valid packet. 506 // Do NOT broadcast! Also make sure it's a valid packet.
492 // Return DELIVERY_UNKNOWN_SSRC if it can be determined that 507 // Return DELIVERY_UNKNOWN_SSRC if it can be determined that
493 // there's no receiver of the packet. 508 // there's no receiver of the packet.
494 bool rtcp_delivered = false; 509 bool rtcp_delivered = false;
495 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { 510 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
496 ReadLockScoped read_lock(*receive_crit_); 511 ReadLockScoped read_lock(*receive_crit_);
497 for (VideoReceiveStream* stream : video_receive_streams_) { 512 for (VideoReceiveStream* stream : video_receive_streams_) {
498 if (stream->DeliverRtcp(packet, length)) 513 if (stream->DeliverRtcp(packet, length)) {
499 rtcp_delivered = true; 514 rtcp_delivered = true;
515 if (event_log_)
516 event_log_->LogRtcpPacket(true, media_type, packet, length);
517 }
500 } 518 }
501 } 519 }
502 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { 520 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
503 ReadLockScoped read_lock(*send_crit_); 521 ReadLockScoped read_lock(*send_crit_);
504 for (VideoSendStream* stream : video_send_streams_) { 522 for (VideoSendStream* stream : video_send_streams_) {
505 if (stream->DeliverRtcp(packet, length)) 523 if (stream->DeliverRtcp(packet, length)) {
506 rtcp_delivered = true; 524 rtcp_delivered = true;
525 if (event_log_)
526 event_log_->LogRtcpPacket(false, media_type, packet, length);
527 }
507 } 528 }
508 } 529 }
509 return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR; 530 return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR;
510 } 531 }
511 532
512 PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, 533 PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type,
513 const uint8_t* packet, 534 const uint8_t* packet,
514 size_t length) { 535 size_t length) {
515 // Minimum RTP header size. 536 // Minimum RTP header size.
516 if (length < 12) 537 if (length < 12)
517 return DELIVERY_PACKET_ERROR; 538 return DELIVERY_PACKET_ERROR;
518 539
519 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]); 540 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]);
520 541
542 // TODO(ivoc): This should be updated once the splitting of the header is done
543 // in the RtcEventLog.
544 if (event_log_)
545 event_log_->LogRtpHeader(true, media_type, packet, 20, length);
521 ReadLockScoped read_lock(*receive_crit_); 546 ReadLockScoped read_lock(*receive_crit_);
522 if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) { 547 if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) {
523 auto it = audio_receive_ssrcs_.find(ssrc); 548 auto it = audio_receive_ssrcs_.find(ssrc);
524 if (it != audio_receive_ssrcs_.end()) { 549 if (it != audio_receive_ssrcs_.end()) {
525 return it->second->DeliverRtp(packet, length) ? DELIVERY_OK 550 return it->second->DeliverRtp(packet, length) ? DELIVERY_OK
526 : DELIVERY_PACKET_ERROR; 551 : DELIVERY_PACKET_ERROR;
527 } 552 }
528 } 553 }
529 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { 554 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
530 auto it = video_receive_ssrcs_.find(ssrc); 555 auto it = video_receive_ssrcs_.find(ssrc);
531 if (it != video_receive_ssrcs_.end()) { 556 if (it != video_receive_ssrcs_.end()) {
532 return it->second->DeliverRtp(packet, length) ? DELIVERY_OK 557 return it->second->DeliverRtp(packet, length) ? DELIVERY_OK
533 : DELIVERY_PACKET_ERROR; 558 : DELIVERY_PACKET_ERROR;
534 } 559 }
535 } 560 }
536 return DELIVERY_UNKNOWN_SSRC; 561 return DELIVERY_UNKNOWN_SSRC;
537 } 562 }
538 563
539 PacketReceiver::DeliveryStatus Call::DeliverPacket(MediaType media_type, 564 PacketReceiver::DeliveryStatus Call::DeliverPacket(MediaType media_type,
540 const uint8_t* packet, 565 const uint8_t* packet,
541 size_t length) { 566 size_t length) {
542 if (RtpHeaderParser::IsRtcp(packet, length)) 567 if (RtpHeaderParser::IsRtcp(packet, length))
543 return DeliverRtcp(media_type, packet, length); 568 return DeliverRtcp(media_type, packet, length);
544 569
545 return DeliverRtp(media_type, packet, length); 570 return DeliverRtp(media_type, packet, length);
546 } 571 }
547 572
548 } // namespace internal 573 } // namespace internal
549 } // namespace webrtc 574 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/main/interface/audio_coding_module.h ('k') | webrtc/voice_engine/channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698