diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index 0e6f2df..04d6354 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -58,7 +58,8 @@
 
  protected:
   void SetUpFor(VideoCodecType type,
-                int num_spatial_streams,
+                absl::optional<int> num_simulcast_streams,
+                absl::optional<int> num_spatial_streams,
                 int num_temporal_streams,
                 bool screenshare) {
     config_ = VideoEncoderConfig();
@@ -70,14 +71,18 @@
     }
 
     if (type == VideoCodecType::kVideoCodecVP8) {
-      config_.number_of_streams = num_spatial_streams;
+      ASSERT_TRUE(num_simulcast_streams.has_value());
+      ASSERT_FALSE(num_spatial_streams.has_value());
+      config_.number_of_streams = num_simulcast_streams.value();
       VideoCodecVP8 vp8_settings = VideoEncoder::GetDefaultVp8Settings();
       vp8_settings.numberOfTemporalLayers = num_temporal_streams;
       config_.encoder_specific_settings = rtc::make_ref_counted<
           webrtc::VideoEncoderConfig::Vp8EncoderSpecificSettings>(vp8_settings);
     } else if (type == VideoCodecType::kVideoCodecVP9) {
+      ASSERT_FALSE(num_simulcast_streams.has_value());
+      ASSERT_TRUE(num_spatial_streams.has_value());
       VideoCodecVP9 vp9_settings = VideoEncoder::GetDefaultVp9Settings();
-      vp9_settings.numberOfSpatialLayers = num_spatial_streams;
+      vp9_settings.numberOfSpatialLayers = num_spatial_streams.value();
       vp9_settings.numberOfTemporalLayers = num_temporal_streams;
       config_.encoder_specific_settings = rtc::make_ref_counted<
           webrtc::VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings);
@@ -147,7 +152,7 @@
 };
 
 TEST_F(VideoCodecInitializerTest, SingleStreamVp8Screenshare) {
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 1, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, absl::nullopt, 1, true);
   streams_.push_back(DefaultStream());
   EXPECT_TRUE(InitializeCodec());
 
@@ -160,7 +165,7 @@
 }
 
 TEST_F(VideoCodecInitializerTest, SingleStreamVp8ScreenshareInactive) {
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 1, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, absl::nullopt, 1, true);
   VideoStream inactive_stream = DefaultStream();
   inactive_stream.active = false;
   streams_.push_back(inactive_stream);
@@ -175,7 +180,7 @@
 }
 
 TEST_F(VideoCodecInitializerTest, TemporalLayeredVp8ScreenshareConference) {
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 2, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, absl::nullopt, 2, true);
   streams_.push_back(DefaultScreenshareStream());
   EXPECT_TRUE(InitializeCodec());
   bitrate_allocator_->SetLegacyConferenceMode(true);
@@ -192,7 +197,7 @@
 }
 
 TEST_F(VideoCodecInitializerTest, TemporalLayeredVp8Screenshare) {
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 2, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 1, absl::nullopt, 2, true);
   streams_.push_back(DefaultScreenshareStream());
   EXPECT_TRUE(InitializeCodec());
 
@@ -207,7 +212,7 @@
 }
 
 TEST_F(VideoCodecInitializerTest, SimulcastVp8Screenshare) {
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 2, 1, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 2, absl::nullopt, 1, true);
   streams_.push_back(DefaultScreenshareStream());
   VideoStream video_stream = DefaultStream();
   video_stream.max_framerate = kScreenshareDefaultFramerate;
@@ -231,7 +236,7 @@
 // Tests that when a video stream is inactive, then the bitrate allocation will
 // be 0 for that stream.
 TEST_F(VideoCodecInitializerTest, SimulcastVp8ScreenshareInactive) {
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 2, 1, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 2, absl::nullopt, 1, true);
   streams_.push_back(DefaultScreenshareStream());
   VideoStream inactive_video_stream = DefaultStream();
   inactive_video_stream.active = false;
