mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 13:50:40 +01:00
Delete nack_enabled flag in encoder configuration.
This is a followup to cl https://webrtc-review.googlesource.com/71380, which reworked the way encoder resilience is done, and made the nack_enabled flag unused. Bug: webrtc:8830 Change-Id: I3de2508c97bc71e01c8f2232d16cd1f33e57fe4a Reviewed-on: https://webrtc-review.googlesource.com/69986 Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23080}
This commit is contained in:
parent
c3d8bb1c52
commit
f133856dfa
8 changed files with 44 additions and 54 deletions
|
@ -34,10 +34,20 @@ class VideoCodecInitializer {
|
||||||
static bool SetupCodec(
|
static bool SetupCodec(
|
||||||
const VideoEncoderConfig& config,
|
const VideoEncoderConfig& config,
|
||||||
const std::vector<VideoStream>& streams,
|
const std::vector<VideoStream>& streams,
|
||||||
bool nack_enabled,
|
|
||||||
VideoCodec* codec,
|
VideoCodec* codec,
|
||||||
std::unique_ptr<VideoBitrateAllocator>* bitrate_allocator);
|
std::unique_ptr<VideoBitrateAllocator>* bitrate_allocator);
|
||||||
|
|
||||||
|
// TODO(nisse): Deprecated, delete as soon as downstream projects are
|
||||||
|
// updated.
|
||||||
|
static bool SetupCodec(
|
||||||
|
const VideoEncoderConfig& config,
|
||||||
|
const std::vector<VideoStream>& streams,
|
||||||
|
bool /* nack_enabled */,
|
||||||
|
VideoCodec* codec,
|
||||||
|
std::unique_ptr<VideoBitrateAllocator>* bitrate_allocator) {
|
||||||
|
return SetupCodec(config, streams, codec, bitrate_allocator);
|
||||||
|
}
|
||||||
|
|
||||||
// Create a bitrate allocator for the specified codec.
|
// Create a bitrate allocator for the specified codec.
|
||||||
static std::unique_ptr<VideoBitrateAllocator> CreateBitrateAllocator(
|
static std::unique_ptr<VideoBitrateAllocator> CreateBitrateAllocator(
|
||||||
const VideoCodec& codec);
|
const VideoCodec& codec);
|
||||||
|
@ -45,8 +55,7 @@ class VideoCodecInitializer {
|
||||||
private:
|
private:
|
||||||
static VideoCodec VideoEncoderConfigToVideoCodec(
|
static VideoCodec VideoEncoderConfigToVideoCodec(
|
||||||
const VideoEncoderConfig& config,
|
const VideoEncoderConfig& config,
|
||||||
const std::vector<VideoStream>& streams,
|
const std::vector<VideoStream>& streams);
|
||||||
bool nack_enabled);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|
|
@ -29,13 +29,12 @@ namespace webrtc {
|
||||||
bool VideoCodecInitializer::SetupCodec(
|
bool VideoCodecInitializer::SetupCodec(
|
||||||
const VideoEncoderConfig& config,
|
const VideoEncoderConfig& config,
|
||||||
const std::vector<VideoStream>& streams,
|
const std::vector<VideoStream>& streams,
|
||||||
bool nack_enabled,
|
|
||||||
VideoCodec* codec,
|
VideoCodec* codec,
|
||||||
std::unique_ptr<VideoBitrateAllocator>* bitrate_allocator) {
|
std::unique_ptr<VideoBitrateAllocator>* bitrate_allocator) {
|
||||||
if (config.codec_type == kVideoCodecMultiplex) {
|
if (config.codec_type == kVideoCodecMultiplex) {
|
||||||
VideoEncoderConfig associated_config = config.Copy();
|
VideoEncoderConfig associated_config = config.Copy();
|
||||||
associated_config.codec_type = kVideoCodecVP9;
|
associated_config.codec_type = kVideoCodecVP9;
|
||||||
if (!SetupCodec(associated_config, streams, nack_enabled, codec,
|
if (!SetupCodec(associated_config, streams, codec,
|
||||||
bitrate_allocator)) {
|
bitrate_allocator)) {
|
||||||
RTC_LOG(LS_ERROR) << "Failed to create stereo encoder configuration.";
|
RTC_LOG(LS_ERROR) << "Failed to create stereo encoder configuration.";
|
||||||
return false;
|
return false;
|
||||||
|
@ -45,7 +44,7 @@ bool VideoCodecInitializer::SetupCodec(
|
||||||
}
|
}
|
||||||
|
|
||||||
*codec =
|
*codec =
|
||||||
VideoEncoderConfigToVideoCodec(config, streams, nack_enabled);
|
VideoEncoderConfigToVideoCodec(config, streams);
|
||||||
*bitrate_allocator = CreateBitrateAllocator(*codec);
|
*bitrate_allocator = CreateBitrateAllocator(*codec);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -73,8 +72,7 @@ VideoCodecInitializer::CreateBitrateAllocator(const VideoCodec& codec) {
|
||||||
// TODO(sprang): Split this up and separate the codec specific parts.
|
// TODO(sprang): Split this up and separate the codec specific parts.
|
||||||
VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec(
|
VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec(
|
||||||
const VideoEncoderConfig& config,
|
const VideoEncoderConfig& config,
|
||||||
const std::vector<VideoStream>& streams,
|
const std::vector<VideoStream>& streams) {
|
||||||
bool nack_enabled) {
|
|
||||||
static const int kEncoderMinBitrateKbps = 30;
|
static const int kEncoderMinBitrateKbps = 30;
|
||||||
RTC_DCHECK(!streams.empty());
|
RTC_DCHECK(!streams.empty());
|
||||||
RTC_DCHECK_GE(config.min_transmit_bitrate_bps, 0);
|
RTC_DCHECK_GE(config.min_transmit_bitrate_bps, 0);
|
||||||
|
|
|
@ -39,7 +39,7 @@ static const uint32_t kHighScreenshareTl1Bps = 1200000;
|
||||||
// TODO(sprang): Extend coverage to handle the rest of the codec initializer.
|
// TODO(sprang): Extend coverage to handle the rest of the codec initializer.
|
||||||
class VideoCodecInitializerTest : public ::testing::Test {
|
class VideoCodecInitializerTest : public ::testing::Test {
|
||||||
public:
|
public:
|
||||||
VideoCodecInitializerTest() : nack_enabled_(false) {}
|
VideoCodecInitializerTest() {}
|
||||||
virtual ~VideoCodecInitializerTest() {}
|
virtual ~VideoCodecInitializerTest() {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -76,7 +76,7 @@ class VideoCodecInitializerTest : public ::testing::Test {
|
||||||
codec_out_ = VideoCodec();
|
codec_out_ = VideoCodec();
|
||||||
bitrate_allocator_out_.reset();
|
bitrate_allocator_out_.reset();
|
||||||
temporal_layers_.clear();
|
temporal_layers_.clear();
|
||||||
if (!VideoCodecInitializer::SetupCodec(config_, streams_, nack_enabled_,
|
if (!VideoCodecInitializer::SetupCodec(config_, streams_,
|
||||||
&codec_out_,
|
&codec_out_,
|
||||||
&bitrate_allocator_out_)) {
|
&bitrate_allocator_out_)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -122,7 +122,6 @@ class VideoCodecInitializerTest : public ::testing::Test {
|
||||||
// Input settings.
|
// Input settings.
|
||||||
VideoEncoderConfig config_;
|
VideoEncoderConfig config_;
|
||||||
std::vector<VideoStream> streams_;
|
std::vector<VideoStream> streams_;
|
||||||
bool nack_enabled_;
|
|
||||||
|
|
||||||
// Output.
|
// Output.
|
||||||
VideoCodec codec_out_;
|
VideoCodec codec_out_;
|
||||||
|
|
|
@ -28,14 +28,13 @@ class MockVideoStreamEncoder : public VideoStreamEncoderInterface {
|
||||||
MOCK_METHOD1(SetBitrateObserver, void(VideoBitrateAllocationObserver*));
|
MOCK_METHOD1(SetBitrateObserver, void(VideoBitrateAllocationObserver*));
|
||||||
MOCK_METHOD0(Stop, void());
|
MOCK_METHOD0(Stop, void());
|
||||||
|
|
||||||
MOCK_METHOD3(MockedConfigureEncoder,
|
MOCK_METHOD2(MockedConfigureEncoder,
|
||||||
void(const VideoEncoderConfig&, size_t, bool));
|
void(const VideoEncoderConfig&, size_t));
|
||||||
// gtest generates implicit copy which is not allowed on VideoEncoderConfig,
|
// gtest generates implicit copy which is not allowed on VideoEncoderConfig,
|
||||||
// so we can't mock ConfigureEncoder directly.
|
// so we can't mock ConfigureEncoder directly.
|
||||||
void ConfigureEncoder(VideoEncoderConfig config,
|
void ConfigureEncoder(VideoEncoderConfig config,
|
||||||
size_t max_data_payload_length,
|
size_t max_data_payload_length) {
|
||||||
bool nack_enabled) {
|
MockedConfigureEncoder(config, max_data_payload_length);
|
||||||
MockedConfigureEncoder(config, max_data_payload_length, nack_enabled);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -169,8 +169,7 @@ void VideoSendStream::ReconfigureVideoEncoder(VideoEncoderConfig config) {
|
||||||
RTC_DCHECK(content_type_ == config.content_type);
|
RTC_DCHECK(content_type_ == config.content_type);
|
||||||
video_stream_encoder_->ConfigureEncoder(
|
video_stream_encoder_->ConfigureEncoder(
|
||||||
std::move(config),
|
std::move(config),
|
||||||
config_.rtp.max_packet_size - CalculateMaxHeaderSize(config_.rtp),
|
config_.rtp.max_packet_size - CalculateMaxHeaderSize(config_.rtp));
|
||||||
config_.rtp.nack.rtp_history_ms > 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoSendStream::Stats VideoSendStream::GetStats() {
|
VideoSendStream::Stats VideoSendStream::GetStats() {
|
||||||
|
|
|
@ -344,7 +344,6 @@ VideoStreamEncoder::VideoStreamEncoder(
|
||||||
pending_encoder_creation_(false),
|
pending_encoder_creation_(false),
|
||||||
encoder_start_bitrate_bps_(0),
|
encoder_start_bitrate_bps_(0),
|
||||||
max_data_payload_length_(0),
|
max_data_payload_length_(0),
|
||||||
nack_enabled_(false),
|
|
||||||
last_observed_bitrate_bps_(0),
|
last_observed_bitrate_bps_(0),
|
||||||
encoder_paused_and_dropped_frame_(false),
|
encoder_paused_and_dropped_frame_(false),
|
||||||
clock_(Clock::GetRealTimeClock()),
|
clock_(Clock::GetRealTimeClock()),
|
||||||
|
@ -448,34 +447,30 @@ void VideoStreamEncoder::SetStartBitrate(int start_bitrate_bps) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoStreamEncoder::ConfigureEncoder(VideoEncoderConfig config,
|
void VideoStreamEncoder::ConfigureEncoder(VideoEncoderConfig config,
|
||||||
size_t max_data_payload_length,
|
size_t max_data_payload_length) {
|
||||||
bool nack_enabled) {
|
|
||||||
// TODO(srte): This struct should be replaced by a lambda with move capture
|
// TODO(srte): This struct should be replaced by a lambda with move capture
|
||||||
// when C++14 lambda is allowed.
|
// when C++14 lambda is allowed.
|
||||||
struct ConfigureEncoderTask {
|
struct ConfigureEncoderTask {
|
||||||
void operator()() {
|
void operator()() {
|
||||||
encoder->ConfigureEncoderOnTaskQueue(
|
encoder->ConfigureEncoderOnTaskQueue(
|
||||||
std::move(config), max_data_payload_length, nack_enabled);
|
std::move(config), max_data_payload_length);
|
||||||
}
|
}
|
||||||
VideoStreamEncoder* encoder;
|
VideoStreamEncoder* encoder;
|
||||||
VideoEncoderConfig config;
|
VideoEncoderConfig config;
|
||||||
size_t max_data_payload_length;
|
size_t max_data_payload_length;
|
||||||
bool nack_enabled;
|
|
||||||
};
|
};
|
||||||
encoder_queue_.PostTask(ConfigureEncoderTask{
|
encoder_queue_.PostTask(ConfigureEncoderTask{
|
||||||
this, std::move(config), max_data_payload_length, nack_enabled});
|
this, std::move(config), max_data_payload_length});
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoStreamEncoder::ConfigureEncoderOnTaskQueue(
|
void VideoStreamEncoder::ConfigureEncoderOnTaskQueue(
|
||||||
VideoEncoderConfig config,
|
VideoEncoderConfig config,
|
||||||
size_t max_data_payload_length,
|
size_t max_data_payload_length) {
|
||||||
bool nack_enabled) {
|
|
||||||
RTC_DCHECK_RUN_ON(&encoder_queue_);
|
RTC_DCHECK_RUN_ON(&encoder_queue_);
|
||||||
RTC_DCHECK(sink_);
|
RTC_DCHECK(sink_);
|
||||||
RTC_LOG(LS_INFO) << "ConfigureEncoder requested.";
|
RTC_LOG(LS_INFO) << "ConfigureEncoder requested.";
|
||||||
|
|
||||||
max_data_payload_length_ = max_data_payload_length;
|
max_data_payload_length_ = max_data_payload_length;
|
||||||
nack_enabled_ = nack_enabled;
|
|
||||||
pending_encoder_creation_ =
|
pending_encoder_creation_ =
|
||||||
(!encoder_ || encoder_config_.video_format != config.video_format);
|
(!encoder_ || encoder_config_.video_format != config.video_format);
|
||||||
encoder_config_ = std::move(config);
|
encoder_config_ = std::move(config);
|
||||||
|
@ -520,7 +515,7 @@ void VideoStreamEncoder::ReconfigureEncoder() {
|
||||||
|
|
||||||
VideoCodec codec;
|
VideoCodec codec;
|
||||||
if (!VideoCodecInitializer::SetupCodec(
|
if (!VideoCodecInitializer::SetupCodec(
|
||||||
encoder_config_, streams, nack_enabled_, &codec, &rate_allocator_)) {
|
encoder_config_, streams, &codec, &rate_allocator_)) {
|
||||||
RTC_LOG(LS_ERROR) << "Failed to create encoder configuration.";
|
RTC_LOG(LS_ERROR) << "Failed to create encoder configuration.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,7 @@ class VideoStreamEncoderInterface : public rtc::VideoSinkInterface<VideoFrame> {
|
||||||
virtual void SetBitrateObserver(
|
virtual void SetBitrateObserver(
|
||||||
VideoBitrateAllocationObserver* bitrate_observer) = 0;
|
VideoBitrateAllocationObserver* bitrate_observer) = 0;
|
||||||
virtual void ConfigureEncoder(VideoEncoderConfig config,
|
virtual void ConfigureEncoder(VideoEncoderConfig config,
|
||||||
size_t max_data_payload_length,
|
size_t max_data_payload_length) = 0;
|
||||||
bool nack_enabled) = 0;
|
|
||||||
virtual void Stop() = 0;
|
virtual void Stop() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -115,8 +114,7 @@ class VideoStreamEncoder : public VideoStreamEncoderInterface,
|
||||||
VideoBitrateAllocationObserver* bitrate_observer) override;
|
VideoBitrateAllocationObserver* bitrate_observer) override;
|
||||||
|
|
||||||
void ConfigureEncoder(VideoEncoderConfig config,
|
void ConfigureEncoder(VideoEncoderConfig config,
|
||||||
size_t max_data_payload_length,
|
size_t max_data_payload_length) override;
|
||||||
bool nack_enabled) override;
|
|
||||||
|
|
||||||
// Permanently stop encoding. After this method has returned, it is
|
// Permanently stop encoding. After this method has returned, it is
|
||||||
// guaranteed that no encoded frames will be delivered to the sink.
|
// guaranteed that no encoded frames will be delivered to the sink.
|
||||||
|
@ -156,8 +154,7 @@ class VideoStreamEncoder : public VideoStreamEncoderInterface,
|
||||||
};
|
};
|
||||||
|
|
||||||
void ConfigureEncoderOnTaskQueue(VideoEncoderConfig config,
|
void ConfigureEncoderOnTaskQueue(VideoEncoderConfig config,
|
||||||
size_t max_data_payload_length,
|
size_t max_data_payload_length);
|
||||||
bool nack_enabled);
|
|
||||||
void ReconfigureEncoder() RTC_RUN_ON(&encoder_queue_);
|
void ReconfigureEncoder() RTC_RUN_ON(&encoder_queue_);
|
||||||
|
|
||||||
void ConfigureQualityScaler();
|
void ConfigureQualityScaler();
|
||||||
|
@ -276,7 +273,6 @@ class VideoStreamEncoder : public VideoStreamEncoderInterface,
|
||||||
int crop_height_ RTC_GUARDED_BY(&encoder_queue_);
|
int crop_height_ RTC_GUARDED_BY(&encoder_queue_);
|
||||||
uint32_t encoder_start_bitrate_bps_ RTC_GUARDED_BY(&encoder_queue_);
|
uint32_t encoder_start_bitrate_bps_ RTC_GUARDED_BY(&encoder_queue_);
|
||||||
size_t max_data_payload_length_ RTC_GUARDED_BY(&encoder_queue_);
|
size_t max_data_payload_length_ RTC_GUARDED_BY(&encoder_queue_);
|
||||||
bool nack_enabled_ RTC_GUARDED_BY(&encoder_queue_);
|
|
||||||
uint32_t last_observed_bitrate_bps_ RTC_GUARDED_BY(&encoder_queue_);
|
uint32_t last_observed_bitrate_bps_ RTC_GUARDED_BY(&encoder_queue_);
|
||||||
bool encoder_paused_and_dropped_frame_ RTC_GUARDED_BY(&encoder_queue_);
|
bool encoder_paused_and_dropped_frame_ RTC_GUARDED_BY(&encoder_queue_);
|
||||||
Clock* const clock_;
|
Clock* const clock_;
|
||||||
|
|
|
@ -301,11 +301,10 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||||
max_framerate_ = streams[0].max_framerate;
|
max_framerate_ = streams[0].max_framerate;
|
||||||
fake_clock_.SetTimeMicros(1234);
|
fake_clock_.SetTimeMicros(1234);
|
||||||
|
|
||||||
ConfigureEncoder(std::move(video_encoder_config), true /* nack_enabled */);
|
ConfigureEncoder(std::move(video_encoder_config));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigureEncoder(VideoEncoderConfig video_encoder_config,
|
void ConfigureEncoder(VideoEncoderConfig video_encoder_config) {
|
||||||
bool nack_enabled) {
|
|
||||||
if (video_stream_encoder_)
|
if (video_stream_encoder_)
|
||||||
video_stream_encoder_->Stop();
|
video_stream_encoder_->Stop();
|
||||||
video_stream_encoder_.reset(new VideoStreamEncoderUnderTest(
|
video_stream_encoder_.reset(new VideoStreamEncoderUnderTest(
|
||||||
|
@ -316,7 +315,7 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||||
VideoSendStream::DegradationPreference::kMaintainFramerate);
|
VideoSendStream::DegradationPreference::kMaintainFramerate);
|
||||||
video_stream_encoder_->SetStartBitrate(kTargetBitrateBps);
|
video_stream_encoder_->SetStartBitrate(kTargetBitrateBps);
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength, nack_enabled);
|
kMaxPayloadLength);
|
||||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,7 +323,6 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||||
size_t num_streams,
|
size_t num_streams,
|
||||||
size_t num_temporal_layers,
|
size_t num_temporal_layers,
|
||||||
unsigned char num_spatial_layers,
|
unsigned char num_spatial_layers,
|
||||||
bool nack_enabled,
|
|
||||||
bool screenshare) {
|
bool screenshare) {
|
||||||
video_send_config_.rtp.payload_name = payload_name;
|
video_send_config_.rtp.payload_name = payload_name;
|
||||||
|
|
||||||
|
@ -345,7 +343,7 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||||
new rtc::RefCountedObject<
|
new rtc::RefCountedObject<
|
||||||
VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings);
|
VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings);
|
||||||
}
|
}
|
||||||
ConfigureEncoder(std::move(video_encoder_config), nack_enabled);
|
ConfigureEncoder(std::move(video_encoder_config));
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoFrame CreateFrame(int64_t ntp_time_ms,
|
VideoFrame CreateFrame(int64_t ntp_time_ms,
|
||||||
|
@ -800,8 +798,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||||
test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
|
test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
|
||||||
video_encoder_config.min_transmit_bitrate_bps = 9999;
|
video_encoder_config.min_transmit_bitrate_bps = 9999;
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength,
|
kMaxPayloadLength);
|
||||||
true /* nack_enabled */);
|
|
||||||
|
|
||||||
// Capture a frame and wait for it to synchronize with the encoder thread.
|
// Capture a frame and wait for it to synchronize with the encoder thread.
|
||||||
video_source_.IncomingCapturedFrame(CreateFrame(2, nullptr));
|
video_source_.IncomingCapturedFrame(CreateFrame(2, nullptr));
|
||||||
|
@ -1278,8 +1275,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||||
// Make format different, to force recreation of encoder.
|
// Make format different, to force recreation of encoder.
|
||||||
video_encoder_config.video_format.parameters["foo"] = "foo";
|
video_encoder_config.video_format.parameters["foo"] = "foo";
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength,
|
kMaxPayloadLength);
|
||||||
true /* nack_enabled */);
|
|
||||||
|
|
||||||
video_source_.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight));
|
video_source_.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight));
|
||||||
WaitForEncodedFrame(4);
|
WaitForEncodedFrame(4);
|
||||||
|
@ -2136,7 +2132,7 @@ TEST_F(VideoStreamEncoderTest, OveruseDetectorUpdatedOnReconfigureAndAdaption) {
|
||||||
video_encoder_config.video_stream_factory =
|
video_encoder_config.video_stream_factory =
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>(1, kFramerate);
|
new rtc::RefCountedObject<VideoStreamFactory>(1, kFramerate);
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength, false);
|
kMaxPayloadLength);
|
||||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||||
|
|
||||||
// Detector should be updated with fps limit from codec config.
|
// Detector should be updated with fps limit from codec config.
|
||||||
|
@ -2189,7 +2185,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>(1, kLowFramerate);
|
new rtc::RefCountedObject<VideoStreamFactory>(1, kLowFramerate);
|
||||||
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
|
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength, false);
|
kMaxPayloadLength);
|
||||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
|
@ -2212,7 +2208,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>(1, kHighFramerate);
|
new rtc::RefCountedObject<VideoStreamFactory>(1, kHighFramerate);
|
||||||
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
|
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength, false);
|
kMaxPayloadLength);
|
||||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
|
@ -2252,7 +2248,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||||
new rtc::RefCountedObject<VideoStreamFactory>(1, kFramerate);
|
new rtc::RefCountedObject<VideoStreamFactory>(1, kFramerate);
|
||||||
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
|
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength, false);
|
kMaxPayloadLength);
|
||||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
|
@ -2360,8 +2356,7 @@ TEST_F(VideoStreamEncoderTest, InitialFrameDropOffWhenEncoderDisabledScaling) {
|
||||||
// Make format different, to force recreation of encoder.
|
// Make format different, to force recreation of encoder.
|
||||||
video_encoder_config.video_format.parameters["foo"] = "foo";
|
video_encoder_config.video_format.parameters["foo"] = "foo";
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength,
|
kMaxPayloadLength);
|
||||||
true /* nack_enabled */);
|
|
||||||
video_stream_encoder_->OnBitrateUpdated(kLowTargetBitrateBps, 0, 0);
|
video_stream_encoder_->OnBitrateUpdated(kLowTargetBitrateBps, 0, 0);
|
||||||
|
|
||||||
// Force quality scaler reconfiguration by resetting the source.
|
// Force quality scaler reconfiguration by resetting the source.
|
||||||
|
@ -2441,7 +2436,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||||
TEST_F(VideoStreamEncoderTest, FailingInitEncodeDoesntCauseCrash) {
|
TEST_F(VideoStreamEncoderTest, FailingInitEncodeDoesntCauseCrash) {
|
||||||
fake_encoder_.ForceInitEncodeFailure(true);
|
fake_encoder_.ForceInitEncodeFailure(true);
|
||||||
video_stream_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
|
video_stream_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
|
||||||
ResetEncoder("VP8", 2, 1, 1, true, false);
|
ResetEncoder("VP8", 2, 1, 1, false);
|
||||||
const int kFrameWidth = 1280;
|
const int kFrameWidth = 1280;
|
||||||
const int kFrameHeight = 720;
|
const int kFrameHeight = 720;
|
||||||
video_source_.IncomingCapturedFrame(
|
video_source_.IncomingCapturedFrame(
|
||||||
|
@ -2587,7 +2582,7 @@ TEST_F(VideoStreamEncoderTest, DoesntAdaptDownPastMinFramerate) {
|
||||||
|
|
||||||
// Reconfigure encoder with two temporal layers and screensharing, which will
|
// Reconfigure encoder with two temporal layers and screensharing, which will
|
||||||
// disable frame dropping and make testing easier.
|
// disable frame dropping and make testing easier.
|
||||||
ResetEncoder("VP8", 1, 2, 1, true, true);
|
ResetEncoder("VP8", 1, 2, 1, true);
|
||||||
|
|
||||||
video_stream_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
|
video_stream_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
|
||||||
video_stream_encoder_->SetSource(
|
video_stream_encoder_->SetSource(
|
||||||
|
@ -3053,7 +3048,7 @@ TEST_F(VideoStreamEncoderTest, AcceptsFullHdAdaptedDownSimulcastFrames) {
|
||||||
video_encoder_config.video_stream_factory =
|
video_encoder_config.video_stream_factory =
|
||||||
new rtc::RefCountedObject<CroppingVideoStreamFactory>(1, kFramerate);
|
new rtc::RefCountedObject<CroppingVideoStreamFactory>(1, kFramerate);
|
||||||
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
|
||||||
kMaxPayloadLength, false);
|
kMaxPayloadLength);
|
||||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||||
|
|
||||||
video_source_.set_adaptation_enabled(true);
|
video_source_.set_adaptation_enabled(true);
|
||||||
|
|
Loading…
Reference in a new issue