In Vp9 wrapper allow to use ScalableVideoController with simulcast structures

Bug: webrtc:11999
Change-Id: Ifed99e8676a75f869a7df6b3ac64a6ad1c29c62f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/189550
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32452}
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 d3b7b94..ad88e90 100644
--- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
+++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
@@ -669,6 +669,7 @@
   ConfigureSvc(codec_settings, num_spatial_layers, num_temporal_layers);
   codec_settings.VP9()->frameDroppingOn = false;
   codec_settings.VP9()->flexibleMode = false;
+  codec_settings.VP9()->interLayerPred = InterLayerPredMode::kOnKeyPic;
   codec_settings.mode = VideoCodecMode::kRealtimeVideo;
 
   EXPECT_EQ(encoder->InitEncode(&codec_settings, kSettings),
diff --git a/modules/video_coding/codecs/vp9/vp9_impl.cc b/modules/video_coding/codecs/vp9/vp9_impl.cc
index 599a4d5..c11f67c 100644
--- a/modules/video_coding/codecs/vp9/vp9_impl.cc
+++ b/modules/video_coding/codecs/vp9/vp9_impl.cc
@@ -227,16 +227,21 @@
     return std::make_unique<ScalableVideoControllerNoLayering>();
   }
 
-  if (codec.VP9().interLayerPred != InterLayerPredMode::kOn ||
-      codec.mode == VideoCodecMode::kScreensharing) {
-    // TODO(bugs.webrtc.org/11999): Return names of the structure when they are
-    // implemented and support frame skipping.
-    return nullptr;
-  }
-
   char name[20];
   rtc::SimpleStringBuilder ss(name);
-  ss << "L" << num_spatial_layers << "T" << num_temporal_layers;
+  if (codec.mode == VideoCodecMode::kScreensharing) {
+    // TODO(bugs.webrtc.org/11999): Compose names of the structures when they
+    // are implemented.
+    return nullptr;
+  } else if (codec.VP9().interLayerPred == InterLayerPredMode::kOn ||
+             num_spatial_layers == 1) {
+    ss << "L" << num_spatial_layers << "T" << num_temporal_layers;
+  } else if (codec.VP9().interLayerPred == InterLayerPredMode::kOnKeyPic) {
+    ss << "L" << num_spatial_layers << "T" << num_temporal_layers << "_KEY";
+  } else {
+    RTC_DCHECK_EQ(codec.VP9().interLayerPred, InterLayerPredMode::kOff);
+    ss << "S" << num_spatial_layers << "T" << num_temporal_layers;
+  }
 
   // Check spatial ratio.
   if (num_spatial_layers > 1 && codec.spatialLayers[0].targetBitrate > 0) {