OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cast/net/rtp/receiver_stats.h" | 5 #include "media/cast/net/rtp/receiver_stats.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "media/cast/cast_defines.h" | 8 #include "media/cast/cast_defines.h" |
9 #include "media/cast/net/rtp/rtp_defines.h" | 9 #include "media/cast/net/rtp/rtp_defines.h" |
10 | 10 |
11 namespace media { | 11 namespace media { |
12 namespace cast { | 12 namespace cast { |
13 | 13 |
14 static const uint32 kMaxSequenceNumber = 65536; | 14 static const uint32_t kMaxSequenceNumber = 65536; |
15 | 15 |
16 ReceiverStats::ReceiverStats(base::TickClock* clock) | 16 ReceiverStats::ReceiverStats(base::TickClock* clock) |
17 : clock_(clock), | 17 : clock_(clock), |
18 min_sequence_number_(0), | 18 min_sequence_number_(0), |
19 max_sequence_number_(0), | 19 max_sequence_number_(0), |
20 total_number_packets_(0), | 20 total_number_packets_(0), |
21 sequence_number_cycles_(0), | 21 sequence_number_cycles_(0), |
22 interval_min_sequence_number_(0), | 22 interval_min_sequence_number_(0), |
23 interval_number_packets_(0), | 23 interval_number_packets_(0), |
24 interval_wrap_count_(0) {} | 24 interval_wrap_count_(0) {} |
(...skipping 11 matching lines...) Expand all Loading... |
36 diff = kMaxSequenceNumber * (interval_wrap_count_ - 1) + | 36 diff = kMaxSequenceNumber * (interval_wrap_count_ - 1) + |
37 (max_sequence_number_ - interval_min_sequence_number_ + | 37 (max_sequence_number_ - interval_min_sequence_number_ + |
38 kMaxSequenceNumber + 1); | 38 kMaxSequenceNumber + 1); |
39 } | 39 } |
40 | 40 |
41 if (diff < 1) { | 41 if (diff < 1) { |
42 ret.fraction_lost = 0; | 42 ret.fraction_lost = 0; |
43 } else { | 43 } else { |
44 float tmp_ratio = | 44 float tmp_ratio = |
45 (1 - static_cast<float>(interval_number_packets_) / abs(diff)); | 45 (1 - static_cast<float>(interval_number_packets_) / abs(diff)); |
46 ret.fraction_lost = static_cast<uint8>(256 * tmp_ratio); | 46 ret.fraction_lost = static_cast<uint8_t>(256 * tmp_ratio); |
47 } | 47 } |
48 } | 48 } |
49 | 49 |
50 int expected_packets_num = max_sequence_number_ - min_sequence_number_ + 1; | 50 int expected_packets_num = max_sequence_number_ - min_sequence_number_ + 1; |
51 if (total_number_packets_ == 0) { | 51 if (total_number_packets_ == 0) { |
52 ret.cumulative_lost = 0; | 52 ret.cumulative_lost = 0; |
53 } else if (sequence_number_cycles_ == 0) { | 53 } else if (sequence_number_cycles_ == 0) { |
54 ret.cumulative_lost = expected_packets_num - total_number_packets_; | 54 ret.cumulative_lost = expected_packets_num - total_number_packets_; |
55 } else { | 55 } else { |
56 ret.cumulative_lost = | 56 ret.cumulative_lost = |
57 kMaxSequenceNumber * (sequence_number_cycles_ - 1) + | 57 kMaxSequenceNumber * (sequence_number_cycles_ - 1) + |
58 (expected_packets_num - total_number_packets_ + kMaxSequenceNumber); | 58 (expected_packets_num - total_number_packets_ + kMaxSequenceNumber); |
59 } | 59 } |
60 | 60 |
61 // Extended high sequence number consists of the highest seq number and the | 61 // Extended high sequence number consists of the highest seq number and the |
62 // number of cycles (wrap). | 62 // number of cycles (wrap). |
63 ret.extended_high_sequence_number = | 63 ret.extended_high_sequence_number = |
64 (sequence_number_cycles_ << 16) + max_sequence_number_; | 64 (sequence_number_cycles_ << 16) + max_sequence_number_; |
65 | 65 |
66 ret.jitter = static_cast<uint32>(std::abs(jitter_.InMillisecondsRoundedUp())); | 66 ret.jitter = |
| 67 static_cast<uint32_t>(std::abs(jitter_.InMillisecondsRoundedUp())); |
67 | 68 |
68 // Reset interval values. | 69 // Reset interval values. |
69 interval_min_sequence_number_ = 0; | 70 interval_min_sequence_number_ = 0; |
70 interval_number_packets_ = 0; | 71 interval_number_packets_ = 0; |
71 interval_wrap_count_ = 0; | 72 interval_wrap_count_ = 0; |
72 | 73 |
73 return ret; | 74 return ret; |
74 } | 75 } |
75 | 76 |
76 void ReceiverStats::UpdateStatistics(const RtpCastHeader& header) { | 77 void ReceiverStats::UpdateStatistics(const RtpCastHeader& header) { |
77 const uint16 new_seq_num = header.sequence_number; | 78 const uint16_t new_seq_num = header.sequence_number; |
78 | 79 |
79 if (interval_number_packets_ == 0) { | 80 if (interval_number_packets_ == 0) { |
80 // First packet in the interval. | 81 // First packet in the interval. |
81 interval_min_sequence_number_ = new_seq_num; | 82 interval_min_sequence_number_ = new_seq_num; |
82 } | 83 } |
83 if (total_number_packets_ == 0) { | 84 if (total_number_packets_ == 0) { |
84 // First incoming packet. | 85 // First incoming packet. |
85 min_sequence_number_ = new_seq_num; | 86 min_sequence_number_ = new_seq_num; |
86 max_sequence_number_ = new_seq_num; | 87 max_sequence_number_ = new_seq_num; |
87 } | 88 } |
(...skipping 21 matching lines...) Expand all Loading... |
109 last_received_timestamp_ = delta_new_timestamp; | 110 last_received_timestamp_ = delta_new_timestamp; |
110 last_received_packet_time_ = now; | 111 last_received_packet_time_ = now; |
111 | 112 |
112 // Increment counters. | 113 // Increment counters. |
113 ++total_number_packets_; | 114 ++total_number_packets_; |
114 ++interval_number_packets_; | 115 ++interval_number_packets_; |
115 } | 116 } |
116 | 117 |
117 } // namespace cast | 118 } // namespace cast |
118 } // namespace media | 119 } // namespace media |
OLD | NEW |