From 548dec4a81c3c3d8ab6573dc7e3cde700d670293 Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Wed, 5 Sep 2018 12:08:19 +0200 Subject: [PATCH] Test setting of spatial index. Added unit test that verifies that VP9 encoder wrapper correctly sets spatial index in EncodedImage. Bug: webrtc:9721 Change-Id: Id1eb83a423e36273f97659dc76cd5a089a836e6a Reviewed-on: https://webrtc-review.googlesource.com/98003 Reviewed-by: Rasmus Brandt Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/master@{#24575} --- .../codecs/vp9/test/vp9_impl_unittest.cc | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc index 0f5855f2a9..23ef507cbd 100644 --- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc +++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc @@ -58,14 +58,21 @@ class TestVp9Impl : public VideoCodecUnitTest { std::vector encoded_frame; std::vector codec_specific; ASSERT_TRUE(WaitForEncodedFrames(&encoded_frame, &codec_specific)); - for (size_t frame_num = 0; frame_num < num_spatial_layers; ++frame_num) { + for (size_t spatial_idx = 0; spatial_idx < num_spatial_layers; + ++spatial_idx) { const CodecSpecificInfoVP9& vp9 = - codec_specific[frame_num].codecSpecific.VP9; + codec_specific[spatial_idx].codecSpecific.VP9; if (vp9.temporal_idx == kNoTemporalIdx) { EXPECT_EQ(temporal_idx, 0); } else { EXPECT_EQ(vp9.temporal_idx, temporal_idx); } + if (num_spatial_layers == 1) { + EXPECT_FALSE(encoded_frame[spatial_idx].SpatialIndex()); + } else { + EXPECT_EQ(encoded_frame[spatial_idx].SpatialIndex(), + static_cast(spatial_idx)); + } EXPECT_EQ(vp9.temporal_up_switch, temporal_up_switch); // Ensure there are no duplicates in reference list. @@ -211,6 +218,22 @@ TEST_F(TestVp9Impl, EncoderWith2TemporalLayers) { ExpectFrameWith(1); } +TEST_F(TestVp9Impl, EncoderWith2SpatialLayers) { + codec_settings_.VP9()->numberOfSpatialLayers = 2; + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, + encoder_->InitEncode(&codec_settings_, 1 /* number of cores */, + 0 /* max payload size (unused) */)); + + SetWaitForEncodedFramesThreshold(2); + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, + encoder_->Encode(*NextInputFrame(), nullptr, nullptr)); + std::vector encoded_frame; + std::vector codec_info; + ASSERT_TRUE(WaitForEncodedFrames(&encoded_frame, &codec_info)); + EXPECT_EQ(encoded_frame[0].SpatialIndex(), 0); + EXPECT_EQ(encoded_frame[1].SpatialIndex(), 1); +} + TEST_F(TestVp9Impl, EncoderExplicitLayering) { // Override default settings. codec_settings_.VP9()->numberOfTemporalLayers = 1;