Update test::CreateVideoStreams to use num_temporal_layers.
MultiCodecReceiveTest/VideoSendStreamTest: Configure num_temporal_layers via VideoEncoderConfig (and remove implementations of VideoStreamFactoryInterface used to override the default num_temporal_layers configuration). Bug: none Change-Id: I9855245477fe3c6fe48d1a755d401d6a35a17c70 Reviewed-on: https://webrtc-review.googlesource.com/c/107301 Commit-Queue: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Sebastian Jansson <srte@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25302}
This commit is contained in:
@ -62,10 +62,13 @@ std::vector<VideoStream> CreateVideoStreams(
|
|||||||
: DefaultVideoStreamFactory::kMaxBitratePerStream[i];
|
: DefaultVideoStreamFactory::kMaxBitratePerStream[i];
|
||||||
target_bitrate_bps = std::min(max_bitrate_bps, target_bitrate_bps);
|
target_bitrate_bps = std::min(max_bitrate_bps, target_bitrate_bps);
|
||||||
|
|
||||||
// Used configured framerate if set.
|
|
||||||
if (stream.max_framerate > 0) {
|
if (stream.max_framerate > 0) {
|
||||||
stream_settings[i].max_framerate = stream.max_framerate;
|
stream_settings[i].max_framerate = stream.max_framerate;
|
||||||
}
|
}
|
||||||
|
if (stream.num_temporal_layers) {
|
||||||
|
RTC_DCHECK_GE(*stream.num_temporal_layers, 1);
|
||||||
|
stream_settings[i].num_temporal_layers = stream.num_temporal_layers;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
max_bitrate_bps = std::min(
|
max_bitrate_bps = std::min(
|
||||||
bitrate_left_bps, DefaultVideoStreamFactory::kMaxBitratePerStream[i]);
|
bitrate_left_bps, DefaultVideoStreamFactory::kMaxBitratePerStream[i]);
|
||||||
|
@ -51,29 +51,6 @@ int RemoveOlderOrEqual(uint32_t timestamp, std::vector<uint32_t>* timestamps) {
|
|||||||
return num_removed;
|
return num_removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
class VideoStreamFactoryTest
|
|
||||||
: public VideoEncoderConfig::VideoStreamFactoryInterface {
|
|
||||||
public:
|
|
||||||
explicit VideoStreamFactoryTest(size_t num_temporal_layers)
|
|
||||||
: num_temporal_layers_(num_temporal_layers) {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<VideoStream> CreateEncoderStreams(
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
const VideoEncoderConfig& encoder_config) override {
|
|
||||||
std::vector<VideoStream> streams =
|
|
||||||
test::CreateVideoStreams(width, height, encoder_config);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < encoder_config.number_of_streams; ++i)
|
|
||||||
streams[i].num_temporal_layers = num_temporal_layers_;
|
|
||||||
|
|
||||||
return streams;
|
|
||||||
}
|
|
||||||
|
|
||||||
const size_t num_temporal_layers_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class FrameObserver : public test::RtpRtcpObserver,
|
class FrameObserver : public test::RtpRtcpObserver,
|
||||||
public rtc::VideoSinkInterface<VideoFrame> {
|
public rtc::VideoSinkInterface<VideoFrame> {
|
||||||
public:
|
public:
|
||||||
@ -217,9 +194,9 @@ void MultiCodecReceiveTest::ConfigureEncoder(const CodecConfig& config) {
|
|||||||
PayloadNameToPayloadType(config.payload_name);
|
PayloadNameToPayloadType(config.payload_name);
|
||||||
GetVideoEncoderConfig()->codec_type =
|
GetVideoEncoderConfig()->codec_type =
|
||||||
PayloadStringToCodecType(config.payload_name);
|
PayloadStringToCodecType(config.payload_name);
|
||||||
GetVideoEncoderConfig()->video_stream_factory =
|
EXPECT_EQ(1u, GetVideoEncoderConfig()->simulcast_layers.size());
|
||||||
new rtc::RefCountedObject<VideoStreamFactoryTest>(
|
GetVideoEncoderConfig()->simulcast_layers[0].num_temporal_layers =
|
||||||
config.num_temporal_layers);
|
config.num_temporal_layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiCodecReceiveTest::RunTestWithCodecs(
|
void MultiCodecReceiveTest::RunTestWithCodecs(
|
||||||
|
@ -1148,31 +1148,8 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format,
|
|||||||
EXPECT_FALSE(send_config->rtp.extensions.empty());
|
EXPECT_FALSE(send_config->rtp.extensions.empty());
|
||||||
|
|
||||||
// Setup screen content disables frame dropping which makes this easier.
|
// Setup screen content disables frame dropping which makes this easier.
|
||||||
class VideoStreamFactory
|
EXPECT_EQ(1u, encoder_config->simulcast_layers.size());
|
||||||
: public VideoEncoderConfig::VideoStreamFactoryInterface {
|
encoder_config->simulcast_layers[0].num_temporal_layers = 2;
|
||||||
public:
|
|
||||||
explicit VideoStreamFactory(size_t num_temporal_layers)
|
|
||||||
: num_temporal_layers_(num_temporal_layers) {
|
|
||||||
EXPECT_GT(num_temporal_layers, 0u);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<VideoStream> CreateEncoderStreams(
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
const VideoEncoderConfig& encoder_config) override {
|
|
||||||
std::vector<VideoStream> streams =
|
|
||||||
test::CreateVideoStreams(width, height, encoder_config);
|
|
||||||
for (VideoStream& stream : streams) {
|
|
||||||
stream.num_temporal_layers = num_temporal_layers_;
|
|
||||||
}
|
|
||||||
return streams;
|
|
||||||
}
|
|
||||||
const size_t num_temporal_layers_;
|
|
||||||
};
|
|
||||||
|
|
||||||
encoder_config->video_stream_factory =
|
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>(2);
|
|
||||||
encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
|
encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2547,26 +2524,6 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class VideoStreamFactory
|
|
||||||
: public VideoEncoderConfig::VideoStreamFactoryInterface {
|
|
||||||
public:
|
|
||||||
VideoStreamFactory() {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<VideoStream> CreateEncoderStreams(
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
const VideoEncoderConfig& encoder_config) override {
|
|
||||||
std::vector<VideoStream> streams =
|
|
||||||
test::CreateVideoStreams(width, height, encoder_config);
|
|
||||||
for (size_t i = 0; i < streams.size(); ++i) {
|
|
||||||
streams[i].num_temporal_layers =
|
|
||||||
kVideoCodecConfigObserverNumberOfTemporalLayers;
|
|
||||||
}
|
|
||||||
return streams;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
VideoSendStream::Config* send_config,
|
VideoSendStream::Config* send_config,
|
||||||
std::vector<VideoReceiveStream::Config>* receive_configs,
|
std::vector<VideoReceiveStream::Config>* receive_configs,
|
||||||
@ -2576,8 +2533,9 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
|
|
||||||
encoder_config->codec_type = video_codec_type_;
|
encoder_config->codec_type = video_codec_type_;
|
||||||
encoder_config->encoder_specific_settings = GetEncoderSpecificSettings();
|
encoder_config->encoder_specific_settings = GetEncoderSpecificSettings();
|
||||||
encoder_config->video_stream_factory =
|
EXPECT_EQ(1u, encoder_config->simulcast_layers.size());
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>();
|
encoder_config->simulcast_layers[0].num_temporal_layers =
|
||||||
|
kVideoCodecConfigObserverNumberOfTemporalLayers;
|
||||||
encoder_config_ = encoder_config->Copy();
|
encoder_config_ = encoder_config->Copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2803,8 +2761,6 @@ TEST_P(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) {
|
|||||||
const VideoEncoderConfig& encoder_config) override {
|
const VideoEncoderConfig& encoder_config) override {
|
||||||
std::vector<VideoStream> streams =
|
std::vector<VideoStream> streams =
|
||||||
test::CreateVideoStreams(width, height, encoder_config);
|
test::CreateVideoStreams(width, height, encoder_config);
|
||||||
EXPECT_FALSE(streams[0].num_temporal_layers.has_value());
|
|
||||||
streams[0].num_temporal_layers = 2;
|
|
||||||
RTC_CHECK_GT(streams[0].max_bitrate_bps,
|
RTC_CHECK_GT(streams[0].max_bitrate_bps,
|
||||||
kScreencastMaxTargetBitrateDeltaKbps);
|
kScreencastMaxTargetBitrateDeltaKbps);
|
||||||
streams[0].target_bitrate_bps =
|
streams[0].target_bitrate_bps =
|
||||||
@ -2842,6 +2798,8 @@ TEST_P(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) {
|
|||||||
EXPECT_EQ(1u, encoder_config->number_of_streams);
|
EXPECT_EQ(1u, encoder_config->number_of_streams);
|
||||||
encoder_config->video_stream_factory =
|
encoder_config->video_stream_factory =
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>();
|
new rtc::RefCountedObject<VideoStreamFactory>();
|
||||||
|
EXPECT_EQ(1u, encoder_config->simulcast_layers.size());
|
||||||
|
encoder_config->simulcast_layers[0].num_temporal_layers = 2;
|
||||||
encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
|
encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3146,26 +3104,6 @@ class Vp9HeaderObserver : public test::SendTest {
|
|||||||
private:
|
private:
|
||||||
const int kVp9PayloadType = test::CallTest::kVideoSendPayloadType;
|
const int kVp9PayloadType = test::CallTest::kVideoSendPayloadType;
|
||||||
|
|
||||||
class VideoStreamFactory
|
|
||||||
: public VideoEncoderConfig::VideoStreamFactoryInterface {
|
|
||||||
public:
|
|
||||||
explicit VideoStreamFactory(size_t number_of_temporal_layers)
|
|
||||||
: number_of_temporal_layers_(number_of_temporal_layers) {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<VideoStream> CreateEncoderStreams(
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
const VideoEncoderConfig& encoder_config) override {
|
|
||||||
std::vector<VideoStream> streams =
|
|
||||||
test::CreateVideoStreams(width, height, encoder_config);
|
|
||||||
streams.back().num_temporal_layers = number_of_temporal_layers_;
|
|
||||||
return streams;
|
|
||||||
}
|
|
||||||
|
|
||||||
const size_t number_of_temporal_layers_;
|
|
||||||
};
|
|
||||||
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
VideoSendStream::Config* send_config,
|
VideoSendStream::Config* send_config,
|
||||||
std::vector<VideoReceiveStream::Config>* receive_configs,
|
std::vector<VideoReceiveStream::Config>* receive_configs,
|
||||||
@ -3177,9 +3115,9 @@ class Vp9HeaderObserver : public test::SendTest {
|
|||||||
encoder_config->encoder_specific_settings = new rtc::RefCountedObject<
|
encoder_config->encoder_specific_settings = new rtc::RefCountedObject<
|
||||||
VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings_);
|
VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings_);
|
||||||
EXPECT_EQ(1u, encoder_config->number_of_streams);
|
EXPECT_EQ(1u, encoder_config->number_of_streams);
|
||||||
encoder_config->video_stream_factory =
|
EXPECT_EQ(1u, encoder_config->simulcast_layers.size());
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>(
|
encoder_config->simulcast_layers[0].num_temporal_layers =
|
||||||
vp9_settings_.numberOfTemporalLayers);
|
vp9_settings_.numberOfTemporalLayers;
|
||||||
encoder_config_ = encoder_config->Copy();
|
encoder_config_ = encoder_config->Copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user