| 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 |
| 11 #include <string.h> | 11 #include <string.h> |
| 12 | 12 |
| 13 #include <map> | 13 #include <map> |
| 14 #include <memory> |
| 14 #include <vector> | 15 #include <vector> |
| 15 | 16 |
| 16 #include "webrtc/audio/audio_receive_stream.h" | 17 #include "webrtc/audio/audio_receive_stream.h" |
| 17 #include "webrtc/audio/audio_send_stream.h" | 18 #include "webrtc/audio/audio_send_stream.h" |
| 18 #include "webrtc/audio/audio_state.h" | 19 #include "webrtc/audio/audio_state.h" |
| 19 #include "webrtc/audio/scoped_voe_interface.h" | 20 #include "webrtc/audio/scoped_voe_interface.h" |
| 20 #include "webrtc/base/checks.h" | 21 #include "webrtc/base/checks.h" |
| 21 #include "webrtc/base/logging.h" | 22 #include "webrtc/base/logging.h" |
| 22 #include "webrtc/base/scoped_ptr.h" | |
| 23 #include "webrtc/base/thread_annotations.h" | 23 #include "webrtc/base/thread_annotations.h" |
| 24 #include "webrtc/base/thread_checker.h" | 24 #include "webrtc/base/thread_checker.h" |
| 25 #include "webrtc/base/trace_event.h" | 25 #include "webrtc/base/trace_event.h" |
| 26 #include "webrtc/call.h" | 26 #include "webrtc/call.h" |
| 27 #include "webrtc/call/bitrate_allocator.h" | 27 #include "webrtc/call/bitrate_allocator.h" |
| 28 #include "webrtc/call/rtc_event_log.h" | 28 #include "webrtc/call/rtc_event_log.h" |
| 29 #include "webrtc/config.h" | 29 #include "webrtc/config.h" |
| 30 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" | 30 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
| 31 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" | 31 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" |
| 32 #include "webrtc/modules/pacing/paced_sender.h" | 32 #include "webrtc/modules/pacing/paced_sender.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 else | 113 else |
| 114 return nullptr; | 114 return nullptr; |
| 115 } | 115 } |
| 116 | 116 |
| 117 void UpdateSendHistograms() EXCLUSIVE_LOCKS_REQUIRED(&bitrate_crit_); | 117 void UpdateSendHistograms() EXCLUSIVE_LOCKS_REQUIRED(&bitrate_crit_); |
| 118 void UpdateReceiveHistograms(); | 118 void UpdateReceiveHistograms(); |
| 119 | 119 |
| 120 Clock* const clock_; | 120 Clock* const clock_; |
| 121 | 121 |
| 122 const int num_cpu_cores_; | 122 const int num_cpu_cores_; |
| 123 const rtc::scoped_ptr<ProcessThread> module_process_thread_; | 123 const std::unique_ptr<ProcessThread> module_process_thread_; |
| 124 const rtc::scoped_ptr<ProcessThread> pacer_thread_; | 124 const std::unique_ptr<ProcessThread> pacer_thread_; |
| 125 const rtc::scoped_ptr<CallStats> call_stats_; | 125 const std::unique_ptr<CallStats> call_stats_; |
| 126 const rtc::scoped_ptr<BitrateAllocator> bitrate_allocator_; | 126 const std::unique_ptr<BitrateAllocator> bitrate_allocator_; |
| 127 Call::Config config_; | 127 Call::Config config_; |
| 128 rtc::ThreadChecker configuration_thread_checker_; | 128 rtc::ThreadChecker configuration_thread_checker_; |
| 129 | 129 |
| 130 bool network_enabled_; | 130 bool network_enabled_; |
| 131 | 131 |
| 132 rtc::scoped_ptr<RWLockWrapper> receive_crit_; | 132 std::unique_ptr<RWLockWrapper> receive_crit_; |
| 133 // Audio and Video receive streams are owned by the client that creates them. | 133 // Audio and Video receive streams are owned by the client that creates them. |
| 134 std::map<uint32_t, AudioReceiveStream*> audio_receive_ssrcs_ | 134 std::map<uint32_t, AudioReceiveStream*> audio_receive_ssrcs_ |
| 135 GUARDED_BY(receive_crit_); | 135 GUARDED_BY(receive_crit_); |
| 136 std::map<uint32_t, VideoReceiveStream*> video_receive_ssrcs_ | 136 std::map<uint32_t, VideoReceiveStream*> video_receive_ssrcs_ |
| 137 GUARDED_BY(receive_crit_); | 137 GUARDED_BY(receive_crit_); |
| 138 std::set<VideoReceiveStream*> video_receive_streams_ | 138 std::set<VideoReceiveStream*> video_receive_streams_ |
| 139 GUARDED_BY(receive_crit_); | 139 GUARDED_BY(receive_crit_); |
| 140 std::map<std::string, AudioReceiveStream*> sync_stream_mapping_ | 140 std::map<std::string, AudioReceiveStream*> sync_stream_mapping_ |
| 141 GUARDED_BY(receive_crit_); | 141 GUARDED_BY(receive_crit_); |
| 142 | 142 |
| 143 rtc::scoped_ptr<RWLockWrapper> send_crit_; | 143 std::unique_ptr<RWLockWrapper> send_crit_; |
| 144 // Audio and Video send streams are owned by the client that creates them. | 144 // Audio and Video send streams are owned by the client that creates them. |
| 145 std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_); | 145 std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_); |
| 146 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_); | 146 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_); |
| 147 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_); | 147 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_); |
| 148 | 148 |
| 149 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_; | 149 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_; |
| 150 | 150 |
| 151 RtcEventLog* event_log_ = nullptr; | 151 RtcEventLog* event_log_ = nullptr; |
| 152 | 152 |
| 153 // The following members are only accessed (exclusively) from one thread and | 153 // The following members are only accessed (exclusively) from one thread and |
| 154 // from the destructor, and therefore doesn't need any explicit | 154 // from the destructor, and therefore doesn't need any explicit |
| 155 // synchronization. | 155 // synchronization. |
| 156 int64_t received_video_bytes_; | 156 int64_t received_video_bytes_; |
| 157 int64_t received_audio_bytes_; | 157 int64_t received_audio_bytes_; |
| 158 int64_t received_rtcp_bytes_; | 158 int64_t received_rtcp_bytes_; |
| 159 int64_t first_rtp_packet_received_ms_; | 159 int64_t first_rtp_packet_received_ms_; |
| 160 int64_t last_rtp_packet_received_ms_; | 160 int64_t last_rtp_packet_received_ms_; |
| 161 int64_t first_packet_sent_ms_; | 161 int64_t first_packet_sent_ms_; |
| 162 | 162 |
| 163 // TODO(holmer): Remove this lock once BitrateController no longer calls | 163 // TODO(holmer): Remove this lock once BitrateController no longer calls |
| 164 // OnNetworkChanged from multiple threads. | 164 // OnNetworkChanged from multiple threads. |
| 165 rtc::CriticalSection bitrate_crit_; | 165 rtc::CriticalSection bitrate_crit_; |
| 166 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); | 166 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); |
| 167 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); | 167 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); |
| 168 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); | 168 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); |
| 169 | 169 |
| 170 VieRemb remb_; | 170 VieRemb remb_; |
| 171 const rtc::scoped_ptr<CongestionController> congestion_controller_; | 171 const std::unique_ptr<CongestionController> congestion_controller_; |
| 172 | 172 |
| 173 RTC_DISALLOW_COPY_AND_ASSIGN(Call); | 173 RTC_DISALLOW_COPY_AND_ASSIGN(Call); |
| 174 }; | 174 }; |
| 175 } // namespace internal | 175 } // namespace internal |
| 176 | 176 |
| 177 Call* Call::Create(const Call::Config& config) { | 177 Call* Call::Create(const Call::Config& config) { |
| 178 return new internal::Call(config); | 178 return new internal::Call(config); |
| 179 } | 179 } |
| 180 | 180 |
| 181 namespace internal { | 181 namespace internal { |
| 182 | 182 |
| 183 Call::Call(const Call::Config& config) | 183 Call::Call(const Call::Config& config) |
| 184 : clock_(Clock::GetRealTimeClock()), | 184 : clock_(Clock::GetRealTimeClock()), |
| 185 num_cpu_cores_(CpuInfo::DetectNumberOfCores()), | 185 num_cpu_cores_(CpuInfo::DetectNumberOfCores()), |
| 186 module_process_thread_(ProcessThread::Create("ModuleProcessThread")), | 186 module_process_thread_( |
| 187 pacer_thread_(ProcessThread::Create("PacerThread")), | 187 rtc::ScopedToUnique(ProcessThread::Create("ModuleProcessThread"))), |
| 188 pacer_thread_(rtc::ScopedToUnique(ProcessThread::Create("PacerThread"))), |
| 188 call_stats_(new CallStats(clock_)), | 189 call_stats_(new CallStats(clock_)), |
| 189 bitrate_allocator_(new BitrateAllocator()), | 190 bitrate_allocator_(new BitrateAllocator()), |
| 190 config_(config), | 191 config_(config), |
| 191 network_enabled_(true), | 192 network_enabled_(true), |
| 192 receive_crit_(RWLockWrapper::CreateRWLock()), | 193 receive_crit_(RWLockWrapper::CreateRWLock()), |
| 193 send_crit_(RWLockWrapper::CreateRWLock()), | 194 send_crit_(RWLockWrapper::CreateRWLock()), |
| 194 received_video_bytes_(0), | 195 received_video_bytes_(0), |
| 195 received_audio_bytes_(0), | 196 received_audio_bytes_(0), |
| 196 received_rtcp_bytes_(0), | 197 received_rtcp_bytes_(0), |
| 197 first_rtp_packet_received_ms_(-1), | 198 first_rtp_packet_received_ms_(-1), |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 // thread. Then this check can be enabled. | 745 // thread. Then this check can be enabled. |
| 745 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); | 746 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); |
| 746 if (RtpHeaderParser::IsRtcp(packet, length)) | 747 if (RtpHeaderParser::IsRtcp(packet, length)) |
| 747 return DeliverRtcp(media_type, packet, length); | 748 return DeliverRtcp(media_type, packet, length); |
| 748 | 749 |
| 749 return DeliverRtp(media_type, packet, length, packet_time); | 750 return DeliverRtp(media_type, packet, length, packet_time); |
| 750 } | 751 } |
| 751 | 752 |
| 752 } // namespace internal | 753 } // namespace internal |
| 753 } // namespace webrtc | 754 } // namespace webrtc |
| OLD | NEW |