[Adaptation] Rename the processor "VideoStreamEncoderResourceManager".

This CL is part of the Call-Level Adaptation Processing design doc:
https://docs.google.com/document/d/1ZyC26yOCknrrcYa839ZWLxD6o6Gig5A3lVTh4E41074/edit?usp=sharing

This CL is a pure rename CL.
The next CL split this class up into a "Manager" part and a "Processor"
part. By doing the renaming separately, reviewing of the next CL should
be easier.

Bug: webrtc:11172
Change-Id: I2d5bac049b4bb88d4f947f8c4dc61e2131164a59
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173020
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Evan Shrubsole <eshr@google.com>
Cr-Commit-Position: refs/heads/master@{#31104}
This commit is contained in:
Henrik Boström 2020-04-17 17:15:26 +02:00 committed by Commit Bot
parent d2930c6c2b
commit de8d551b95
6 changed files with 127 additions and 122 deletions

View File

@ -16,8 +16,8 @@ rtc_library("video_adaptation") {
"overuse_frame_detector.h",
"quality_scaler_resource.cc",
"quality_scaler_resource.h",
"resource_adaptation_processor.cc",
"resource_adaptation_processor.h",
"video_stream_encoder_resource_manager.cc",
"video_stream_encoder_resource_manager.h",
]
deps = [
@ -57,7 +57,7 @@ if (rtc_include_tests) {
defines = []
sources = [
"overuse_frame_detector_unittest.cc",
"resource_adaptation_processor_unittest.cc",
"video_stream_encoder_resource_manager_unittest.cc",
]
deps = [
":video_adaptation",

View File

@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "video/adaptation/resource_adaptation_processor.h"
#include "video/adaptation/video_stream_encoder_resource_manager.h"
#include <algorithm>
#include <cmath>
@ -66,7 +66,7 @@ VideoAdaptationReason OtherReason(VideoAdaptationReason reason) {
} // namespace
class ResourceAdaptationProcessor::InitialFrameDropper {
class VideoStreamEncoderResourceManager::InitialFrameDropper {
public:
explicit InitialFrameDropper(QualityScalerResource* quality_scaler_resource)
: quality_scaler_resource_(quality_scaler_resource),
@ -137,17 +137,17 @@ class ResourceAdaptationProcessor::InitialFrameDropper {
int initial_framedrop_;
};
ResourceAdaptationProcessor::PreventAdaptUpDueToActiveCounts::
PreventAdaptUpDueToActiveCounts(ResourceAdaptationProcessor* processor)
: processor_(processor) {}
VideoStreamEncoderResourceManager::PreventAdaptUpDueToActiveCounts::
PreventAdaptUpDueToActiveCounts(VideoStreamEncoderResourceManager* manager)
: manager_(manager) {}
bool ResourceAdaptationProcessor::PreventAdaptUpDueToActiveCounts::
bool VideoStreamEncoderResourceManager::PreventAdaptUpDueToActiveCounts::
IsAdaptationUpAllowed(const VideoStreamInputState& input_state,
const VideoSourceRestrictions& restrictions_before,
const VideoSourceRestrictions& restrictions_after,
const Resource& reason_resource) const {
VideoAdaptationReason reason =
processor_->GetReasonFromResource(reason_resource);
manager_->GetReasonFromResource(reason_resource);
// We can't adapt up if we're already at the highest setting.
// Note that this only includes counts relevant to the current degradation
// preference. e.g. we previously adapted resolution, now prefer adpating fps,
@ -156,36 +156,37 @@ bool ResourceAdaptationProcessor::PreventAdaptUpDueToActiveCounts::
// want us to go up it should prevent us from doing so itself rather than to
// have this catch-all reason- and stats-based approach.
int num_downgrades = FilterVideoAdaptationCountersByDegradationPreference(
processor_->active_counts_[reason],
processor_->effective_degradation_preference())
manager_->active_counts_[reason],
manager_->effective_degradation_preference())
.Total();
RTC_DCHECK_GE(num_downgrades, 0);
return num_downgrades > 0;
}
ResourceAdaptationProcessor::PreventIncreaseResolutionDueToBitrateResource::
PreventIncreaseResolutionDueToBitrateResource(
ResourceAdaptationProcessor* processor)
: processor_(processor) {}
VideoStreamEncoderResourceManager::
PreventIncreaseResolutionDueToBitrateResource::
PreventIncreaseResolutionDueToBitrateResource(
VideoStreamEncoderResourceManager* manager)
: manager_(manager) {}
bool ResourceAdaptationProcessor::
bool VideoStreamEncoderResourceManager::
PreventIncreaseResolutionDueToBitrateResource::IsAdaptationUpAllowed(
const VideoStreamInputState& input_state,
const VideoSourceRestrictions& restrictions_before,
const VideoSourceRestrictions& restrictions_after,
const Resource& reason_resource) const {
VideoAdaptationReason reason =
processor_->GetReasonFromResource(reason_resource);
manager_->GetReasonFromResource(reason_resource);
// If increasing resolution due to kQuality, make sure bitrate limits are not
// violated.
// TODO(hbos): Why are we allowing violating bitrate constraints if adapting
// due to CPU? Shouldn't this condition be checked regardless of reason?
if (reason == VideoAdaptationReason::kQuality &&
DidIncreaseResolution(restrictions_before, restrictions_after)) {
uint32_t bitrate_bps = processor_->encoder_target_bitrate_bps_.value_or(0);
uint32_t bitrate_bps = manager_->encoder_target_bitrate_bps_.value_or(0);
absl::optional<VideoEncoder::ResolutionBitrateLimits> bitrate_limits =
processor_->encoder_settings_.has_value()
? processor_->encoder_settings_->encoder_info()
manager_->encoder_settings_.has_value()
? manager_->encoder_settings_->encoder_info()
.GetEncoderBitrateLimitsForResolution(
// Need some sort of expected resulting pixels to be used
// instead of unrestricted.
@ -202,42 +203,42 @@ bool ResourceAdaptationProcessor::
return true;
}
ResourceAdaptationProcessor::PreventAdaptUpInBalancedResource::
PreventAdaptUpInBalancedResource(ResourceAdaptationProcessor* processor)
: processor_(processor) {}
VideoStreamEncoderResourceManager::PreventAdaptUpInBalancedResource::
PreventAdaptUpInBalancedResource(VideoStreamEncoderResourceManager* manager)
: manager_(manager) {}
bool ResourceAdaptationProcessor::PreventAdaptUpInBalancedResource::
bool VideoStreamEncoderResourceManager::PreventAdaptUpInBalancedResource::
IsAdaptationUpAllowed(const VideoStreamInputState& input_state,
const VideoSourceRestrictions& restrictions_before,
const VideoSourceRestrictions& restrictions_after,
const Resource& reason_resource) const {
VideoAdaptationReason reason =
processor_->GetReasonFromResource(reason_resource);
manager_->GetReasonFromResource(reason_resource);
// Don't adapt if BalancedDegradationSettings applies and determines this will
// exceed bitrate constraints.
// TODO(hbos): Why are we allowing violating balanced settings if adapting due
// CPU? Shouldn't this condition be checked regardless of reason?
if (reason == VideoAdaptationReason::kQuality &&
processor_->effective_degradation_preference() ==
manager_->effective_degradation_preference() ==
DegradationPreference::BALANCED &&
!processor_->stream_adapter_->balanced_settings().CanAdaptUp(
!manager_->stream_adapter_->balanced_settings().CanAdaptUp(
input_state.video_codec_type(),
input_state.frame_size_pixels().value(),
processor_->encoder_target_bitrate_bps_.value_or(0))) {
manager_->encoder_target_bitrate_bps_.value_or(0))) {
return false;
}
if (reason == VideoAdaptationReason::kQuality &&
DidIncreaseResolution(restrictions_before, restrictions_after) &&
!processor_->stream_adapter_->balanced_settings().CanAdaptUpResolution(
!manager_->stream_adapter_->balanced_settings().CanAdaptUpResolution(
input_state.video_codec_type(),
input_state.frame_size_pixels().value(),
processor_->encoder_target_bitrate_bps_.value_or(0))) {
manager_->encoder_target_bitrate_bps_.value_or(0))) {
return false;
}
return true;
}
ResourceAdaptationProcessor::ResourceAdaptationProcessor(
VideoStreamEncoderResourceManager::VideoStreamEncoderResourceManager(
VideoStreamInputStateProvider* input_state_provider,
Clock* clock,
bool experiment_cpu_load_estimator,
@ -278,11 +279,11 @@ ResourceAdaptationProcessor::ResourceAdaptationProcessor(
AddResource(&quality_scaler_resource_, VideoAdaptationReason::kQuality);
}
ResourceAdaptationProcessor::~ResourceAdaptationProcessor() {
VideoStreamEncoderResourceManager::~VideoStreamEncoderResourceManager() {
RTC_DCHECK_EQ(state_, State::kStopped);
}
void ResourceAdaptationProcessor::StartResourceAdaptation(
void VideoStreamEncoderResourceManager::StartResourceAdaptation(
ResourceAdaptationProcessorListener* adaptation_listener) {
RTC_DCHECK_EQ(state_, State::kStopped);
RTC_DCHECK(encoder_settings_.has_value());
@ -297,7 +298,7 @@ void ResourceAdaptationProcessor::StartResourceAdaptation(
state_ = State::kStarted;
}
void ResourceAdaptationProcessor::StopResourceAdaptation() {
void VideoStreamEncoderResourceManager::StopResourceAdaptation() {
encode_usage_resource_.StopCheckForOveruse();
quality_scaler_resource_.StopCheckForOveruse();
for (auto& resource_and_reason : resources_) {
@ -306,12 +307,13 @@ void ResourceAdaptationProcessor::StopResourceAdaptation() {
state_ = State::kStopped;
}
void ResourceAdaptationProcessor::AddResource(Resource* resource) {
void VideoStreamEncoderResourceManager::AddResource(Resource* resource) {
return AddResource(resource, VideoAdaptationReason::kCpu);
}
void ResourceAdaptationProcessor::AddResource(Resource* resource,
VideoAdaptationReason reason) {
void VideoStreamEncoderResourceManager::AddResource(
Resource* resource,
VideoAdaptationReason reason) {
RTC_DCHECK(resource);
RTC_DCHECK(absl::c_find_if(resources_,
[resource](const ResourceAndReason& r) {
@ -321,14 +323,14 @@ void ResourceAdaptationProcessor::AddResource(Resource* resource,
resources_.emplace_back(resource, reason);
}
void ResourceAdaptationProcessor::SetDegradationPreference(
void VideoStreamEncoderResourceManager::SetDegradationPreference(
DegradationPreference degradation_preference) {
degradation_preference_ = degradation_preference;
UpdateStatsAdaptationSettings();
MaybeUpdateEffectiveDegradationPreference();
}
void ResourceAdaptationProcessor::SetEncoderSettings(
void VideoStreamEncoderResourceManager::SetEncoderSettings(
EncoderSettings encoder_settings) {
encoder_settings_ = std::move(encoder_settings);
MaybeUpdateEffectiveDegradationPreference();
@ -339,31 +341,33 @@ void ResourceAdaptationProcessor::SetEncoderSettings(
MaybeUpdateTargetFrameRate();
}
void ResourceAdaptationProcessor::SetStartBitrate(DataRate start_bitrate) {
void VideoStreamEncoderResourceManager::SetStartBitrate(
DataRate start_bitrate) {
if (!start_bitrate.IsZero())
encoder_target_bitrate_bps_ = start_bitrate.bps();
initial_frame_dropper_->SetStartBitrate(start_bitrate,
clock_->TimeInMicroseconds());
}
void ResourceAdaptationProcessor::SetTargetBitrate(DataRate target_bitrate) {
void VideoStreamEncoderResourceManager::SetTargetBitrate(
DataRate target_bitrate) {
if (!target_bitrate.IsZero())
encoder_target_bitrate_bps_ = target_bitrate.bps();
initial_frame_dropper_->SetTargetBitrate(target_bitrate,
clock_->TimeInMilliseconds());
}
void ResourceAdaptationProcessor::SetEncoderRates(
void VideoStreamEncoderResourceManager::SetEncoderRates(
const VideoEncoder::RateControlParameters& encoder_rates) {
encoder_rates_ = encoder_rates;
}
void ResourceAdaptationProcessor::ResetVideoSourceRestrictions() {
void VideoStreamEncoderResourceManager::ResetVideoSourceRestrictions() {
stream_adapter_->ClearRestrictions();
MaybeUpdateVideoSourceRestrictions(nullptr);
}
void ResourceAdaptationProcessor::OnFrameDroppedDueToSize() {
void VideoStreamEncoderResourceManager::OnFrameDroppedDueToSize() {
VideoAdaptationCounters counters_before =
stream_adapter_->adaptation_counters();
OnResourceOveruse(quality_scaler_resource_);
@ -380,14 +384,14 @@ void ResourceAdaptationProcessor::OnFrameDroppedDueToSize() {
initial_frame_dropper_->OnFrameDroppedDueToSize();
}
void ResourceAdaptationProcessor::OnEncodeStarted(
void VideoStreamEncoderResourceManager::OnEncodeStarted(
const VideoFrame& cropped_frame,
int64_t time_when_first_seen_us) {
encode_usage_resource_.OnEncodeStarted(cropped_frame,
time_when_first_seen_us);
}
void ResourceAdaptationProcessor::OnEncodeCompleted(
void VideoStreamEncoderResourceManager::OnEncodeCompleted(
const EncodedImage& encoded_image,
int64_t time_sent_in_us,
absl::optional<int> encode_duration_us) {
@ -401,21 +405,21 @@ void ResourceAdaptationProcessor::OnEncodeCompleted(
quality_scaler_resource_.OnEncodeCompleted(encoded_image, time_sent_in_us);
}
void ResourceAdaptationProcessor::OnFrameDropped(
void VideoStreamEncoderResourceManager::OnFrameDropped(
EncodedImageCallback::DropReason reason) {
quality_scaler_resource_.OnFrameDropped(reason);
}
bool ResourceAdaptationProcessor::DropInitialFrames() const {
bool VideoStreamEncoderResourceManager::DropInitialFrames() const {
return initial_frame_dropper_->DropInitialFrames();
}
void ResourceAdaptationProcessor::OnMaybeEncodeFrame() {
void VideoStreamEncoderResourceManager::OnMaybeEncodeFrame() {
initial_frame_dropper_->OnMaybeEncodeFrame();
MaybePerformQualityRampupExperiment();
}
void ResourceAdaptationProcessor::UpdateQualityScalerSettings(
void VideoStreamEncoderResourceManager::UpdateQualityScalerSettings(
absl::optional<VideoEncoder::QpThresholds> qp_thresholds) {
if (qp_thresholds.has_value()) {
quality_scaler_resource_.StopCheckForOveruse();
@ -426,7 +430,7 @@ void ResourceAdaptationProcessor::UpdateQualityScalerSettings(
initial_frame_dropper_->OnQualityScalerSettingsUpdated();
}
void ResourceAdaptationProcessor::ConfigureQualityScaler(
void VideoStreamEncoderResourceManager::ConfigureQualityScaler(
const VideoEncoder::EncoderInfo& encoder_info) {
const auto scaling_settings = encoder_info.scaling_settings;
const bool quality_scaling_allowed =
@ -468,7 +472,7 @@ void ResourceAdaptationProcessor::ConfigureQualityScaler(
}
ResourceListenerResponse
ResourceAdaptationProcessor::OnResourceUsageStateMeasured(
VideoStreamEncoderResourceManager::OnResourceUsageStateMeasured(
const Resource& resource) {
switch (resource.usage_state()) {
case ResourceUsageState::kOveruse:
@ -483,7 +487,7 @@ ResourceAdaptationProcessor::OnResourceUsageStateMeasured(
}
}
bool ResourceAdaptationProcessor::HasSufficientInputForAdaptation(
bool VideoStreamEncoderResourceManager::HasSufficientInputForAdaptation(
const VideoStreamInputState& input_state) const {
return input_state.HasInputFrameSizeAndFramesPerSecond() &&
(effective_degradation_preference_ !=
@ -491,7 +495,7 @@ bool ResourceAdaptationProcessor::HasSufficientInputForAdaptation(
input_state.frames_per_second() >= kMinFrameRateFps);
}
VideoAdaptationReason ResourceAdaptationProcessor::GetReasonFromResource(
VideoAdaptationReason VideoStreamEncoderResourceManager::GetReasonFromResource(
const Resource& resource) const {
const auto& registered_resource =
absl::c_find_if(resources_, [&resource](const ResourceAndReason& r) {
@ -502,7 +506,7 @@ VideoAdaptationReason ResourceAdaptationProcessor::GetReasonFromResource(
return registered_resource->reason;
}
void ResourceAdaptationProcessor::OnResourceUnderuse(
void VideoStreamEncoderResourceManager::OnResourceUnderuse(
const Resource& reason_resource) {
VideoStreamInputState input_state = input_state_provider_->InputState();
if (effective_degradation_preference_ == DegradationPreference::DISABLED ||
@ -536,7 +540,7 @@ void ResourceAdaptationProcessor::OnResourceUnderuse(
MaybeUpdateVideoSourceRestrictions(&reason_resource);
}
ResourceListenerResponse ResourceAdaptationProcessor::OnResourceOveruse(
ResourceListenerResponse VideoStreamEncoderResourceManager::OnResourceOveruse(
const Resource& reason_resource) {
VideoStreamInputState input_state = input_state_provider_->InputState();
if (!input_state.has_input()) {
@ -567,7 +571,8 @@ ResourceListenerResponse ResourceAdaptationProcessor::OnResourceOveruse(
// pipelining encoders better (multiple input frames before something comes
// out). This should effectively turn off CPU adaptations for systems that
// remotely cope with the load right now.
CpuOveruseOptions ResourceAdaptationProcessor::GetCpuOveruseOptions() const {
CpuOveruseOptions VideoStreamEncoderResourceManager::GetCpuOveruseOptions()
const {
// This is already ensured by the only caller of this method:
// StartResourceAdaptation().
RTC_DCHECK(encoder_settings_.has_value());
@ -584,12 +589,13 @@ CpuOveruseOptions ResourceAdaptationProcessor::GetCpuOveruseOptions() const {
return options;
}
int ResourceAdaptationProcessor::LastInputFrameSizeOrDefault() const {
int VideoStreamEncoderResourceManager::LastInputFrameSizeOrDefault() const {
return input_state_provider_->InputState().frame_size_pixels().value_or(
kDefaultInputPixelsWidth * kDefaultInputPixelsHeight);
}
void ResourceAdaptationProcessor::MaybeUpdateEffectiveDegradationPreference() {
void VideoStreamEncoderResourceManager::
MaybeUpdateEffectiveDegradationPreference() {
bool is_screenshare = encoder_settings_.has_value() &&
encoder_settings_->encoder_config().content_type ==
VideoEncoderConfig::ContentType::kScreen;
@ -602,7 +608,7 @@ void ResourceAdaptationProcessor::MaybeUpdateEffectiveDegradationPreference() {
MaybeUpdateVideoSourceRestrictions(nullptr);
}
void ResourceAdaptationProcessor::MaybeUpdateVideoSourceRestrictions(
void VideoStreamEncoderResourceManager::MaybeUpdateVideoSourceRestrictions(
const Resource* reason_resource) {
VideoSourceRestrictions new_restrictions =
FilterRestrictionsByDegradationPreference(
@ -621,7 +627,7 @@ void ResourceAdaptationProcessor::MaybeUpdateVideoSourceRestrictions(
}
}
void ResourceAdaptationProcessor::OnVideoSourceRestrictionsUpdated(
void VideoStreamEncoderResourceManager::OnVideoSourceRestrictionsUpdated(
VideoSourceRestrictions restrictions,
const VideoAdaptationCounters& adaptation_counters,
const Resource* reason) {
@ -651,7 +657,7 @@ void ResourceAdaptationProcessor::OnVideoSourceRestrictionsUpdated(
MaybeUpdateTargetFrameRate();
}
void ResourceAdaptationProcessor::MaybeUpdateTargetFrameRate() {
void VideoStreamEncoderResourceManager::MaybeUpdateTargetFrameRate() {
absl::optional<double> codec_max_frame_rate =
encoder_settings_.has_value()
? absl::optional<double>(
@ -671,7 +677,7 @@ void ResourceAdaptationProcessor::MaybeUpdateTargetFrameRate() {
encode_usage_resource_.SetTargetFrameRate(target_frame_rate);
}
void ResourceAdaptationProcessor::OnAdaptationCountChanged(
void VideoStreamEncoderResourceManager::OnAdaptationCountChanged(
const VideoAdaptationCounters& adaptation_count,
VideoAdaptationCounters* active_count,
VideoAdaptationCounters* other_active) {
@ -734,7 +740,7 @@ void ResourceAdaptationProcessor::OnAdaptationCountChanged(
RTC_DCHECK_GE(other_active->fps_adaptations, 0);
}
void ResourceAdaptationProcessor::UpdateAdaptationStats(
void VideoStreamEncoderResourceManager::UpdateAdaptationStats(
const VideoAdaptationCounters& total_counts,
VideoAdaptationReason reason) {
// Update active counts
@ -748,7 +754,7 @@ void ResourceAdaptationProcessor::UpdateAdaptationStats(
active_counts_[VideoAdaptationReason::kQuality]);
}
void ResourceAdaptationProcessor::UpdateStatsAdaptationSettings() const {
void VideoStreamEncoderResourceManager::UpdateStatsAdaptationSettings() const {
VideoStreamEncoderObserver::AdaptationSettings cpu_settings(
IsResolutionScalingEnabled(degradation_preference_),
IsFramerateScalingEnabled(degradation_preference_));
@ -761,7 +767,7 @@ void ResourceAdaptationProcessor::UpdateStatsAdaptationSettings() const {
quality_settings);
}
void ResourceAdaptationProcessor::MaybePerformQualityRampupExperiment() {
void VideoStreamEncoderResourceManager::MaybePerformQualityRampupExperiment() {
if (!quality_scaler_resource_.is_started())
return;
@ -797,13 +803,13 @@ void ResourceAdaptationProcessor::MaybePerformQualityRampupExperiment() {
}
}
void ResourceAdaptationProcessor::ResetActiveCounts() {
void VideoStreamEncoderResourceManager::ResetActiveCounts() {
active_counts_.clear();
active_counts_[VideoAdaptationReason::kCpu] = VideoAdaptationCounters();
active_counts_[VideoAdaptationReason::kQuality] = VideoAdaptationCounters();
}
std::string ResourceAdaptationProcessor::ActiveCountsToString() const {
std::string VideoStreamEncoderResourceManager::ActiveCountsToString() const {
RTC_DCHECK_EQ(2, active_counts_.size());
rtc::StringBuilder ss;

View File

@ -8,8 +8,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef VIDEO_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_H_
#define VIDEO_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_H_
#ifndef VIDEO_ADAPTATION_VIDEO_STREAM_ENCODER_RESOURCE_MANAGER_H_
#define VIDEO_ADAPTATION_VIDEO_STREAM_ENCODER_RESOURCE_MANAGER_H_
#include <map>
#include <memory>
@ -58,20 +58,21 @@ extern const int kDefaultInputPixelsHeight;
// TODO(hbos): Add unittests specific to this class, it is currently only tested
// indirectly in video_stream_encoder_unittest.cc and other tests exercising
// VideoStreamEncoder.
class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
public ResourceListener,
public ResourceAdaptationProcessorListener {
class VideoStreamEncoderResourceManager
: public ResourceAdaptationProcessorInterface,
public ResourceListener,
public ResourceAdaptationProcessorListener {
public:
// The processor can be constructed on any sequence, but must be initialized
// and used on a single sequence, e.g. the encoder queue.
ResourceAdaptationProcessor(
VideoStreamEncoderResourceManager(
VideoStreamInputStateProvider* input_state_provider,
Clock* clock,
bool experiment_cpu_load_estimator,
std::unique_ptr<OveruseFrameDetector> overuse_detector,
VideoStreamEncoderObserver* encoder_stats_observer,
ResourceAdaptationProcessorListener* adaptation_listener);
~ResourceAdaptationProcessor() override;
~VideoStreamEncoderResourceManager() override;
DegradationPreference degradation_preference() const {
return degradation_preference_;
@ -192,7 +193,7 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
class PreventAdaptUpDueToActiveCounts final : public Resource {
public:
explicit PreventAdaptUpDueToActiveCounts(
ResourceAdaptationProcessor* processor);
VideoStreamEncoderResourceManager* manager);
~PreventAdaptUpDueToActiveCounts() override = default;
std::string name() const override {
@ -206,14 +207,14 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
const Resource& reason_resource) const override;
private:
ResourceAdaptationProcessor* processor_;
VideoStreamEncoderResourceManager* manager_;
} prevent_adapt_up_due_to_active_counts_;
// Does not trigger adaptations, only prevents adapting up resolution.
class PreventIncreaseResolutionDueToBitrateResource final : public Resource {
public:
explicit PreventIncreaseResolutionDueToBitrateResource(
ResourceAdaptationProcessor* processor);
VideoStreamEncoderResourceManager* manager);
~PreventIncreaseResolutionDueToBitrateResource() override = default;
std::string name() const override {
@ -227,14 +228,14 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
const Resource& reason_resource) const override;
private:
ResourceAdaptationProcessor* processor_;
VideoStreamEncoderResourceManager* manager_;
} prevent_increase_resolution_due_to_bitrate_resource_;
// Does not trigger adaptations, only prevents adapting up in BALANCED.
class PreventAdaptUpInBalancedResource final : public Resource {
public:
explicit PreventAdaptUpInBalancedResource(
ResourceAdaptationProcessor* processor);
VideoStreamEncoderResourceManager* manager);
~PreventAdaptUpInBalancedResource() override = default;
std::string name() const override {
@ -248,7 +249,7 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
const Resource& reason_resource) const override;
private:
ResourceAdaptationProcessor* processor_;
VideoStreamEncoderResourceManager* manager_;
} prevent_adapt_up_in_balanced_resource_;
EncodeUsageResource encode_usage_resource_;
@ -299,4 +300,4 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
} // namespace webrtc
#endif // VIDEO_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_H_
#endif // VIDEO_ADAPTATION_VIDEO_STREAM_ENCODER_RESOURCE_MANAGER_H_

View File

@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "video/adaptation/resource_adaptation_processor.h"
#include "video/adaptation/video_stream_encoder_resource_manager.h"
#include "api/video/video_adaptation_counters.h"
#include "test/gmock.h"
@ -16,55 +16,55 @@
namespace webrtc {
TEST(ResourceAdaptationProcessorTest, FirstAdaptationDown_Fps) {
TEST(VideoStreamEncoderResourceManagerTest, FirstAdaptationDown_Fps) {
VideoAdaptationCounters cpu;
VideoAdaptationCounters qp;
VideoAdaptationCounters total(0, 1);
ResourceAdaptationProcessor::OnAdaptationCountChanged(total, &cpu, &qp);
VideoStreamEncoderResourceManager::OnAdaptationCountChanged(total, &cpu, &qp);
VideoAdaptationCounters expected_cpu(0, 1);
VideoAdaptationCounters expected_qp;
EXPECT_EQ(expected_cpu, cpu);
EXPECT_EQ(expected_qp, qp);
}
TEST(ResourceAdaptationProcessorTest, FirstAdaptationDown_Resolution) {
TEST(VideoStreamEncoderResourceManagerTest, FirstAdaptationDown_Resolution) {
VideoAdaptationCounters cpu;
VideoAdaptationCounters qp;
VideoAdaptationCounters total(1, 0);
ResourceAdaptationProcessor::OnAdaptationCountChanged(total, &cpu, &qp);
VideoStreamEncoderResourceManager::OnAdaptationCountChanged(total, &cpu, &qp);
VideoAdaptationCounters expected_cpu(1, 0);
VideoAdaptationCounters expected_qp;
EXPECT_EQ(expected_cpu, cpu);
EXPECT_EQ(expected_qp, qp);
}
TEST(ResourceAdaptationProcessorTest, LastAdaptUp_Fps) {
TEST(VideoStreamEncoderResourceManagerTest, LastAdaptUp_Fps) {
VideoAdaptationCounters cpu(0, 1);
VideoAdaptationCounters qp;
VideoAdaptationCounters total;
ResourceAdaptationProcessor::OnAdaptationCountChanged(total, &cpu, &qp);
VideoStreamEncoderResourceManager::OnAdaptationCountChanged(total, &cpu, &qp);
VideoAdaptationCounters expected_cpu;
VideoAdaptationCounters expected_qp;
EXPECT_EQ(expected_cpu, cpu);
EXPECT_EQ(expected_qp, qp);
}
TEST(ResourceAdaptationProcessorTest, LastAdaptUp_Resolution) {
TEST(VideoStreamEncoderResourceManagerTest, LastAdaptUp_Resolution) {
VideoAdaptationCounters cpu(1, 0);
VideoAdaptationCounters qp;
VideoAdaptationCounters total;
ResourceAdaptationProcessor::OnAdaptationCountChanged(total, &cpu, &qp);
VideoStreamEncoderResourceManager::OnAdaptationCountChanged(total, &cpu, &qp);
VideoAdaptationCounters expected_cpu;
VideoAdaptationCounters expected_qp;
EXPECT_EQ(expected_cpu, cpu);
EXPECT_EQ(expected_qp, qp);
}
TEST(ResourceAdaptationProcessorTest, AdaptUpWithBorrow_Resolution) {
TEST(VideoStreamEncoderResourceManagerTest, AdaptUpWithBorrow_Resolution) {
VideoAdaptationCounters cpu(0, 1);
VideoAdaptationCounters qp(1, 0);
VideoAdaptationCounters total(0, 1);
@ -72,7 +72,7 @@ TEST(ResourceAdaptationProcessorTest, AdaptUpWithBorrow_Resolution) {
// CPU adaptation for resolution, but no resolution adaptation left from CPU.
// We then borrow the resolution adaptation from qp, and give qp the fps
// adaptation from CPU.
ResourceAdaptationProcessor::OnAdaptationCountChanged(total, &cpu, &qp);
VideoStreamEncoderResourceManager::OnAdaptationCountChanged(total, &cpu, &qp);
VideoAdaptationCounters expected_cpu(0, 0);
VideoAdaptationCounters expected_qp(0, 1);
@ -80,14 +80,14 @@ TEST(ResourceAdaptationProcessorTest, AdaptUpWithBorrow_Resolution) {
EXPECT_EQ(expected_qp, qp);
}
TEST(ResourceAdaptationProcessorTest, AdaptUpWithBorrow_Fps) {
TEST(VideoStreamEncoderResourceManagerTest, AdaptUpWithBorrow_Fps) {
VideoAdaptationCounters cpu(1, 0);
VideoAdaptationCounters qp(0, 1);
VideoAdaptationCounters total(1, 0);
// CPU adaptation for fps, but no fps adaptation left from CPU. We then borrow
// the fps adaptation from qp, and give qp the resolution adaptation from CPU.
ResourceAdaptationProcessor::OnAdaptationCountChanged(total, &cpu, &qp);
VideoStreamEncoderResourceManager::OnAdaptationCountChanged(total, &cpu, &qp);
VideoAdaptationCounters expected_cpu(0, 0);
VideoAdaptationCounters expected_qp(1, 0);

View File

@ -37,7 +37,7 @@
#include "rtc_base/time_utils.h"
#include "rtc_base/trace_event.h"
#include "system_wrappers/include/field_trial.h"
#include "video/adaptation/resource_adaptation_processor.h"
#include "video/adaptation/video_stream_encoder_resource_manager.h"
namespace webrtc {
@ -260,8 +260,8 @@ VideoStreamEncoder::VideoStreamEncoder(
/*source=*/nullptr)),
input_state_provider_(std::make_unique<VideoStreamInputStateProvider>(
encoder_stats_observer)),
resource_adaptation_processor_(
std::make_unique<ResourceAdaptationProcessor>(
stream_resource_manager_(
std::make_unique<VideoStreamEncoderResourceManager>(
input_state_provider_.get(),
clock_,
settings_.experiment_cpu_load_estimator,
@ -289,7 +289,7 @@ void VideoStreamEncoder::Stop() {
video_source_sink_controller_->SetSource(nullptr);
encoder_queue_.PostTask([this] {
RTC_DCHECK_RUN_ON(&encoder_queue_);
resource_adaptation_processor_->StopResourceAdaptation();
stream_resource_manager_->StopResourceAdaptation();
rate_allocator_ = nullptr;
bitrate_observer_ = nullptr;
ReleaseEncoder();
@ -329,10 +329,9 @@ void VideoStreamEncoder::SetSource(
encoder_queue_.PostTask([this, source, degradation_preference] {
RTC_DCHECK_RUN_ON(&encoder_queue_);
input_state_provider_->OnHasInputChanged(source);
resource_adaptation_processor_->SetDegradationPreference(
degradation_preference);
stream_resource_manager_->SetDegradationPreference(degradation_preference);
if (encoder_)
resource_adaptation_processor_->ConfigureQualityScaler(
stream_resource_manager_->ConfigureQualityScaler(
encoder_->GetEncoderInfo());
});
}
@ -352,7 +351,7 @@ void VideoStreamEncoder::SetStartBitrate(int start_bitrate_bps) {
encoder_target_bitrate_bps_ =
start_bitrate_bps != 0 ? absl::optional<uint32_t>(start_bitrate_bps)
: absl::nullopt;
resource_adaptation_processor_->SetStartBitrate(
stream_resource_manager_->SetStartBitrate(
DataRate::BitsPerSec(start_bitrate_bps));
});
}
@ -657,8 +656,8 @@ void VideoStreamEncoder::ReconfigureEncoder() {
}
if (pending_encoder_creation_) {
resource_adaptation_processor_->StopResourceAdaptation();
resource_adaptation_processor_->StartResourceAdaptation(this);
stream_resource_manager_->StopResourceAdaptation();
stream_resource_manager_->StartResourceAdaptation(this);
pending_encoder_creation_ = false;
}
@ -731,14 +730,14 @@ void VideoStreamEncoder::ReconfigureEncoder() {
std::move(streams), is_svc, encoder_config_.content_type,
encoder_config_.min_transmit_bitrate_bps);
resource_adaptation_processor_->ConfigureQualityScaler(info);
stream_resource_manager_->ConfigureQualityScaler(info);
}
void VideoStreamEncoder::OnEncoderSettingsChanged() {
EncoderSettings encoder_settings(encoder_->GetEncoderInfo(),
encoder_config_.Copy(), send_codec_);
input_state_provider_->OnEncoderSettingsChanged(encoder_settings);
resource_adaptation_processor_->SetEncoderSettings(encoder_settings);
stream_resource_manager_->SetEncoderSettings(encoder_settings);
}
void VideoStreamEncoder::OnFrame(const VideoFrame& video_frame) {
@ -975,7 +974,7 @@ void VideoStreamEncoder::SetEncoderRates(
frame_encode_metadata_writer_.OnSetRates(
rate_settings.rate_control.bitrate,
static_cast<uint32_t>(rate_settings.rate_control.framerate_fps + 0.5));
resource_adaptation_processor_->SetEncoderRates(rate_settings.rate_control);
stream_resource_manager_->SetEncoderRates(rate_settings.rate_control);
}
}
@ -1044,7 +1043,7 @@ void VideoStreamEncoder::MaybeEncodeVideoFrame(const VideoFrame& video_frame,
if (DropDueToSize(video_frame.size())) {
RTC_LOG(LS_INFO) << "Dropping frame. Too large for target bitrate.";
resource_adaptation_processor_->OnFrameDroppedDueToSize();
stream_resource_manager_->OnFrameDroppedDueToSize();
// Storing references to a native buffer risks blocking frame capture.
if (video_frame.video_frame_buffer()->type() !=
VideoFrameBuffer::Type::kNative) {
@ -1058,7 +1057,7 @@ void VideoStreamEncoder::MaybeEncodeVideoFrame(const VideoFrame& video_frame,
}
return;
}
resource_adaptation_processor_->OnMaybeEncodeFrame();
stream_resource_manager_->OnMaybeEncodeFrame();
if (EncoderPaused()) {
// Storing references to a native buffer risks blocking frame capture.
@ -1241,8 +1240,7 @@ void VideoStreamEncoder::EncodeVideoFrame(const VideoFrame& video_frame,
TRACE_EVENT_ASYNC_STEP0("webrtc", "Video", video_frame.render_time_ms(),
"Encode");
resource_adaptation_processor_->OnEncodeStarted(out_frame,
time_when_posted_us);
stream_resource_manager_->OnEncodeStarted(out_frame, time_when_posted_us);
RTC_DCHECK_LE(send_codec_.width, out_frame.width());
RTC_DCHECK_LE(send_codec_.height, out_frame.height());
@ -1517,7 +1515,7 @@ void VideoStreamEncoder::OnDroppedFrame(DropReason reason) {
sink_->OnDroppedFrame(reason);
encoder_queue_.PostTask([this, reason] {
RTC_DCHECK_RUN_ON(&encoder_queue_);
resource_adaptation_processor_->OnFrameDropped(reason);
stream_resource_manager_->OnFrameDropped(reason);
});
}
@ -1616,7 +1614,7 @@ void VideoStreamEncoder::OnBitrateUpdated(DataRate target_bitrate,
if (target_bitrate.bps() != 0)
encoder_target_bitrate_bps_ = target_bitrate.bps();
resource_adaptation_processor_->SetTargetBitrate(target_bitrate);
stream_resource_manager_->SetTargetBitrate(target_bitrate);
if (video_suspension_changed) {
RTC_LOG(LS_INFO) << "Video suspend state changed to: "
@ -1633,7 +1631,7 @@ void VideoStreamEncoder::OnBitrateUpdated(DataRate target_bitrate,
}
bool VideoStreamEncoder::DropDueToSize(uint32_t pixel_count) const {
if (!resource_adaptation_processor_->DropInitialFrames() ||
if (!stream_resource_manager_->DropInitialFrames() ||
!encoder_target_bitrate_bps_.has_value()) {
return false;
}
@ -1707,8 +1705,8 @@ void VideoStreamEncoder::RunPostEncode(const EncodedImage& encoded_image,
}
}
resource_adaptation_processor_->OnEncodeCompleted(encoded_image, time_sent_us,
encode_duration_us);
stream_resource_manager_->OnEncodeCompleted(encoded_image, time_sent_us,
encode_duration_us);
if (bitrate_adjuster_) {
bitrate_adjuster_->OnEncodedFrame(encoded_image, temporal_index);
}
@ -1863,7 +1861,7 @@ void VideoStreamEncoder::CheckForAnimatedContent(
if (!automatic_animation_detection_experiment_.enabled ||
encoder_config_.content_type !=
VideoEncoderConfig::ContentType::kScreen ||
resource_adaptation_processor_->degradation_preference() !=
stream_resource_manager_->degradation_preference() !=
DegradationPreference::BALANCED) {
return;
}
@ -1930,7 +1928,7 @@ void VideoStreamEncoder::CheckForAnimatedContent(
void VideoStreamEncoder::InjectAdaptationResource(
Resource* resource,
VideoAdaptationReason reason) {
resource_adaptation_processor_->AddResource(resource, reason);
stream_resource_manager_->AddResource(resource, reason);
}
} // namespace webrtc

View File

@ -39,7 +39,7 @@
#include "rtc_base/synchronization/sequence_checker.h"
#include "rtc_base/task_queue.h"
#include "system_wrappers/include/clock.h"
#include "video/adaptation/resource_adaptation_processor.h"
#include "video/adaptation/video_stream_encoder_resource_manager.h"
#include "video/encoder_bitrate_adjuster.h"
#include "video/frame_encode_metadata_writer.h"
#include "video/video_source_sink_controller.h"
@ -412,7 +412,7 @@ class VideoStreamEncoder : public VideoStreamEncoderInterface,
std::unique_ptr<VideoSourceSinkController> video_source_sink_controller_;
std::unique_ptr<VideoStreamInputStateProvider> input_state_provider_
RTC_GUARDED_BY(&encoder_queue_);
std::unique_ptr<ResourceAdaptationProcessor> resource_adaptation_processor_
std::unique_ptr<VideoStreamEncoderResourceManager> stream_resource_manager_
RTC_GUARDED_BY(&encoder_queue_);
// All public methods are proxied to |encoder_queue_|. It must must be