Make VP9 correctly accept middle-layer singlecast

Unfortunate typo and weak tests made it so if only a middle spatial layer
is active, vp9 encoder would be configured to send two top layers.

Bug: webrtc:11319
Change-Id: I460c245044f60ea7e0127c0e4134d0edab85f4f3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185043
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32164}
This commit is contained in:
Ilya Nikolaevskiy
2020-09-22 15:55:23 +02:00
committed by Commit Bot
parent ceb44959ca
commit a945cdadff
2 changed files with 44 additions and 2 deletions

View File

@ -364,24 +364,66 @@ TEST_F(VideoCodecInitializerTest, Vp9DeactivateLayers) {
config_.simulcast_layers[1].active = true;
config_.simulcast_layers[2].active = true;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
EXPECT_TRUE(codec_out_.spatialLayers[1].active);
EXPECT_TRUE(codec_out_.spatialLayers[2].active);
// Deactivate top layer.
config_.simulcast_layers[0].active = true;
config_.simulcast_layers[1].active = true;
config_.simulcast_layers[2].active = false;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
EXPECT_TRUE(codec_out_.spatialLayers[1].active);
EXPECT_FALSE(codec_out_.spatialLayers[2].active);
// Deactivate middle layer.
config_.simulcast_layers[2].active = true;
config_.simulcast_layers[0].active = true;
config_.simulcast_layers[1].active = false;
config_.simulcast_layers[2].active = true;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
EXPECT_FALSE(codec_out_.spatialLayers[1].active);
EXPECT_TRUE(codec_out_.spatialLayers[2].active);
// Deactivate first layer.
config_.simulcast_layers[0].active = false;
config_.simulcast_layers[1].active = true;
config_.simulcast_layers[2].active = true;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 2);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
EXPECT_TRUE(codec_out_.spatialLayers[1].active);
// HD singlecast.
config_.simulcast_layers[0].active = false;
config_.simulcast_layers[1].active = false;
config_.simulcast_layers[2].active = true;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 1);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
// VGA singlecast.
config_.simulcast_layers[0].active = false;
config_.simulcast_layers[1].active = true;
config_.simulcast_layers[2].active = false;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 2);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
EXPECT_FALSE(codec_out_.spatialLayers[1].active);
// QVGA singlecast.
config_.simulcast_layers[0].active = true;
config_.simulcast_layers[1].active = false;
config_.simulcast_layers[2].active = false;
EXPECT_TRUE(InitializeCodec());
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
EXPECT_FALSE(codec_out_.spatialLayers[1].active);
EXPECT_FALSE(codec_out_.spatialLayers[2].active);
}
} // namespace webrtc