test::CreateVideoStreams: Use default unconfigured VideoStream if layer is missing in config.

Configure framerate/temporal layers via VideoEncoderConfig in VideoStreamEncoderTest..

Bug: none
Change-Id: I1104da5e576fa25746f2f2f5eaa336cd17c0093a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187488
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32500}
This commit is contained in:
Åsa Persson 2020-10-17 12:57:58 +02:00 committed by Commit Bot
parent 2bf6d25d90
commit 17b29b9121
2 changed files with 35 additions and 63 deletions

View File

@ -10,7 +10,6 @@
#include "test/encoder_settings.h"
#include <algorithm>
#include <string>
#include "api/scoped_refptr.h"
#include "api/video_codecs/sdp_video_format.h"
@ -54,62 +53,46 @@ std::vector<VideoStream> CreateVideoStreams(
stream_settings[i].height =
(i + 1) * height / encoder_config.number_of_streams;
stream_settings[i].max_framerate = 30;
stream_settings[i].max_qp = 56;
stream_settings[i].min_bitrate_bps =
DefaultVideoStreamFactory::kDefaultMinBitratePerStream[i];
int target_bitrate_bps = -1;
int max_bitrate_bps = -1;
// Use configured values instead of default values if values has been
// configured.
if (i < encoder_config.simulcast_layers.size()) {
const VideoStream& stream = encoder_config.simulcast_layers[i];
// Use configured values instead of default values if set.
const VideoStream stream = (i < encoder_config.simulcast_layers.size())
? encoder_config.simulcast_layers[i]
: VideoStream();
max_bitrate_bps =
stream.max_bitrate_bps > 0
? stream.max_bitrate_bps
: DefaultVideoStreamFactory::kMaxBitratePerStream[i];
max_bitrate_bps = std::min(bitrate_left_bps, max_bitrate_bps);
int max_bitrate_bps =
stream.max_bitrate_bps > 0
? stream.max_bitrate_bps
: DefaultVideoStreamFactory::kMaxBitratePerStream[i];
max_bitrate_bps = std::min(bitrate_left_bps, max_bitrate_bps);
target_bitrate_bps =
stream.target_bitrate_bps > 0
? stream.target_bitrate_bps
: DefaultVideoStreamFactory::kMaxBitratePerStream[i];
target_bitrate_bps = std::min(max_bitrate_bps, target_bitrate_bps);
int target_bitrate_bps =
stream.target_bitrate_bps > 0
? stream.target_bitrate_bps
: DefaultVideoStreamFactory::kMaxBitratePerStream[i];
target_bitrate_bps = std::min(max_bitrate_bps, target_bitrate_bps);
if (stream.min_bitrate_bps > 0) {
RTC_DCHECK_LE(stream.min_bitrate_bps, target_bitrate_bps);
stream_settings[i].min_bitrate_bps = stream.min_bitrate_bps;
}
if (stream.max_framerate > 0) {
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;
}
if (stream.scale_resolution_down_by >= 1.0) {
stream_settings[i].width = width / stream.scale_resolution_down_by;
stream_settings[i].height = height / stream.scale_resolution_down_by;
}
} else {
max_bitrate_bps = std::min(
bitrate_left_bps, DefaultVideoStreamFactory::kMaxBitratePerStream[i]);
target_bitrate_bps = max_bitrate_bps;
if (stream.min_bitrate_bps > 0) {
RTC_DCHECK_LE(stream.min_bitrate_bps, target_bitrate_bps);
stream_settings[i].min_bitrate_bps = stream.min_bitrate_bps;
}
if (stream.max_framerate > 0) {
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;
}
if (stream.scale_resolution_down_by >= 1.0) {
stream_settings[i].width = width / stream.scale_resolution_down_by;
stream_settings[i].height = height / stream.scale_resolution_down_by;
}
RTC_DCHECK_NE(target_bitrate_bps, -1);
RTC_DCHECK_NE(max_bitrate_bps, -1);
stream_settings[i].target_bitrate_bps = target_bitrate_bps;
stream_settings[i].max_bitrate_bps = max_bitrate_bps;
stream_settings[i].max_qp = 56;
stream_settings[i].active = stream.active;
if (i < encoder_config.simulcast_layers.size()) {
// Higher level controls are setting the active configuration for the
// VideoStream.
stream_settings[i].active = encoder_config.simulcast_layers[i].active;
} else {
stream_settings[i].active = true;
}
bitrate_left_bps -= stream_settings[i].target_bitrate_bps;
}

View File

@ -428,11 +428,7 @@ class VideoStreamEncoderUnderTest : public VideoStreamEncoder {
class CroppingVideoStreamFactory
: public VideoEncoderConfig::VideoStreamFactoryInterface {
public:
explicit CroppingVideoStreamFactory(size_t num_temporal_layers, int framerate)
: num_temporal_layers_(num_temporal_layers), framerate_(framerate) {
EXPECT_GT(num_temporal_layers, 0u);
EXPECT_GT(framerate, 0);
}
CroppingVideoStreamFactory() {}
private:
std::vector<VideoStream> CreateEncoderStreams(
@ -441,15 +437,8 @@ class CroppingVideoStreamFactory
const VideoEncoderConfig& encoder_config) override {
std::vector<VideoStream> streams = test::CreateVideoStreams(
width - width % 4, height - height % 4, encoder_config);
for (VideoStream& stream : streams) {
stream.num_temporal_layers = num_temporal_layers_;
stream.max_framerate = framerate_;
}
return streams;
}
const size_t num_temporal_layers_;
const int framerate_;
};
class AdaptingFrameForwarder : public test::FrameForwarder {
@ -1549,7 +1538,7 @@ TEST_F(VideoStreamEncoderTest, DropFrameWithFailedI420Conversion) {
TEST_F(VideoStreamEncoderTest, DropFrameWithFailedI420ConversionWithCrop) {
// Use the cropping factory.
video_encoder_config_.video_stream_factory =
new rtc::RefCountedObject<CroppingVideoStreamFactory>(1, 30);
new rtc::RefCountedObject<CroppingVideoStreamFactory>();
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config_),
kMaxPayloadLength);
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
@ -5385,11 +5374,11 @@ TEST_F(VideoStreamEncoderTest, AcceptsFullHdAdaptedDownSimulcastFrames) {
DataRate::BitsPerSec(kTargetBitrateBps), 0, 0, 0);
// Trigger reconfigure encoder (without resetting the entire instance).
VideoEncoderConfig video_encoder_config;
video_encoder_config.codec_type = kVideoCodecVP8;
test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
video_encoder_config.simulcast_layers[0].max_framerate = kFramerate;
video_encoder_config.max_bitrate_bps = kTargetBitrateBps;
video_encoder_config.number_of_streams = 1;
video_encoder_config.video_stream_factory =
new rtc::RefCountedObject<CroppingVideoStreamFactory>(1, kFramerate);
new rtc::RefCountedObject<CroppingVideoStreamFactory>();
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
kMaxPayloadLength);
video_stream_encoder_->WaitUntilTaskQueueIsIdle();