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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_format_vp8_unittest.cc

Issue 2871173008: Fix packetization logic to leave space for extensions in the last packet (Closed)
Patch Set: Implement Sprang@ and Danilchap@ comments Created 3 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 test::RtpFormatVp8TestHelper* helper_; 100 test::RtpFormatVp8TestHelper* helper_;
101 }; 101 };
102 102
103 TEST_F(RtpPacketizerVp8Test, TestStrictMode) { 103 TEST_F(RtpPacketizerVp8Test, TestStrictMode) {
104 const size_t kSizeVector[] = {10, 8, 27}; 104 const size_t kSizeVector[] = {10, 8, 27};
105 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 105 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
106 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 106 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
107 107
108 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID. 108 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID.
109 const size_t kMaxPayloadSize = 13; 109 const size_t kMaxPayloadSize = 13;
110 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kStrict); 110 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kStrict);
111 packetizer.SetPayloadData(helper_->payload_data(), 111 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
112 helper_->payload_size(), 112 helper_->payload_size(),
113 helper_->fragmentation()); 113 helper_->fragmentation());
114 114
115 // The expected sizes are obtained by running a verified good implementation. 115 // The expected sizes are obtained by hand.
116 const size_t kExpectedSizes[] = {9, 9, 12, 11, 11, 11, 10}; 116 const size_t kExpectedSizes[] = {9, 9, 12, 13, 13, 13};
117 const int kExpectedPart[] = {0, 0, 1, 2, 2, 2, 2}; 117 const int kExpectedPart[] = {0, 0, 1, 2, 2, 2};
118 const bool kExpectedFragStart[] = {true, false, true, true, 118 const bool kExpectedFragStart[] = {true, false, true, true, false, false};
119 false, false, false};
120 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 119 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
121 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 120 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
122 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 121 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
122 ASSERT_EQ(num_packets, kExpectedNum);
123 123
124 helper_->GetAllPacketsAndCheck(&packetizer, 124 helper_->GetAllPacketsAndCheck(&packetizer,
125 kExpectedSizes, 125 kExpectedSizes,
126 kExpectedPart, 126 kExpectedPart,
127 kExpectedFragStart, 127 kExpectedFragStart,
128 kExpectedNum); 128 kExpectedNum);
129 } 129 }
130 130
131 // Verify that we get a minimal number of packets if the partition plus header 131 // Verify that we get a minimal number of packets if the partition plus header
132 // size fits exactly in the maximum packet size. 132 // size fits exactly in the maximum packet size.
133 // Test is disabled: https://code.google.com/p/webrtc/issues/detail?id=4019. 133 // Test is disabled: https://code.google.com/p/webrtc/issues/detail?id=4019.
danilchap 2017/05/19 12:03:46 with you changes, can this test be reenabled?
ilnik 2017/05/19 12:57:45 Yes, I've reenabled it.
134 TEST_F(RtpPacketizerVp8Test, DISABLED_TestStrictEqualTightPartitions) { 134 TEST_F(RtpPacketizerVp8Test, DISABLED_TestStrictEqualTightPartitions) {
135 const size_t kSizeVector[] = {10, 10, 10}; 135 const size_t kSizeVector[] = {10, 10, 10};
136 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 136 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
137 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 137 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
138 138
139 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID. 139 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID.
140 const int kMaxPayloadSize = 14; 140 const int kMaxPayloadSize = 14;
141 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kStrict); 141 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kStrict);
142 packetizer.SetPayloadData(helper_->payload_data(), helper_->payload_size(), 142 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
143 helper_->fragmentation()); 143 helper_->payload_size(),
144 helper_->fragmentation());
144 145
145 // The expected sizes are obtained by running a verified good implementation. 146 // The expected sizes are obtained by hand.
146 const size_t kExpectedSizes[] = {14, 14, 14}; 147 const size_t kExpectedSizes[] = {14, 14, 14};
147 const int kExpectedPart[] = {0, 1, 2}; 148 const int kExpectedPart[] = {0, 1, 2};
148 const bool kExpectedFragStart[] = {true, true, true}; 149 const bool kExpectedFragStart[] = {true, true, true};
149 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 150 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
150 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 151 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
151 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 152 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
153 ASSERT_EQ(num_packets, kExpectedNum);
152 154
153 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart, 155 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
154 kExpectedFragStart, kExpectedNum); 156 kExpectedFragStart, kExpectedNum);
155 } 157 }
156 158
157 TEST_F(RtpPacketizerVp8Test, TestAggregateMode) { 159 TEST_F(RtpPacketizerVp8Test, TestAggregateMode) {
158 const size_t kSizeVector[] = {60, 10, 10}; 160 const size_t kSizeVector[] = {60, 10, 10};
159 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 161 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
160 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 162 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
161 163
162 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 164 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
163 const size_t kMaxPayloadSize = 25; 165 const size_t kMaxPayloadSize = 25;
164 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 166 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
165 packetizer.SetPayloadData(helper_->payload_data(), 167 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
166 helper_->payload_size(), 168 helper_->payload_size(),
167 helper_->fragmentation()); 169 helper_->fragmentation());
168 170
169 // The expected sizes are obtained by running a verified good implementation. 171 // The expected sizes are obtained by hand.
170 const size_t kExpectedSizes[] = {23, 23, 23, 23}; 172 const size_t kExpectedSizes[] = {23, 23, 23, 23};
171 const int kExpectedPart[] = {0, 0, 0, 1}; 173 const int kExpectedPart[] = {0, 0, 0, 1};
172 const bool kExpectedFragStart[] = {true, false, false, true}; 174 const bool kExpectedFragStart[] = {true, false, false, true};
173 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 175 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
174 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 176 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
175 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 177 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
178 ASSERT_EQ(num_packets, kExpectedNum);
176 179
177 helper_->GetAllPacketsAndCheck(&packetizer, 180 helper_->GetAllPacketsAndCheck(&packetizer,
178 kExpectedSizes, 181 kExpectedSizes,
179 kExpectedPart, 182 kExpectedPart,
180 kExpectedFragStart, 183 kExpectedFragStart,
181 kExpectedNum); 184 kExpectedNum);
182 } 185 }
183 186
187 TEST_F(RtpPacketizerVp8Test, TestAggregateModePacketReductionCauseExtraPacket) {
188 const size_t kSizeVector[] = {60, 10, 10};
189 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
190 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
191
192 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
193 const size_t kMaxPayloadSize = 25;
194 const size_t kLastPacketReductionLen = 5;
195 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize,
196 kLastPacketReductionLen, kAggregate);
197 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
198 helper_->payload_size(),
199 helper_->fragmentation());
200
201 // The expected sizes are obtained by hand.
202 const size_t kExpectedSizes[] = {23, 23, 23, 13, 13};
203 const int kExpectedPart[] = {0, 0, 0, 1, 2};
204 const bool kExpectedFragStart[] = {true, false, false, true, true};
205 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
206 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
207 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
208 ASSERT_EQ(num_packets, kExpectedNum);
209
210 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
211 kExpectedFragStart, kExpectedNum);
212 }
213
214 TEST_F(RtpPacketizerVp8Test, TestAggregateModePacketReduction) {
215 const size_t kSizeVector[] = {60, 10, 10};
216 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
217 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
218
219 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
220 const size_t kMaxPayloadSize = 25;
221 const size_t kLastPacketReductionLen = 1;
222 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize,
223 kLastPacketReductionLen, kAggregate);
224 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
225 helper_->payload_size(),
226 helper_->fragmentation());
227
228 // The expected sizes are obtained by hand.
229 const size_t kExpectedSizes[] = {23, 23, 23, 23};
230 const int kExpectedPart[] = {0, 0, 0, 1};
231 const bool kExpectedFragStart[] = {true, false, false, true};
232 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
233 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
234 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
235 ASSERT_EQ(num_packets, kExpectedNum);
236
237 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
238 kExpectedFragStart, kExpectedNum);
239 }
240
241 TEST_F(RtpPacketizerVp8Test, TestAggregateModeSmallPartitions) {
242 const size_t kSizeVector[] = {3, 4, 2, 5, 2, 4};
danilchap 2017/05/19 12:03:46 what happen with same kSizeVector but with kLastPa
ilnik 2017/05/19 12:57:45 Nothing really changes. last packet still has 4 fr
243 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
244 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
245
246 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
247 const size_t kMaxPayloadSize = 13;
248 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
249 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
250 helper_->payload_size(),
251 helper_->fragmentation());
252
253 // The expected sizes are obtained by hand.
254 const size_t kExpectedSizes[] = {10, 10, 9};
255 const int kExpectedPart[] = {0, 2, 4};
256 const bool kExpectedFragStart[] = {true, true, true};
257 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
258 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
259 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
260 ASSERT_EQ(num_packets, kExpectedNum);
261
262 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
263 kExpectedFragStart, kExpectedNum);
264 }
265
184 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions1) { 266 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions1) {
185 const size_t kSizeVector[] = {1600, 200, 200, 200, 200, 200, 200, 200, 200}; 267 const size_t kSizeVector[] = {1600, 200, 200, 200, 200, 200, 200, 200, 200};
186 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 268 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
187 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 269 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
188 270
189 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 271 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
190 const size_t kMaxPayloadSize = 1000; 272 const size_t kMaxPayloadSize = 1000;
191 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 273 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
192 packetizer.SetPayloadData(helper_->payload_data(), 274 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
193 helper_->payload_size(), 275 helper_->payload_size(),
194 helper_->fragmentation()); 276 helper_->fragmentation());
195 277
196 // The expected sizes are obtained by running a verified good implementation. 278 // The expected sizes are obtained by hand.
197 const size_t kExpectedSizes[] = {803, 803, 803, 803}; 279 const size_t kExpectedSizes[] = {803, 803, 803, 803};
198 const int kExpectedPart[] = {0, 0, 1, 5}; 280 const int kExpectedPart[] = {0, 0, 1, 5};
199 const bool kExpectedFragStart[] = {true, false, true, true}; 281 const bool kExpectedFragStart[] = {true, false, true, true};
200 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 282 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
201 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 283 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
202 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 284 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
285 ASSERT_EQ(num_packets, kExpectedNum);
203 286
204 helper_->GetAllPacketsAndCheck(&packetizer, 287 helper_->GetAllPacketsAndCheck(&packetizer,
205 kExpectedSizes, 288 kExpectedSizes,
206 kExpectedPart, 289 kExpectedPart,
207 kExpectedFragStart, 290 kExpectedFragStart,
208 kExpectedNum); 291 kExpectedNum);
209 } 292 }
210 293
211 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions2) { 294 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions2) {
212 const size_t kSizeVector[] = {1599, 200, 200, 200, 1600, 200, 200, 200, 200}; 295 const size_t kSizeVector[] = {1599, 200, 200, 200, 1600, 200, 200, 200, 200};
213 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 296 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
214 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 297 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
215 298
216 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 299 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
217 const size_t kMaxPayloadSize = 1000; 300 const size_t kMaxPayloadSize = 1000;
218 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 301 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
219 packetizer.SetPayloadData(helper_->payload_data(), 302 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
220 helper_->payload_size(), 303 helper_->payload_size(),
221 helper_->fragmentation()); 304 helper_->fragmentation());
222 305
223 // The expected sizes are obtained by running a verified good implementation. 306 // The expected sizes are obtained by hand.
224 const size_t kExpectedSizes[] = {803, 802, 603, 803, 803, 803}; 307 const size_t kExpectedSizes[] = {802, 803, 603, 803, 803, 803};
225 const int kExpectedPart[] = {0, 0, 1, 4, 4, 5}; 308 const int kExpectedPart[] = {0, 0, 1, 4, 4, 5};
226 const bool kExpectedFragStart[] = {true, false, true, true, false, true}; 309 const bool kExpectedFragStart[] = {true, false, true, true, false, true};
227 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 310 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
228 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 311 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
229 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 312 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
313 ASSERT_EQ(num_packets, kExpectedNum);
230 314
231 helper_->GetAllPacketsAndCheck(&packetizer, 315 helper_->GetAllPacketsAndCheck(&packetizer,
232 kExpectedSizes, 316 kExpectedSizes,
233 kExpectedPart, 317 kExpectedPart,
234 kExpectedFragStart, 318 kExpectedFragStart,
235 kExpectedNum); 319 kExpectedNum);
236 } 320 }
237 321
238 TEST_F(RtpPacketizerVp8Test, TestAggregateModeTwoLargePartitions) { 322 TEST_F(RtpPacketizerVp8Test, TestAggregateModeTwoLargePartitions) {
239 const size_t kSizeVector[] = {1654, 2268}; 323 const size_t kSizeVector[] = {1654, 2268};
240 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 324 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
241 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 325 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
242 326
243 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 327 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
244 const size_t kMaxPayloadSize = 1460; 328 const size_t kMaxPayloadSize = 1460;
245 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 329 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
246 packetizer.SetPayloadData(helper_->payload_data(), 330 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
247 helper_->payload_size(), 331 helper_->payload_size(),
248 helper_->fragmentation()); 332 helper_->fragmentation());
249 333
250 // The expected sizes are obtained by running a verified good implementation. 334 // The expected sizes are obtained by hand.
251 const size_t kExpectedSizes[] = {830, 830, 1137, 1137}; 335 const size_t kExpectedSizes[] = {830, 830, 1137, 1137};
252 const int kExpectedPart[] = {0, 0, 1, 1}; 336 const int kExpectedPart[] = {0, 0, 1, 1};
253 const bool kExpectedFragStart[] = {true, false, true, false}; 337 const bool kExpectedFragStart[] = {true, false, true, false};
254 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 338 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
255 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 339 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
256 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 340 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
341 ASSERT_EQ(num_packets, kExpectedNum);
257 342
258 helper_->GetAllPacketsAndCheck(&packetizer, 343 helper_->GetAllPacketsAndCheck(&packetizer,
259 kExpectedSizes, 344 kExpectedSizes,
260 kExpectedPart, 345 kExpectedPart,
261 kExpectedFragStart, 346 kExpectedFragStart,
262 kExpectedNum); 347 kExpectedNum);
263 } 348 }
264 349
265 // Verify that EqualSize mode is forced if fragmentation info is missing. 350 // Verify that EqualSize mode is forced if fragmentation info is missing.
266 TEST_F(RtpPacketizerVp8Test, TestEqualSizeModeFallback) { 351 TEST_F(RtpPacketizerVp8Test, TestEqualSizeModeFallback) {
267 const size_t kSizeVector[] = {10, 10, 10}; 352 const size_t kSizeVector[] = {10, 10, 10};
268 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 353 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
269 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 354 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
270 355
271 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID 356 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID
272 const size_t kMaxPayloadSize = 12; // Small enough to produce 4 packets. 357 const size_t kMaxPayloadSize = 12; // Small enough to produce 4 packets.
273 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize); 358 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0);
274 packetizer.SetPayloadData( 359 size_t num_packets = packetizer.SetPayloadData(
275 helper_->payload_data(), helper_->payload_size(), NULL); 360 helper_->payload_data(), helper_->payload_size(), nullptr);
276 361
277 // Expecting three full packets, and one with the remainder. 362 // Expecting three full packets, and one with the remainder.
278 const size_t kExpectedSizes[] = {12, 11, 12, 11}; 363 const size_t kExpectedSizes[] = {11, 11, 12, 12};
279 const int kExpectedPart[] = {0, 0, 0, 0}; // Always 0 for equal size mode. 364 const int kExpectedPart[] = {0, 0, 0, 0}; // Always 0 for equal size mode.
280 // Frag start only true for first packet in equal size mode. 365 // Frag start only true for first packet in equal size mode.
281 const bool kExpectedFragStart[] = {true, false, false, false}; 366 const bool kExpectedFragStart[] = {true, false, false, false};
282 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 367 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
283 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 368 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
284 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 369 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
370 ASSERT_EQ(num_packets, kExpectedNum);
285 371
286 helper_->set_sloppy_partitioning(true); 372 helper_->set_sloppy_partitioning(true);
287 helper_->GetAllPacketsAndCheck(&packetizer, 373 helper_->GetAllPacketsAndCheck(&packetizer,
288 kExpectedSizes, 374 kExpectedSizes,
289 kExpectedPart, 375 kExpectedPart,
290 kExpectedFragStart, 376 kExpectedFragStart,
291 kExpectedNum); 377 kExpectedNum);
292 } 378 }
293 379
380 TEST_F(RtpPacketizerVp8Test, TestEqualSizeWithLastPacketReduction) {
381 const size_t kSizeVector[] = {30, 10, 3};
382 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
383 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
384
385 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID
386 const size_t kMaxPayloadSize = 15; // Small enough to produce 5 packets.
387 const size_t kLastPacketReduction = 5;
388 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kLastPacketReduction);
389 size_t num_packets = packetizer.SetPayloadData(
390 helper_->payload_data(), helper_->payload_size(), nullptr);
391
392 // Expecting three full packets, and one with the remainder.
393 const size_t kExpectedSizes[] = {13, 13, 14, 14, 9};
danilchap 2017/05/19 12:03:46 Can you add comment explaining expected sizes beca
ilnik 2017/05/19 12:57:45 Descriptor is 4 bytes in that case according to rf
394 const int kExpectedPart[] = {0, 0, 0, 0, 0}; // Always 0 for equal size mode.
395 // Frag start only true for first packet in equal size mode.
396 const bool kExpectedFragStart[] = {true, false, false, false, false};
397 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
398 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
399 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
400 ASSERT_EQ(num_packets, kExpectedNum);
401
402 helper_->set_sloppy_partitioning(true);
403 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
404 kExpectedFragStart, kExpectedNum);
405 }
406
294 // Verify that non-reference bit is set. EqualSize mode fallback is expected. 407 // Verify that non-reference bit is set. EqualSize mode fallback is expected.
295 TEST_F(RtpPacketizerVp8Test, TestNonReferenceBit) { 408 TEST_F(RtpPacketizerVp8Test, TestNonReferenceBit) {
296 const size_t kSizeVector[] = {10, 10, 10}; 409 const size_t kSizeVector[] = {10, 10, 10};
297 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 410 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
298 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 411 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
299 412
300 hdr_info_.nonReference = true; 413 hdr_info_.nonReference = true;
301 const size_t kMaxPayloadSize = 25; // Small enough to produce two packets. 414 const size_t kMaxPayloadSize = 25; // Small enough to produce two packets.
302 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize); 415 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0);
303 packetizer.SetPayloadData( 416 size_t num_packets = packetizer.SetPayloadData(
304 helper_->payload_data(), helper_->payload_size(), NULL); 417 helper_->payload_data(), helper_->payload_size(), nullptr);
305 418
306 // EqualSize mode => First packet full; other not. 419 // EqualSize mode => First packet full; other not.
307 const size_t kExpectedSizes[] = {16, 16}; 420 const size_t kExpectedSizes[] = {16, 16};
308 const int kExpectedPart[] = {0, 0}; // Always 0 for equal size mode. 421 const int kExpectedPart[] = {0, 0}; // Always 0 for equal size mode.
309 // Frag start only true for first packet in equal size mode. 422 // Frag start only true for first packet in equal size mode.
310 const bool kExpectedFragStart[] = {true, false}; 423 const bool kExpectedFragStart[] = {true, false};
311 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 424 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
312 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 425 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
313 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 426 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
427 ASSERT_EQ(num_packets, kExpectedNum);
314 428
315 helper_->set_sloppy_partitioning(true); 429 helper_->set_sloppy_partitioning(true);
316 helper_->GetAllPacketsAndCheck(&packetizer, 430 helper_->GetAllPacketsAndCheck(&packetizer,
317 kExpectedSizes, 431 kExpectedSizes,
318 kExpectedPart, 432 kExpectedPart,
319 kExpectedFragStart, 433 kExpectedFragStart,
320 kExpectedNum); 434 kExpectedNum);
321 } 435 }
322 436
323 // Verify Tl0PicIdx and TID fields, and layerSync bit. 437 // Verify Tl0PicIdx and TID fields, and layerSync bit.
324 TEST_F(RtpPacketizerVp8Test, TestTl0PicIdxAndTID) { 438 TEST_F(RtpPacketizerVp8Test, TestTl0PicIdxAndTID) {
325 const size_t kSizeVector[] = {10, 10, 10}; 439 const size_t kSizeVector[] = {10, 10, 10};
326 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 440 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
327 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 441 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
328 442
329 hdr_info_.tl0PicIdx = 117; 443 hdr_info_.tl0PicIdx = 117;
330 hdr_info_.temporalIdx = 2; 444 hdr_info_.temporalIdx = 2;
331 hdr_info_.layerSync = true; 445 hdr_info_.layerSync = true;
332 // kMaxPayloadSize is only limited by allocated buffer size. 446 // kMaxPayloadSize is only limited by allocated buffer size.
333 const size_t kMaxPayloadSize = helper_->buffer_size(); 447 const size_t kMaxPayloadSize = helper_->buffer_size();
334 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 448 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
335 packetizer.SetPayloadData(helper_->payload_data(), 449 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
336 helper_->payload_size(), 450 helper_->payload_size(),
337 helper_->fragmentation()); 451 helper_->fragmentation());
338 452
339 // Expect one single packet of payload_size() + 4 bytes header. 453 // Expect one single packet of payload_size() + 4 bytes header.
340 const size_t kExpectedSizes[1] = {helper_->payload_size() + 4}; 454 const size_t kExpectedSizes[1] = {helper_->payload_size() + 4};
341 const int kExpectedPart[1] = {0}; // Packet starts with partition 0. 455 const int kExpectedPart[1] = {0}; // Packet starts with partition 0.
342 const bool kExpectedFragStart[1] = {true}; 456 const bool kExpectedFragStart[1] = {true};
343 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 457 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
344 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 458 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
345 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 459 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
460 ASSERT_EQ(num_packets, kExpectedNum);
346 461
347 helper_->GetAllPacketsAndCheck(&packetizer, 462 helper_->GetAllPacketsAndCheck(&packetizer,
348 kExpectedSizes, 463 kExpectedSizes,
349 kExpectedPart, 464 kExpectedPart,
350 kExpectedFragStart, 465 kExpectedFragStart,
351 kExpectedNum); 466 kExpectedNum);
352 } 467 }
353 468
354 // Verify KeyIdx field. 469 // Verify KeyIdx field.
355 TEST_F(RtpPacketizerVp8Test, TestKeyIdx) { 470 TEST_F(RtpPacketizerVp8Test, TestKeyIdx) {
356 const size_t kSizeVector[] = {10, 10, 10}; 471 const size_t kSizeVector[] = {10, 10, 10};
357 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 472 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
358 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 473 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
359 474
360 hdr_info_.keyIdx = 17; 475 hdr_info_.keyIdx = 17;
361 // kMaxPayloadSize is only limited by allocated buffer size. 476 // kMaxPayloadSize is only limited by allocated buffer size.
362 const size_t kMaxPayloadSize = helper_->buffer_size(); 477 const size_t kMaxPayloadSize = helper_->buffer_size();
363 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 478 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
364 packetizer.SetPayloadData(helper_->payload_data(), 479 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
365 helper_->payload_size(), 480 helper_->payload_size(),
366 helper_->fragmentation()); 481 helper_->fragmentation());
367 482
368 // Expect one single packet of payload_size() + 3 bytes header. 483 // Expect one single packet of payload_size() + 3 bytes header.
369 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3}; 484 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3};
370 const int kExpectedPart[1] = {0}; // Packet starts with partition 0. 485 const int kExpectedPart[1] = {0}; // Packet starts with partition 0.
371 const bool kExpectedFragStart[1] = {true}; 486 const bool kExpectedFragStart[1] = {true};
372 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 487 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
373 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 488 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
374 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 489 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
490 ASSERT_EQ(num_packets, kExpectedNum);
375 491
376 helper_->GetAllPacketsAndCheck(&packetizer, 492 helper_->GetAllPacketsAndCheck(&packetizer,
377 kExpectedSizes, 493 kExpectedSizes,
378 kExpectedPart, 494 kExpectedPart,
379 kExpectedFragStart, 495 kExpectedFragStart,
380 kExpectedNum); 496 kExpectedNum);
381 } 497 }
382 498
383 // Verify TID field and KeyIdx field in combination. 499 // Verify TID field and KeyIdx field in combination.
384 TEST_F(RtpPacketizerVp8Test, TestTIDAndKeyIdx) { 500 TEST_F(RtpPacketizerVp8Test, TestTIDAndKeyIdx) {
385 const size_t kSizeVector[] = {10, 10, 10}; 501 const size_t kSizeVector[] = {10, 10, 10};
386 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 502 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
387 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 503 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
388 504
389 hdr_info_.temporalIdx = 1; 505 hdr_info_.temporalIdx = 1;
390 hdr_info_.keyIdx = 5; 506 hdr_info_.keyIdx = 5;
391 // kMaxPayloadSize is only limited by allocated buffer size. 507 // kMaxPayloadSize is only limited by allocated buffer size.
392 const size_t kMaxPayloadSize = helper_->buffer_size(); 508 const size_t kMaxPayloadSize = helper_->buffer_size();
393 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 509 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
394 packetizer.SetPayloadData(helper_->payload_data(), 510 size_t num_packets = packetizer.SetPayloadData(helper_->payload_data(),
395 helper_->payload_size(), 511 helper_->payload_size(),
396 helper_->fragmentation()); 512 helper_->fragmentation());
397 513
398 // Expect one single packet of payload_size() + 3 bytes header. 514 // Expect one single packet of payload_size() + 3 bytes header.
399 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3}; 515 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3};
400 const int kExpectedPart[1] = {0}; // Packet starts with partition 0. 516 const int kExpectedPart[1] = {0}; // Packet starts with partition 0.
401 const bool kExpectedFragStart[1] = {true}; 517 const bool kExpectedFragStart[1] = {true};
402 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 518 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
403 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 519 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
404 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 520 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
521 ASSERT_EQ(num_packets, kExpectedNum);
405 522
406 helper_->GetAllPacketsAndCheck(&packetizer, 523 helper_->GetAllPacketsAndCheck(&packetizer,
407 kExpectedSizes, 524 kExpectedSizes,
408 kExpectedPart, 525 kExpectedPart,
409 kExpectedFragStart, 526 kExpectedFragStart,
410 kExpectedNum); 527 kExpectedNum);
411 } 528 }
412 529
413 class RtpDepacketizerVp8Test : public ::testing::Test { 530 class RtpDepacketizerVp8Test : public ::testing::Test {
414 protected: 531 protected:
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 const uint8_t kHeaderLength = 5; 689 const uint8_t kHeaderLength = 5;
573 uint8_t data[10] = {0}; 690 uint8_t data[10] = {0};
574 RtpPacketToSend packet(kNoExtensions); 691 RtpPacketToSend packet(kNoExtensions);
575 RTPVideoHeaderVP8 input_header; 692 RTPVideoHeaderVP8 input_header;
576 input_header.nonReference = true; 693 input_header.nonReference = true;
577 input_header.pictureId = 300; 694 input_header.pictureId = 300;
578 input_header.temporalIdx = 1; 695 input_header.temporalIdx = 1;
579 input_header.layerSync = false; 696 input_header.layerSync = false;
580 input_header.tl0PicIdx = kNoTl0PicIdx; // Disable. 697 input_header.tl0PicIdx = kNoTl0PicIdx; // Disable.
581 input_header.keyIdx = 31; 698 input_header.keyIdx = 31;
582 RtpPacketizerVp8 packetizer(input_header, 20); 699 RtpPacketizerVp8 packetizer(input_header, 20, 0);
583 packetizer.SetPayloadData(data, 10, NULL); 700 EXPECT_EQ(packetizer.SetPayloadData(data, 10, NULL), 1u);
584 bool last; 701 ASSERT_TRUE(packetizer.NextPacket(&packet));
585 ASSERT_TRUE(packetizer.NextPacket(&packet, &last));
586 EXPECT_TRUE(last);
587 EXPECT_TRUE(packet.Marker()); 702 EXPECT_TRUE(packet.Marker());
588 703
589 auto rtp_payload = packet.payload(); 704 auto rtp_payload = packet.payload();
590 RtpDepacketizer::ParsedPayload payload; 705 RtpDepacketizer::ParsedPayload payload;
591 ASSERT_TRUE( 706 ASSERT_TRUE(
592 depacketizer_->Parse(&payload, rtp_payload.data(), rtp_payload.size())); 707 depacketizer_->Parse(&payload, rtp_payload.data(), rtp_payload.size()));
593 auto vp8_payload = rtp_payload.subview(kHeaderLength); 708 auto vp8_payload = rtp_payload.subview(kHeaderLength);
594 ExpectPacket(&payload, vp8_payload.data(), vp8_payload.size()); 709 ExpectPacket(&payload, vp8_payload.data(), vp8_payload.size());
595 EXPECT_EQ(kVideoFrameKey, payload.frame_type); 710 EXPECT_EQ(kVideoFrameKey, payload.frame_type);
596 EXPECT_EQ(kRtpVideoVp8, payload.type.Video.codec); 711 EXPECT_EQ(kRtpVideoVp8, payload.type.Video.codec);
597 VerifyBasicHeader(&payload.type, 1, 1, 0); 712 VerifyBasicHeader(&payload.type, 1, 1, 0);
598 VerifyExtensions(&payload.type, 713 VerifyExtensions(&payload.type,
599 input_header.pictureId, 714 input_header.pictureId,
600 input_header.tl0PicIdx, 715 input_header.tl0PicIdx,
601 input_header.temporalIdx, 716 input_header.temporalIdx,
602 input_header.keyIdx); 717 input_header.keyIdx);
603 EXPECT_EQ(payload.type.Video.codecHeader.VP8.layerSync, 718 EXPECT_EQ(payload.type.Video.codecHeader.VP8.layerSync,
604 input_header.layerSync); 719 input_header.layerSync);
605 } 720 }
606 721
607 TEST_F(RtpDepacketizerVp8Test, TestEmptyPayload) { 722 TEST_F(RtpDepacketizerVp8Test, TestEmptyPayload) {
608 // Using a wild pointer to crash on accesses from inside the depacketizer. 723 // Using a wild pointer to crash on accesses from inside the depacketizer.
609 uint8_t* garbage_ptr = reinterpret_cast<uint8_t*>(0x4711); 724 uint8_t* garbage_ptr = reinterpret_cast<uint8_t*>(0x4711);
610 RtpDepacketizer::ParsedPayload payload; 725 RtpDepacketizer::ParsedPayload payload;
611 EXPECT_FALSE(depacketizer_->Parse(&payload, garbage_ptr, 0)); 726 EXPECT_FALSE(depacketizer_->Parse(&payload, garbage_ptr, 0));
612 } 727 }
613 } // namespace webrtc 728 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698