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

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

Issue 388663003: Cast: Reshuffle files under media/cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: missing includes Created 6 years, 5 months 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/rtcp/rtcp_sender.cc ('k') | media/cast/rtcp/rtcp_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/memory/scoped_ptr.h"
6 #include "base/test/simple_test_tick_clock.h"
7 #include "media/cast/cast_defines.h"
8 #include "media/cast/cast_environment.h"
9 #include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
10 #include "media/cast/rtcp/rtcp_sender.h"
11 #include "media/cast/rtcp/rtcp_utility.h"
12 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
13 #include "media/cast/test/fake_single_thread_task_runner.h"
14 #include "media/cast/transport/cast_transport_defines.h"
15 #include "media/cast/transport/pacing/paced_sender.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17
18 namespace media {
19 namespace cast {
20
21 namespace {
22 static const uint32 kSendingSsrc = 0x12345678;
23 static const uint32 kMediaSsrc = 0x87654321;
24 static const base::TimeDelta kDefaultDelay =
25 base::TimeDelta::FromMilliseconds(100);
26 static const std::string kCName("test@10.1.1.1");
27
28 transport::RtcpReportBlock GetReportBlock() {
29 transport::RtcpReportBlock report_block;
30 // Initialize remote_ssrc to a "clearly illegal" value.
31 report_block.remote_ssrc = 0xDEAD;
32 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
33 report_block.fraction_lost = kLoss >> 24;
34 report_block.cumulative_lost = kLoss; // 24 bits valid.
35 report_block.extended_high_sequence_number = kExtendedMax;
36 report_block.jitter = kTestJitter;
37 report_block.last_sr = kLastSr;
38 report_block.delay_since_last_sr = kDelayLastSr;
39 return report_block;
40 }
41
42 } // namespace
43
44 class TestRtcpTransport : public transport::PacedPacketSender {
45 public:
46 TestRtcpTransport() : packet_count_(0) {}
47
48 virtual bool SendRtcpPacket(uint32 ssrc,
49 transport::PacketRef packet) OVERRIDE {
50 EXPECT_EQ(expected_packet_.size(), packet->data.size());
51 EXPECT_EQ(0, memcmp(expected_packet_.data(),
52 packet->data.data(),
53 packet->data.size()));
54 packet_count_++;
55 return true;
56 }
57
58 virtual bool SendPackets(
59 const transport::SendPacketVector& packets) OVERRIDE {
60 return false;
61 }
62 virtual bool ResendPackets(
63 const transport::SendPacketVector& packets,
64 base::TimeDelta dedupe_window) OVERRIDE {
65 return false;
66 }
67
68 virtual void CancelSendingPacket(
69 const transport::PacketKey& packet_key) OVERRIDE {
70 }
71
72 void SetExpectedRtcpPacket(scoped_ptr<Packet> packet) {
73 expected_packet_.swap(*packet);
74 }
75
76 int packet_count() const { return packet_count_; }
77
78 private:
79 Packet expected_packet_;
80 int packet_count_;
81
82 DISALLOW_COPY_AND_ASSIGN(TestRtcpTransport);
83 };
84
85 class RtcpSenderTest : public ::testing::Test {
86 protected:
87 RtcpSenderTest()
88 : testing_clock_(new base::SimpleTestTickClock()),
89 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
90 cast_environment_(new CastEnvironment(
91 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
92 task_runner_,
93 task_runner_,
94 task_runner_)),
95 rtcp_sender_(new RtcpSender(cast_environment_,
96 &test_transport_,
97 kSendingSsrc,
98 kCName)) {}
99
100 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
101 TestRtcpTransport test_transport_;
102 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
103 scoped_refptr<CastEnvironment> cast_environment_;
104 scoped_ptr<RtcpSender> rtcp_sender_;
105
106 DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest);
107 };
108
109 TEST_F(RtcpSenderTest, RtcpReceiverReport) {
110 // Empty receiver report + c_name.
111 TestRtcpPacketBuilder p1;
112 p1.AddRr(kSendingSsrc, 0);
113 p1.AddSdesCname(kSendingSsrc, kCName);
114 test_transport_.SetExpectedRtcpPacket(p1.GetPacket());
115
116 rtcp_sender_->SendRtcpFromRtpReceiver(
117 transport::kRtcpRr, NULL, NULL, NULL, NULL, kDefaultDelay);
118
119 EXPECT_EQ(1, test_transport_.packet_count());
120
121 // Receiver report with report block + c_name.
122 TestRtcpPacketBuilder p2;
123 p2.AddRr(kSendingSsrc, 1);
124 p2.AddRb(kMediaSsrc);
125 p2.AddSdesCname(kSendingSsrc, kCName);
126 test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass());
127
128 transport::RtcpReportBlock report_block = GetReportBlock();
129
130 rtcp_sender_->SendRtcpFromRtpReceiver(
131 transport::kRtcpRr, &report_block, NULL, NULL, NULL, kDefaultDelay);
132
133 EXPECT_EQ(2, test_transport_.packet_count());
134 }
135
136 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) {
137 // Receiver report with report block + c_name.
138 TestRtcpPacketBuilder p;
139 p.AddRr(kSendingSsrc, 1);
140 p.AddRb(kMediaSsrc);
141 p.AddSdesCname(kSendingSsrc, kCName);
142 p.AddXrHeader(kSendingSsrc);
143 p.AddXrRrtrBlock();
144 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
145
146 transport::RtcpReportBlock report_block = GetReportBlock();
147
148 RtcpReceiverReferenceTimeReport rrtr;
149 rrtr.ntp_seconds = kNtpHigh;
150 rrtr.ntp_fraction = kNtpLow;
151
152 rtcp_sender_->SendRtcpFromRtpReceiver(
153 transport::kRtcpRr | transport::kRtcpRrtr,
154 &report_block,
155 &rrtr,
156 NULL,
157 NULL,
158 kDefaultDelay);
159
160 EXPECT_EQ(1, test_transport_.packet_count());
161 }
162
163 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) {
164 // Receiver report with report block + c_name.
165 TestRtcpPacketBuilder p;
166 p.AddRr(kSendingSsrc, 1);
167 p.AddRb(kMediaSsrc);
168 p.AddSdesCname(kSendingSsrc, kCName);
169 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
170 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
171
172 transport::RtcpReportBlock report_block = GetReportBlock();
173
174 RtcpCastMessage cast_message(kMediaSsrc);
175 cast_message.ack_frame_id_ = kAckFrameId;
176 PacketIdSet missing_packets;
177 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
178
179 missing_packets.insert(kLostPacketId1);
180 missing_packets.insert(kLostPacketId2);
181 missing_packets.insert(kLostPacketId3);
182 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
183 missing_packets;
184
185 rtcp_sender_->SendRtcpFromRtpReceiver(
186 transport::kRtcpRr | transport::kRtcpCast,
187 &report_block,
188 NULL,
189 &cast_message,
190 NULL,
191 kDefaultDelay);
192
193 EXPECT_EQ(1, test_transport_.packet_count());
194 }
195
196 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) {
197 TestRtcpPacketBuilder p;
198 p.AddRr(kSendingSsrc, 1);
199 p.AddRb(kMediaSsrc);
200 p.AddSdesCname(kSendingSsrc, kCName);
201 p.AddXrHeader(kSendingSsrc);
202 p.AddXrRrtrBlock();
203 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
204 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
205
206 transport::RtcpReportBlock report_block = GetReportBlock();
207
208 RtcpReceiverReferenceTimeReport rrtr;
209 rrtr.ntp_seconds = kNtpHigh;
210 rrtr.ntp_fraction = kNtpLow;
211
212 RtcpCastMessage cast_message(kMediaSsrc);
213 cast_message.ack_frame_id_ = kAckFrameId;
214 PacketIdSet missing_packets;
215 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
216
217 missing_packets.insert(kLostPacketId1);
218 missing_packets.insert(kLostPacketId2);
219 missing_packets.insert(kLostPacketId3);
220 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
221 missing_packets;
222
223 rtcp_sender_->SendRtcpFromRtpReceiver(
224 transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast,
225 &report_block,
226 &rrtr,
227 &cast_message,
228 NULL,
229 kDefaultDelay);
230
231 EXPECT_EQ(1, test_transport_.packet_count());
232 }
233
234 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
235 static const uint32 kTimeBaseMs = 12345678;
236 static const uint32 kTimeDelayMs = 10;
237
238 TestRtcpPacketBuilder p;
239 p.AddRr(kSendingSsrc, 1);
240 p.AddRb(kMediaSsrc);
241 p.AddSdesCname(kSendingSsrc, kCName);
242 p.AddXrHeader(kSendingSsrc);
243 p.AddXrRrtrBlock();
244 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
245 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
246
247 transport::RtcpReportBlock report_block = GetReportBlock();
248
249 RtcpReceiverReferenceTimeReport rrtr;
250 rrtr.ntp_seconds = kNtpHigh;
251 rrtr.ntp_fraction = kNtpLow;
252
253 RtcpCastMessage cast_message(kMediaSsrc);
254 cast_message.ack_frame_id_ = kAckFrameId;
255 PacketIdSet missing_packets;
256 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
257
258 missing_packets.insert(kLostPacketId1);
259 missing_packets.insert(kLostPacketId2);
260 missing_packets.insert(kLostPacketId3);
261 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
262 missing_packets;
263
264 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
265 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
266
267 rtcp_sender_->SendRtcpFromRtpReceiver(
268 transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast |
269 transport::kRtcpReceiverLog,
270 &report_block,
271 &rrtr,
272 &cast_message,
273 &rtcp_events,
274 kDefaultDelay);
275
276 base::SimpleTestTickClock testing_clock;
277 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
278
279 p.AddReceiverLog(kSendingSsrc);
280 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
281 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
282 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs);
283
284 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
285
286 FrameEvent frame_event;
287 frame_event.rtp_timestamp = kRtpTimestamp;
288 frame_event.type = FRAME_ACK_SENT;
289 frame_event.media_type = VIDEO_EVENT;
290 frame_event.timestamp = testing_clock.NowTicks();
291 event_subscriber.OnReceiveFrameEvent(frame_event);
292 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
293
294 PacketEvent packet_event;
295 packet_event.rtp_timestamp = kRtpTimestamp;
296 packet_event.type = PACKET_RECEIVED;
297 packet_event.media_type = VIDEO_EVENT;
298 packet_event.timestamp = testing_clock.NowTicks();
299 packet_event.packet_id = kLostPacketId1;
300 event_subscriber.OnReceivePacketEvent(packet_event);
301 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
302 EXPECT_EQ(2u, rtcp_events.size());
303
304 rtcp_sender_->SendRtcpFromRtpReceiver(
305 transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast |
306 transport::kRtcpReceiverLog,
307 &report_block,
308 &rrtr,
309 &cast_message,
310 &rtcp_events,
311 kDefaultDelay);
312
313 EXPECT_EQ(2, test_transport_.packet_count());
314 }
315
316 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) {
317 static const uint32 kTimeBaseMs = 12345678;
318 static const uint32 kTimeDelayMs = 10;
319
320 TestRtcpPacketBuilder p;
321 p.AddRr(kSendingSsrc, 1);
322 p.AddRb(kMediaSsrc);
323 p.AddSdesCname(kSendingSsrc, kCName);
324
325 transport::RtcpReportBlock report_block = GetReportBlock();
326
327 base::SimpleTestTickClock testing_clock;
328 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
329
330 p.AddReceiverLog(kSendingSsrc);
331
332 int remaining_bytes = kMaxReceiverLogBytes;
333 remaining_bytes -= kRtcpCastLogHeaderSize;
334
335 remaining_bytes -= kRtcpReceiverFrameLogSize;
336 int num_events = remaining_bytes / kRtcpReceiverEventLogSize;
337 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages));
338 // Only the last |num_events| events are sent due to receiver log size cap.
339 p.AddReceiverFrameLog(
340 kRtpTimestamp + 2345,
341 num_events,
342 kTimeBaseMs + (kRtcpMaxReceiverLogMessages - num_events) * kTimeDelayMs);
343 for (int i = 0; i < num_events; i++) {
344 p.AddReceiverEventLog(
345 kLostPacketId1, PACKET_RECEIVED,
346 static_cast<uint16>(kTimeDelayMs * i));
347 }
348
349 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
350
351 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
352 FrameEvent frame_event;
353 frame_event.rtp_timestamp = kRtpTimestamp;
354 frame_event.type = FRAME_ACK_SENT;
355 frame_event.media_type = VIDEO_EVENT;
356 frame_event.timestamp = testing_clock.NowTicks();
357 event_subscriber.OnReceiveFrameEvent(frame_event);
358
359 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
360 PacketEvent packet_event;
361 packet_event.rtp_timestamp = kRtpTimestamp + 2345;
362 packet_event.type = PACKET_RECEIVED;
363 packet_event.media_type = VIDEO_EVENT;
364 packet_event.timestamp = testing_clock.NowTicks();
365 packet_event.packet_id = kLostPacketId1;
366 event_subscriber.OnReceivePacketEvent(packet_event);
367 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
368 }
369
370 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
371 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
372
373 rtcp_sender_->SendRtcpFromRtpReceiver(
374 transport::kRtcpRr | transport::kRtcpReceiverLog,
375 &report_block,
376 NULL,
377 NULL,
378 &rtcp_events,
379 kDefaultDelay);
380
381 EXPECT_EQ(1, test_transport_.packet_count());
382 }
383
384 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) {
385 static const uint32 kTimeBaseMs = 12345678;
386 static const uint32 kTimeDelayMs = 10;
387
388 TestRtcpPacketBuilder p;
389 p.AddRr(kSendingSsrc, 1);
390 p.AddRb(kMediaSsrc);
391 p.AddSdesCname(kSendingSsrc, kCName);
392
393 transport::RtcpReportBlock report_block = GetReportBlock();
394
395 base::SimpleTestTickClock testing_clock;
396 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
397
398 p.AddReceiverLog(kSendingSsrc);
399
400 int remaining_bytes = kMaxReceiverLogBytes;
401 remaining_bytes -= kRtcpCastLogHeaderSize;
402
403 int num_events =
404 remaining_bytes / (kRtcpReceiverFrameLogSize + kRtcpReceiverEventLogSize);
405
406 // The last |num_events| events are sent due to receiver log size cap.
407 for (size_t i = kRtcpMaxReceiverLogMessages - num_events;
408 i < kRtcpMaxReceiverLogMessages;
409 ++i) {
410 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs);
411 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
412 }
413 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
414
415 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
416
417 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
418 FrameEvent frame_event;
419 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i);
420 frame_event.type = FRAME_ACK_SENT;
421 frame_event.media_type = VIDEO_EVENT;
422 frame_event.timestamp = testing_clock.NowTicks();
423 event_subscriber.OnReceiveFrameEvent(frame_event);
424 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
425 }
426
427 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
428 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
429
430 rtcp_sender_->SendRtcpFromRtpReceiver(
431 transport::kRtcpRr | transport::kRtcpReceiverLog,
432 &report_block,
433 NULL,
434 NULL,
435 &rtcp_events,
436 kDefaultDelay);
437
438 EXPECT_EQ(1, test_transport_.packet_count());
439 }
440
441 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) {
442 static const uint32 kTimeBaseMs = 12345678;
443
444 TestRtcpPacketBuilder p;
445 p.AddRr(kSendingSsrc, 1);
446 p.AddRb(kMediaSsrc);
447 p.AddSdesCname(kSendingSsrc, kCName);
448
449 transport::RtcpReportBlock report_block = GetReportBlock();
450
451 base::SimpleTestTickClock testing_clock;
452 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
453
454 p.AddReceiverLog(kSendingSsrc);
455
456 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart.
457 // Only last 10 events will be sent because the first event is more than
458 // 4095 milliseconds away from latest event.
459 const int kTimeBetweenEventsMs = 410;
460 p.AddReceiverFrameLog(kRtpTimestamp, 10, kTimeBaseMs + kTimeBetweenEventsMs);
461 for (int i = 0; i < 10; ++i) {
462 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs);
463 }
464 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
465
466 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
467 for (int i = 0; i < 11; ++i) {
468 FrameEvent frame_event;
469 frame_event.rtp_timestamp = kRtpTimestamp;
470 frame_event.type = FRAME_ACK_SENT;
471 frame_event.media_type = VIDEO_EVENT;
472 frame_event.timestamp = testing_clock.NowTicks();
473 event_subscriber.OnReceiveFrameEvent(frame_event);
474 testing_clock.Advance(
475 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs));
476 }
477
478 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
479 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
480
481 rtcp_sender_->SendRtcpFromRtpReceiver(
482 transport::kRtcpRr | transport::kRtcpReceiverLog,
483 &report_block,
484 NULL,
485 NULL,
486 &rtcp_events,
487 kDefaultDelay);
488
489 EXPECT_EQ(1, test_transport_.packet_count());
490 }
491
492 TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) {
493 uint32 time_base_ms = 12345678;
494 int kTimeBetweenEventsMs = 10;
495
496 transport::RtcpReportBlock report_block = GetReportBlock();
497
498 base::SimpleTestTickClock testing_clock;
499 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms));
500
501 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
502 size_t packet_count = kReceiveLogMessageHistorySize + 10;
503 for (size_t i = 0; i < packet_count; i++) {
504 TestRtcpPacketBuilder p;
505 p.AddRr(kSendingSsrc, 1);
506 p.AddRb(kMediaSsrc);
507 p.AddSdesCname(kSendingSsrc, kCName);
508
509 p.AddReceiverLog(kSendingSsrc);
510
511 if (i >= kSecondRedundancyOffset) {
512 p.AddReceiverFrameLog(
513 kRtpTimestamp,
514 1,
515 time_base_ms - kSecondRedundancyOffset * kTimeBetweenEventsMs);
516 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
517 }
518 if (i >= kFirstRedundancyOffset) {
519 p.AddReceiverFrameLog(
520 kRtpTimestamp,
521 1,
522 time_base_ms - kFirstRedundancyOffset * kTimeBetweenEventsMs);
523 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
524 }
525 p.AddReceiverFrameLog(kRtpTimestamp, 1, time_base_ms);
526 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
527
528 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
529
530 FrameEvent frame_event;
531 frame_event.rtp_timestamp = kRtpTimestamp;
532 frame_event.type = FRAME_ACK_SENT;
533 frame_event.media_type = VIDEO_EVENT;
534 frame_event.timestamp = testing_clock.NowTicks();
535 event_subscriber.OnReceiveFrameEvent(frame_event);
536
537 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
538 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
539
540 rtcp_sender_->SendRtcpFromRtpReceiver(
541 transport::kRtcpRr | transport::kRtcpReceiverLog,
542 &report_block,
543 NULL,
544 NULL,
545 &rtcp_events,
546 kDefaultDelay);
547
548 testing_clock.Advance(
549 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs));
550 time_base_ms += kTimeBetweenEventsMs;
551 }
552
553 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count());
554 }
555
556 } // namespace cast
557 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp_sender.cc ('k') | media/cast/rtcp/rtcp_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698