| OLD | NEW |
| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 static const int kMaxTargetDelayMs = 10000; | 43 static const int kMaxTargetDelayMs = 10000; |
| 44 static const float kMaxIncompleteTimeMultiplier = 3.5f; | 44 static const float kMaxIncompleteTimeMultiplier = 3.5f; |
| 45 | 45 |
| 46 // Helper class receiving statistics callbacks. | 46 // Helper class receiving statistics callbacks. |
| 47 class ChannelStatsObserver : public CallStatsObserver { | 47 class ChannelStatsObserver : public CallStatsObserver { |
| 48 public: | 48 public: |
| 49 explicit ChannelStatsObserver(ViEChannel* owner) : owner_(owner) {} | 49 explicit ChannelStatsObserver(ViEChannel* owner) : owner_(owner) {} |
| 50 virtual ~ChannelStatsObserver() {} | 50 virtual ~ChannelStatsObserver() {} |
| 51 | 51 |
| 52 // Implements StatsObserver. | 52 // Implements StatsObserver. |
| 53 virtual void OnRttUpdate(int64_t rtt) { | 53 virtual void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
| 54 owner_->OnRttUpdate(rtt); | 54 owner_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
| 55 } | 55 } |
| 56 | 56 |
| 57 private: | 57 private: |
| 58 ViEChannel* const owner_; | 58 ViEChannel* const owner_; |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 class ViEChannelProtectionCallback : public VCMProtectionCallback { | 61 class ViEChannelProtectionCallback : public VCMProtectionCallback { |
| 62 public: | 62 public: |
| 63 ViEChannelProtectionCallback(ViEChannel* owner) : owner_(owner) {} | 63 ViEChannelProtectionCallback(ViEChannel* owner) : owner_(owner) {} |
| 64 ~ViEChannelProtectionCallback() {} | 64 ~ViEChannelProtectionCallback() {} |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 intra_frame_observer_(intra_frame_observer), | 112 intra_frame_observer_(intra_frame_observer), |
| 113 rtt_stats_(rtt_stats), | 113 rtt_stats_(rtt_stats), |
| 114 paced_sender_(paced_sender), | 114 paced_sender_(paced_sender), |
| 115 packet_router_(packet_router), | 115 packet_router_(packet_router), |
| 116 bandwidth_observer_(bandwidth_observer), | 116 bandwidth_observer_(bandwidth_observer), |
| 117 decoder_reset_(true), | 117 decoder_reset_(true), |
| 118 nack_history_size_sender_(kSendSidePacketHistorySize), | 118 nack_history_size_sender_(kSendSidePacketHistorySize), |
| 119 max_nack_reordering_threshold_(kMaxPacketAgeToNack), | 119 max_nack_reordering_threshold_(kMaxPacketAgeToNack), |
| 120 pre_render_callback_(NULL), | 120 pre_render_callback_(NULL), |
| 121 report_block_stats_sender_(new ReportBlockStats()), | 121 report_block_stats_sender_(new ReportBlockStats()), |
| 122 time_of_first_rtt_ms_(-1), |
| 123 rtt_sum_ms_(0), |
| 124 num_rtts_(0), |
| 122 rtp_rtcp_modules_( | 125 rtp_rtcp_modules_( |
| 123 CreateRtpRtcpModules(ViEModuleId(engine_id_, channel_id_), | 126 CreateRtpRtcpModules(ViEModuleId(engine_id_, channel_id_), |
| 124 !sender, | 127 !sender, |
| 125 vie_receiver_.GetReceiveStatistics(), | 128 vie_receiver_.GetReceiveStatistics(), |
| 126 transport, | 129 transport, |
| 127 sender ? intra_frame_observer_ : nullptr, | 130 sender ? intra_frame_observer_ : nullptr, |
| 128 sender ? bandwidth_observer_.get() : nullptr, | 131 sender ? bandwidth_observer_.get() : nullptr, |
| 129 rtt_stats_, | 132 rtt_stats_, |
| 130 &rtcp_packet_type_counter_observer_, | 133 &rtcp_packet_type_counter_observer_, |
| 131 remote_bitrate_estimator, | 134 remote_bitrate_estimator, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 if (decode_thread_) { | 192 if (decode_thread_) { |
| 190 StopDecodeThread(); | 193 StopDecodeThread(); |
| 191 } | 194 } |
| 192 // Release modules. | 195 // Release modules. |
| 193 VideoCodingModule::Destroy(vcm_); | 196 VideoCodingModule::Destroy(vcm_); |
| 194 } | 197 } |
| 195 | 198 |
| 196 void ViEChannel::UpdateHistograms() { | 199 void ViEChannel::UpdateHistograms() { |
| 197 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); | 200 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); |
| 198 | 201 |
| 202 { |
| 203 CriticalSectionScoped cs(crit_.get()); |
| 204 int64_t elapsed_sec = (now - time_of_first_rtt_ms_) / 1000; |
| 205 if (time_of_first_rtt_ms_ != -1 && num_rtts_ > 0 && |
| 206 elapsed_sec > metrics::kMinRunTimeInSeconds) { |
| 207 int64_t avg_rtt_ms = (rtt_sum_ms_ + num_rtts_ / 2) / num_rtts_; |
| 208 RTC_HISTOGRAM_COUNTS_10000( |
| 209 "WebRTC.Video.AverageRoundTripTimeInMilliseconds", avg_rtt_ms); |
| 210 } |
| 211 } |
| 212 |
| 199 if (sender_) { | 213 if (sender_) { |
| 200 RtcpPacketTypeCounter rtcp_counter; | 214 RtcpPacketTypeCounter rtcp_counter; |
| 201 GetSendRtcpPacketTypeCounter(&rtcp_counter); | 215 GetSendRtcpPacketTypeCounter(&rtcp_counter); |
| 202 int64_t elapsed_sec = rtcp_counter.TimeSinceFirstPacketInMs(now) / 1000; | 216 int64_t elapsed_sec = rtcp_counter.TimeSinceFirstPacketInMs(now) / 1000; |
| 203 if (elapsed_sec > metrics::kMinRunTimeInSeconds) { | 217 if (elapsed_sec > metrics::kMinRunTimeInSeconds) { |
| 204 RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.NackPacketsReceivedPerMinute", | 218 RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.NackPacketsReceivedPerMinute", |
| 205 rtcp_counter.nack_packets * 60 / elapsed_sec); | 219 rtcp_counter.nack_packets * 60 / elapsed_sec); |
| 206 RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.FirPacketsReceivedPerMinute", | 220 RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.FirPacketsReceivedPerMinute", |
| 207 rtcp_counter.fir_packets * 60 / elapsed_sec); | 221 rtcp_counter.fir_packets * 60 / elapsed_sec); |
| 208 RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.PliPacketsReceivedPerMinute", | 222 RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.PliPacketsReceivedPerMinute", |
| (...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 | 1099 |
| 1086 bool ViEChannel::ChannelDecodeThreadFunction(void* obj) { | 1100 bool ViEChannel::ChannelDecodeThreadFunction(void* obj) { |
| 1087 return static_cast<ViEChannel*>(obj)->ChannelDecodeProcess(); | 1101 return static_cast<ViEChannel*>(obj)->ChannelDecodeProcess(); |
| 1088 } | 1102 } |
| 1089 | 1103 |
| 1090 bool ViEChannel::ChannelDecodeProcess() { | 1104 bool ViEChannel::ChannelDecodeProcess() { |
| 1091 vcm_->Decode(kMaxDecodeWaitTimeMs); | 1105 vcm_->Decode(kMaxDecodeWaitTimeMs); |
| 1092 return true; | 1106 return true; |
| 1093 } | 1107 } |
| 1094 | 1108 |
| 1095 void ViEChannel::OnRttUpdate(int64_t rtt) { | 1109 void ViEChannel::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
| 1096 vcm_->SetReceiveChannelParameters(rtt); | 1110 vcm_->SetReceiveChannelParameters(max_rtt_ms); |
| 1111 |
| 1112 CriticalSectionScoped cs(crit_.get()); |
| 1113 if (time_of_first_rtt_ms_ == -1) |
| 1114 time_of_first_rtt_ms_ = Clock::GetRealTimeClock()->TimeInMilliseconds(); |
| 1115 rtt_sum_ms_ += avg_rtt_ms; |
| 1116 ++num_rtts_; |
| 1097 } | 1117 } |
| 1098 | 1118 |
| 1099 int ViEChannel::ProtectionRequest(const FecProtectionParams* delta_fec_params, | 1119 int ViEChannel::ProtectionRequest(const FecProtectionParams* delta_fec_params, |
| 1100 const FecProtectionParams* key_fec_params, | 1120 const FecProtectionParams* key_fec_params, |
| 1101 uint32_t* video_rate_bps, | 1121 uint32_t* video_rate_bps, |
| 1102 uint32_t* nack_rate_bps, | 1122 uint32_t* nack_rate_bps, |
| 1103 uint32_t* fec_rate_bps) { | 1123 uint32_t* fec_rate_bps) { |
| 1104 *video_rate_bps = 0; | 1124 *video_rate_bps = 0; |
| 1105 *nack_rate_bps = 0; | 1125 *nack_rate_bps = 0; |
| 1106 *fec_rate_bps = 0; | 1126 *fec_rate_bps = 0; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 CriticalSectionScoped cs(crit_.get()); | 1268 CriticalSectionScoped cs(crit_.get()); |
| 1249 vcm_receive_stats_callback_ = receive_statistics_proxy; | 1269 vcm_receive_stats_callback_ = receive_statistics_proxy; |
| 1250 } | 1270 } |
| 1251 | 1271 |
| 1252 void ViEChannel::SetIncomingVideoStream( | 1272 void ViEChannel::SetIncomingVideoStream( |
| 1253 IncomingVideoStream* incoming_video_stream) { | 1273 IncomingVideoStream* incoming_video_stream) { |
| 1254 CriticalSectionScoped cs(crit_.get()); | 1274 CriticalSectionScoped cs(crit_.get()); |
| 1255 incoming_video_stream_ = incoming_video_stream; | 1275 incoming_video_stream_ = incoming_video_stream; |
| 1256 } | 1276 } |
| 1257 } // namespace webrtc | 1277 } // namespace webrtc |
| OLD | NEW |