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

Side by Side Diff: media/cast/rtcp/rtcp_sender_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: 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
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/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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698