| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 const webrtc::Call::Config::BitrateConfig& bitrate_config) override; | 88 const webrtc::Call::Config::BitrateConfig& bitrate_config) override; |
| 89 | 89 |
| 90 void SignalChannelNetworkState(MediaType media, NetworkState state) override; | 90 void SignalChannelNetworkState(MediaType media, NetworkState state) override; |
| 91 | 91 |
| 92 void OnSentPacket(const rtc::SentPacket& sent_packet) override; | 92 void OnSentPacket(const rtc::SentPacket& sent_packet) override; |
| 93 | 93 |
| 94 // Implements BitrateObserver. | 94 // Implements BitrateObserver. |
| 95 void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, | 95 void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, |
| 96 int64_t rtt_ms) override; | 96 int64_t rtt_ms) override; |
| 97 | 97 |
| 98 bool StartEventLog(rtc::PlatformFile log_file, |
| 99 int64_t max_size_bytes) override { |
| 100 return event_log_->StartLogging(log_file, max_size_bytes); |
| 101 } |
| 102 |
| 103 void StopEventLog() override { event_log_->StopLogging(); } |
| 104 |
| 98 private: | 105 private: |
| 99 DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet, | 106 DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet, |
| 100 size_t length); | 107 size_t length); |
| 101 DeliveryStatus DeliverRtp(MediaType media_type, | 108 DeliveryStatus DeliverRtp(MediaType media_type, |
| 102 const uint8_t* packet, | 109 const uint8_t* packet, |
| 103 size_t length, | 110 size_t length, |
| 104 const PacketTime& packet_time); | 111 const PacketTime& packet_time); |
| 105 | 112 |
| 106 void ConfigureSync(const std::string& sync_group) | 113 void ConfigureSync(const std::string& sync_group) |
| 107 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); | 114 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 GUARDED_BY(receive_crit_); | 151 GUARDED_BY(receive_crit_); |
| 145 | 152 |
| 146 std::unique_ptr<RWLockWrapper> send_crit_; | 153 std::unique_ptr<RWLockWrapper> send_crit_; |
| 147 // Audio and Video send streams are owned by the client that creates them. | 154 // Audio and Video send streams are owned by the client that creates them. |
| 148 std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_); | 155 std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_); |
| 149 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_); | 156 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_); |
| 150 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_); | 157 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_); |
| 151 | 158 |
| 152 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_; | 159 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_; |
| 153 | 160 |
| 154 RtcEventLog* event_log_ = nullptr; | 161 std::unique_ptr<webrtc::RtcEventLog> event_log_; |
| 155 | 162 |
| 156 // The following members are only accessed (exclusively) from one thread and | 163 // The following members are only accessed (exclusively) from one thread and |
| 157 // from the destructor, and therefore doesn't need any explicit | 164 // from the destructor, and therefore doesn't need any explicit |
| 158 // synchronization. | 165 // synchronization. |
| 159 int64_t received_video_bytes_; | 166 int64_t received_video_bytes_; |
| 160 int64_t received_audio_bytes_; | 167 int64_t received_audio_bytes_; |
| 161 int64_t received_rtcp_bytes_; | 168 int64_t received_rtcp_bytes_; |
| 162 int64_t first_rtp_packet_received_ms_; | 169 int64_t first_rtp_packet_received_ms_; |
| 163 int64_t last_rtp_packet_received_ms_; | 170 int64_t last_rtp_packet_received_ms_; |
| 164 int64_t first_packet_sent_ms_; | 171 int64_t first_packet_sent_ms_; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 189 module_process_thread_( | 196 module_process_thread_( |
| 190 rtc::ScopedToUnique(ProcessThread::Create("ModuleProcessThread"))), | 197 rtc::ScopedToUnique(ProcessThread::Create("ModuleProcessThread"))), |
| 191 pacer_thread_(rtc::ScopedToUnique(ProcessThread::Create("PacerThread"))), | 198 pacer_thread_(rtc::ScopedToUnique(ProcessThread::Create("PacerThread"))), |
| 192 call_stats_(new CallStats(clock_)), | 199 call_stats_(new CallStats(clock_)), |
| 193 bitrate_allocator_(new BitrateAllocator()), | 200 bitrate_allocator_(new BitrateAllocator()), |
| 194 config_(config), | 201 config_(config), |
| 195 audio_network_state_(kNetworkUp), | 202 audio_network_state_(kNetworkUp), |
| 196 video_network_state_(kNetworkUp), | 203 video_network_state_(kNetworkUp), |
| 197 receive_crit_(RWLockWrapper::CreateRWLock()), | 204 receive_crit_(RWLockWrapper::CreateRWLock()), |
| 198 send_crit_(RWLockWrapper::CreateRWLock()), | 205 send_crit_(RWLockWrapper::CreateRWLock()), |
| 206 event_log_(RtcEventLog::Create()), |
| 199 received_video_bytes_(0), | 207 received_video_bytes_(0), |
| 200 received_audio_bytes_(0), | 208 received_audio_bytes_(0), |
| 201 received_rtcp_bytes_(0), | 209 received_rtcp_bytes_(0), |
| 202 first_rtp_packet_received_ms_(-1), | 210 first_rtp_packet_received_ms_(-1), |
| 203 last_rtp_packet_received_ms_(-1), | 211 last_rtp_packet_received_ms_(-1), |
| 204 first_packet_sent_ms_(-1), | 212 first_packet_sent_ms_(-1), |
| 205 estimated_send_bitrate_sum_kbits_(0), | 213 estimated_send_bitrate_sum_kbits_(0), |
| 206 pacer_bitrate_sum_kbits_(0), | 214 pacer_bitrate_sum_kbits_(0), |
| 207 num_bitrate_updates_(0), | 215 num_bitrate_updates_(0), |
| 208 remb_(clock_), | 216 remb_(clock_), |
| 209 congestion_controller_(new CongestionController(clock_, this, &remb_)) { | 217 congestion_controller_( |
| 218 new CongestionController(clock_, this, &remb_, event_log_.get())) { |
| 210 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 219 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 211 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); | 220 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); |
| 212 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, | 221 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, |
| 213 config.bitrate_config.min_bitrate_bps); | 222 config.bitrate_config.min_bitrate_bps); |
| 214 if (config.bitrate_config.max_bitrate_bps != -1) { | 223 if (config.bitrate_config.max_bitrate_bps != -1) { |
| 215 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, | 224 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, |
| 216 config.bitrate_config.start_bitrate_bps); | 225 config.bitrate_config.start_bitrate_bps); |
| 217 } | 226 } |
| 218 if (config.audio_state.get()) { | |
| 219 ScopedVoEInterface<VoECodec> voe_codec(voice_engine()); | |
| 220 event_log_ = voe_codec->GetEventLog(); | |
| 221 } | |
| 222 | 227 |
| 223 Trace::CreateTrace(); | 228 Trace::CreateTrace(); |
| 224 call_stats_->RegisterStatsObserver(congestion_controller_.get()); | 229 call_stats_->RegisterStatsObserver(congestion_controller_.get()); |
| 225 | 230 |
| 226 congestion_controller_->SetBweBitrates( | 231 congestion_controller_->SetBweBitrates( |
| 227 config_.bitrate_config.min_bitrate_bps, | 232 config_.bitrate_config.min_bitrate_bps, |
| 228 config_.bitrate_config.start_bitrate_bps, | 233 config_.bitrate_config.start_bitrate_bps, |
| 229 config_.bitrate_config.max_bitrate_bps); | 234 config_.bitrate_config.max_bitrate_bps); |
| 230 congestion_controller_->GetBitrateController()->SetEventLog(event_log_); | |
| 231 | 235 |
| 232 module_process_thread_->Start(); | 236 module_process_thread_->Start(); |
| 233 module_process_thread_->RegisterModule(call_stats_.get()); | 237 module_process_thread_->RegisterModule(call_stats_.get()); |
| 234 module_process_thread_->RegisterModule(congestion_controller_.get()); | 238 module_process_thread_->RegisterModule(congestion_controller_.get()); |
| 235 pacer_thread_->RegisterModule(congestion_controller_->pacer()); | 239 pacer_thread_->RegisterModule(congestion_controller_->pacer()); |
| 236 pacer_thread_->RegisterModule( | 240 pacer_thread_->RegisterModule( |
| 237 congestion_controller_->GetRemoteBitrateEstimator(true)); | 241 congestion_controller_->GetRemoteBitrateEstimator(true)); |
| 238 pacer_thread_->Start(); | 242 pacer_thread_->Start(); |
| 239 } | 243 } |
| 240 | 244 |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 RTC_DCHECK(num_deleted == 1); | 352 RTC_DCHECK(num_deleted == 1); |
| 349 } | 353 } |
| 350 UpdateAggregateNetworkState(); | 354 UpdateAggregateNetworkState(); |
| 351 delete audio_send_stream; | 355 delete audio_send_stream; |
| 352 } | 356 } |
| 353 | 357 |
| 354 webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream( | 358 webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream( |
| 355 const webrtc::AudioReceiveStream::Config& config) { | 359 const webrtc::AudioReceiveStream::Config& config) { |
| 356 TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream"); | 360 TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream"); |
| 357 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 361 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 358 AudioReceiveStream* receive_stream = new AudioReceiveStream( | 362 AudioReceiveStream* receive_stream = |
| 359 congestion_controller_.get(), config, config_.audio_state); | 363 new AudioReceiveStream(congestion_controller_.get(), config, |
| 364 config_.audio_state, event_log_.get()); |
| 360 { | 365 { |
| 361 WriteLockScoped write_lock(*receive_crit_); | 366 WriteLockScoped write_lock(*receive_crit_); |
| 362 RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) == | 367 RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) == |
| 363 audio_receive_ssrcs_.end()); | 368 audio_receive_ssrcs_.end()); |
| 364 audio_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; | 369 audio_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; |
| 365 ConfigureSync(config.sync_group); | 370 ConfigureSync(config.sync_group); |
| 366 } | 371 } |
| 367 receive_stream->SignalNetworkState(audio_network_state_); | 372 receive_stream->SignalNetworkState(audio_network_state_); |
| 368 UpdateAggregateNetworkState(); | 373 UpdateAggregateNetworkState(); |
| 369 return receive_stream; | 374 return receive_stream; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 { | 413 { |
| 409 WriteLockScoped write_lock(*send_crit_); | 414 WriteLockScoped write_lock(*send_crit_); |
| 410 for (uint32_t ssrc : config.rtp.ssrcs) { | 415 for (uint32_t ssrc : config.rtp.ssrcs) { |
| 411 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); | 416 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); |
| 412 video_send_ssrcs_[ssrc] = send_stream; | 417 video_send_ssrcs_[ssrc] = send_stream; |
| 413 } | 418 } |
| 414 video_send_streams_.insert(send_stream); | 419 video_send_streams_.insert(send_stream); |
| 415 } | 420 } |
| 416 send_stream->SignalNetworkState(video_network_state_); | 421 send_stream->SignalNetworkState(video_network_state_); |
| 417 UpdateAggregateNetworkState(); | 422 UpdateAggregateNetworkState(); |
| 418 if (event_log_) | 423 event_log_->LogVideoSendStreamConfig(config); |
| 419 event_log_->LogVideoSendStreamConfig(config); | |
| 420 return send_stream; | 424 return send_stream; |
| 421 } | 425 } |
| 422 | 426 |
| 423 void Call::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) { | 427 void Call::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) { |
| 424 TRACE_EVENT0("webrtc", "Call::DestroyVideoSendStream"); | 428 TRACE_EVENT0("webrtc", "Call::DestroyVideoSendStream"); |
| 425 RTC_DCHECK(send_stream != nullptr); | 429 RTC_DCHECK(send_stream != nullptr); |
| 426 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 430 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 427 | 431 |
| 428 send_stream->Stop(); | 432 send_stream->Stop(); |
| 429 | 433 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 WriteLockScoped write_lock(*receive_crit_); | 470 WriteLockScoped write_lock(*receive_crit_); |
| 467 RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == | 471 RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == |
| 468 video_receive_ssrcs_.end()); | 472 video_receive_ssrcs_.end()); |
| 469 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; | 473 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; |
| 470 // TODO(pbos): Configure different RTX payloads per receive payload. | 474 // TODO(pbos): Configure different RTX payloads per receive payload. |
| 471 VideoReceiveStream::Config::Rtp::RtxMap::const_iterator it = | 475 VideoReceiveStream::Config::Rtp::RtxMap::const_iterator it = |
| 472 config.rtp.rtx.begin(); | 476 config.rtp.rtx.begin(); |
| 473 if (it != config.rtp.rtx.end()) | 477 if (it != config.rtp.rtx.end()) |
| 474 video_receive_ssrcs_[it->second.ssrc] = receive_stream; | 478 video_receive_ssrcs_[it->second.ssrc] = receive_stream; |
| 475 video_receive_streams_.insert(receive_stream); | 479 video_receive_streams_.insert(receive_stream); |
| 476 | |
| 477 ConfigureSync(config.sync_group); | 480 ConfigureSync(config.sync_group); |
| 478 } | 481 } |
| 479 receive_stream->SignalNetworkState(video_network_state_); | 482 receive_stream->SignalNetworkState(video_network_state_); |
| 480 UpdateAggregateNetworkState(); | 483 UpdateAggregateNetworkState(); |
| 481 if (event_log_) | 484 event_log_->LogVideoReceiveStreamConfig(config); |
| 482 event_log_->LogVideoReceiveStreamConfig(config); | |
| 483 return receive_stream; | 485 return receive_stream; |
| 484 } | 486 } |
| 485 | 487 |
| 486 void Call::DestroyVideoReceiveStream( | 488 void Call::DestroyVideoReceiveStream( |
| 487 webrtc::VideoReceiveStream* receive_stream) { | 489 webrtc::VideoReceiveStream* receive_stream) { |
| 488 TRACE_EVENT0("webrtc", "Call::DestroyVideoReceiveStream"); | 490 TRACE_EVENT0("webrtc", "Call::DestroyVideoReceiveStream"); |
| 489 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 491 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 490 RTC_DCHECK(receive_stream != nullptr); | 492 RTC_DCHECK(receive_stream != nullptr); |
| 491 VideoReceiveStream* receive_stream_impl = nullptr; | 493 VideoReceiveStream* receive_stream_impl = nullptr; |
| 492 { | 494 { |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 // Do NOT broadcast! Also make sure it's a valid packet. | 721 // Do NOT broadcast! Also make sure it's a valid packet. |
| 720 // Return DELIVERY_UNKNOWN_SSRC if it can be determined that | 722 // Return DELIVERY_UNKNOWN_SSRC if it can be determined that |
| 721 // there's no receiver of the packet. | 723 // there's no receiver of the packet. |
| 722 received_rtcp_bytes_ += length; | 724 received_rtcp_bytes_ += length; |
| 723 bool rtcp_delivered = false; | 725 bool rtcp_delivered = false; |
| 724 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { | 726 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { |
| 725 ReadLockScoped read_lock(*receive_crit_); | 727 ReadLockScoped read_lock(*receive_crit_); |
| 726 for (VideoReceiveStream* stream : video_receive_streams_) { | 728 for (VideoReceiveStream* stream : video_receive_streams_) { |
| 727 if (stream->DeliverRtcp(packet, length)) { | 729 if (stream->DeliverRtcp(packet, length)) { |
| 728 rtcp_delivered = true; | 730 rtcp_delivered = true; |
| 729 if (event_log_) | 731 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, length); |
| 730 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, | |
| 731 length); | |
| 732 } | 732 } |
| 733 } | 733 } |
| 734 } | 734 } |
| 735 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { | 735 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { |
| 736 ReadLockScoped read_lock(*send_crit_); | 736 ReadLockScoped read_lock(*send_crit_); |
| 737 for (VideoSendStream* stream : video_send_streams_) { | 737 for (VideoSendStream* stream : video_send_streams_) { |
| 738 if (stream->DeliverRtcp(packet, length)) { | 738 if (stream->DeliverRtcp(packet, length)) { |
| 739 rtcp_delivered = true; | 739 rtcp_delivered = true; |
| 740 if (event_log_) | 740 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, length); |
| 741 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, | |
| 742 length); | |
| 743 } | 741 } |
| 744 } | 742 } |
| 745 } | 743 } |
| 746 return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR; | 744 return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR; |
| 747 } | 745 } |
| 748 | 746 |
| 749 PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, | 747 PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, |
| 750 const uint8_t* packet, | 748 const uint8_t* packet, |
| 751 size_t length, | 749 size_t length, |
| 752 const PacketTime& packet_time) { | 750 const PacketTime& packet_time) { |
| 753 TRACE_EVENT0("webrtc", "Call::DeliverRtp"); | 751 TRACE_EVENT0("webrtc", "Call::DeliverRtp"); |
| 754 // Minimum RTP header size. | 752 // Minimum RTP header size. |
| 755 if (length < 12) | 753 if (length < 12) |
| 756 return DELIVERY_PACKET_ERROR; | 754 return DELIVERY_PACKET_ERROR; |
| 757 | 755 |
| 758 last_rtp_packet_received_ms_ = clock_->TimeInMilliseconds(); | 756 last_rtp_packet_received_ms_ = clock_->TimeInMilliseconds(); |
| 759 if (first_rtp_packet_received_ms_ == -1) | 757 if (first_rtp_packet_received_ms_ == -1) |
| 760 first_rtp_packet_received_ms_ = last_rtp_packet_received_ms_; | 758 first_rtp_packet_received_ms_ = last_rtp_packet_received_ms_; |
| 761 | 759 |
| 762 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]); | 760 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]); |
| 763 ReadLockScoped read_lock(*receive_crit_); | 761 ReadLockScoped read_lock(*receive_crit_); |
| 764 if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) { | 762 if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) { |
| 765 auto it = audio_receive_ssrcs_.find(ssrc); | 763 auto it = audio_receive_ssrcs_.find(ssrc); |
| 766 if (it != audio_receive_ssrcs_.end()) { | 764 if (it != audio_receive_ssrcs_.end()) { |
| 767 received_audio_bytes_ += length; | 765 received_audio_bytes_ += length; |
| 768 auto status = it->second->DeliverRtp(packet, length, packet_time) | 766 auto status = it->second->DeliverRtp(packet, length, packet_time) |
| 769 ? DELIVERY_OK | 767 ? DELIVERY_OK |
| 770 : DELIVERY_PACKET_ERROR; | 768 : DELIVERY_PACKET_ERROR; |
| 771 if (status == DELIVERY_OK && event_log_) | 769 if (status == DELIVERY_OK) |
| 772 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length); | 770 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length); |
| 773 return status; | 771 return status; |
| 774 } | 772 } |
| 775 } | 773 } |
| 776 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { | 774 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { |
| 777 auto it = video_receive_ssrcs_.find(ssrc); | 775 auto it = video_receive_ssrcs_.find(ssrc); |
| 778 if (it != video_receive_ssrcs_.end()) { | 776 if (it != video_receive_ssrcs_.end()) { |
| 779 received_video_bytes_ += length; | 777 received_video_bytes_ += length; |
| 780 auto status = it->second->DeliverRtp(packet, length, packet_time) | 778 auto status = it->second->DeliverRtp(packet, length, packet_time) |
| 781 ? DELIVERY_OK | 779 ? DELIVERY_OK |
| 782 : DELIVERY_PACKET_ERROR; | 780 : DELIVERY_PACKET_ERROR; |
| 783 if (status == DELIVERY_OK && event_log_) | 781 if (status == DELIVERY_OK) |
| 784 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length); | 782 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length); |
| 785 return status; | 783 return status; |
| 786 } | 784 } |
| 787 } | 785 } |
| 788 return DELIVERY_UNKNOWN_SSRC; | 786 return DELIVERY_UNKNOWN_SSRC; |
| 789 } | 787 } |
| 790 | 788 |
| 791 PacketReceiver::DeliveryStatus Call::DeliverPacket( | 789 PacketReceiver::DeliveryStatus Call::DeliverPacket( |
| 792 MediaType media_type, | 790 MediaType media_type, |
| 793 const uint8_t* packet, | 791 const uint8_t* packet, |
| 794 size_t length, | 792 size_t length, |
| 795 const PacketTime& packet_time) { | 793 const PacketTime& packet_time) { |
| 796 // TODO(solenberg): Tests call this function on a network thread, libjingle | 794 // TODO(solenberg): Tests call this function on a network thread, libjingle |
| 797 // calls on the worker thread. We should move towards always using a network | 795 // calls on the worker thread. We should move towards always using a network |
| 798 // thread. Then this check can be enabled. | 796 // thread. Then this check can be enabled. |
| 799 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); | 797 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); |
| 800 if (RtpHeaderParser::IsRtcp(packet, length)) | 798 if (RtpHeaderParser::IsRtcp(packet, length)) |
| 801 return DeliverRtcp(media_type, packet, length); | 799 return DeliverRtcp(media_type, packet, length); |
| 802 | 800 |
| 803 return DeliverRtp(media_type, packet, length, packet_time); | 801 return DeliverRtp(media_type, packet, length, packet_time); |
| 804 } | 802 } |
| 805 | 803 |
| 806 } // namespace internal | 804 } // namespace internal |
| 807 } // namespace webrtc | 805 } // namespace webrtc |
| OLD | NEW |