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

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

Powered by Google App Engine
This is Rietveld 408576698