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:
parent
c89560146b
commit
606d3cb1cf
@ -50,6 +50,7 @@ void WriteCounter(unsigned char* payload, uint32_t counter) {
|
|||||||
|
|
||||||
FakeEncoder::FakeEncoder(Clock* clock)
|
FakeEncoder::FakeEncoder(Clock* clock)
|
||||||
: clock_(clock),
|
: clock_(clock),
|
||||||
|
num_initializations_(0),
|
||||||
callback_(nullptr),
|
callback_(nullptr),
|
||||||
max_target_bitrate_kbps_(-1),
|
max_target_bitrate_kbps_(-1),
|
||||||
pending_keyframe_(true),
|
pending_keyframe_(true),
|
||||||
@ -81,6 +82,7 @@ int32_t FakeEncoder::InitEncode(const VideoCodec* config,
|
|||||||
const Settings& settings) {
|
const Settings& settings) {
|
||||||
MutexLock lock(&mutex_);
|
MutexLock lock(&mutex_);
|
||||||
config_ = *config;
|
config_ = *config;
|
||||||
|
++num_initializations_;
|
||||||
current_rate_settings_.bitrate.SetBitrate(0, 0, config_.startBitrate * 1000);
|
current_rate_settings_.bitrate.SetBitrate(0, 0, config_.startBitrate * 1000);
|
||||||
current_rate_settings_.framerate_fps = config_.maxFramerate;
|
current_rate_settings_.framerate_fps = config_.maxFramerate;
|
||||||
pending_keyframe_ = true;
|
pending_keyframe_ = true;
|
||||||
@ -293,6 +295,16 @@ int FakeEncoder::GetConfiguredInputFramerate() const {
|
|||||||
return static_cast<int>(current_rate_settings_.framerate_fps + 0.5);
|
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)
|
FakeH264Encoder::FakeH264Encoder(Clock* clock)
|
||||||
: FakeEncoder(clock), idr_counter_(0) {}
|
: FakeEncoder(clock), idr_counter_(0) {}
|
||||||
|
|
||||||
|
|||||||
@ -55,9 +55,12 @@ class FakeEncoder : public VideoEncoder {
|
|||||||
int32_t Release() override;
|
int32_t Release() override;
|
||||||
void SetRates(const RateControlParameters& parameters)
|
void SetRates(const RateControlParameters& parameters)
|
||||||
RTC_LOCKS_EXCLUDED(mutex_) override;
|
RTC_LOCKS_EXCLUDED(mutex_) override;
|
||||||
int GetConfiguredInputFramerate() const RTC_LOCKS_EXCLUDED(mutex_);
|
|
||||||
EncoderInfo GetEncoderInfo() const override;
|
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;
|
static const char* kImplementationName;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -96,6 +99,7 @@ class FakeEncoder : public VideoEncoder {
|
|||||||
Clock* const clock_;
|
Clock* const clock_;
|
||||||
|
|
||||||
VideoCodec config_ RTC_GUARDED_BY(mutex_);
|
VideoCodec config_ RTC_GUARDED_BY(mutex_);
|
||||||
|
int num_initializations_ RTC_GUARDED_BY(mutex_);
|
||||||
EncodedImageCallback* callback_ RTC_GUARDED_BY(mutex_);
|
EncodedImageCallback* callback_ RTC_GUARDED_BY(mutex_);
|
||||||
RateControlParameters current_rate_settings_ RTC_GUARDED_BY(mutex_);
|
RateControlParameters current_rate_settings_ RTC_GUARDED_BY(mutex_);
|
||||||
int max_target_bitrate_kbps_ RTC_GUARDED_BY(mutex_);
|
int max_target_bitrate_kbps_ RTC_GUARDED_BY(mutex_);
|
||||||
|
|||||||
@ -2463,13 +2463,10 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
public test::FakeEncoder {
|
public test::FakeEncoder {
|
||||||
public:
|
public:
|
||||||
VideoCodecConfigObserver(VideoCodecType video_codec_type,
|
VideoCodecConfigObserver(VideoCodecType video_codec_type,
|
||||||
const char* codec_name,
|
|
||||||
TaskQueueBase* task_queue)
|
TaskQueueBase* task_queue)
|
||||||
: SendTest(VideoSendStreamTest::kDefaultTimeoutMs),
|
: SendTest(VideoSendStreamTest::kDefaultTimeoutMs),
|
||||||
FakeEncoder(Clock::GetRealTimeClock()),
|
FakeEncoder(Clock::GetRealTimeClock()),
|
||||||
video_codec_type_(video_codec_type),
|
video_codec_type_(video_codec_type),
|
||||||
codec_name_(codec_name),
|
|
||||||
num_initializations_(0),
|
|
||||||
stream_(nullptr),
|
stream_(nullptr),
|
||||||
encoder_factory_(this),
|
encoder_factory_(this),
|
||||||
task_queue_(task_queue) {
|
task_queue_(task_queue) {
|
||||||
@ -2482,7 +2479,7 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
std::vector<VideoReceiveStream::Config>* receive_configs,
|
std::vector<VideoReceiveStream::Config>* receive_configs,
|
||||||
VideoEncoderConfig* encoder_config) override {
|
VideoEncoderConfig* encoder_config) override {
|
||||||
send_config->encoder_settings.encoder_factory = &encoder_factory_;
|
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->codec_type = video_codec_type_;
|
||||||
encoder_config->encoder_specific_settings = GetEncoderSpecificSettings();
|
encoder_config->encoder_specific_settings = GetEncoderSpecificSettings();
|
||||||
@ -2502,9 +2499,9 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
const Settings& settings) override {
|
const Settings& settings) override {
|
||||||
EXPECT_EQ(video_codec_type_, config->codecType);
|
EXPECT_EQ(video_codec_type_, config->codecType);
|
||||||
VerifyCodecSpecifics(*config);
|
VerifyCodecSpecifics(*config);
|
||||||
++num_initializations_;
|
int ret = FakeEncoder::InitEncode(config, settings);
|
||||||
init_encode_event_.Set();
|
init_encode_event_.Set();
|
||||||
return FakeEncoder::InitEncode(config, settings);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitCodecSpecifics();
|
void InitCodecSpecifics();
|
||||||
@ -2515,7 +2512,8 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
void PerformTest() override {
|
void PerformTest() override {
|
||||||
EXPECT_TRUE(
|
EXPECT_TRUE(
|
||||||
init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
|
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.
|
// Change encoder settings to actually trigger reconfiguration.
|
||||||
encoder_settings_.frameDroppingOn = !encoder_settings_.frameDroppingOn;
|
encoder_settings_.frameDroppingOn = !encoder_settings_.frameDroppingOn;
|
||||||
@ -2525,7 +2523,7 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
});
|
});
|
||||||
ASSERT_TRUE(
|
ASSERT_TRUE(
|
||||||
init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
|
init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
|
||||||
EXPECT_EQ(2u, num_initializations_)
|
EXPECT_EQ(2, FakeEncoder::GetNumInitializations())
|
||||||
<< "ReconfigureVideoEncoder did not reinitialize the encoder with "
|
<< "ReconfigureVideoEncoder did not reinitialize the encoder with "
|
||||||
"new encoder settings.";
|
"new encoder settings.";
|
||||||
}
|
}
|
||||||
@ -2538,9 +2536,7 @@ class VideoCodecConfigObserver : public test::SendTest,
|
|||||||
|
|
||||||
T encoder_settings_;
|
T encoder_settings_;
|
||||||
const VideoCodecType video_codec_type_;
|
const VideoCodecType video_codec_type_;
|
||||||
const char* const codec_name_;
|
|
||||||
rtc::Event init_encode_event_;
|
rtc::Event init_encode_event_;
|
||||||
size_t num_initializations_;
|
|
||||||
VideoSendStream* stream_;
|
VideoSendStream* stream_;
|
||||||
test::VideoEncoderProxyFactory encoder_factory_;
|
test::VideoEncoderProxyFactory encoder_factory_;
|
||||||
VideoEncoderConfig encoder_config_;
|
VideoEncoderConfig encoder_config_;
|
||||||
@ -2650,14 +2646,12 @@ VideoCodecConfigObserver<VideoCodecVP9>::GetEncoderSpecificSettings() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) {
|
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) {
|
||||||
VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8",
|
VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, task_queue());
|
||||||
task_queue());
|
|
||||||
RunBaseTest(&test);
|
RunBaseTest(&test);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) {
|
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) {
|
||||||
VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9",
|
VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, task_queue());
|
||||||
task_queue());
|
|
||||||
RunBaseTest(&test);
|
RunBaseTest(&test);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2669,8 +2663,7 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) {
|
|||||||
#define MAYBE_EncoderSetupPropagatesH264Config EncoderSetupPropagatesH264Config
|
#define MAYBE_EncoderSetupPropagatesH264Config EncoderSetupPropagatesH264Config
|
||||||
#endif
|
#endif
|
||||||
TEST_F(VideoSendStreamTest, MAYBE_EncoderSetupPropagatesH264Config) {
|
TEST_F(VideoSendStreamTest, MAYBE_EncoderSetupPropagatesH264Config) {
|
||||||
VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264",
|
VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, task_queue());
|
||||||
task_queue());
|
|
||||||
RunBaseTest(&test);
|
RunBaseTest(&test);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user