[Overuse] Make VideoStreamAdapter responsible for executing adaptation.
This CL moves GetAdaptUpTarget(), GetAdaptDownTarget() and ApplyAdaptationTarget() - and related code - to the VideoStreamAdapter. This includes pieces related to calculating how to adapt, including: - DegradationPreference - BalancedDegradationPreference - AdaptationRequest and last_adaptation_request_ - CanAdaptUpResolution() The VideoStreamAdapter's interface has changed: VideoSourceRestrictor methods are now hidden in favor of methods exposing AdaptationTarget. This CL also does some misc moves: - GetEncoderBitrateLimits is moved and renamed to VideoEncoder::EncoderInfo::GetEncoderBitrateLimitsForResolution. - EncoderSettings moved to a separate file. // For api/video_codecs/video_encoder.[cc/h] changes, which is the // moving of a function. TBR=sprang@webrtc.org Bug: webrtc:11393 Change-Id: Ie6bd8ef644ce927d7eca6ab90a0a7bcace682f3c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169842 Reviewed-by: Henrik Boström <hbos@webrtc.org> Reviewed-by: Evan Shrubsole <eshr@google.com> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Commit-Queue: Henrik Boström <hbos@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30708}
This commit is contained in:
committed by
Commit Bot
parent
74dadc1e8e
commit
b0f2e0ced4
@ -11,6 +11,7 @@
|
||||
#include "api/video_codecs/video_encoder.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <algorithm>
|
||||
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/strings/string_builder.h"
|
||||
@ -208,6 +209,42 @@ bool VideoEncoder::EncoderInfo::operator==(const EncoderInfo& rhs) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
absl::optional<VideoEncoder::ResolutionBitrateLimits>
|
||||
VideoEncoder::EncoderInfo::GetEncoderBitrateLimitsForResolution(
|
||||
int frame_size_pixels) const {
|
||||
std::vector<ResolutionBitrateLimits> bitrate_limits =
|
||||
resolution_bitrate_limits;
|
||||
|
||||
// Sort the list of bitrate limits by resolution.
|
||||
sort(bitrate_limits.begin(), bitrate_limits.end(),
|
||||
[](const ResolutionBitrateLimits& lhs,
|
||||
const ResolutionBitrateLimits& rhs) {
|
||||
return lhs.frame_size_pixels < rhs.frame_size_pixels;
|
||||
});
|
||||
|
||||
for (size_t i = 0; i < bitrate_limits.size(); ++i) {
|
||||
RTC_DCHECK_GE(bitrate_limits[i].min_bitrate_bps, 0);
|
||||
RTC_DCHECK_GE(bitrate_limits[i].min_start_bitrate_bps, 0);
|
||||
RTC_DCHECK_GE(bitrate_limits[i].max_bitrate_bps,
|
||||
bitrate_limits[i].min_bitrate_bps);
|
||||
if (i > 0) {
|
||||
// The bitrate limits aren't expected to decrease with resolution.
|
||||
RTC_DCHECK_GE(bitrate_limits[i].min_bitrate_bps,
|
||||
bitrate_limits[i - 1].min_bitrate_bps);
|
||||
RTC_DCHECK_GE(bitrate_limits[i].min_start_bitrate_bps,
|
||||
bitrate_limits[i - 1].min_start_bitrate_bps);
|
||||
RTC_DCHECK_GE(bitrate_limits[i].max_bitrate_bps,
|
||||
bitrate_limits[i - 1].max_bitrate_bps);
|
||||
}
|
||||
|
||||
if (bitrate_limits[i].frame_size_pixels >= frame_size_pixels) {
|
||||
return absl::optional<ResolutionBitrateLimits>(bitrate_limits[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
VideoEncoder::RateControlParameters::RateControlParameters()
|
||||
: bitrate(VideoBitrateAllocation()),
|
||||
framerate_fps(0.0),
|
||||
|
||||
@ -236,6 +236,11 @@ class RTC_EXPORT VideoEncoder {
|
||||
// Recommended bitrate limits for different resolutions.
|
||||
std::vector<ResolutionBitrateLimits> resolution_bitrate_limits;
|
||||
|
||||
// Obtains the limits from |resolution_bitrate_limits| that best matches the
|
||||
// |frame_size_pixels|.
|
||||
absl::optional<ResolutionBitrateLimits>
|
||||
GetEncoderBitrateLimitsForResolution(int frame_size_pixels) const;
|
||||
|
||||
// If true, this encoder has internal support for generating simulcast
|
||||
// streams. Otherwise, an adapter class will be needed.
|
||||
// Even if true, the config provided to InitEncode() might not be supported,
|
||||
|
||||
Reference in New Issue
Block a user