@@ -256,7 +261,7 @@
 TEST_F(VideoCodecInitializerTest, HighFpsSimulcastVp8Screenshare) {
   // Two simulcast streams, the lower one using legacy settings (two temporal
   // streams, 5fps), the higher one using 3 temporal streams and 30fps.
-  SetUpFor(VideoCodecType::kVideoCodecVP8, 2, 3, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP8, 2, absl::nullopt, 3, true);
   streams_.push_back(DefaultScreenshareStream());
   VideoStream video_stream = DefaultStream();
   video_stream.num_temporal_layers = 3;
@@ -280,13 +285,13 @@
 }
 
 TEST_F(VideoCodecInitializerTest, SingleStreamMultiplexCodec) {
-  SetUpFor(VideoCodecType::kVideoCodecMultiplex, 1, 1, true);
+  SetUpFor(VideoCodecType::kVideoCodecMultiplex, absl::nullopt, 1, 1, true);
   streams_.push_back(DefaultStream());
   EXPECT_TRUE(InitializeCodec());
 }
 
 TEST_F(VideoCodecInitializerTest, Vp9SvcDefaultLayering) {
-  SetUpFor(VideoCodecType::kVideoCodecVP9, 3, 3, false);
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 3, 3, false);
   VideoStream stream = DefaultStream();
   stream.num_temporal_layers = 3;
   streams_.push_back(stream);
@@ -297,7 +302,7 @@
 }
 
 TEST_F(VideoCodecInitializerTest, Vp9SvcAdjustedLayering) {
-  SetUpFor(VideoCodecType::kVideoCodecVP9, 3, 3, false);
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 3, 3, false);
   VideoStream stream = DefaultStream();
   stream.num_temporal_layers = 3;
   // Set resolution which is only enough to produce 2 spatial layers.
@@ -312,7 +317,7 @@
 
 TEST_F(VideoCodecInitializerTest,
        Vp9SingleSpatialLayerMaxBitrateIsEqualToCodecMaxBitrate) {
-  SetUpFor(VideoCodecType::kVideoCodecVP9, 1, 3, false);
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 1, 3, false);
   VideoStream stream = DefaultStream();
   stream.num_temporal_layers = 3;
   streams_.push_back(stream);
@@ -324,7 +329,7 @@
 
 TEST_F(VideoCodecInitializerTest,
        Vp9SingleSpatialLayerTargetBitrateIsEqualToCodecMaxBitrate) {
-  SetUpFor(VideoCodecType::kVideoCodecVP9, 1, 1, true);
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 1, 1, true);
   VideoStream stream = DefaultStream();
   stream.num_temporal_layers = 1;
   streams_.push_back(stream);
@@ -339,7 +344,7 @@
   // Request 3 spatial layers for 320x180 input. Actual number of layers will be
   // reduced to 1 due to low input resolution but SVC bitrate limits should be
   // applied.
-  SetUpFor(VideoCodecType::kVideoCodecVP9, 3, 3, false);
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 3, 3, false);
   VideoStream stream = DefaultStream();
   stream.width = 320;
   stream.height = 180;
@@ -352,7 +357,7 @@
 }
 
 TEST_F(VideoCodecInitializerTest, Vp9DeactivateLayers) {
-  SetUpFor(VideoCodecType::kVideoCodecVP9, 3, 1, false);
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 3, 1, false);
   VideoStream stream = DefaultStream();
   streams_.push_back(stream);
 
@@ -425,6 +430,22 @@
   EXPECT_FALSE(codec_out_.spatialLayers[2].active);
 }
 
+TEST_F(VideoCodecInitializerTest, Vp9SvcResolutionAlignment) {
+  SetUpFor(VideoCodecType::kVideoCodecVP9, absl::nullopt, 3, 3, false);
+  VideoStream stream = DefaultStream();
+  stream.width = 1281;
+  stream.height = 721;
+  stream.num_temporal_layers = 3;
+  streams_.push_back(stream);
+
+  EXPECT_TRUE(InitializeCodec());
+  EXPECT_EQ(codec_out_.width, 1280);
+  EXPECT_EQ(codec_out_.height, 720);
+  EXPECT_EQ(codec_out_.numberOfSimulcastStreams, 1);
+  EXPECT_EQ(codec_out_.simulcastStream[0].width, 1280);
+  EXPECT_EQ(codec_out_.simulcastStream[0].height, 720);
+}
+
 TEST_F(VideoCodecInitializerTest, Av1SingleSpatialLayerBitratesAreConsistent) {
   VideoEncoderConfig config;
   config.codec_type = VideoCodecType::kVideoCodecAV1;
