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;