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 |