OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |