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:
parent
2bf6d25d90
commit
17b29b9121
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user