Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Side by Side Diff: media/cast/rtcp/rtcp_unittest.cc

Issue 70713002: Cast: Restructure RTCP interface to better fit our usage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added missing line lost in merge Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/cast/rtcp/rtcp_sender_unittest.cc ('k') | media/cast/rtcp/test_rtcp_packet_builder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/test/simple_test_tick_clock.h" 5 #include "base/test/simple_test_tick_clock.h"
6 #include "media/cast/cast_defines.h" 6 #include "media/cast/cast_defines.h"
7 #include "media/cast/pacing/paced_sender.h" 7 #include "media/cast/pacing/paced_sender.h"
8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
10 #include "media/cast/rtcp/rtcp.h" 10 #include "media/cast/rtcp/rtcp.h"
11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
12 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
13 13
14 namespace media { 14 namespace media {
15 namespace cast { 15 namespace cast {
16 16
17 using testing::_; 17 using testing::_;
18 18
19 static const uint32 kSenderSsrc = 0x10203; 19 static const uint32 kSenderSsrc = 0x10203;
20 static const uint32 kReceiverSsrc = 0x40506; 20 static const uint32 kReceiverSsrc = 0x40506;
21 static const uint32 kUnknownSsrc = 0xDEAD;
22 static const std::string kCName("test@10.1.1.1"); 21 static const std::string kCName("test@10.1.1.1");
23 static const uint32 kRtcpIntervalMs = 500; 22 static const uint32 kRtcpIntervalMs = 500;
24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); 23 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
25 static const int64 kAddedDelay = 123; 24 static const int64 kAddedDelay = 123;
26 static const int64 kAddedShortDelay= 100; 25 static const int64 kAddedShortDelay= 100;
27 26
28 class LocalRtcpTransport : public PacedPacketSender { 27 class LocalRtcpTransport : public PacedPacketSender {
29 public: 28 public:
30 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) 29 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock)
31 : drop_packets_(false), 30 : drop_packets_(false),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 68
70 class RtcpPeer : public Rtcp { 69 class RtcpPeer : public Rtcp {
71 public: 70 public:
72 RtcpPeer(base::TickClock* clock, 71 RtcpPeer(base::TickClock* clock,
73 RtcpSenderFeedback* sender_feedback, 72 RtcpSenderFeedback* sender_feedback,
74 PacedPacketSender* const paced_packet_sender, 73 PacedPacketSender* const paced_packet_sender,
75 RtpSenderStatistics* rtp_sender_statistics, 74 RtpSenderStatistics* rtp_sender_statistics,
76 RtpReceiverStatistics* rtp_receiver_statistics, 75 RtpReceiverStatistics* rtp_receiver_statistics,
77 RtcpMode rtcp_mode, 76 RtcpMode rtcp_mode,
78 const base::TimeDelta& rtcp_interval, 77 const base::TimeDelta& rtcp_interval,
79 bool sending_media,
80 uint32 local_ssrc, 78 uint32 local_ssrc,
79 uint32 remote_ssrc,
81 const std::string& c_name) 80 const std::string& c_name)
82 : Rtcp(clock, 81 : Rtcp(clock,
83 sender_feedback, 82 sender_feedback,
84 paced_packet_sender, 83 paced_packet_sender,
85 rtp_sender_statistics, 84 rtp_sender_statistics,
86 rtp_receiver_statistics, 85 rtp_receiver_statistics,
87 rtcp_mode, 86 rtcp_mode,
88 rtcp_interval, 87 rtcp_interval,
89 sending_media,
90 local_ssrc, 88 local_ssrc,
89 remote_ssrc,
91 c_name) { 90 c_name) {
92 } 91 }
93 92
94 using Rtcp::CheckForWrapAround; 93 using Rtcp::CheckForWrapAround;
95 using Rtcp::OnReceivedLipSyncInfo; 94 using Rtcp::OnReceivedLipSyncInfo;
96 }; 95 };
97 96
98 class RtcpTest : public ::testing::Test { 97 class RtcpTest : public ::testing::Test {
99 protected: 98 protected:
100 RtcpTest() 99 RtcpTest()
(...skipping 16 matching lines...) Expand all
117 TEST_F(RtcpTest, TimeToSend) { 116 TEST_F(RtcpTest, TimeToSend) {
118 base::TimeTicks start_time; 117 base::TimeTicks start_time;
119 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); 118 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond);
120 Rtcp rtcp(&testing_clock_, 119 Rtcp rtcp(&testing_clock_,
121 &mock_sender_feedback_, 120 &mock_sender_feedback_,
122 &transport_, 121 &transport_,
123 NULL, 122 NULL,
124 NULL, 123 NULL,
125 kRtcpCompound, 124 kRtcpCompound,
126 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 125 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
127 true, // Media sender.
128 kSenderSsrc, 126 kSenderSsrc,
127 kReceiverSsrc,
129 kCName); 128 kCName);
130 transport_.SetRtcpReceiver(&rtcp); 129 transport_.SetRtcpReceiver(&rtcp);
131 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); 130 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport());
132 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( 131 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds(
133 kRtcpIntervalMs * 3 / 2), 132 kRtcpIntervalMs * 3 / 2),
134 rtcp.TimeToSendNextRtcpReport()); 133 rtcp.TimeToSendNextRtcpReport());
135 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; 134 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time;
136 testing_clock_.Advance(delta); 135 testing_clock_.Advance(delta);
137 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); 136 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport());
138 } 137 }
139 138
140 TEST_F(RtcpTest, BasicSenderReport) { 139 TEST_F(RtcpTest, BasicSenderReport) {
141 Rtcp rtcp(&testing_clock_, 140 Rtcp rtcp(&testing_clock_,
142 &mock_sender_feedback_, 141 &mock_sender_feedback_,
143 &transport_, 142 &transport_,
144 NULL, 143 NULL,
145 NULL, 144 NULL,
146 kRtcpCompound, 145 kRtcpCompound,
147 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 146 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
148 true, // Media sender.
149 kSenderSsrc, 147 kSenderSsrc,
148 kReceiverSsrc,
150 kCName); 149 kCName);
151 transport_.SetRtcpReceiver(&rtcp); 150 transport_.SetRtcpReceiver(&rtcp);
152 rtcp.SendRtcpReport(kUnknownSsrc); 151 rtcp.SendRtcpFromRtpSender(NULL);
153 } 152 }
154 153
155 TEST_F(RtcpTest, BasicReceiverReport) { 154 TEST_F(RtcpTest, BasicReceiverReport) {
156 Rtcp rtcp(&testing_clock_, 155 Rtcp rtcp(&testing_clock_,
157 &mock_sender_feedback_, 156 &mock_sender_feedback_,
158 &transport_, 157 &transport_,
159 NULL, 158 NULL,
160 NULL, 159 NULL,
161 kRtcpCompound, 160 kRtcpCompound,
162 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 161 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
163 false, // Media receiver.
164 kSenderSsrc, 162 kSenderSsrc,
163 kReceiverSsrc,
165 kCName); 164 kCName);
166 transport_.SetRtcpReceiver(&rtcp); 165 transport_.SetRtcpReceiver(&rtcp);
167 rtcp.SetRemoteSSRC(kSenderSsrc); 166 rtcp.SendRtcpFromRtpReceiver(NULL, NULL);
168 rtcp.SendRtcpReport(kSenderSsrc);
169 } 167 }
170 168
171 TEST_F(RtcpTest, BasicCast) { 169 TEST_F(RtcpTest, BasicCast) {
172 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); 170 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1);
173 171
174 // Media receiver. 172 // Media receiver.
175 Rtcp rtcp(&testing_clock_, 173 Rtcp rtcp(&testing_clock_,
176 &mock_sender_feedback_, 174 &mock_sender_feedback_,
177 &transport_, 175 &transport_,
178 NULL, 176 NULL,
179 NULL, 177 NULL,
180 kRtcpReducedSize, 178 kRtcpReducedSize,
181 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 179 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
182 false, 180 kSenderSsrc,
183 kSenderSsrc, 181 kSenderSsrc,
184 kCName); 182 kCName);
185 transport_.SetRtcpReceiver(&rtcp); 183 transport_.SetRtcpReceiver(&rtcp);
186 rtcp.SetRemoteSSRC(kSenderSsrc);
187 RtcpCastMessage cast_message(kSenderSsrc); 184 RtcpCastMessage cast_message(kSenderSsrc);
188 cast_message.ack_frame_id_ = kAckFrameId; 185 cast_message.ack_frame_id_ = kAckFrameId;
189 PacketIdSet missing_packets; 186 PacketIdSet missing_packets;
190 cast_message.missing_frames_and_packets_[ 187 cast_message.missing_frames_and_packets_[
191 kLostFrameId] = missing_packets; 188 kLostFrameId] = missing_packets;
192 189
193 missing_packets.insert(kLostPacketId1); 190 missing_packets.insert(kLostPacketId1);
194 missing_packets.insert(kLostPacketId2); 191 missing_packets.insert(kLostPacketId2);
195 missing_packets.insert(kLostPacketId3); 192 missing_packets.insert(kLostPacketId3);
196 cast_message.missing_frames_and_packets_[ 193 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
197 kFrameIdWithLostPackets] = missing_packets; 194 missing_packets;
198 rtcp.SendRtcpCast(cast_message); 195 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL);
199 } 196 }
200 197
201 TEST_F(RtcpTest, Rtt) { 198 TEST_F(RtcpTest, RttReducedSizeRtcp) {
202 // Media receiver. 199 // Media receiver.
203 LocalRtcpTransport receiver_transport(&testing_clock_); 200 LocalRtcpTransport receiver_transport(&testing_clock_);
204 Rtcp rtcp_receiver(&testing_clock_, 201 Rtcp rtcp_receiver(&testing_clock_,
205 &mock_sender_feedback_, 202 &mock_sender_feedback_,
206 &receiver_transport, 203 &receiver_transport,
207 NULL, 204 NULL,
208 NULL, 205 NULL,
209 kRtcpReducedSize, 206 kRtcpReducedSize,
210 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 207 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
211 false,
212 kReceiverSsrc, 208 kReceiverSsrc,
209 kSenderSsrc,
213 kCName); 210 kCName);
214 211
215 // Media sender. 212 // Media sender.
216 LocalRtcpTransport sender_transport(&testing_clock_); 213 LocalRtcpTransport sender_transport(&testing_clock_);
217 Rtcp rtcp_sender(&testing_clock_, 214 Rtcp rtcp_sender(&testing_clock_,
218 &mock_sender_feedback_, 215 &mock_sender_feedback_,
219 &sender_transport, 216 &sender_transport,
220 NULL, 217 NULL,
221 NULL, 218 NULL,
222 kRtcpReducedSize, 219 kRtcpReducedSize,
223 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 220 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
224 true,
225 kSenderSsrc, 221 kSenderSsrc,
222 kReceiverSsrc,
226 kCName); 223 kCName);
227 224
228 receiver_transport.SetRtcpReceiver(&rtcp_sender); 225 receiver_transport.SetRtcpReceiver(&rtcp_sender);
229 sender_transport.SetRtcpReceiver(&rtcp_receiver); 226 sender_transport.SetRtcpReceiver(&rtcp_receiver);
230 227
231 rtcp_sender.SetRemoteSSRC(kReceiverSsrc);
232 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
233
234 base::TimeDelta rtt; 228 base::TimeDelta rtt;
235 base::TimeDelta avg_rtt; 229 base::TimeDelta avg_rtt;
236 base::TimeDelta min_rtt; 230 base::TimeDelta min_rtt;
237 base::TimeDelta max_rtt; 231 base::TimeDelta max_rtt;
238 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 232 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
239 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 233 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
240 234
241 rtcp_sender.SendRtcpReport(kSenderSsrc); 235 rtcp_sender.SendRtcpFromRtpSender(NULL);
242 rtcp_receiver.SendRtcpReport(kSenderSsrc); 236 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
243 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 237 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
244 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 238 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
245 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); 239 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
246 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); 240 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
247 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); 241 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
248 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); 242 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
249 rtcp_sender.SendRtcpReport(kSenderSsrc); 243 rtcp_sender.SendRtcpFromRtpSender(NULL);
250 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 244 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
251 245
252 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); 246 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
253 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); 247 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
254 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); 248 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
255 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); 249 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
250 }
251
252 TEST_F(RtcpTest, Rtt) {
253 // Media receiver.
254 LocalRtcpTransport receiver_transport(&testing_clock_);
255 Rtcp rtcp_receiver(&testing_clock_,
256 &mock_sender_feedback_,
257 &receiver_transport,
258 NULL,
259 NULL,
260 kRtcpCompound,
261 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
262 kReceiverSsrc,
263 kSenderSsrc,
264 kCName);
265
266 // Media sender.
267 LocalRtcpTransport sender_transport(&testing_clock_);
268 Rtcp rtcp_sender(&testing_clock_,
269 &mock_sender_feedback_,
270 &sender_transport,
271 NULL,
272 NULL,
273 kRtcpCompound,
274 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
275 kSenderSsrc,
276 kReceiverSsrc,
277 kCName);
278
279 receiver_transport.SetRtcpReceiver(&rtcp_sender);
280 sender_transport.SetRtcpReceiver(&rtcp_receiver);
281
282 base::TimeDelta rtt;
283 base::TimeDelta avg_rtt;
284 base::TimeDelta min_rtt;
285 base::TimeDelta max_rtt;
286 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
287 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
288
289 rtcp_sender.SendRtcpFromRtpSender(NULL);
290 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
291 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
292 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
293 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
294 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
295 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
296 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
297
298 rtcp_sender.SendRtcpFromRtpSender(NULL);
299 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
300 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
301 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
302 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
303 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
256 304
257 receiver_transport.SetShortDelay(); 305 receiver_transport.SetShortDelay();
258 sender_transport.SetShortDelay(); 306 sender_transport.SetShortDelay();
259 rtcp_receiver.SendRtcpReport(kSenderSsrc); 307 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
260 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 308 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
261
262 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); 309 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1);
263 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, 310 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2,
264 avg_rtt.InMilliseconds(), 311 avg_rtt.InMilliseconds(),
265 1); 312 1);
266 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); 313 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1);
267 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); 314 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
268 rtcp_sender.SendRtcpReport(kSenderSsrc); 315
316 rtcp_sender.SendRtcpFromRtpSender(NULL);
269 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 317 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
270
271 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); 318 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
272 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, 319 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2,
273 avg_rtt.InMilliseconds(), 320 avg_rtt.InMilliseconds(),
274 1); 321 1);
275 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); 322 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1);
276 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); 323 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
324
325 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
326 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
327 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
328 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1);
329 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
330
331 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
332 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
333 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
334 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1);
335 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
277 } 336 }
278 337
279 TEST_F(RtcpTest, RttWithPacketLoss) { 338 TEST_F(RtcpTest, RttWithPacketLoss) {
280 // Media receiver. 339 // Media receiver.
281 LocalRtcpTransport receiver_transport(&testing_clock_); 340 LocalRtcpTransport receiver_transport(&testing_clock_);
282 Rtcp rtcp_receiver(&testing_clock_, 341 Rtcp rtcp_receiver(&testing_clock_,
283 &mock_sender_feedback_, 342 &mock_sender_feedback_,
284 &receiver_transport, 343 &receiver_transport,
285 NULL, 344 NULL,
286 NULL, 345 NULL,
287 kRtcpReducedSize, 346 kRtcpReducedSize,
288 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 347 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
289 false, 348 kSenderSsrc,
290 kReceiverSsrc, 349 kReceiverSsrc,
291 kCName); 350 kCName);
292 351
293 // Media sender. 352 // Media sender.
294 LocalRtcpTransport sender_transport(&testing_clock_); 353 LocalRtcpTransport sender_transport(&testing_clock_);
295 Rtcp rtcp_sender(&testing_clock_, 354 Rtcp rtcp_sender(&testing_clock_,
296 &mock_sender_feedback_, 355 &mock_sender_feedback_,
297 &sender_transport, 356 &sender_transport,
298 NULL, 357 NULL,
299 NULL, 358 NULL,
300 kRtcpReducedSize, 359 kRtcpReducedSize,
301 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 360 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
302 true, 361 kReceiverSsrc,
303 kSenderSsrc, 362 kSenderSsrc,
304 kCName); 363 kCName);
305 364
306 receiver_transport.SetRtcpReceiver(&rtcp_sender); 365 receiver_transport.SetRtcpReceiver(&rtcp_sender);
307 sender_transport.SetRtcpReceiver(&rtcp_receiver); 366 sender_transport.SetRtcpReceiver(&rtcp_receiver);
308 367
309 rtcp_sender.SetRemoteSSRC(kReceiverSsrc); 368 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
310 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); 369 rtcp_sender.SendRtcpFromRtpSender(NULL);
311
312 rtcp_receiver.SendRtcpReport(kSenderSsrc);
313 rtcp_sender.SendRtcpReport(kSenderSsrc);
314 370
315 base::TimeDelta rtt; 371 base::TimeDelta rtt;
316 base::TimeDelta avg_rtt; 372 base::TimeDelta avg_rtt;
317 base::TimeDelta min_rtt; 373 base::TimeDelta min_rtt;
318 base::TimeDelta max_rtt; 374 base::TimeDelta max_rtt;
319 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 375 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
320 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 376 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
321 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); 377 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
322 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); 378 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
323 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); 379 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
324 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); 380 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
325 381
326 receiver_transport.SetShortDelay(); 382 receiver_transport.SetShortDelay();
327 sender_transport.SetShortDelay(); 383 sender_transport.SetShortDelay();
328 receiver_transport.SetDropPackets(true); 384 receiver_transport.SetDropPackets(true);
329 385
330 rtcp_receiver.SendRtcpReport(kSenderSsrc); 386 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
331 rtcp_sender.SendRtcpReport(kSenderSsrc); 387 rtcp_sender.SendRtcpFromRtpSender(NULL);
332 388
333 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 389 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
334 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); 390 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1);
335 } 391 }
336 392
337 TEST_F(RtcpTest, NtpAndTime) { 393 TEST_F(RtcpTest, NtpAndTime) {
338 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); 394 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60);
339 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); 395 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60);
340 396
341 uint32 ntp_seconds_1 = 0; 397 uint32 ntp_seconds_1 = 0;
(...skipping 25 matching lines...) Expand all
367 } 423 }
368 424
369 TEST_F(RtcpTest, WrapAround) { 425 TEST_F(RtcpTest, WrapAround) {
370 RtcpPeer rtcp_peer(&testing_clock_, 426 RtcpPeer rtcp_peer(&testing_clock_,
371 &mock_sender_feedback_, 427 &mock_sender_feedback_,
372 NULL, 428 NULL,
373 NULL, 429 NULL,
374 NULL, 430 NULL,
375 kRtcpReducedSize, 431 kRtcpReducedSize,
376 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 432 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
377 false,
378 kReceiverSsrc, 433 kReceiverSsrc,
434 kSenderSsrc,
379 kCName); 435 kCName);
380 uint32 new_timestamp = 0; 436 uint32 new_timestamp = 0;
381 uint32 old_timestamp = 0; 437 uint32 old_timestamp = 0;
382 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 438 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
383 new_timestamp = 1234567890; 439 new_timestamp = 1234567890;
384 old_timestamp = 1234567000; 440 old_timestamp = 1234567000;
385 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 441 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
386 new_timestamp = 1234567000; 442 new_timestamp = 1234567000;
387 old_timestamp = 1234567890; 443 old_timestamp = 1234567890;
388 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 444 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
389 new_timestamp = 123; 445 new_timestamp = 123;
390 old_timestamp = 4234567890u; 446 old_timestamp = 4234567890u;
391 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 447 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
392 new_timestamp = 4234567890u; 448 new_timestamp = 4234567890u;
393 old_timestamp = 123; 449 old_timestamp = 123;
394 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 450 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
395 } 451 }
396 452
397 TEST_F(RtcpTest, RtpTimestampInSenderTime) { 453 TEST_F(RtcpTest, RtpTimestampInSenderTime) {
398 RtcpPeer rtcp_peer(&testing_clock_, 454 RtcpPeer rtcp_peer(&testing_clock_,
399 &mock_sender_feedback_, 455 &mock_sender_feedback_,
400 NULL, 456 NULL,
401 NULL, 457 NULL,
402 NULL, 458 NULL,
403 kRtcpReducedSize, 459 kRtcpReducedSize,
404 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 460 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
405 false,
406 kReceiverSsrc, 461 kReceiverSsrc,
462 kSenderSsrc,
407 kCName); 463 kCName);
408 int frequency = 32000; 464 int frequency = 32000;
409 uint32 rtp_timestamp = 64000; 465 uint32 rtp_timestamp = 64000;
410 base::TimeTicks rtp_timestamp_in_ticks; 466 base::TimeTicks rtp_timestamp_in_ticks;
411 467
412 // Test fail before we get a OnReceivedLipSyncInfo. 468 // Test fail before we get a OnReceivedLipSyncInfo.
413 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, 469 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
414 &rtp_timestamp_in_ticks)); 470 &rtp_timestamp_in_ticks));
415 471
416 uint32 ntp_seconds = 0; 472 uint32 ntp_seconds = 0;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); 508 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions);
453 rtp_timestamp = 64000; 509 rtp_timestamp = 64000;
454 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, 510 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
455 &rtp_timestamp_in_ticks)); 511 &rtp_timestamp_in_ticks));
456 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), 512 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000),
457 rtp_timestamp_in_ticks); 513 rtp_timestamp_in_ticks);
458 } 514 }
459 515
460 } // namespace cast 516 } // namespace cast
461 } // namespace media 517 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp_sender_unittest.cc ('k') | media/cast/rtcp/test_rtcp_packet_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698