Skip to content

Commit 9962471

Browse files
Ilya NikolaevskiyCommit Bot
authored andcommitted
Merge to M86: Make VP9 correctly accept middle-layer singlecast
Unfortunate typo and week tests made it so if only a middle spatial layer is active, vp9 encoder would be configured to send two top layers. This is a cherry-pick of: https://webrtc.googlesource.com/src/+/a945cdadffa50028f96449823ce6f900cd6e8b95 Original reviewed on: https://webrtc-review.googlesource.com/c/src/+/185043 Bug: webrtc:11319, chromium:1131839 Change-Id: Ia850099d8023d9ec63e27d536a546cf529bf31a4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185184 Commit-Queue: Ilya Nikolaevskiy <[email protected]> Reviewed-by: Ilya Nikolaevskiy <[email protected]> Reviewed-by: Erik Språng <[email protected]> Cr-Commit-Position: refs/branch-heads/4240@{#10} Cr-Branched-From: 93a9d19-refs/heads/master@{#31969}
1 parent 199ddd8 commit 9962471

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

modules/video_coding/video_codec_initializer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec(
210210

211211
for (size_t spatial_idx = first_active_layer;
212212
spatial_idx < config.simulcast_layers.size() &&
213-
spatial_idx < spatial_layers.size();
213+
spatial_idx < spatial_layers.size() + first_active_layer;
214214
++spatial_idx) {
215215
spatial_layers[spatial_idx - first_active_layer].active =
216216
config.simulcast_layers[spatial_idx].active;

modules/video_coding/video_codec_initializer_unittest.cc

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,24 +364,66 @@ TEST_F(VideoCodecInitializerTest, Vp9DeactivateLayers) {
364364
config_.simulcast_layers[1].active = true;
365365
config_.simulcast_layers[2].active = true;
366366
EXPECT_TRUE(InitializeCodec());
367+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
367368
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
368369
EXPECT_TRUE(codec_out_.spatialLayers[1].active);
369370
EXPECT_TRUE(codec_out_.spatialLayers[2].active);
370371

371372
// Deactivate top layer.
373+
config_.simulcast_layers[0].active = true;
374+
config_.simulcast_layers[1].active = true;
372375
config_.simulcast_layers[2].active = false;
373376
EXPECT_TRUE(InitializeCodec());
377+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
374378
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
375379
EXPECT_TRUE(codec_out_.spatialLayers[1].active);
376380
EXPECT_FALSE(codec_out_.spatialLayers[2].active);
377381

378382
// Deactivate middle layer.
379-
config_.simulcast_layers[2].active = true;
383+
config_.simulcast_layers[0].active = true;
380384
config_.simulcast_layers[1].active = false;
385+
config_.simulcast_layers[2].active = true;
381386
EXPECT_TRUE(InitializeCodec());
387+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
382388
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
383389
EXPECT_FALSE(codec_out_.spatialLayers[1].active);
384390
EXPECT_TRUE(codec_out_.spatialLayers[2].active);
391+
392+
// Deactivate first layer.
393+
config_.simulcast_layers[0].active = false;
394+
config_.simulcast_layers[1].active = true;
395+
config_.simulcast_layers[2].active = true;
396+
EXPECT_TRUE(InitializeCodec());
397+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 2);
398+
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
399+
EXPECT_TRUE(codec_out_.spatialLayers[1].active);
400+
401+
// HD singlecast.
402+
config_.simulcast_layers[0].active = false;
403+
config_.simulcast_layers[1].active = false;
404+
config_.simulcast_layers[2].active = true;
405+
EXPECT_TRUE(InitializeCodec());
406+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 1);
407+
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
408+
409+
// VGA singlecast.
410+
config_.simulcast_layers[0].active = false;
411+
config_.simulcast_layers[1].active = true;
412+
config_.simulcast_layers[2].active = false;
413+
EXPECT_TRUE(InitializeCodec());
414+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 2);
415+
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
416+
EXPECT_FALSE(codec_out_.spatialLayers[1].active);
417+
418+
// QVGA singlecast.
419+
config_.simulcast_layers[0].active = true;
420+
config_.simulcast_layers[1].active = false;
421+
config_.simulcast_layers[2].active = false;
422+
EXPECT_TRUE(InitializeCodec());
423+
EXPECT_EQ(codec_out_.VP9()->numberOfSpatialLayers, 3);
424+
EXPECT_TRUE(codec_out_.spatialLayers[0].active);
425+
EXPECT_FALSE(codec_out_.spatialLayers[1].active);
426+
EXPECT_FALSE(codec_out_.spatialLayers[2].active);
385427
}
386428

387429
} // namespace webrtc

0 commit comments

Comments
 (0)