| OLD | NEW |
| 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/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.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/rtcp_sender.h" | 8 #include "media/cast/rtcp/rtcp_sender.h" |
| 9 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 9 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 sender_info.rtp_timestamp = kRtpTimestamp; | 70 sender_info.rtp_timestamp = kRtpTimestamp; |
| 71 sender_info.send_packet_count = kSendPacketCount; | 71 sender_info.send_packet_count = kSendPacketCount; |
| 72 sender_info.send_octet_count = kSendOctetCount; | 72 sender_info.send_octet_count = kSendOctetCount; |
| 73 | 73 |
| 74 // Sender report + c_name. | 74 // Sender report + c_name. |
| 75 TestRtcpPacketBuilder p; | 75 TestRtcpPacketBuilder p; |
| 76 p.AddSr(kSendingSsrc, 0); | 76 p.AddSr(kSendingSsrc, 0); |
| 77 p.AddSdesCname(kSendingSsrc, kCName); | 77 p.AddSdesCname(kSendingSsrc, kCName); |
| 78 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 78 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
| 79 | 79 |
| 80 rtcp_sender_->SendRtcp(RtcpSender::kRtcpSr, | 80 rtcp_sender_->SendRtcpFromRtpSender(RtcpSender::kRtcpSr, |
| 81 &sender_info, | 81 &sender_info, |
| 82 NULL, | 82 NULL, |
| 83 0, | 83 NULL); |
| 84 NULL, | |
| 85 NULL, | |
| 86 NULL); | |
| 87 | 84 |
| 88 EXPECT_EQ(1, test_transport_.packet_count()); | 85 EXPECT_EQ(1, test_transport_.packet_count()); |
| 89 } | 86 } |
| 90 | 87 |
| 91 TEST_F(RtcpSenderTest, RtcpReceiverReport) { | 88 TEST_F(RtcpSenderTest, RtcpReceiverReport) { |
| 92 // Empty receiver report + c_name. | 89 // Empty receiver report + c_name. |
| 93 TestRtcpPacketBuilder p1; | 90 TestRtcpPacketBuilder p1; |
| 94 p1.AddRr(kSendingSsrc, 0); | 91 p1.AddRr(kSendingSsrc, 0); |
| 95 p1.AddSdesCname(kSendingSsrc, kCName); | 92 p1.AddSdesCname(kSendingSsrc, kCName); |
| 96 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); | 93 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); |
| 97 | 94 |
| 98 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr, | 95 rtcp_sender_->SendRtcpFromRtpReceiver(RtcpSender::kRtcpRr, |
| 99 NULL, | 96 NULL, NULL, NULL, NULL); |
| 100 NULL, | |
| 101 0, | |
| 102 NULL, | |
| 103 NULL, | |
| 104 NULL); | |
| 105 | 97 |
| 106 EXPECT_EQ(1, test_transport_.packet_count()); | 98 EXPECT_EQ(1, test_transport_.packet_count()); |
| 107 | 99 |
| 108 // Receiver report with report block + c_name. | 100 // Receiver report with report block + c_name. |
| 109 TestRtcpPacketBuilder p2; | 101 TestRtcpPacketBuilder p2; |
| 110 p2.AddRr(kSendingSsrc, 1); | 102 p2.AddRr(kSendingSsrc, 1); |
| 111 p2.AddRb(kMediaSsrc); | 103 p2.AddRb(kMediaSsrc); |
| 112 p2.AddSdesCname(kSendingSsrc, kCName); | 104 p2.AddSdesCname(kSendingSsrc, kCName); |
| 113 test_transport_.SetExpectedRtcpPacket(p2.Packet(), p2.Length()); | 105 test_transport_.SetExpectedRtcpPacket(p2.Packet(), p2.Length()); |
| 114 | 106 |
| 115 RtcpReportBlock report_block; | 107 RtcpReportBlock report_block; |
| 116 // Initialize remote_ssrc to a "clearly illegal" value. | 108 // Initialize remote_ssrc to a "clearly illegal" value. |
| 117 report_block.remote_ssrc = 0xDEAD; | 109 report_block.remote_ssrc = 0xDEAD; |
| 118 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 110 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 119 report_block.fraction_lost = kLoss >> 24; | 111 report_block.fraction_lost = kLoss >> 24; |
| 120 report_block.cumulative_lost = kLoss; // 24 bits valid. | 112 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 121 report_block.extended_high_sequence_number = | 113 report_block.extended_high_sequence_number = kExtendedMax; |
| 122 kExtendedMax; | 114 report_block.jitter = kTestJitter; |
| 123 report_block.jitter = kJitter; | |
| 124 report_block.last_sr = kLastSr; | 115 report_block.last_sr = kLastSr; |
| 125 report_block.delay_since_last_sr = kDelayLastSr; | 116 report_block.delay_since_last_sr = kDelayLastSr; |
| 126 | 117 |
| 127 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr, | 118 rtcp_sender_->SendRtcpFromRtpReceiver(RtcpSender::kRtcpRr, &report_block, |
| 128 NULL, | 119 NULL, NULL, NULL); |
| 129 &report_block, | |
| 130 0, | |
| 131 NULL, | |
| 132 NULL, | |
| 133 NULL); | |
| 134 | 120 |
| 135 EXPECT_EQ(2, test_transport_.packet_count()); | 121 EXPECT_EQ(2, test_transport_.packet_count()); |
| 136 } | 122 } |
| 137 | 123 |
| 138 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { | 124 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { |
| 139 RtcpSenderInfo sender_info; | 125 RtcpSenderInfo sender_info; |
| 140 sender_info.ntp_seconds = kNtpHigh; | 126 sender_info.ntp_seconds = kNtpHigh; |
| 141 sender_info.ntp_fraction = kNtpLow; | 127 sender_info.ntp_fraction = kNtpLow; |
| 142 sender_info.rtp_timestamp = kRtpTimestamp; | 128 sender_info.rtp_timestamp = kRtpTimestamp; |
| 143 sender_info.send_packet_count = kSendPacketCount; | 129 sender_info.send_packet_count = kSendPacketCount; |
| 144 sender_info.send_octet_count = kSendOctetCount; | 130 sender_info.send_octet_count = kSendOctetCount; |
| 145 | 131 |
| 146 // Sender report + c_name + dlrr. | 132 // Sender report + c_name + dlrr. |
| 147 TestRtcpPacketBuilder p1; | 133 TestRtcpPacketBuilder p1; |
| 148 p1.AddSr(kSendingSsrc, 0); | 134 p1.AddSr(kSendingSsrc, 0); |
| 149 p1.AddSdesCname(kSendingSsrc, kCName); | 135 p1.AddSdesCname(kSendingSsrc, kCName); |
| 150 p1.AddXrHeader(kSendingSsrc); | 136 p1.AddXrHeader(kSendingSsrc); |
| 151 p1.AddXrDlrrBlock(kSendingSsrc); | 137 p1.AddXrDlrrBlock(kSendingSsrc); |
| 152 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); | 138 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); |
| 153 | 139 |
| 154 RtcpDlrrReportBlock dlrr_rb; | 140 RtcpDlrrReportBlock dlrr_rb; |
| 155 dlrr_rb.last_rr = kLastRr; | 141 dlrr_rb.last_rr = kLastRr; |
| 156 dlrr_rb.delay_since_last_rr = kDelayLastRr; | 142 dlrr_rb.delay_since_last_rr = kDelayLastRr; |
| 157 | 143 |
| 158 rtcp_sender_->SendRtcp(RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr, | 144 rtcp_sender_->SendRtcpFromRtpSender( |
| 159 &sender_info, | 145 RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr, |
| 160 NULL, | 146 &sender_info, |
| 161 0, | 147 &dlrr_rb, |
| 162 &dlrr_rb, | 148 NULL); |
| 163 NULL, | |
| 164 NULL); | |
| 165 | 149 |
| 166 EXPECT_EQ(1, test_transport_.packet_count()); | 150 EXPECT_EQ(1, test_transport_.packet_count()); |
| 167 } | 151 } |
| 168 | 152 |
| 169 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { | 153 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { |
| 170 // Receiver report with report block + c_name. | 154 // Receiver report with report block + c_name. |
| 171 TestRtcpPacketBuilder p; | 155 TestRtcpPacketBuilder p; |
| 172 p.AddRr(kSendingSsrc, 1); | 156 p.AddRr(kSendingSsrc, 1); |
| 173 p.AddRb(kMediaSsrc); | 157 p.AddRb(kMediaSsrc); |
| 174 p.AddSdesCname(kSendingSsrc, kCName); | 158 p.AddSdesCname(kSendingSsrc, kCName); |
| 175 p.AddXrHeader(kSendingSsrc); | 159 p.AddXrHeader(kSendingSsrc); |
| 176 p.AddXrRrtrBlock(); | 160 p.AddXrRrtrBlock(); |
| 177 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 161 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
| 178 | 162 |
| 179 RtcpReportBlock report_block; | 163 RtcpReportBlock report_block; |
| 180 // Initialize remote_ssrc to a "clearly illegal" value. | 164 // Initialize remote_ssrc to a "clearly illegal" value. |
| 181 report_block.remote_ssrc = 0xDEAD; | 165 report_block.remote_ssrc = 0xDEAD; |
| 182 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 166 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 183 report_block.fraction_lost = kLoss >> 24; | 167 report_block.fraction_lost = kLoss >> 24; |
| 184 report_block.cumulative_lost = kLoss; // 24 bits valid. | 168 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 185 report_block.extended_high_sequence_number = | 169 report_block.extended_high_sequence_number = |
| 186 kExtendedMax; | 170 kExtendedMax; |
| 187 report_block.jitter = kJitter; | 171 report_block.jitter = kTestJitter; |
| 188 report_block.last_sr = kLastSr; | 172 report_block.last_sr = kLastSr; |
| 189 report_block.delay_since_last_sr = kDelayLastSr; | 173 report_block.delay_since_last_sr = kDelayLastSr; |
| 190 | 174 |
| 191 RtcpReceiverReferenceTimeReport rrtr; | 175 RtcpReceiverReferenceTimeReport rrtr; |
| 192 rrtr.ntp_seconds = kNtpHigh; | 176 rrtr.ntp_seconds = kNtpHigh; |
| 193 rrtr.ntp_fraction = kNtpLow; | 177 rrtr.ntp_fraction = kNtpLow; |
| 194 | 178 |
| 195 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, | 179 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 196 NULL, | 180 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, |
| 197 &report_block, | 181 &report_block, |
| 198 0, | 182 &rrtr, |
| 199 NULL, | 183 NULL, |
| 200 &rrtr, | 184 NULL); |
| 201 NULL); | |
| 202 | 185 |
| 203 EXPECT_EQ(1, test_transport_.packet_count()); | 186 EXPECT_EQ(1, test_transport_.packet_count()); |
| 204 } | 187 } |
| 205 | 188 |
| 206 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { | 189 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { |
| 207 // Receiver report with report block + c_name. | 190 // Receiver report with report block + c_name. |
| 208 TestRtcpPacketBuilder p; | 191 TestRtcpPacketBuilder p; |
| 209 p.AddRr(kSendingSsrc, 1); | 192 p.AddRr(kSendingSsrc, 1); |
| 210 p.AddRb(kMediaSsrc); | 193 p.AddRb(kMediaSsrc); |
| 211 p.AddSdesCname(kSendingSsrc, kCName); | 194 p.AddSdesCname(kSendingSsrc, kCName); |
| 212 p.AddCast(kSendingSsrc, kMediaSsrc); | 195 p.AddCast(kSendingSsrc, kMediaSsrc); |
| 213 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 196 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
| 214 | 197 |
| 215 RtcpReportBlock report_block; | 198 RtcpReportBlock report_block; |
| 216 // Initialize remote_ssrc to a "clearly illegal" value. | 199 // Initialize remote_ssrc to a "clearly illegal" value. |
| 217 report_block.remote_ssrc = 0xDEAD; | 200 report_block.remote_ssrc = 0xDEAD; |
| 218 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 201 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 219 report_block.fraction_lost = kLoss >> 24; | 202 report_block.fraction_lost = kLoss >> 24; |
| 220 report_block.cumulative_lost = kLoss; // 24 bits valid. | 203 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 221 report_block.extended_high_sequence_number = kExtendedMax; | 204 report_block.extended_high_sequence_number = kExtendedMax; |
| 222 report_block.jitter = kJitter; | 205 report_block.jitter = kTestJitter; |
| 223 report_block.last_sr = kLastSr; | 206 report_block.last_sr = kLastSr; |
| 224 report_block.delay_since_last_sr = kDelayLastSr; | 207 report_block.delay_since_last_sr = kDelayLastSr; |
| 225 | 208 |
| 226 RtcpCastMessage cast_message(kMediaSsrc); | 209 RtcpCastMessage cast_message(kMediaSsrc); |
| 227 cast_message.ack_frame_id_ = kAckFrameId; | 210 cast_message.ack_frame_id_ = kAckFrameId; |
| 228 PacketIdSet missing_packets; | 211 PacketIdSet missing_packets; |
| 229 cast_message.missing_frames_and_packets_[ | 212 cast_message.missing_frames_and_packets_[ |
| 230 kLostFrameId] = missing_packets; | 213 kLostFrameId] = missing_packets; |
| 231 | 214 |
| 232 missing_packets.insert(kLostPacketId1); | 215 missing_packets.insert(kLostPacketId1); |
| 233 missing_packets.insert(kLostPacketId2); | 216 missing_packets.insert(kLostPacketId2); |
| 234 missing_packets.insert(kLostPacketId3); | 217 missing_packets.insert(kLostPacketId3); |
| 235 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 218 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 236 missing_packets; | 219 missing_packets; |
| 237 | 220 |
| 238 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, | 221 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 239 NULL, | 222 RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, |
| 240 &report_block, | 223 &report_block, |
| 241 0, | 224 NULL, |
| 242 NULL, | 225 &cast_message, |
| 243 NULL, | 226 NULL); |
| 244 &cast_message); | |
| 245 | 227 |
| 246 EXPECT_EQ(1, test_transport_.packet_count()); | 228 EXPECT_EQ(1, test_transport_.packet_count()); |
| 247 } | 229 } |
| 248 | |
| 249 TEST_F(RtcpSenderTest, RtcpReceiverReportWithIntraFrameRequest) { | |
| 250 // Receiver report with report block + c_name. | |
| 251 TestRtcpPacketBuilder p; | |
| 252 p.AddRr(kSendingSsrc, 1); | |
| 253 p.AddRb(kMediaSsrc); | |
| 254 p.AddSdesCname(kSendingSsrc, kCName); | |
| 255 p.AddPli(kSendingSsrc, kMediaSsrc); | |
| 256 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 257 | |
| 258 RtcpReportBlock report_block; | |
| 259 // Initialize remote_ssrc to a "clearly illegal" value. | |
| 260 report_block.remote_ssrc = 0xDEAD; | |
| 261 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | |
| 262 report_block.fraction_lost = kLoss >> 24; | |
| 263 report_block.cumulative_lost = kLoss; // 24 bits valid. | |
| 264 report_block.extended_high_sequence_number = | |
| 265 kExtendedMax; | |
| 266 report_block.jitter = kJitter; | |
| 267 report_block.last_sr = kLastSr; | |
| 268 report_block.delay_since_last_sr = kDelayLastSr; | |
| 269 | |
| 270 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr | RtcpSender::kRtcpPli, | |
| 271 NULL, | |
| 272 &report_block, | |
| 273 kMediaSsrc, | |
| 274 NULL, | |
| 275 NULL, | |
| 276 NULL); | |
| 277 | |
| 278 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 279 } | |
| 280 | 230 |
| 281 } // namespace cast | 231 } // namespace cast |
| 282 } // namespace media | 232 } // namespace media |
| OLD | NEW |