OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 input_frame_.allocated_size(kUPlane)); | 331 input_frame_.allocated_size(kUPlane)); |
332 memset(input_frame_.buffer(kVPlane), 0, | 332 memset(input_frame_.buffer(kVPlane), 0, |
333 input_frame_.allocated_size(kVPlane)); | 333 input_frame_.allocated_size(kVPlane)); |
334 } | 334 } |
335 | 335 |
336 virtual void TearDown() { | 336 virtual void TearDown() { |
337 encoder_->Release(); | 337 encoder_->Release(); |
338 decoder_->Release(); | 338 decoder_->Release(); |
339 } | 339 } |
340 | 340 |
341 void ExpectStreams(VideoFrameType frame_type, int expected_video_streams) { | 341 void ExpectStreams(FrameType frame_type, int expected_video_streams) { |
342 ASSERT_GE(expected_video_streams, 0); | 342 ASSERT_GE(expected_video_streams, 0); |
343 ASSERT_LE(expected_video_streams, kNumberOfSimulcastStreams); | 343 ASSERT_LE(expected_video_streams, kNumberOfSimulcastStreams); |
344 if (expected_video_streams >= 1) { | 344 if (expected_video_streams >= 1) { |
345 EXPECT_CALL(encoder_callback_, Encoded( | 345 EXPECT_CALL(encoder_callback_, Encoded( |
346 AllOf(Field(&EncodedImage::_frameType, frame_type), | 346 AllOf(Field(&EncodedImage::_frameType, frame_type), |
347 Field(&EncodedImage::_encodedWidth, kDefaultWidth / 4), | 347 Field(&EncodedImage::_encodedWidth, kDefaultWidth / 4), |
348 Field(&EncodedImage::_encodedHeight, kDefaultHeight / 4)), _, _) | 348 Field(&EncodedImage::_encodedHeight, kDefaultHeight / 4)), _, _) |
349 ) | 349 ) |
350 .Times(1) | 350 .Times(1) |
351 .WillRepeatedly(Return(0)); | 351 .WillRepeatedly(Return(0)); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 &layer_sync, i); | 389 &layer_sync, i); |
390 EXPECT_EQ(expected_temporal_idx[i], temporal_layer); | 390 EXPECT_EQ(expected_temporal_idx[i], temporal_layer); |
391 EXPECT_EQ(expected_layer_sync[i], layer_sync); | 391 EXPECT_EQ(expected_layer_sync[i], layer_sync); |
392 } | 392 } |
393 } | 393 } |
394 | 394 |
395 // We currently expect all active streams to generate a key frame even though | 395 // We currently expect all active streams to generate a key frame even though |
396 // a key frame was only requested for some of them. | 396 // a key frame was only requested for some of them. |
397 void TestKeyFrameRequestsOnAllStreams() { | 397 void TestKeyFrameRequestsOnAllStreams() { |
398 encoder_->SetRates(kMaxBitrates[2], 30); // To get all three streams. | 398 encoder_->SetRates(kMaxBitrates[2], 30); // To get all three streams. |
399 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 399 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
400 kDeltaFrame); | |
401 ExpectStreams(kKeyFrame, kNumberOfSimulcastStreams); | 400 ExpectStreams(kKeyFrame, kNumberOfSimulcastStreams); |
402 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 401 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
403 | 402 |
404 ExpectStreams(kDeltaFrame, kNumberOfSimulcastStreams); | 403 ExpectStreams(kDeltaFrame, kNumberOfSimulcastStreams); |
405 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 404 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
406 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 405 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
407 | 406 |
408 frame_types[0] = kKeyFrame; | 407 frame_types[0] = kKeyFrame; |
409 ExpectStreams(kKeyFrame, kNumberOfSimulcastStreams); | 408 ExpectStreams(kKeyFrame, kNumberOfSimulcastStreams); |
410 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 409 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
(...skipping 13 matching lines...) Expand all Loading... |
424 | 423 |
425 std::fill(frame_types.begin(), frame_types.end(), kDeltaFrame); | 424 std::fill(frame_types.begin(), frame_types.end(), kDeltaFrame); |
426 ExpectStreams(kDeltaFrame, kNumberOfSimulcastStreams); | 425 ExpectStreams(kDeltaFrame, kNumberOfSimulcastStreams); |
427 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 426 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
428 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 427 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
429 } | 428 } |
430 | 429 |
431 void TestPaddingAllStreams() { | 430 void TestPaddingAllStreams() { |
432 // We should always encode the base layer. | 431 // We should always encode the base layer. |
433 encoder_->SetRates(kMinBitrates[0] - 1, 30); | 432 encoder_->SetRates(kMinBitrates[0] - 1, 30); |
434 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 433 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
435 kDeltaFrame); | |
436 ExpectStreams(kKeyFrame, 1); | 434 ExpectStreams(kKeyFrame, 1); |
437 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 435 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
438 | 436 |
439 ExpectStreams(kDeltaFrame, 1); | 437 ExpectStreams(kDeltaFrame, 1); |
440 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 438 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
441 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 439 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
442 } | 440 } |
443 | 441 |
444 void TestPaddingTwoStreams() { | 442 void TestPaddingTwoStreams() { |
445 // We have just enough to get only the first stream and padding for two. | 443 // We have just enough to get only the first stream and padding for two. |
446 encoder_->SetRates(kMinBitrates[0], 30); | 444 encoder_->SetRates(kMinBitrates[0], 30); |
447 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 445 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
448 kDeltaFrame); | |
449 ExpectStreams(kKeyFrame, 1); | 446 ExpectStreams(kKeyFrame, 1); |
450 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 447 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
451 | 448 |
452 ExpectStreams(kDeltaFrame, 1); | 449 ExpectStreams(kDeltaFrame, 1); |
453 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 450 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
454 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 451 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
455 } | 452 } |
456 | 453 |
457 void TestPaddingTwoStreamsOneMaxedOut() { | 454 void TestPaddingTwoStreamsOneMaxedOut() { |
458 // We are just below limit of sending second stream, so we should get | 455 // We are just below limit of sending second stream, so we should get |
459 // the first stream maxed out (at |maxBitrate|), and padding for two. | 456 // the first stream maxed out (at |maxBitrate|), and padding for two. |
460 encoder_->SetRates(kTargetBitrates[0] + kMinBitrates[1] - 1, 30); | 457 encoder_->SetRates(kTargetBitrates[0] + kMinBitrates[1] - 1, 30); |
461 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 458 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
462 kDeltaFrame); | |
463 ExpectStreams(kKeyFrame, 1); | 459 ExpectStreams(kKeyFrame, 1); |
464 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 460 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
465 | 461 |
466 ExpectStreams(kDeltaFrame, 1); | 462 ExpectStreams(kDeltaFrame, 1); |
467 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 463 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
468 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 464 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
469 } | 465 } |
470 | 466 |
471 void TestPaddingOneStream() { | 467 void TestPaddingOneStream() { |
472 // We have just enough to send two streams, so padding for one stream. | 468 // We have just enough to send two streams, so padding for one stream. |
473 encoder_->SetRates(kTargetBitrates[0] + kMinBitrates[1], 30); | 469 encoder_->SetRates(kTargetBitrates[0] + kMinBitrates[1], 30); |
474 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 470 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
475 kDeltaFrame); | |
476 ExpectStreams(kKeyFrame, 2); | 471 ExpectStreams(kKeyFrame, 2); |
477 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 472 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
478 | 473 |
479 ExpectStreams(kDeltaFrame, 2); | 474 ExpectStreams(kDeltaFrame, 2); |
480 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 475 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
481 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 476 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
482 } | 477 } |
483 | 478 |
484 void TestPaddingOneStreamTwoMaxedOut() { | 479 void TestPaddingOneStreamTwoMaxedOut() { |
485 // We are just below limit of sending third stream, so we should get | 480 // We are just below limit of sending third stream, so we should get |
486 // first stream's rate maxed out at |targetBitrate|, second at |maxBitrate|. | 481 // first stream's rate maxed out at |targetBitrate|, second at |maxBitrate|. |
487 encoder_->SetRates(kTargetBitrates[0] + kTargetBitrates[1] + | 482 encoder_->SetRates(kTargetBitrates[0] + kTargetBitrates[1] + |
488 kMinBitrates[2] - 1, 30); | 483 kMinBitrates[2] - 1, 30); |
489 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 484 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
490 kDeltaFrame); | |
491 ExpectStreams(kKeyFrame, 2); | 485 ExpectStreams(kKeyFrame, 2); |
492 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 486 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
493 | 487 |
494 ExpectStreams(kDeltaFrame, 2); | 488 ExpectStreams(kDeltaFrame, 2); |
495 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 489 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
496 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 490 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
497 } | 491 } |
498 | 492 |
499 void TestSendAllStreams() { | 493 void TestSendAllStreams() { |
500 // We have just enough to send all streams. | 494 // We have just enough to send all streams. |
501 encoder_->SetRates(kTargetBitrates[0] + kTargetBitrates[1] + | 495 encoder_->SetRates(kTargetBitrates[0] + kTargetBitrates[1] + |
502 kMinBitrates[2], 30); | 496 kMinBitrates[2], 30); |
503 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 497 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
504 kDeltaFrame); | |
505 ExpectStreams(kKeyFrame, 3); | 498 ExpectStreams(kKeyFrame, 3); |
506 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 499 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
507 | 500 |
508 ExpectStreams(kDeltaFrame, 3); | 501 ExpectStreams(kDeltaFrame, 3); |
509 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 502 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
510 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 503 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
511 } | 504 } |
512 | 505 |
513 void TestDisablingStreams() { | 506 void TestDisablingStreams() { |
514 // We should get three media streams. | 507 // We should get three media streams. |
515 encoder_->SetRates(kMaxBitrates[0] + kMaxBitrates[1] + | 508 encoder_->SetRates(kMaxBitrates[0] + kMaxBitrates[1] + |
516 kMaxBitrates[2], 30); | 509 kMaxBitrates[2], 30); |
517 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 510 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
518 kDeltaFrame); | |
519 ExpectStreams(kKeyFrame, 3); | 511 ExpectStreams(kKeyFrame, 3); |
520 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 512 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
521 | 513 |
522 ExpectStreams(kDeltaFrame, 3); | 514 ExpectStreams(kDeltaFrame, 3); |
523 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); | 515 input_frame_.set_timestamp(input_frame_.timestamp() + 3000); |
524 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 516 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
525 | 517 |
526 // We should only get two streams and padding for one. | 518 // We should only get two streams and padding for one. |
527 encoder_->SetRates(kTargetBitrates[0] + kTargetBitrates[1] + | 519 encoder_->SetRates(kTargetBitrates[0] + kTargetBitrates[1] + |
528 kMinBitrates[2] / 2, 30); | 520 kMinBitrates[2] / 2, 30); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 maxBitrate = 0; | 581 maxBitrate = 0; |
590 // The highest layer has to correspond to the non-simulcast resolution. | 582 // The highest layer has to correspond to the non-simulcast resolution. |
591 settings_.simulcastStream[settings_.numberOfSimulcastStreams - 1]. | 583 settings_.simulcastStream[settings_.numberOfSimulcastStreams - 1]. |
592 width = settings_.width; | 584 width = settings_.width; |
593 settings_.simulcastStream[settings_.numberOfSimulcastStreams - 1]. | 585 settings_.simulcastStream[settings_.numberOfSimulcastStreams - 1]. |
594 height = settings_.height; | 586 height = settings_.height; |
595 EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200)); | 587 EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200)); |
596 | 588 |
597 // Encode one frame and verify. | 589 // Encode one frame and verify. |
598 encoder_->SetRates(kMaxBitrates[0] + kMaxBitrates[1], 30); | 590 encoder_->SetRates(kMaxBitrates[0] + kMaxBitrates[1], 30); |
599 std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams, | 591 std::vector<FrameType> frame_types(kNumberOfSimulcastStreams, kDeltaFrame); |
600 kDeltaFrame); | |
601 EXPECT_CALL(encoder_callback_, Encoded( | 592 EXPECT_CALL(encoder_callback_, Encoded( |
602 AllOf(Field(&EncodedImage::_frameType, kKeyFrame), | 593 AllOf(Field(&EncodedImage::_frameType, kKeyFrame), |
603 Field(&EncodedImage::_encodedWidth, width), | 594 Field(&EncodedImage::_encodedWidth, width), |
604 Field(&EncodedImage::_encodedHeight, height)), _, _)) | 595 Field(&EncodedImage::_encodedHeight, height)), _, _)) |
605 .Times(1) | 596 .Times(1) |
606 .WillRepeatedly(Return(0)); | 597 .WillRepeatedly(Return(0)); |
607 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); | 598 EXPECT_EQ(0, encoder_->Encode(input_frame_, NULL, &frame_types)); |
608 | 599 |
609 // Switch back. | 600 // Switch back. |
610 DefaultSettings(&settings_, kDefaultTemporalLayerProfile); | 601 DefaultSettings(&settings_, kDefaultTemporalLayerProfile); |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
997 rtc::scoped_ptr<VP8Decoder> decoder_; | 988 rtc::scoped_ptr<VP8Decoder> decoder_; |
998 MockDecodedImageCallback decoder_callback_; | 989 MockDecodedImageCallback decoder_callback_; |
999 VideoCodec settings_; | 990 VideoCodec settings_; |
1000 VideoFrame input_frame_; | 991 VideoFrame input_frame_; |
1001 }; | 992 }; |
1002 | 993 |
1003 } // namespace testing | 994 } // namespace testing |
1004 } // namespace webrtc | 995 } // namespace webrtc |
1005 | 996 |
1006 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_UNITTEST_H_ | 997 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_UNITTEST_H_ |
OLD | NEW |