OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 packet.timesNacked = 1; | 158 packet.timesNacked = 1; |
159 packet_buffer_->InsertPacket(packet); | 159 packet_buffer_->InsertPacket(packet); |
160 | 160 |
161 ASSERT_EQ(1UL, frames_from_callback_.size()); | 161 ASSERT_EQ(1UL, frames_from_callback_.size()); |
162 RtpFrameObject* frame = frames_from_callback_.begin()->second.get(); | 162 RtpFrameObject* frame = frames_from_callback_.begin()->second.get(); |
163 EXPECT_EQ(3, frame->times_nacked()); | 163 EXPECT_EQ(3, frame->times_nacked()); |
164 } | 164 } |
165 | 165 |
166 TEST_F(TestPacketBuffer, FrameSize) { | 166 TEST_F(TestPacketBuffer, FrameSize) { |
167 const uint16_t seq_num = Rand(); | 167 const uint16_t seq_num = Rand(); |
168 uint8_t data[] = {1, 2, 3, 4, 5}; | 168 uint8_t* data1 = new uint8_t[5](); |
| 169 uint8_t* data2 = new uint8_t[5](); |
| 170 uint8_t* data3 = new uint8_t[5](); |
| 171 uint8_t* data4 = new uint8_t[5](); |
169 | 172 |
170 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast, 5, data)); | 173 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast, 5, data1)); |
171 EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kNotFirst, kNotLast, 5, data)); | 174 EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kNotFirst, kNotLast, 5, data2)); |
172 EXPECT_TRUE(Insert(seq_num + 2, kKeyFrame, kNotFirst, kNotLast, 5, data)); | 175 EXPECT_TRUE(Insert(seq_num + 2, kKeyFrame, kNotFirst, kNotLast, 5, data3)); |
173 EXPECT_TRUE(Insert(seq_num + 3, kKeyFrame, kNotFirst, kLast, 5, data)); | 176 EXPECT_TRUE(Insert(seq_num + 3, kKeyFrame, kNotFirst, kLast, 5, data4)); |
174 | 177 |
175 ASSERT_EQ(1UL, frames_from_callback_.size()); | 178 ASSERT_EQ(1UL, frames_from_callback_.size()); |
176 EXPECT_EQ(20UL, frames_from_callback_.begin()->second->size()); | 179 EXPECT_EQ(20UL, frames_from_callback_.begin()->second->size()); |
177 } | 180 } |
178 | 181 |
179 TEST_F(TestPacketBuffer, ExpandBuffer) { | 182 TEST_F(TestPacketBuffer, ExpandBuffer) { |
180 const uint16_t seq_num = Rand(); | 183 const uint16_t seq_num = Rand(); |
181 | 184 |
182 for (int i = 0; i < kStartSize + 1; ++i) { | 185 for (int i = 0; i < kStartSize + 1; ++i) { |
183 EXPECT_TRUE(Insert(seq_num + i, kKeyFrame, kFirst, kLast)); | 186 EXPECT_TRUE(Insert(seq_num + i, kKeyFrame, kFirst, kLast)); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 | 303 |
301 ASSERT_EQ(4UL, frames_from_callback_.size()); | 304 ASSERT_EQ(4UL, frames_from_callback_.size()); |
302 CheckFrame(seq_num); | 305 CheckFrame(seq_num); |
303 CheckFrame(seq_num + 1); | 306 CheckFrame(seq_num + 1); |
304 CheckFrame(seq_num + 2); | 307 CheckFrame(seq_num + 2); |
305 CheckFrame(seq_num + 3); | 308 CheckFrame(seq_num + 3); |
306 } | 309 } |
307 | 310 |
308 TEST_F(TestPacketBuffer, GetBitstream) { | 311 TEST_F(TestPacketBuffer, GetBitstream) { |
309 // "many bitstream, such data" with null termination. | 312 // "many bitstream, such data" with null termination. |
310 uint8_t many[] = {0x6d, 0x61, 0x6e, 0x79, 0x20}; | 313 uint8_t many_data[] = {0x6d, 0x61, 0x6e, 0x79, 0x20}; |
311 uint8_t bitstream[] = {0x62, 0x69, 0x74, 0x73, 0x74, 0x72, | 314 uint8_t bitstream_data[] = {0x62, 0x69, 0x74, 0x73, 0x74, 0x72, |
312 0x65, 0x61, 0x6d, 0x2c, 0x20}; | 315 0x65, 0x61, 0x6d, 0x2c, 0x20}; |
313 uint8_t such[] = {0x73, 0x75, 0x63, 0x68, 0x20}; | 316 uint8_t such_data[] = {0x73, 0x75, 0x63, 0x68, 0x20}; |
314 uint8_t data[] = {0x64, 0x61, 0x74, 0x61, 0x0}; | 317 uint8_t data_data[] = {0x64, 0x61, 0x74, 0x61, 0x0}; |
315 uint8_t | 318 |
316 result[sizeof(many) + sizeof(bitstream) + sizeof(such) + sizeof(data)]; | 319 uint8_t* many = new uint8_t[sizeof(many_data)]; |
| 320 uint8_t* bitstream = new uint8_t[sizeof(bitstream_data)]; |
| 321 uint8_t* such = new uint8_t[sizeof(such_data)]; |
| 322 uint8_t* data = new uint8_t[sizeof(data_data)]; |
| 323 |
| 324 memcpy(many, many_data, sizeof(many_data)); |
| 325 memcpy(bitstream, bitstream_data, sizeof(bitstream_data)); |
| 326 memcpy(such, such_data, sizeof(such_data)); |
| 327 memcpy(data, data_data, sizeof(data_data)); |
| 328 |
| 329 uint8_t result[sizeof(many_data) + sizeof(bitstream_data) + |
| 330 sizeof(such_data) + sizeof(data_data)]; |
317 | 331 |
318 const uint16_t seq_num = Rand(); | 332 const uint16_t seq_num = Rand(); |
319 | 333 |
320 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast, sizeof(many), many)); | 334 EXPECT_TRUE( |
| 335 Insert(seq_num, kKeyFrame, kFirst, kNotLast, sizeof(many_data), many)); |
321 EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast, | 336 EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast, |
322 sizeof(bitstream), bitstream)); | 337 sizeof(bitstream_data), bitstream)); |
323 EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kNotLast, | 338 EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kNotLast, |
324 sizeof(such), such)); | 339 sizeof(such_data), such)); |
325 EXPECT_TRUE( | 340 EXPECT_TRUE(Insert(seq_num + 3, kDeltaFrame, kNotFirst, kLast, |
326 Insert(seq_num + 3, kDeltaFrame, kNotFirst, kLast, sizeof(data), data)); | 341 sizeof(data_data), data)); |
327 | 342 |
328 ASSERT_EQ(1UL, frames_from_callback_.size()); | 343 ASSERT_EQ(1UL, frames_from_callback_.size()); |
329 CheckFrame(seq_num); | 344 CheckFrame(seq_num); |
330 EXPECT_TRUE(frames_from_callback_[seq_num]->GetBitstream(result)); | 345 EXPECT_TRUE(frames_from_callback_[seq_num]->GetBitstream(result)); |
331 EXPECT_EQ(memcmp(result, "many bitstream, such data", sizeof(result)), 0); | 346 EXPECT_EQ(memcmp(result, "many bitstream, such data", sizeof(result)), 0); |
332 } | 347 } |
333 | 348 |
334 TEST_F(TestPacketBuffer, GetBitstreamH264BufferPadding) { | 349 TEST_F(TestPacketBuffer, GetBitstreamH264BufferPadding) { |
335 uint16_t seq_num = Rand(); | 350 uint16_t seq_num = Rand(); |
336 uint8_t data[] = "some plain old data"; | 351 uint8_t data_data[] = "some plain old data"; |
| 352 uint8_t* data = new uint8_t[sizeof(data_data)]; |
| 353 memcpy(data, data_data, sizeof(data_data)); |
337 | 354 |
338 // EncodedImage::kBufferPaddingBytesH264 is unknown at compile time. | 355 // EncodedImage::kBufferPaddingBytesH264 is unknown at compile time. |
339 uint8_t* result = | 356 std::unique_ptr<uint8_t[]> result( |
340 new uint8_t[sizeof(data) + EncodedImage::kBufferPaddingBytesH264]; | 357 new uint8_t[sizeof(data_data) + EncodedImage::kBufferPaddingBytesH264]); |
341 | 358 |
342 VCMPacket packet; | 359 VCMPacket packet; |
343 packet.seqNum = seq_num; | 360 packet.seqNum = seq_num; |
344 packet.codec = kVideoCodecH264; | 361 packet.codec = kVideoCodecH264; |
345 packet.insertStartCode = true; | 362 packet.insertStartCode = true; |
346 packet.video_header.codecHeader.H264.packetization_type = kH264SingleNalu; | 363 packet.video_header.codecHeader.H264.packetization_type = kH264SingleNalu; |
347 packet.dataPtr = data; | 364 packet.dataPtr = data; |
348 packet.sizeBytes = sizeof(data); | 365 packet.sizeBytes = sizeof(data_data); |
349 packet.isFirstPacket = true; | 366 packet.isFirstPacket = true; |
350 packet.markerBit = true; | 367 packet.markerBit = true; |
351 packet_buffer_->InsertPacket(packet); | 368 packet_buffer_->InsertPacket(packet); |
352 | 369 |
353 ASSERT_EQ(1UL, frames_from_callback_.size()); | 370 ASSERT_EQ(1UL, frames_from_callback_.size()); |
354 EXPECT_EQ(frames_from_callback_[seq_num]->EncodedImage()._length, | 371 EXPECT_EQ(frames_from_callback_[seq_num]->EncodedImage()._length, |
355 sizeof(data)); | 372 sizeof(data_data)); |
356 EXPECT_EQ(frames_from_callback_[seq_num]->EncodedImage()._size, | 373 EXPECT_EQ(frames_from_callback_[seq_num]->EncodedImage()._size, |
357 sizeof(data) + EncodedImage::kBufferPaddingBytesH264); | 374 sizeof(data_data) + EncodedImage::kBufferPaddingBytesH264); |
358 EXPECT_TRUE(frames_from_callback_[seq_num]->GetBitstream(result)); | 375 EXPECT_TRUE(frames_from_callback_[seq_num]->GetBitstream(result.get())); |
359 EXPECT_EQ(memcmp(result, data, sizeof(data)), 0); | 376 EXPECT_EQ(memcmp(result.get(), data, sizeof(data_data)), 0); |
360 delete[] result; | |
361 } | 377 } |
362 | 378 |
363 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { | 379 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { |
364 const uint16_t seq_num = Rand(); | 380 const uint16_t seq_num = Rand(); |
365 | 381 |
366 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); | 382 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
367 EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast)); | 383 EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast)); |
368 EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kLast)); | 384 EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kLast)); |
369 EXPECT_EQ(1UL, frames_from_callback_.size()); | 385 EXPECT_EQ(1UL, frames_from_callback_.size()); |
370 CheckFrame(seq_num); | 386 CheckFrame(seq_num); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 | 420 |
405 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); | 421 EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
406 ASSERT_EQ(1UL, frames_from_callback_.size()); | 422 ASSERT_EQ(1UL, frames_from_callback_.size()); |
407 | 423 |
408 packet_buffer_->Clear(); | 424 packet_buffer_->Clear(); |
409 EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr)); | 425 EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr)); |
410 } | 426 } |
411 | 427 |
412 } // namespace video_coding | 428 } // namespace video_coding |
413 } // namespace webrtc | 429 } // namespace webrtc |
OLD | NEW |