Return InitEncode errors from simulcast adapter

SimulcastEncoderAdapter::InitEncode stores the encoder InitEncode result separately from the earlier VerifyCodec result.

Use that InitEncode result when logging and returning errors so callers see the actual encoder failure code.

Bug: webrtc:514425860
Change-Id: I566476c299aa9c4fb691649d2347b19d781e38ea
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/473540
Commit-Queue: Boris Tsirkin <btsirkin@meta.com>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47743}
diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc
index 2edb6be..ea001c0 100644
--- a/media/engine/simulcast_encoder_adapter.cc
+++ b/media/engine/simulcast_encoder_adapter.cc
@@ -467,11 +467,11 @@
         encoded_complete_callback_);
     if (total_streams_count_ == 1) {
       RTC_LOG(LS_ERROR) << "[SEA] InitEncode: failed with error code: "
-                        << WebRtcVideoCodecErrorToString(ret);
-      return ret;
+                        << WebRtcVideoCodecErrorToString(result);
+      return result;
     }
     RTC_LOG(LS_WARNING) << "[SEA] InitEncode: failed with error code: "
-                        << WebRtcVideoCodecErrorToString(ret)
+                        << WebRtcVideoCodecErrorToString(result)
                         << ". Falling back to multi-encoder mode.";
   }
 
@@ -508,7 +508,7 @@
       encoder_context.reset();
       Release();
       RTC_LOG(LS_ERROR) << "[SEA] InitEncode: failed with error code: "
-                        << WebRtcVideoCodecErrorToString(ret);
+                        << WebRtcVideoCodecErrorToString(result);
       return result;
     }
 
diff --git a/media/engine/simulcast_encoder_adapter_unittest.cc b/media/engine/simulcast_encoder_adapter_unittest.cc
index 9a47a62..01958a3 100644
--- a/media/engine/simulcast_encoder_adapter_unittest.cc
+++ b/media/engine/simulcast_encoder_adapter_unittest.cc
@@ -1925,6 +1925,23 @@
   EXPECT_TRUE(helper_->factory()->encoders().empty());
 }
 
+TEST_F(TestSimulcastEncoderAdapterFake,
+       SingleStreamInitEncodeReturnsEncoderError) {
+  SimulcastTestFixtureImpl::DefaultSettings(
+      &codec_, static_cast<const int*>(kTestTemporalLayerProfile),
+      kVideoCodecVP8);
+  codec_.numberOfSimulcastStreams = 1;
+
+  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, adapter_->InitEncode(&codec_, kSettings));
+  ASSERT_EQ(1u, helper_->factory()->encoders().size());
+
+  helper_->factory()->encoders()[0]->set_init_encode_return_value(
+      WEBRTC_VIDEO_CODEC_ENCODER_FAILURE);
+
+  EXPECT_EQ(WEBRTC_VIDEO_CODEC_ENCODER_FAILURE,
+            adapter_->InitEncode(&codec_, kSettings));
+}
+
 TEST_F(TestSimulcastEncoderAdapterFake, DoesNotAlterMaxQpForScreenshare) {
   const int kHighMaxQp = 56;
   const int kLowMaxQp = 46;