VideoStreamEncoderTest: Use DataRate for some constants.

Use config from FakeEncoder in some tests.

Bug: none
Change-Id: I1d7e01f604f8aabb5d6815bb519ef2532d024d76
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/233243
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35138}
This commit is contained in:
Asa Persson 2021-10-04 10:07:11 +02:00 committed by WebRTC LUCI CQ
parent c89560146b
commit 606d3cb1cf
4 changed files with 368 additions and 639 deletions

View File

@ -50,6 +50,7 @@ void WriteCounter(unsigned char* payload, uint32_t counter) {
FakeEncoder::FakeEncoder(Clock* clock)
: clock_(clock),
num_initializations_(0),
callback_(nullptr),
max_target_bitrate_kbps_(-1),
pending_keyframe_(true),
@ -81,6 +82,7 @@ int32_t FakeEncoder::InitEncode(const VideoCodec* config,
const Settings& settings) {
MutexLock lock(&mutex_);
config_ = *config;
++num_initializations_;
current_rate_settings_.bitrate.SetBitrate(0, 0, config_.startBitrate * 1000);
current_rate_settings_.framerate_fps = config_.maxFramerate;
pending_keyframe_ = true;
@ -293,6 +295,16 @@ int FakeEncoder::GetConfiguredInputFramerate() const {
return static_cast<int>(current_rate_settings_.framerate_fps + 0.5);
}
int FakeEncoder::GetNumInitializations() const {
MutexLock lock(&mutex_);
return num_initializations_;
}
const VideoCodec& FakeEncoder::config() const {
MutexLock lock(&mutex_);
return config_;
}
FakeH264Encoder::FakeH264Encoder(Clock* clock)
: FakeEncoder(clock), idr_counter_(0) {}

View File

@ -55,9 +55,12 @@ class FakeEncoder : public VideoEncoder {
int32_t Release() override;
void SetRates(const RateControlParameters& parameters)
RTC_LOCKS_EXCLUDED(mutex_) override;
int GetConfiguredInputFramerate() const RTC_LOCKS_EXCLUDED(mutex_);
EncoderInfo GetEncoderInfo() const override;
int GetConfiguredInputFramerate() const RTC_LOCKS_EXCLUDED(mutex_);
int GetNumInitializations() const RTC_LOCKS_EXCLUDED(mutex_);
const VideoCodec& config() const RTC_LOCKS_EXCLUDED(mutex_);
static const char* kImplementationName;
protected:
@ -96,6 +99,7 @@ class FakeEncoder : public VideoEncoder {
Clock* const clock_;
VideoCodec config_ RTC_GUARDED_BY(mutex_);
int num_initializations_ RTC_GUARDED_BY(mutex_);
EncodedImageCallback* callback_ RTC_GUARDED_BY(mutex_);
RateControlParameters current_rate_settings_ RTC_GUARDED_BY(mutex_);
int max_target_bitrate_kbps_ RTC_GUARDED_BY(mutex_);

View File

@ -2463,13 +2463,10 @@ class VideoCodecConfigObserver : public test::SendTest,
public test::FakeEncoder {
public:
VideoCodecConfigObserver(VideoCodecType video_codec_type,
const char* codec_name,
TaskQueueBase* task_queue)
: SendTest(VideoSendStreamTest::kDefaultTimeoutMs),
FakeEncoder(Clock::GetRealTimeClock()),
video_codec_type_(video_codec_type),
codec_name_(codec_name),
num_initializations_(0),
stream_(nullptr),
encoder_factory_(this),
task_queue_(task_queue) {
@ -2482,7 +2479,7 @@ class VideoCodecConfigObserver : public test::SendTest,
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
send_config->encoder_settings.encoder_factory = &encoder_factory_;
send_config->rtp.payload_name = codec_name_;
send_config->rtp.payload_name = CodecTypeToPayloadString(video_codec_type_);
encoder_config->codec_type = video_codec_type_;
encoder_config->encoder_specific_settings = GetEncoderSpecificSettings();
@ -2502,9 +2499,9 @@ class VideoCodecConfigObserver : public test::SendTest,
const Settings& settings) override {
EXPECT_EQ(video_codec_type_, config->codecType);
VerifyCodecSpecifics(*config);
++num_initializations_;
int ret = FakeEncoder::InitEncode(config, settings);
init_encode_event_.Set();
return FakeEncoder::InitEncode(config, settings);
return ret;
}
void InitCodecSpecifics();
@ -2515,7 +2512,8 @@ class VideoCodecConfigObserver : public test::SendTest,
void PerformTest() override {
EXPECT_TRUE(
init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized.";
ASSERT_EQ(1, FakeEncoder::GetNumInitializations())
<< "VideoEncoder not initialized.";
// Change encoder settings to actually trigger reconfiguration.
encoder_settings_.frameDroppingOn = !encoder_settings_.frameDroppingOn;
@ -2525,7 +2523,7 @@ class VideoCodecConfigObserver : public test::SendTest,
});
ASSERT_TRUE(
init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
EXPECT_EQ(2u, num_initializations_)
EXPECT_EQ(2, FakeEncoder::GetNumInitializations())
<< "ReconfigureVideoEncoder did not reinitialize the encoder with "
"new encoder settings.";
}
@ -2538,9 +2536,7 @@ class VideoCodecConfigObserver : public test::SendTest,
T encoder_settings_;
const VideoCodecType video_codec_type_;
const char* const codec_name_;
rtc::Event init_encode_event_;
size_t num_initializations_;
VideoSendStream* stream_;
test::VideoEncoderProxyFactory encoder_factory_;
VideoEncoderConfig encoder_config_;
@ -2650,14 +2646,12 @@ VideoCodecConfigObserver<VideoCodecVP9>::GetEncoderSpecificSettings() const {
}
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) {
VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8",
task_queue());
VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, task_queue());
RunBaseTest(&test);
}
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) {
VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9",
task_queue());
VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, task_queue());
RunBaseTest(&test);
}
@ -2669,8 +2663,7 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) {
#define MAYBE_EncoderSetupPropagatesH264Config EncoderSetupPropagatesH264Config
#endif
TEST_F(VideoSendStreamTest, MAYBE_EncoderSetupPropagatesH264Config) {
VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264",
task_queue());
VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, task_queue());
RunBaseTest(&test);
}

File diff suppressed because it is too large Load Diff