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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 : sender_clock_(new base::SimpleTestTickClock()), | 80 : sender_clock_(new base::SimpleTestTickClock()), |
81 receiver_clock_(new test::SkewedTickClock(sender_clock_.get())), | 81 receiver_clock_(new test::SkewedTickClock(sender_clock_.get())), |
82 sender_to_receiver_(sender_clock_.get()), | 82 sender_to_receiver_(sender_clock_.get()), |
83 receiver_to_sender_(sender_clock_.get()), | 83 receiver_to_sender_(sender_clock_.get()), |
84 rtcp_for_sender_( | 84 rtcp_for_sender_( |
85 base::Bind(&RtcpTest::OnReceivedCastFeedback, | 85 base::Bind(&RtcpTest::OnReceivedCastFeedback, |
86 base::Unretained(this)), | 86 base::Unretained(this)), |
87 base::Bind(&RtcpTest::OnMeasuredRoundTripTime, | 87 base::Bind(&RtcpTest::OnMeasuredRoundTripTime, |
88 base::Unretained(this)), | 88 base::Unretained(this)), |
89 base::Bind(&RtcpTest::OnReceivedLogs, base::Unretained(this)), | 89 base::Bind(&RtcpTest::OnReceivedLogs, base::Unretained(this)), |
| 90 base::Bind(&RtcpTest::OnReceivedPli, base::Unretained(this)), |
90 sender_clock_.get(), | 91 sender_clock_.get(), |
91 &sender_to_receiver_, | 92 &sender_to_receiver_, |
92 kSenderSsrc, | 93 kSenderSsrc, |
93 kReceiverSsrc), | 94 kReceiverSsrc), |
94 rtcp_for_receiver_(receiver_clock_.get(), | 95 rtcp_for_receiver_(receiver_clock_.get(), |
95 &receiver_to_sender_, | 96 &receiver_to_sender_, |
96 kReceiverSsrc, | 97 kReceiverSsrc, |
97 kSenderSsrc) { | 98 kSenderSsrc), |
| 99 received_pli_(false) { |
98 sender_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); | 100 sender_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); |
99 receiver_clock_->SetSkew( | 101 receiver_clock_->SetSkew( |
100 1.0, // No skew. | 102 1.0, // No skew. |
101 base::TimeDelta::FromSeconds(kInitialReceiverClockOffsetSeconds)); | 103 base::TimeDelta::FromSeconds(kInitialReceiverClockOffsetSeconds)); |
102 | 104 |
103 sender_to_receiver_.set_rtcp_destination(&rtcp_for_receiver_); | 105 sender_to_receiver_.set_rtcp_destination(&rtcp_for_receiver_); |
104 receiver_to_sender_.set_rtcp_destination(&rtcp_for_sender_); | 106 receiver_to_sender_.set_rtcp_destination(&rtcp_for_sender_); |
105 } | 107 } |
106 | 108 |
107 ~RtcpTest() override {} | 109 ~RtcpTest() override {} |
(...skipping 18 matching lines...) Expand all Loading... |
126 RtcpReceiverEventLogMessage event_log; | 128 RtcpReceiverEventLogMessage event_log; |
127 event_log.type = event_log_msg.type; | 129 event_log.type = event_log_msg.type; |
128 event_log.event_timestamp = event_log_msg.event_timestamp; | 130 event_log.event_timestamp = event_log_msg.event_timestamp; |
129 event_log.delay_delta = event_log_msg.delay_delta; | 131 event_log.delay_delta = event_log_msg.delay_delta; |
130 event_log.packet_id = event_log_msg.packet_id; | 132 event_log.packet_id = event_log_msg.packet_id; |
131 last_logs_.back().event_log_messages_.push_back(event_log); | 133 last_logs_.back().event_log_messages_.push_back(event_log); |
132 } | 134 } |
133 } | 135 } |
134 } | 136 } |
135 | 137 |
| 138 void OnReceivedPli() { received_pli_ = true; } |
| 139 |
136 scoped_ptr<base::SimpleTestTickClock> sender_clock_; | 140 scoped_ptr<base::SimpleTestTickClock> sender_clock_; |
137 scoped_ptr<test::SkewedTickClock> receiver_clock_; | 141 scoped_ptr<test::SkewedTickClock> receiver_clock_; |
138 FakeRtcpTransport sender_to_receiver_; | 142 FakeRtcpTransport sender_to_receiver_; |
139 FakeRtcpTransport receiver_to_sender_; | 143 FakeRtcpTransport receiver_to_sender_; |
140 SenderRtcpSession rtcp_for_sender_; | 144 SenderRtcpSession rtcp_for_sender_; |
141 ReceiverRtcpSession rtcp_for_receiver_; | 145 ReceiverRtcpSession rtcp_for_receiver_; |
142 | 146 |
143 base::TimeDelta current_round_trip_time_; | 147 base::TimeDelta current_round_trip_time_; |
144 RtcpCastMessage last_cast_message_; | 148 RtcpCastMessage last_cast_message_; |
145 RtcpReceiverLogMessage last_logs_; | 149 RtcpReceiverLogMessage last_logs_; |
| 150 bool received_pli_; |
146 | 151 |
147 private: | 152 private: |
148 DISALLOW_COPY_AND_ASSIGN(RtcpTest); | 153 DISALLOW_COPY_AND_ASSIGN(RtcpTest); |
149 }; | 154 }; |
150 | 155 |
151 TEST_F(RtcpTest, LipSyncGleanedFromSenderReport) { | 156 TEST_F(RtcpTest, LipSyncGleanedFromSenderReport) { |
152 // Initially, expect no lip-sync info receiver-side without having first | 157 // Initially, expect no lip-sync info receiver-side without having first |
153 // received a RTCP packet. | 158 // received a RTCP packet. |
154 base::TimeTicks reference_time; | 159 base::TimeTicks reference_time; |
155 RtpTimeTicks rtp_timestamp; | 160 RtpTimeTicks rtp_timestamp; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 EXPECT_EQ(last_cast_message_.ack_frame_id, cast_message.ack_frame_id); | 236 EXPECT_EQ(last_cast_message_.ack_frame_id, cast_message.ack_frame_id); |
232 EXPECT_EQ(last_cast_message_.target_delay_ms, kTargetDelayMs); | 237 EXPECT_EQ(last_cast_message_.target_delay_ms, kTargetDelayMs); |
233 EXPECT_EQ(last_cast_message_.missing_frames_and_packets.size(), | 238 EXPECT_EQ(last_cast_message_.missing_frames_and_packets.size(), |
234 cast_message.missing_frames_and_packets.size()); | 239 cast_message.missing_frames_and_packets.size()); |
235 EXPECT_TRUE( | 240 EXPECT_TRUE( |
236 std::equal(cast_message.missing_frames_and_packets.begin(), | 241 std::equal(cast_message.missing_frames_and_packets.begin(), |
237 cast_message.missing_frames_and_packets.end(), | 242 cast_message.missing_frames_and_packets.end(), |
238 last_cast_message_.missing_frames_and_packets.begin())); | 243 last_cast_message_.missing_frames_and_packets.begin())); |
239 } | 244 } |
240 | 245 |
| 246 TEST_F(RtcpTest, ReportPli) { |
| 247 RtcpCastMessage cast_message(kSenderSsrc); |
| 248 cast_message.picture_loss_indicator = true; |
| 249 rtcp_for_receiver_.SendRtcpReport( |
| 250 CreateRtcpTimeData(base::TimeTicks()), &cast_message, |
| 251 base::TimeDelta::FromMilliseconds(kTargetDelayMs), nullptr, nullptr); |
| 252 EXPECT_TRUE(received_pli_); |
| 253 } |
| 254 |
241 TEST_F(RtcpTest, DropLateRtcpPacket) { | 255 TEST_F(RtcpTest, DropLateRtcpPacket) { |
242 RtcpCastMessage cast_message(kSenderSsrc); | 256 RtcpCastMessage cast_message(kSenderSsrc); |
243 cast_message.ack_frame_id = 1; | 257 cast_message.ack_frame_id = 1; |
244 rtcp_for_receiver_.SendRtcpReport( | 258 rtcp_for_receiver_.SendRtcpReport( |
245 CreateRtcpTimeData(receiver_clock_->NowTicks()), &cast_message, | 259 CreateRtcpTimeData(receiver_clock_->NowTicks()), &cast_message, |
246 base::TimeDelta::FromMilliseconds(kTargetDelayMs), nullptr, nullptr); | 260 base::TimeDelta::FromMilliseconds(kTargetDelayMs), nullptr, nullptr); |
247 | 261 |
248 // Send a packet with old timestamp | 262 // Send a packet with old timestamp |
249 RtcpCastMessage late_cast_message(kSenderSsrc); | 263 RtcpCastMessage late_cast_message(kSenderSsrc); |
250 late_cast_message.ack_frame_id = 2; | 264 late_cast_message.ack_frame_id = 2; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 // Only 24 bits of event timestamp sent on wire. | 308 // Only 24 bits of event timestamp sent on wire. |
295 uint32_t event_ts = | 309 uint32_t event_ts = |
296 (event.timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; | 310 (event.timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; |
297 uint32_t log_msg_ts = | 311 uint32_t log_msg_ts = |
298 (log_msg.event_timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; | 312 (log_msg.event_timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; |
299 EXPECT_EQ(log_msg_ts, event_ts); | 313 EXPECT_EQ(log_msg_ts, event_ts); |
300 } | 314 } |
301 | 315 |
302 } // namespace cast | 316 } // namespace cast |
303 } // namespace media | 317 } // namespace media |
OLD | NEW |