Allow temporal based switch if temporal layers are undefined.

Bug: webrtc:11324
Change-Id: Iee4717f453bb9883683d752832fbc7bf999a96c2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/193704
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32630}
diff --git a/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc b/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc
index db20e4c..5c5a25c 100644
--- a/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc
+++ b/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc
@@ -853,11 +853,15 @@
 
  protected:
   void SetSupportsLayers(VideoEncoder::EncoderInfo* info, bool tl_enabled) {
-    info->fps_allocation[0].clear();
     int num_layers = 1;
     if (tl_enabled) {
       num_layers = codec_settings.VP8()->numberOfTemporalLayers;
     }
+    SetNumLayers(info, num_layers);
+  }
+
+  void SetNumLayers(VideoEncoder::EncoderInfo* info, int num_layers) {
+    info->fps_allocation[0].clear();
     for (int i = 0; i < num_layers; ++i) {
       info->fps_allocation[0].push_back(
           VideoEncoder::EncoderInfo::kMaxFramerateFraction >>
@@ -910,6 +914,15 @@
   EXPECT_EQ(wrapper_->GetEncoderInfo().implementation_name, "hw");
 }
 
+TEST_F(PreferTemporalLayersFallbackTest, UsesFallbackWhenLayersAreUndefined) {
+  codec_settings.VP8()->numberOfTemporalLayers = 2;
+  SetNumLayers(&hw_info_, 1);
+  SetNumLayers(&sw_info_, 0);
+  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
+            wrapper_->InitEncode(&codec_settings, kSettings));
+  EXPECT_EQ(wrapper_->GetEncoderInfo().implementation_name, "sw");
+}
+
 TEST_F(PreferTemporalLayersFallbackTest, PrimesEncoderOnSwitch) {
   codec_settings.VP8()->numberOfTemporalLayers = 2;
   // Both support temporal layers, will use main one.
diff --git a/api/video_codecs/video_encoder_software_fallback_wrapper.cc b/api/video_codecs/video_encoder_software_fallback_wrapper.cc
index 95a41d0..94a1817 100644
--- a/api/video_codecs/video_encoder_software_fallback_wrapper.cc
+++ b/api/video_codecs/video_encoder_software_fallback_wrapper.cc
@@ -56,7 +56,7 @@
 
   bool SupportsTemporalBasedSwitch(const VideoCodec& codec) const {
     return enable_temporal_based_switch &&
-           SimulcastUtility::NumberOfTemporalLayers(codec, 0) > 1;
+           SimulcastUtility::NumberOfTemporalLayers(codec, 0) != 1;
   }
 
   bool enable_temporal_based_switch = false;
@@ -462,7 +462,7 @@
     }
 
     if (encoder_state_ == EncoderState::kMainEncoderUsed &&
-        encoder_->GetEncoderInfo().fps_allocation[0].size() > 1) {
+        encoder_->GetEncoderInfo().fps_allocation[0].size() != 1) {
       // Primary encoder already supports temporal layers, use that instead.
       return true;
     }
@@ -471,7 +471,7 @@
     if (fallback_encoder_->InitEncode(&codec_settings_,
                                       encoder_settings_.value()) ==
         WEBRTC_VIDEO_CODEC_OK) {
-      if (fallback_encoder_->GetEncoderInfo().fps_allocation[0].size() > 1) {
+      if (fallback_encoder_->GetEncoderInfo().fps_allocation[0].size() != 1) {
         // Fallback encoder available and supports temporal layers, use it!
         if (encoder_state_ == EncoderState::kMainEncoderUsed) {
           // Main encoder initialized but does not support temporal layers,