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

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

Powered by Google App Engine
This is Rietveld 408576698