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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" |
9 #include "media/cast/net/rtcp/rtcp.h" | 9 #include "media/cast/net/rtcp/rtcp.h" |
10 #include "media/cast/net/rtp/cast_message_builder.h" | 10 #include "media/cast/net/rtp/cast_message_builder.h" |
11 #include "media/cast/net/rtp/framer.h" | 11 #include "media/cast/net/rtp/framer.h" |
12 #include "media/cast/net/rtp/rtp_defines.h" | 12 #include "media/cast/net/rtp/rtp_defines.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 namespace media { | 15 namespace media { |
16 namespace cast { | 16 namespace cast { |
17 | 17 |
18 namespace { | 18 namespace { |
19 static const uint32 kSsrc = 0x1234; | 19 static const uint32_t kSsrc = 0x1234; |
20 static const uint32 kShortTimeIncrementMs = 10; | 20 static const uint32_t kShortTimeIncrementMs = 10; |
21 static const uint32 kLongTimeIncrementMs = 40; | 21 static const uint32_t kLongTimeIncrementMs = 40; |
22 static const int64 kStartMillisecond = INT64_C(12345678900000); | 22 static const int64_t kStartMillisecond = INT64_C(12345678900000); |
23 | 23 |
24 typedef std::map<uint32, size_t> MissingPacketsMap; | 24 typedef std::map<uint32_t, size_t> MissingPacketsMap; |
25 | 25 |
26 class NackFeedbackVerification : public RtpPayloadFeedback { | 26 class NackFeedbackVerification : public RtpPayloadFeedback { |
27 public: | 27 public: |
28 NackFeedbackVerification() | 28 NackFeedbackVerification() |
29 : triggered_(false), missing_packets_(), last_frame_acked_(0) {} | 29 : triggered_(false), missing_packets_(), last_frame_acked_(0) {} |
30 | 30 |
31 void CastFeedback(const RtcpCastMessage& cast_feedback) final { | 31 void CastFeedback(const RtcpCastMessage& cast_feedback) final { |
32 EXPECT_EQ(kSsrc, cast_feedback.media_ssrc); | 32 EXPECT_EQ(kSsrc, cast_feedback.media_ssrc); |
33 | 33 |
34 last_frame_acked_ = cast_feedback.ack_frame_id; | 34 last_frame_acked_ = cast_feedback.ack_frame_id; |
(...skipping 11 matching lines...) Expand all Loading... |
46 std::make_pair(frame_it->first, kRtcpCastAllPacketsLost)); | 46 std::make_pair(frame_it->first, kRtcpCastAllPacketsLost)); |
47 } else { | 47 } else { |
48 missing_packets_.insert( | 48 missing_packets_.insert( |
49 std::make_pair(frame_it->first, frame_it->second.size())); | 49 std::make_pair(frame_it->first, frame_it->second.size())); |
50 } | 50 } |
51 ++frame_it; | 51 ++frame_it; |
52 } | 52 } |
53 triggered_ = true; | 53 triggered_ = true; |
54 } | 54 } |
55 | 55 |
56 size_t num_missing_packets(uint32 frame_id) { | 56 size_t num_missing_packets(uint32_t frame_id) { |
57 MissingPacketsMap::iterator it; | 57 MissingPacketsMap::iterator it; |
58 it = missing_packets_.find(frame_id); | 58 it = missing_packets_.find(frame_id); |
59 if (it == missing_packets_.end()) | 59 if (it == missing_packets_.end()) |
60 return 0; | 60 return 0; |
61 | 61 |
62 return it->second; | 62 return it->second; |
63 } | 63 } |
64 | 64 |
65 // Holds value for one call. | 65 // Holds value for one call. |
66 bool triggered() { | 66 bool triggered() { |
67 bool ret_val = triggered_; | 67 bool ret_val = triggered_; |
68 triggered_ = false; | 68 triggered_ = false; |
69 return ret_val; | 69 return ret_val; |
70 } | 70 } |
71 | 71 |
72 uint32 last_frame_acked() { return last_frame_acked_; } | 72 uint32_t last_frame_acked() { return last_frame_acked_; } |
73 | 73 |
74 private: | 74 private: |
75 bool triggered_; | 75 bool triggered_; |
76 MissingPacketsMap missing_packets_; // Missing packets per frame. | 76 MissingPacketsMap missing_packets_; // Missing packets per frame. |
77 uint32 last_frame_acked_; | 77 uint32_t last_frame_acked_; |
78 | 78 |
79 DISALLOW_COPY_AND_ASSIGN(NackFeedbackVerification); | 79 DISALLOW_COPY_AND_ASSIGN(NackFeedbackVerification); |
80 }; | 80 }; |
81 } // namespace | 81 } // namespace |
82 | 82 |
83 class CastMessageBuilderTest : public ::testing::Test { | 83 class CastMessageBuilderTest : public ::testing::Test { |
84 protected: | 84 protected: |
85 CastMessageBuilderTest() | 85 CastMessageBuilderTest() |
86 : framer_(&testing_clock_, | 86 : framer_(&testing_clock_, |
87 &feedback_, | 87 &feedback_, |
88 kSsrc, | 88 kSsrc, |
89 true, | 89 true, |
90 10), | 90 10), |
91 cast_msg_builder_(new CastMessageBuilder(&testing_clock_, | 91 cast_msg_builder_(new CastMessageBuilder(&testing_clock_, |
92 &feedback_, | 92 &feedback_, |
93 &framer_, | 93 &framer_, |
94 kSsrc, | 94 kSsrc, |
95 true, | 95 true, |
96 0)) { | 96 0)) { |
97 rtp_header_.sender_ssrc = kSsrc; | 97 rtp_header_.sender_ssrc = kSsrc; |
98 rtp_header_.is_key_frame = false; | 98 rtp_header_.is_key_frame = false; |
99 testing_clock_.Advance( | 99 testing_clock_.Advance( |
100 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 100 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
101 } | 101 } |
102 | 102 |
103 ~CastMessageBuilderTest() override {} | 103 ~CastMessageBuilderTest() override {} |
104 | 104 |
105 void SetFrameIds(uint32 frame_id, uint32 reference_frame_id) { | 105 void SetFrameIds(uint32_t frame_id, uint32_t reference_frame_id) { |
106 rtp_header_.frame_id = frame_id; | 106 rtp_header_.frame_id = frame_id; |
107 rtp_header_.reference_frame_id = reference_frame_id; | 107 rtp_header_.reference_frame_id = reference_frame_id; |
108 } | 108 } |
109 | 109 |
110 void SetPacketId(uint16 packet_id) { rtp_header_.packet_id = packet_id; } | 110 void SetPacketId(uint16_t packet_id) { rtp_header_.packet_id = packet_id; } |
111 | 111 |
112 void SetMaxPacketId(uint16 max_packet_id) { | 112 void SetMaxPacketId(uint16_t max_packet_id) { |
113 rtp_header_.max_packet_id = max_packet_id; | 113 rtp_header_.max_packet_id = max_packet_id; |
114 } | 114 } |
115 | 115 |
116 void SetKeyFrame(bool is_key) { rtp_header_.is_key_frame = is_key; } | 116 void SetKeyFrame(bool is_key) { rtp_header_.is_key_frame = is_key; } |
117 | 117 |
118 void InsertPacket() { | 118 void InsertPacket() { |
119 bool duplicate; | 119 bool duplicate; |
120 uint8 payload = 0; | 120 uint8_t payload = 0; |
121 if (framer_.InsertPacket(&payload, 1, rtp_header_, &duplicate)) { | 121 if (framer_.InsertPacket(&payload, 1, rtp_header_, &duplicate)) { |
122 cast_msg_builder_->CompleteFrameReceived(rtp_header_.frame_id); | 122 cast_msg_builder_->CompleteFrameReceived(rtp_header_.frame_id); |
123 } | 123 } |
124 cast_msg_builder_->UpdateCastMessage(); | 124 cast_msg_builder_->UpdateCastMessage(); |
125 } | 125 } |
126 | 126 |
127 void SetDecoderSlowerThanMaxFrameRate(int max_unacked_frames) { | 127 void SetDecoderSlowerThanMaxFrameRate(int max_unacked_frames) { |
128 cast_msg_builder_.reset(new CastMessageBuilder(&testing_clock_, | 128 cast_msg_builder_.reset(new CastMessageBuilder(&testing_clock_, |
129 &feedback_, | 129 &feedback_, |
130 &framer_, | 130 &framer_, |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 } | 384 } |
385 | 385 |
386 TEST_F(CastMessageBuilderTest, SlowDownAck) { | 386 TEST_F(CastMessageBuilderTest, SlowDownAck) { |
387 SetDecoderSlowerThanMaxFrameRate(3); | 387 SetDecoderSlowerThanMaxFrameRate(3); |
388 SetFrameIds(0, 0); | 388 SetFrameIds(0, 0); |
389 SetPacketId(0); | 389 SetPacketId(0); |
390 SetMaxPacketId(0); | 390 SetMaxPacketId(0); |
391 SetKeyFrame(true); | 391 SetKeyFrame(true); |
392 InsertPacket(); | 392 InsertPacket(); |
393 | 393 |
394 uint32 frame_id; | 394 uint32_t frame_id; |
395 testing_clock_.Advance( | 395 testing_clock_.Advance( |
396 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); | 396 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
397 SetKeyFrame(false); | 397 SetKeyFrame(false); |
398 for (frame_id = 1; frame_id < 3; ++frame_id) { | 398 for (frame_id = 1; frame_id < 3; ++frame_id) { |
399 EXPECT_TRUE(feedback_.triggered()); | 399 EXPECT_TRUE(feedback_.triggered()); |
400 EXPECT_EQ(frame_id - 1, feedback_.last_frame_acked()); | 400 EXPECT_EQ(frame_id - 1, feedback_.last_frame_acked()); |
401 SetFrameIds(frame_id, frame_id - 1); | 401 SetFrameIds(frame_id, frame_id - 1); |
402 InsertPacket(); | 402 InsertPacket(); |
403 testing_clock_.Advance( | 403 testing_clock_.Advance( |
404 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); | 404 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
405 } | 405 } |
406 // We should now have entered the slowdown ACK state. | 406 // We should now have entered the slowdown ACK state. |
407 uint32 expected_frame_id = 1; | 407 uint32_t expected_frame_id = 1; |
408 for (; frame_id < 10; ++frame_id) { | 408 for (; frame_id < 10; ++frame_id) { |
409 if (frame_id % 2) { | 409 if (frame_id % 2) { |
410 ++expected_frame_id; | 410 ++expected_frame_id; |
411 EXPECT_TRUE(feedback_.triggered()); | 411 EXPECT_TRUE(feedback_.triggered()); |
412 } else { | 412 } else { |
413 EXPECT_FALSE(feedback_.triggered()); | 413 EXPECT_FALSE(feedback_.triggered()); |
414 } | 414 } |
415 EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked()); | 415 EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked()); |
416 SetFrameIds(frame_id, frame_id - 1); | 416 SetFrameIds(frame_id, frame_id - 1); |
417 InsertPacket(); | 417 InsertPacket(); |
(...skipping 10 matching lines...) Expand all Loading... |
428 SetFrameIds(frame_id, frame_id - 1); | 428 SetFrameIds(frame_id, frame_id - 1); |
429 InsertPacket(); | 429 InsertPacket(); |
430 testing_clock_.Advance( | 430 testing_clock_.Advance( |
431 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); | 431 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
432 EXPECT_TRUE(feedback_.triggered()); | 432 EXPECT_TRUE(feedback_.triggered()); |
433 EXPECT_EQ(frame_id, feedback_.last_frame_acked()); | 433 EXPECT_EQ(frame_id, feedback_.last_frame_acked()); |
434 } | 434 } |
435 | 435 |
436 } // namespace cast | 436 } // namespace cast |
437 } // namespace media | 437 } // namespace media |
OLD | NEW |