Set InterLayerPredMode based on scalability mode for VP9.
Bug: webrtc:15673 Change-Id: I7d3cdcda537c85f3be578cb00452e0611759704f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/336280 Commit-Queue: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41621}
This commit is contained in:
parent
979b6d62a8
commit
1dccfeb395
@ -190,6 +190,9 @@ std::vector<SpatialLayer> GetVp9SvcConfig(VideoCodec& codec) {
|
||||
codec.SetScalabilityMode(limited_scalability_mode);
|
||||
}
|
||||
|
||||
codec.VP9()->interLayerPred =
|
||||
ScalabilityModeToInterLayerPredMode(*scalability_mode);
|
||||
|
||||
absl::optional<ScalableVideoController::StreamLayersConfig> info =
|
||||
ScalabilityStructureConfig(*scalability_mode);
|
||||
if (!info.has_value()) {
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
#include <cstddef>
|
||||
#include <vector>
|
||||
|
||||
#include "api/video_codecs/video_encoder.h"
|
||||
#include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
@ -65,6 +66,25 @@ TEST(SvcConfig, NumSpatialLayersWithScalabilityMode) {
|
||||
EXPECT_EQ(codec.GetScalabilityMode(), ScalabilityMode::kL3T3_KEY);
|
||||
}
|
||||
|
||||
TEST(SvcConfig, UpdatesInterLayerPredModeBasedOnScalabilityMode) {
|
||||
VideoCodec codec;
|
||||
codec.codecType = kVideoCodecVP9;
|
||||
codec.width = 1280;
|
||||
codec.height = 720;
|
||||
codec.SetScalabilityMode(ScalabilityMode::kL3T3_KEY);
|
||||
|
||||
std::vector<SpatialLayer> spatial_layers = GetVp9SvcConfig(codec);
|
||||
EXPECT_EQ(codec.VP9()->interLayerPred, InterLayerPredMode::kOnKeyPic);
|
||||
|
||||
codec.SetScalabilityMode(ScalabilityMode::kL3T3);
|
||||
spatial_layers = GetVp9SvcConfig(codec);
|
||||
EXPECT_EQ(codec.VP9()->interLayerPred, InterLayerPredMode::kOn);
|
||||
|
||||
codec.SetScalabilityMode(ScalabilityMode::kS3T3);
|
||||
spatial_layers = GetVp9SvcConfig(codec);
|
||||
EXPECT_EQ(codec.VP9()->interLayerPred, InterLayerPredMode::kOff);
|
||||
}
|
||||
|
||||
TEST(SvcConfig, NumSpatialLayersLimitedWithScalabilityMode) {
|
||||
VideoCodec codec;
|
||||
codec.codecType = kVideoCodecVP9;
|
||||
|
||||
@ -631,4 +631,25 @@ TEST_F(VideoCodecInitializerTest, Vp9TwoSpatialLayersBitratesAreConsistent) {
|
||||
codec.spatialLayers[0].maxBitrate);
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, UpdatesVp9SpecificFieldsWithScalabilityMode) {
|
||||
VideoEncoderConfig config;
|
||||
config.codec_type = VideoCodecType::kVideoCodecVP9;
|
||||
std::vector<VideoStream> streams = {DefaultStream()};
|
||||
streams[0].scalability_mode = ScalabilityMode::kL2T3_KEY;
|
||||
|
||||
VideoCodec codec;
|
||||
EXPECT_TRUE(VideoCodecInitializer::SetupCodec(config, streams, &codec));
|
||||
|
||||
EXPECT_EQ(codec.VP9()->numberOfSpatialLayers, 2u);
|
||||
EXPECT_EQ(codec.VP9()->numberOfTemporalLayers, 3u);
|
||||
EXPECT_EQ(codec.VP9()->interLayerPred, InterLayerPredMode::kOnKeyPic);
|
||||
|
||||
streams[0].scalability_mode = ScalabilityMode::kS3T1;
|
||||
EXPECT_TRUE(VideoCodecInitializer::SetupCodec(config, streams, &codec));
|
||||
|
||||
EXPECT_EQ(codec.VP9()->numberOfSpatialLayers, 3u);
|
||||
EXPECT_EQ(codec.VP9()->numberOfTemporalLayers, 1u);
|
||||
EXPECT_EQ(codec.VP9()->interLayerPred, InterLayerPredMode::kOff);
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user