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

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: Fix packet buffer allocations bugs and old tests with incorrect assumptions about extensions locati… 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 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 running a verified good implementation.
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);
123 122
124 helper_->GetAllPacketsAndCheck(&packetizer, 123 helper_->GetAllPacketsAndCheck(&packetizer,
125 kExpectedSizes, 124 kExpectedSizes,
126 kExpectedPart, 125 kExpectedPart,
127 kExpectedFragStart, 126 kExpectedFragStart,
128 kExpectedNum); 127 kExpectedNum);
129 } 128 }
130 129
131 // Verify that we get a minimal number of packets if the partition plus header 130 // Verify that we get a minimal number of packets if the partition plus header
132 // size fits exactly in the maximum packet size. 131 // size fits exactly in the maximum packet size.
133 // Test is disabled: https://code.google.com/p/webrtc/issues/detail?id=4019. 132 // Test is disabled: https://code.google.com/p/webrtc/issues/detail?id=4019.
134 TEST_F(RtpPacketizerVp8Test, DISABLED_TestStrictEqualTightPartitions) { 133 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 packetizer.SetPayloadData(helper_->payload_data(), helper_->payload_size(),
143 helper_->fragmentation()); 142 helper_->fragmentation());
144 143
145 // The expected sizes are obtained by running a verified good implementation. 144 // The expected sizes are obtained by running a verified good implementation.
146 const size_t kExpectedSizes[] = {14, 14, 14}; 145 const size_t kExpectedSizes[] = {14, 14, 14};
147 const int kExpectedPart[] = {0, 1, 2}; 146 const int kExpectedPart[] = {0, 1, 2};
148 const bool kExpectedFragStart[] = {true, true, true}; 147 const bool kExpectedFragStart[] = {true, true, true};
149 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 148 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
150 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 149 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
151 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 150 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
152 151
153 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart, 152 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
154 kExpectedFragStart, kExpectedNum); 153 kExpectedFragStart, kExpectedNum);
155 } 154 }
156 155
157 TEST_F(RtpPacketizerVp8Test, TestAggregateMode) { 156 TEST_F(RtpPacketizerVp8Test, TestAggregateMode) {
158 const size_t kSizeVector[] = {60, 10, 10}; 157 const size_t kSizeVector[] = {60, 10, 10};
159 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 158 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
160 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 159 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
161 160
162 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 161 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
163 const size_t kMaxPayloadSize = 25; 162 const size_t kMaxPayloadSize = 25;
164 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 163 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
165 packetizer.SetPayloadData(helper_->payload_data(), 164 packetizer.SetPayloadData(helper_->payload_data(),
166 helper_->payload_size(), 165 helper_->payload_size(),
167 helper_->fragmentation()); 166 helper_->fragmentation());
168 167
169 // The expected sizes are obtained by running a verified good implementation. 168 // The expected sizes are obtained by running a verified good implementation.
170 const size_t kExpectedSizes[] = {23, 23, 23, 23}; 169 const size_t kExpectedSizes[] = {23, 23, 23, 23};
171 const int kExpectedPart[] = {0, 0, 0, 1}; 170 const int kExpectedPart[] = {0, 0, 0, 1};
172 const bool kExpectedFragStart[] = {true, false, false, true}; 171 const bool kExpectedFragStart[] = {true, false, false, true};
173 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 172 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
174 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 173 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
175 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 174 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
176 175
177 helper_->GetAllPacketsAndCheck(&packetizer, 176 helper_->GetAllPacketsAndCheck(&packetizer,
178 kExpectedSizes, 177 kExpectedSizes,
179 kExpectedPart, 178 kExpectedPart,
180 kExpectedFragStart, 179 kExpectedFragStart,
181 kExpectedNum); 180 kExpectedNum);
182 } 181 }
183 182
183 TEST_F(RtpPacketizerVp8Test, TestAggregateModeExtentionNotFits) {
184 const size_t kSizeVector[] = {60, 10, 10};
185 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
186 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
187
188 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
189 const size_t kMaxPayloadSize = 25;
190 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 5, kAggregate);
191 packetizer.SetPayloadData(helper_->payload_data(), helper_->payload_size(),
192 helper_->fragmentation());
193
194 // The expected sizes are obtained by running a verified good implementation.
195 const size_t kExpectedSizes[] = {23, 23, 23, 13, 13};
196 const int kExpectedPart[] = {0, 0, 0, 1, 2};
197 const bool kExpectedFragStart[] = {true, false, false, true, true};
198 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
199 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
200 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
201
202 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
203 kExpectedFragStart, kExpectedNum);
204 }
205
206 TEST_F(RtpPacketizerVp8Test, TestAggregateModeExtentionFits) {
207 const size_t kSizeVector[] = {60, 10, 10};
208 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
209 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
210
211 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
212 const size_t kMaxPayloadSize = 25;
213 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 1, kAggregate);
214 packetizer.SetPayloadData(helper_->payload_data(), helper_->payload_size(),
215 helper_->fragmentation());
216
217 // The expected sizes are obtained by running a verified good implementation.
218 const size_t kExpectedSizes[] = {23, 23, 23, 23};
219 const int kExpectedPart[] = {0, 0, 0, 1};
220 const bool kExpectedFragStart[] = {true, false, false, true};
221 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
222 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
223 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
224
225 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
226 kExpectedFragStart, kExpectedNum);
227 }
228
229 TEST_F(RtpPacketizerVp8Test, TestAggregateModeSmallPartitions) {
230 const size_t kSizeVector[] = {3, 4, 2, 5, 2, 4};
231 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
232 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
233
234 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
235 const size_t kMaxPayloadSize = 13;
236 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
237 packetizer.SetPayloadData(helper_->payload_data(), helper_->payload_size(),
238 helper_->fragmentation());
239
240 // The expected sizes are obtained by running a verified good implementation.
241 const size_t kExpectedSizes[] = {10, 10, 9};
242 const int kExpectedPart[] = {0, 2, 4};
243 const bool kExpectedFragStart[] = {true, true, true};
244 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
245 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
246 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
247
248 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
249 kExpectedFragStart, kExpectedNum);
250 }
251
184 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions1) { 252 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions1) {
185 const size_t kSizeVector[] = {1600, 200, 200, 200, 200, 200, 200, 200, 200}; 253 const size_t kSizeVector[] = {1600, 200, 200, 200, 200, 200, 200, 200, 200};
186 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 254 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
187 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 255 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
188 256
189 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 257 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
190 const size_t kMaxPayloadSize = 1000; 258 const size_t kMaxPayloadSize = 1000;
191 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 259 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
192 packetizer.SetPayloadData(helper_->payload_data(), 260 packetizer.SetPayloadData(helper_->payload_data(),
193 helper_->payload_size(), 261 helper_->payload_size(),
194 helper_->fragmentation()); 262 helper_->fragmentation());
195 263
196 // The expected sizes are obtained by running a verified good implementation. 264 // The expected sizes are obtained by running a verified good implementation.
197 const size_t kExpectedSizes[] = {803, 803, 803, 803}; 265 const size_t kExpectedSizes[] = {803, 803, 803, 803};
198 const int kExpectedPart[] = {0, 0, 1, 5}; 266 const int kExpectedPart[] = {0, 0, 1, 5};
199 const bool kExpectedFragStart[] = {true, false, true, true}; 267 const bool kExpectedFragStart[] = {true, false, true, true};
200 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 268 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
201 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 269 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
202 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 270 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
203 271
204 helper_->GetAllPacketsAndCheck(&packetizer, 272 helper_->GetAllPacketsAndCheck(&packetizer,
205 kExpectedSizes, 273 kExpectedSizes,
206 kExpectedPart, 274 kExpectedPart,
207 kExpectedFragStart, 275 kExpectedFragStart,
208 kExpectedNum); 276 kExpectedNum);
209 } 277 }
210 278
211 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions2) { 279 TEST_F(RtpPacketizerVp8Test, TestAggregateModeManyPartitions2) {
212 const size_t kSizeVector[] = {1599, 200, 200, 200, 1600, 200, 200, 200, 200}; 280 const size_t kSizeVector[] = {1599, 200, 200, 200, 1600, 200, 200, 200, 200};
213 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 281 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
214 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 282 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
215 283
216 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 284 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
217 const size_t kMaxPayloadSize = 1000; 285 const size_t kMaxPayloadSize = 1000;
218 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 286 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
219 packetizer.SetPayloadData(helper_->payload_data(), 287 packetizer.SetPayloadData(helper_->payload_data(),
220 helper_->payload_size(), 288 helper_->payload_size(),
221 helper_->fragmentation()); 289 helper_->fragmentation());
222 290
223 // The expected sizes are obtained by running a verified good implementation. 291 // The expected sizes are obtained by running a verified good implementation.
224 const size_t kExpectedSizes[] = {803, 802, 603, 803, 803, 803}; 292 const size_t kExpectedSizes[] = {803, 802, 603, 803, 803, 803};
225 const int kExpectedPart[] = {0, 0, 1, 4, 4, 5}; 293 const int kExpectedPart[] = {0, 0, 1, 4, 4, 5};
226 const bool kExpectedFragStart[] = {true, false, true, true, false, true}; 294 const bool kExpectedFragStart[] = {true, false, true, true, false, true};
227 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 295 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
228 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 296 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
229 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 297 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
230 298
231 helper_->GetAllPacketsAndCheck(&packetizer, 299 helper_->GetAllPacketsAndCheck(&packetizer,
232 kExpectedSizes, 300 kExpectedSizes,
233 kExpectedPart, 301 kExpectedPart,
234 kExpectedFragStart, 302 kExpectedFragStart,
235 kExpectedNum); 303 kExpectedNum);
236 } 304 }
237 305
238 TEST_F(RtpPacketizerVp8Test, TestAggregateModeTwoLargePartitions) { 306 TEST_F(RtpPacketizerVp8Test, TestAggregateModeTwoLargePartitions) {
239 const size_t kSizeVector[] = {1654, 2268}; 307 const size_t kSizeVector[] = {1654, 2268};
240 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 308 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
241 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 309 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
242 310
243 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID. 311 hdr_info_.pictureId = 20; // <= 0x7F should produce 1-byte PictureID.
244 const size_t kMaxPayloadSize = 1460; 312 const size_t kMaxPayloadSize = 1460;
245 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 313 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
246 packetizer.SetPayloadData(helper_->payload_data(), 314 packetizer.SetPayloadData(helper_->payload_data(),
247 helper_->payload_size(), 315 helper_->payload_size(),
248 helper_->fragmentation()); 316 helper_->fragmentation());
249 317
250 // The expected sizes are obtained by running a verified good implementation. 318 // The expected sizes are obtained by running a verified good implementation.
251 const size_t kExpectedSizes[] = {830, 830, 1137, 1137}; 319 const size_t kExpectedSizes[] = {830, 830, 1137, 1137};
252 const int kExpectedPart[] = {0, 0, 1, 1}; 320 const int kExpectedPart[] = {0, 0, 1, 1};
253 const bool kExpectedFragStart[] = {true, false, true, false}; 321 const bool kExpectedFragStart[] = {true, false, true, false};
254 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 322 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
255 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 323 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
256 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 324 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
257 325
258 helper_->GetAllPacketsAndCheck(&packetizer, 326 helper_->GetAllPacketsAndCheck(&packetizer,
259 kExpectedSizes, 327 kExpectedSizes,
260 kExpectedPart, 328 kExpectedPart,
261 kExpectedFragStart, 329 kExpectedFragStart,
262 kExpectedNum); 330 kExpectedNum);
263 } 331 }
264 332
265 // Verify that EqualSize mode is forced if fragmentation info is missing. 333 // Verify that EqualSize mode is forced if fragmentation info is missing.
266 TEST_F(RtpPacketizerVp8Test, TestEqualSizeModeFallback) { 334 TEST_F(RtpPacketizerVp8Test, TestEqualSizeModeFallback) {
267 const size_t kSizeVector[] = {10, 10, 10}; 335 const size_t kSizeVector[] = {10, 10, 10};
268 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 336 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
269 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 337 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
270 338
271 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID 339 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID
272 const size_t kMaxPayloadSize = 12; // Small enough to produce 4 packets. 340 const size_t kMaxPayloadSize = 12; // Small enough to produce 4 packets.
273 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize); 341 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0);
274 packetizer.SetPayloadData( 342 packetizer.SetPayloadData(
275 helper_->payload_data(), helper_->payload_size(), NULL); 343 helper_->payload_data(), helper_->payload_size(), NULL);
276 344
277 // Expecting three full packets, and one with the remainder. 345 // Expecting three full packets, and one with the remainder.
278 const size_t kExpectedSizes[] = {12, 11, 12, 11}; 346 const size_t kExpectedSizes[] = {12, 12, 11, 11};
279 const int kExpectedPart[] = {0, 0, 0, 0}; // Always 0 for equal size mode. 347 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. 348 // Frag start only true for first packet in equal size mode.
281 const bool kExpectedFragStart[] = {true, false, false, false}; 349 const bool kExpectedFragStart[] = {true, false, false, false};
282 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 350 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
283 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 351 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
284 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 352 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
285 353
286 helper_->set_sloppy_partitioning(true); 354 helper_->set_sloppy_partitioning(true);
287 helper_->GetAllPacketsAndCheck(&packetizer, 355 helper_->GetAllPacketsAndCheck(&packetizer,
288 kExpectedSizes, 356 kExpectedSizes,
289 kExpectedPart, 357 kExpectedPart,
290 kExpectedFragStart, 358 kExpectedFragStart,
291 kExpectedNum); 359 kExpectedNum);
292 } 360 }
293 361
362 TEST_F(RtpPacketizerVp8Test, TestEqualSizeWithExtention) {
363 const size_t kSizeVector[] = {30, 10, 3};
364 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
365 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
366
367 hdr_info_.pictureId = 200; // > 0x7F should produce 2-byte PictureID
368 const size_t kMaxPayloadSize = 15; // Small enough to produce 5 packets.
369 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 5);
370 packetizer.SetPayloadData(helper_->payload_data(), helper_->payload_size(),
371 NULL);
372
373 // Expecting three full packets, and one with the remainder.
374 const size_t kExpectedSizes[] = {14, 14, 14, 13, 8};
375 const int kExpectedPart[] = {0, 0, 0, 0, 0}; // Always 0 for equal size mode.
376 // Frag start only true for first packet in equal size mode.
377 const bool kExpectedFragStart[] = {true, false, false, false, false};
378 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
379 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
380 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
381
382 helper_->set_sloppy_partitioning(true);
383 helper_->GetAllPacketsAndCheck(&packetizer, kExpectedSizes, kExpectedPart,
384 kExpectedFragStart, kExpectedNum);
385 }
386
294 // Verify that non-reference bit is set. EqualSize mode fallback is expected. 387 // Verify that non-reference bit is set. EqualSize mode fallback is expected.
295 TEST_F(RtpPacketizerVp8Test, TestNonReferenceBit) { 388 TEST_F(RtpPacketizerVp8Test, TestNonReferenceBit) {
296 const size_t kSizeVector[] = {10, 10, 10}; 389 const size_t kSizeVector[] = {10, 10, 10};
297 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 390 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
298 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 391 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
299 392
300 hdr_info_.nonReference = true; 393 hdr_info_.nonReference = true;
301 const size_t kMaxPayloadSize = 25; // Small enough to produce two packets. 394 const size_t kMaxPayloadSize = 25; // Small enough to produce two packets.
302 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize); 395 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0);
303 packetizer.SetPayloadData( 396 packetizer.SetPayloadData(
304 helper_->payload_data(), helper_->payload_size(), NULL); 397 helper_->payload_data(), helper_->payload_size(), NULL);
305 398
306 // EqualSize mode => First packet full; other not. 399 // EqualSize mode => First packet full; other not.
307 const size_t kExpectedSizes[] = {16, 16}; 400 const size_t kExpectedSizes[] = {16, 16};
308 const int kExpectedPart[] = {0, 0}; // Always 0 for equal size mode. 401 const int kExpectedPart[] = {0, 0}; // Always 0 for equal size mode.
309 // Frag start only true for first packet in equal size mode. 402 // Frag start only true for first packet in equal size mode.
310 const bool kExpectedFragStart[] = {true, false}; 403 const bool kExpectedFragStart[] = {true, false};
311 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 404 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
312 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 405 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
(...skipping 11 matching lines...) Expand all
324 TEST_F(RtpPacketizerVp8Test, TestTl0PicIdxAndTID) { 417 TEST_F(RtpPacketizerVp8Test, TestTl0PicIdxAndTID) {
325 const size_t kSizeVector[] = {10, 10, 10}; 418 const size_t kSizeVector[] = {10, 10, 10};
326 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 419 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
327 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 420 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
328 421
329 hdr_info_.tl0PicIdx = 117; 422 hdr_info_.tl0PicIdx = 117;
330 hdr_info_.temporalIdx = 2; 423 hdr_info_.temporalIdx = 2;
331 hdr_info_.layerSync = true; 424 hdr_info_.layerSync = true;
332 // kMaxPayloadSize is only limited by allocated buffer size. 425 // kMaxPayloadSize is only limited by allocated buffer size.
333 const size_t kMaxPayloadSize = helper_->buffer_size(); 426 const size_t kMaxPayloadSize = helper_->buffer_size();
334 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 427 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
335 packetizer.SetPayloadData(helper_->payload_data(), 428 packetizer.SetPayloadData(helper_->payload_data(),
336 helper_->payload_size(), 429 helper_->payload_size(),
337 helper_->fragmentation()); 430 helper_->fragmentation());
338 431
339 // Expect one single packet of payload_size() + 4 bytes header. 432 // Expect one single packet of payload_size() + 4 bytes header.
340 const size_t kExpectedSizes[1] = {helper_->payload_size() + 4}; 433 const size_t kExpectedSizes[1] = {helper_->payload_size() + 4};
341 const int kExpectedPart[1] = {0}; // Packet starts with partition 0. 434 const int kExpectedPart[1] = {0}; // Packet starts with partition 0.
342 const bool kExpectedFragStart[1] = {true}; 435 const bool kExpectedFragStart[1] = {true};
343 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 436 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
344 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 437 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
345 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 438 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
346 439
347 helper_->GetAllPacketsAndCheck(&packetizer, 440 helper_->GetAllPacketsAndCheck(&packetizer,
348 kExpectedSizes, 441 kExpectedSizes,
349 kExpectedPart, 442 kExpectedPart,
350 kExpectedFragStart, 443 kExpectedFragStart,
351 kExpectedNum); 444 kExpectedNum);
352 } 445 }
353 446
354 // Verify KeyIdx field. 447 // Verify KeyIdx field.
355 TEST_F(RtpPacketizerVp8Test, TestKeyIdx) { 448 TEST_F(RtpPacketizerVp8Test, TestKeyIdx) {
356 const size_t kSizeVector[] = {10, 10, 10}; 449 const size_t kSizeVector[] = {10, 10, 10};
357 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 450 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
358 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 451 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
359 452
360 hdr_info_.keyIdx = 17; 453 hdr_info_.keyIdx = 17;
361 // kMaxPayloadSize is only limited by allocated buffer size. 454 // kMaxPayloadSize is only limited by allocated buffer size.
362 const size_t kMaxPayloadSize = helper_->buffer_size(); 455 const size_t kMaxPayloadSize = helper_->buffer_size();
363 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 456 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
364 packetizer.SetPayloadData(helper_->payload_data(), 457 packetizer.SetPayloadData(helper_->payload_data(),
365 helper_->payload_size(), 458 helper_->payload_size(),
366 helper_->fragmentation()); 459 helper_->fragmentation());
367 460
368 // Expect one single packet of payload_size() + 3 bytes header. 461 // Expect one single packet of payload_size() + 3 bytes header.
369 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3}; 462 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3};
370 const int kExpectedPart[1] = {0}; // Packet starts with partition 0. 463 const int kExpectedPart[1] = {0}; // Packet starts with partition 0.
371 const bool kExpectedFragStart[1] = {true}; 464 const bool kExpectedFragStart[1] = {true};
372 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 465 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
373 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 466 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
374 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart); 467 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedFragStart);
375 468
376 helper_->GetAllPacketsAndCheck(&packetizer, 469 helper_->GetAllPacketsAndCheck(&packetizer,
377 kExpectedSizes, 470 kExpectedSizes,
378 kExpectedPart, 471 kExpectedPart,
379 kExpectedFragStart, 472 kExpectedFragStart,
380 kExpectedNum); 473 kExpectedNum);
381 } 474 }
382 475
383 // Verify TID field and KeyIdx field in combination. 476 // Verify TID field and KeyIdx field in combination.
384 TEST_F(RtpPacketizerVp8Test, TestTIDAndKeyIdx) { 477 TEST_F(RtpPacketizerVp8Test, TestTIDAndKeyIdx) {
385 const size_t kSizeVector[] = {10, 10, 10}; 478 const size_t kSizeVector[] = {10, 10, 10};
386 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector); 479 const size_t kNumPartitions = GTEST_ARRAY_SIZE_(kSizeVector);
387 ASSERT_TRUE(Init(kSizeVector, kNumPartitions)); 480 ASSERT_TRUE(Init(kSizeVector, kNumPartitions));
388 481
389 hdr_info_.temporalIdx = 1; 482 hdr_info_.temporalIdx = 1;
390 hdr_info_.keyIdx = 5; 483 hdr_info_.keyIdx = 5;
391 // kMaxPayloadSize is only limited by allocated buffer size. 484 // kMaxPayloadSize is only limited by allocated buffer size.
392 const size_t kMaxPayloadSize = helper_->buffer_size(); 485 const size_t kMaxPayloadSize = helper_->buffer_size();
393 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, kAggregate); 486 RtpPacketizerVp8 packetizer(hdr_info_, kMaxPayloadSize, 0, kAggregate);
394 packetizer.SetPayloadData(helper_->payload_data(), 487 packetizer.SetPayloadData(helper_->payload_data(),
395 helper_->payload_size(), 488 helper_->payload_size(),
396 helper_->fragmentation()); 489 helper_->fragmentation());
397 490
398 // Expect one single packet of payload_size() + 3 bytes header. 491 // Expect one single packet of payload_size() + 3 bytes header.
399 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3}; 492 const size_t kExpectedSizes[1] = {helper_->payload_size() + 3};
400 const int kExpectedPart[1] = {0}; // Packet starts with partition 0. 493 const int kExpectedPart[1] = {0}; // Packet starts with partition 0.
401 const bool kExpectedFragStart[1] = {true}; 494 const bool kExpectedFragStart[1] = {true};
402 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 495 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
403 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart); 496 CHECK_ARRAY_SIZE(kExpectedNum, kExpectedPart);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 const uint8_t kHeaderLength = 5; 665 const uint8_t kHeaderLength = 5;
573 uint8_t data[10] = {0}; 666 uint8_t data[10] = {0};
574 RtpPacketToSend packet(kNoExtensions); 667 RtpPacketToSend packet(kNoExtensions);
575 RTPVideoHeaderVP8 input_header; 668 RTPVideoHeaderVP8 input_header;
576 input_header.nonReference = true; 669 input_header.nonReference = true;
577 input_header.pictureId = 300; 670 input_header.pictureId = 300;
578 input_header.temporalIdx = 1; 671 input_header.temporalIdx = 1;
579 input_header.layerSync = false; 672 input_header.layerSync = false;
580 input_header.tl0PicIdx = kNoTl0PicIdx; // Disable. 673 input_header.tl0PicIdx = kNoTl0PicIdx; // Disable.
581 input_header.keyIdx = 31; 674 input_header.keyIdx = 31;
582 RtpPacketizerVp8 packetizer(input_header, 20); 675 RtpPacketizerVp8 packetizer(input_header, 20, 0);
583 packetizer.SetPayloadData(data, 10, NULL); 676 packetizer.SetPayloadData(data, 10, NULL);
584 bool last; 677 EXPECT_EQ(packetizer.TotalPackets(), 1u);
585 ASSERT_TRUE(packetizer.NextPacket(&packet, &last)); 678 ASSERT_TRUE(packetizer.NextPacket(&packet));
586 EXPECT_TRUE(last);
587 EXPECT_TRUE(packet.Marker()); 679 EXPECT_TRUE(packet.Marker());
588 680
589 auto rtp_payload = packet.payload(); 681 auto rtp_payload = packet.payload();
590 RtpDepacketizer::ParsedPayload payload; 682 RtpDepacketizer::ParsedPayload payload;
591 ASSERT_TRUE( 683 ASSERT_TRUE(
592 depacketizer_->Parse(&payload, rtp_payload.data(), rtp_payload.size())); 684 depacketizer_->Parse(&payload, rtp_payload.data(), rtp_payload.size()));
593 auto vp8_payload = rtp_payload.subview(kHeaderLength); 685 auto vp8_payload = rtp_payload.subview(kHeaderLength);
594 ExpectPacket(&payload, vp8_payload.data(), vp8_payload.size()); 686 ExpectPacket(&payload, vp8_payload.data(), vp8_payload.size());
595 EXPECT_EQ(kVideoFrameKey, payload.frame_type); 687 EXPECT_EQ(kVideoFrameKey, payload.frame_type);
596 EXPECT_EQ(kRtpVideoVp8, payload.type.Video.codec); 688 EXPECT_EQ(kRtpVideoVp8, payload.type.Video.codec);
597 VerifyBasicHeader(&payload.type, 1, 1, 0); 689 VerifyBasicHeader(&payload.type, 1, 1, 0);
598 VerifyExtensions(&payload.type, 690 VerifyExtensions(&payload.type,
599 input_header.pictureId, 691 input_header.pictureId,
600 input_header.tl0PicIdx, 692 input_header.tl0PicIdx,
601 input_header.temporalIdx, 693 input_header.temporalIdx,
602 input_header.keyIdx); 694 input_header.keyIdx);
603 EXPECT_EQ(payload.type.Video.codecHeader.VP8.layerSync, 695 EXPECT_EQ(payload.type.Video.codecHeader.VP8.layerSync,
604 input_header.layerSync); 696 input_header.layerSync);
605 } 697 }
606 698
607 TEST_F(RtpDepacketizerVp8Test, TestEmptyPayload) { 699 TEST_F(RtpDepacketizerVp8Test, TestEmptyPayload) {
608 // Using a wild pointer to crash on accesses from inside the depacketizer. 700 // Using a wild pointer to crash on accesses from inside the depacketizer.
609 uint8_t* garbage_ptr = reinterpret_cast<uint8_t*>(0x4711); 701 uint8_t* garbage_ptr = reinterpret_cast<uint8_t*>(0x4711);
610 RtpDepacketizer::ParsedPayload payload; 702 RtpDepacketizer::ParsedPayload payload;
611 EXPECT_FALSE(depacketizer_->Parse(&payload, garbage_ptr, 0)); 703 EXPECT_FALSE(depacketizer_->Parse(&payload, garbage_ptr, 0));
612 } 704 }
613 } // namespace webrtc 705 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698