Revert "Propagate known Encoder SinkWants when configured instead of after first frame."
This reverts commit 1ee24a650c116509d855e2ed23b8d28a0bb37384. Reason for revert: Suspected upstream test breakage. Original change's description: > Propagate known Encoder SinkWants when configured instead of after first frame. > > Propagate requested resolution and max frame rate to the source when > configured rather than after the first frame. > This is so that the source can be configured immediately. There is no > reason why source should be updated until after first frame since it may lead > to unnecessary reconfigurations and thread jumps. Wants that depend on actual frame size is not moved. > > Cl also change default behaviour in VideoStreamEncoderTest to not > set restriction on max frame rate. This aligns with how its used. > > Bug: webrtc:14451 > Change-Id: I96a3675d3ccabb1d2ecb4354b6932bc6563b1760 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/342801 > Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Per Kjellander <perkj@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#41906} Bug: webrtc:14451 Change-Id: I3aa669f8cc61a43b0820a06edf1497f3c86e3958 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/343220 Auto-Submit: Per Kjellander <perkj@webrtc.org> Owners-Override: Per Kjellander <perkj@webrtc.org> Commit-Queue: Per Kjellander <perkj@webrtc.org> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41911}
This commit is contained in:
parent
dcc95081e1
commit
c39712b515
@ -859,7 +859,6 @@ if (rtc_include_tests) {
|
||||
"../api/video:builtin_video_bitrate_allocator_factory",
|
||||
"../api/video:encoded_image",
|
||||
"../api/video:recordable_encoded_frame",
|
||||
"../api/video:resolution",
|
||||
"../api/video:video_adaptation",
|
||||
"../api/video:video_bitrate_allocation",
|
||||
"../api/video:video_frame",
|
||||
|
||||
@ -886,45 +886,6 @@ void VideoStreamEncoder::ConfigureEncoder(VideoEncoderConfig config,
|
||||
size_t max_data_payload_length,
|
||||
SetParametersCallback callback) {
|
||||
RTC_DCHECK_RUN_ON(worker_queue_);
|
||||
|
||||
// Inform source about max configured framerate,
|
||||
// requested_resolution and which layers are active.
|
||||
int max_framerate = -1;
|
||||
// Is any layer active.
|
||||
bool active = false;
|
||||
// The max requested_resolution.
|
||||
absl::optional<rtc::VideoSinkWants::FrameSize> requested_resolution;
|
||||
for (const auto& stream : config.simulcast_layers) {
|
||||
max_framerate = std::max(stream.max_framerate, max_framerate);
|
||||
active |= stream.active;
|
||||
// Note: we propagate the highest requested_resolution regardless
|
||||
// if layer is active or not.
|
||||
if (stream.requested_resolution) {
|
||||
if (!requested_resolution) {
|
||||
requested_resolution.emplace(stream.requested_resolution->width,
|
||||
stream.requested_resolution->height);
|
||||
} else {
|
||||
requested_resolution.emplace(
|
||||
std::max(stream.requested_resolution->width,
|
||||
requested_resolution->width),
|
||||
std::max(stream.requested_resolution->height,
|
||||
requested_resolution->height));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (requested_resolution !=
|
||||
video_source_sink_controller_.requested_resolution() ||
|
||||
active != video_source_sink_controller_.active() ||
|
||||
max_framerate !=
|
||||
video_source_sink_controller_.frame_rate_upper_limit().value_or(-1)) {
|
||||
video_source_sink_controller_.SetRequestedResolution(requested_resolution);
|
||||
if (max_framerate > 0) {
|
||||
video_source_sink_controller_.SetFrameRateUpperLimit(max_framerate);
|
||||
}
|
||||
video_source_sink_controller_.SetActive(active);
|
||||
video_source_sink_controller_.PushSourceSinkSettings();
|
||||
}
|
||||
|
||||
encoder_queue_->PostTask([this, config = std::move(config),
|
||||
max_data_payload_length,
|
||||
callback = std::move(callback)]() mutable {
|
||||
@ -1238,6 +1199,32 @@ void VideoStreamEncoder::ReconfigureEncoder() {
|
||||
RTC_DCHECK_LE(codec.startBitrate, 1000000);
|
||||
max_framerate_ = codec.maxFramerate;
|
||||
|
||||
// Inform source about max configured framerate,
|
||||
// requested_resolution and which layers are active.
|
||||
int max_framerate = 0;
|
||||
// Is any layer active.
|
||||
bool active = false;
|
||||
// The max requested_resolution.
|
||||
absl::optional<rtc::VideoSinkWants::FrameSize> requested_resolution;
|
||||
for (const auto& stream : streams) {
|
||||
max_framerate = std::max(stream.max_framerate, max_framerate);
|
||||
active |= stream.active;
|
||||
// Note: we propagate the highest requested_resolution regardless
|
||||
// if layer is active or not.
|
||||
if (stream.requested_resolution) {
|
||||
if (!requested_resolution) {
|
||||
requested_resolution.emplace(stream.requested_resolution->width,
|
||||
stream.requested_resolution->height);
|
||||
} else {
|
||||
requested_resolution.emplace(
|
||||
std::max(stream.requested_resolution->width,
|
||||
requested_resolution->width),
|
||||
std::max(stream.requested_resolution->height,
|
||||
requested_resolution->height));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The resolutions that we're actually encoding with.
|
||||
std::vector<rtc::VideoSinkWants::FrameSize> encoder_resolutions;
|
||||
// TODO(hbos): For the case of SVC, also make use of `codec.spatialLayers`.
|
||||
@ -1251,15 +1238,25 @@ void VideoStreamEncoder::ReconfigureEncoder() {
|
||||
|
||||
worker_queue_->PostTask(SafeTask(
|
||||
task_safety_.flag(),
|
||||
[this, alignment,
|
||||
encoder_resolutions = std::move(encoder_resolutions)]() {
|
||||
[this, max_framerate, alignment,
|
||||
encoder_resolutions = std::move(encoder_resolutions),
|
||||
requested_resolution = std::move(requested_resolution), active]() {
|
||||
RTC_DCHECK_RUN_ON(worker_queue_);
|
||||
if (alignment != video_source_sink_controller_.resolution_alignment() ||
|
||||
if (max_framerate !=
|
||||
video_source_sink_controller_.frame_rate_upper_limit() ||
|
||||
alignment != video_source_sink_controller_.resolution_alignment() ||
|
||||
encoder_resolutions !=
|
||||
video_source_sink_controller_.resolutions()) {
|
||||
video_source_sink_controller_.resolutions() ||
|
||||
(video_source_sink_controller_.requested_resolution() !=
|
||||
requested_resolution) ||
|
||||
(video_source_sink_controller_.active() != active)) {
|
||||
video_source_sink_controller_.SetFrameRateUpperLimit(max_framerate);
|
||||
video_source_sink_controller_.SetResolutionAlignment(alignment);
|
||||
video_source_sink_controller_.SetResolutions(
|
||||
std::move(encoder_resolutions));
|
||||
video_source_sink_controller_.SetRequestedResolution(
|
||||
requested_resolution);
|
||||
video_source_sink_controller_.SetActive(active);
|
||||
video_source_sink_controller_.PushSourceSinkSettings();
|
||||
}
|
||||
}));
|
||||
|
||||
@ -11,7 +11,6 @@
|
||||
#include "video/video_stream_encoder.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <limits>
|
||||
#include <memory>
|
||||
#include <tuple>
|
||||
@ -33,10 +32,8 @@
|
||||
#include "api/video/builtin_video_bitrate_allocator_factory.h"
|
||||
#include "api/video/i420_buffer.h"
|
||||
#include "api/video/nv12_buffer.h"
|
||||
#include "api/video/resolution.h"
|
||||
#include "api/video/video_adaptation_reason.h"
|
||||
#include "api/video/video_bitrate_allocation.h"
|
||||
#include "api/video/video_source_interface.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "api/video_codecs/video_codec.h"
|
||||
#include "api/video_codecs/video_encoder.h"
|
||||
@ -316,10 +313,6 @@ auto FpsMaxResolutionMatches(Matcher<int> pixel_matcher) {
|
||||
return AllOf(FpsMax(), WantsMaxPixels(pixel_matcher));
|
||||
}
|
||||
|
||||
auto FpsUnlimitedResolutionMatches(Matcher<int> pixel_matcher) {
|
||||
return AllOf(FpsUnlimited(), WantsMaxPixels(pixel_matcher));
|
||||
}
|
||||
|
||||
auto FpsMaxResolutionMax() {
|
||||
return AllOf(FpsMax(), ResolutionMax());
|
||||
}
|
||||
@ -353,18 +346,10 @@ auto FpsMaxResolutionLt(const rtc::VideoSinkWants& other_wants) {
|
||||
return AllOf(FpsMax(), WantsMaxPixels(Lt(other_wants.max_pixel_count)));
|
||||
}
|
||||
|
||||
auto FpsUnlimitedResolutionLt(const rtc::VideoSinkWants& other_wants) {
|
||||
return AllOf(FpsUnlimited(), WantsMaxPixels(Lt(other_wants.max_pixel_count)));
|
||||
}
|
||||
|
||||
auto FpsMaxResolutionGt(const rtc::VideoSinkWants& other_wants) {
|
||||
return AllOf(FpsMax(), WantsMaxPixels(Gt(other_wants.max_pixel_count)));
|
||||
}
|
||||
|
||||
auto FpsUnlimitedResolutionGt(const rtc::VideoSinkWants& other_wants) {
|
||||
return AllOf(FpsUnlimited(), WantsMaxPixels(Gt(other_wants.max_pixel_count)));
|
||||
}
|
||||
|
||||
auto FpsLtResolutionEq(const rtc::VideoSinkWants& other_wants) {
|
||||
return AllOf(WantsFps(Lt(other_wants.max_framerate_fps)),
|
||||
WantsMaxPixels(Eq(other_wants.max_pixel_count)));
|
||||
@ -871,6 +856,7 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||
test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
|
||||
EXPECT_EQ(1u, video_encoder_config.simulcast_layers.size());
|
||||
video_encoder_config.simulcast_layers[0].num_temporal_layers = 1;
|
||||
video_encoder_config.simulcast_layers[0].max_framerate = max_framerate_;
|
||||
video_encoder_config_ = video_encoder_config.Copy();
|
||||
|
||||
ConfigureEncoder(std::move(video_encoder_config));
|
||||
@ -911,7 +897,6 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||
size_t num_temporal_layers,
|
||||
unsigned char num_spatial_layers,
|
||||
bool screenshare,
|
||||
absl::optional<int> max_frame_rate = kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType
|
||||
allocation_callback_type =
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
@ -924,9 +909,7 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||
num_streams, &video_encoder_config);
|
||||
for (auto& layer : video_encoder_config.simulcast_layers) {
|
||||
layer.num_temporal_layers = num_temporal_layers;
|
||||
if (max_frame_rate) {
|
||||
layer.max_framerate = *max_frame_rate;
|
||||
}
|
||||
layer.max_framerate = kDefaultFramerate;
|
||||
}
|
||||
video_encoder_config.max_bitrate_bps =
|
||||
num_streams == 1 ? kTargetBitrate.bps() : kSimulcastTargetBitrate.bps();
|
||||
@ -2484,61 +2467,6 @@ TEST_F(VideoStreamEncoderTest, SinkWantsRotationApplied) {
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest, SinkWantsDefaultUnlimitedBeforeFirstFrame) {
|
||||
ASSERT_TRUE(video_source_.has_sinks());
|
||||
EXPECT_THAT(video_source_.sink_wants(), UnlimitedSinkWants());
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest,
|
||||
FrameRateLimitPropagatedToSinkWantsBeforeFirstFrame) {
|
||||
ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
|
||||
// Set max wanted frame rate.
|
||||
video_encoder_config_.simulcast_layers[0].max_framerate = 15;
|
||||
video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
|
||||
kMaxPayloadLength);
|
||||
EXPECT_EQ(video_source_.sink_wants().max_framerate_fps, 15);
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest,
|
||||
ResolutionLimitPropagatedToSinkWantsBeforeFirstFrame) {
|
||||
ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
|
||||
video_encoder_config_.simulcast_layers[0].requested_resolution.emplace(
|
||||
Resolution({.width = 320, .height = 160}));
|
||||
|
||||
video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
|
||||
kMaxPayloadLength);
|
||||
EXPECT_EQ(video_source_.sink_wants().requested_resolution,
|
||||
rtc::VideoSinkWants::FrameSize(320, 160));
|
||||
|
||||
video_encoder_config_.simulcast_layers[0].requested_resolution->height = 320;
|
||||
video_encoder_config_.simulcast_layers[0].requested_resolution->width = 640;
|
||||
video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
|
||||
kMaxPayloadLength);
|
||||
EXPECT_EQ(video_source_.sink_wants().requested_resolution,
|
||||
rtc::VideoSinkWants::FrameSize(640, 320));
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest,
|
||||
EncodingActiveFlagPropagatedToSinkWantsBeforeFirstFrame) {
|
||||
ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
|
||||
video_encoder_config_.simulcast_layers[0].active = false;
|
||||
|
||||
video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
|
||||
kMaxPayloadLength);
|
||||
EXPECT_FALSE(video_source_.sink_wants().is_active);
|
||||
|
||||
video_encoder_config_.simulcast_layers[0].active = true;
|
||||
video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
|
||||
kMaxPayloadLength);
|
||||
EXPECT_TRUE(video_source_.sink_wants().is_active);
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
class ResolutionAlignmentTest
|
||||
: public VideoStreamEncoderTest,
|
||||
public ::testing::WithParamInterface<
|
||||
@ -2630,12 +2558,6 @@ TEST_F(VideoStreamEncoderTest, TestCpuDowngrades_BalancedMode) {
|
||||
const int kWidth = 1280;
|
||||
const int kHeight = 720;
|
||||
|
||||
ASSERT_EQ(video_encoder_config_.simulcast_layers.size(), 1u);
|
||||
video_encoder_config_.simulcast_layers[0].width = kWidth;
|
||||
video_encoder_config_.simulcast_layers[0].height = kHeight;
|
||||
video_encoder_config_.simulcast_layers[0].max_framerate = kFramerateFps;
|
||||
ConfigureEncoder(video_encoder_config_.Copy());
|
||||
|
||||
// We rely on the automatic resolution adaptation, but we handle framerate
|
||||
// adaptation manually by mocking the stats proxy.
|
||||
video_source_.set_adaptation_enabled(true);
|
||||
@ -2645,7 +2567,7 @@ TEST_F(VideoStreamEncoderTest, TestCpuDowngrades_BalancedMode) {
|
||||
kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
|
||||
video_stream_encoder_->SetSource(&video_source_,
|
||||
webrtc::DegradationPreference::BALANCED);
|
||||
EXPECT_THAT(video_source_.sink_wants(), WantsFps(Eq(kFramerateFps)));
|
||||
EXPECT_THAT(video_source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -2790,9 +2712,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
EXPECT_FALSE(video_source_.sink_wants().target_pixel_count);
|
||||
EXPECT_LT(video_source_.sink_wants().max_pixel_count,
|
||||
kFrameWidth * kFrameHeight);
|
||||
// max frame rate not set.
|
||||
EXPECT_EQ(video_source_.sink_wants().max_framerate_fps,
|
||||
rtc::VideoSinkWants().max_framerate_fps);
|
||||
EXPECT_EQ(video_source_.sink_wants().max_framerate_fps, kInputFps);
|
||||
|
||||
int pixel_count = video_source_.sink_wants().max_pixel_count;
|
||||
// Triggering a CPU underuse should not change the sink wants since it has
|
||||
@ -2803,9 +2723,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
sink_.WaitForEncodedFrame(ntp_time);
|
||||
ntp_time += kFrameIntervalMs;
|
||||
EXPECT_EQ(video_source_.sink_wants().max_pixel_count, pixel_count);
|
||||
// max frame rate not set.
|
||||
EXPECT_EQ(video_source_.sink_wants().max_framerate_fps,
|
||||
rtc::VideoSinkWants().max_framerate_fps);
|
||||
EXPECT_EQ(video_source_.sink_wants().max_framerate_fps, kInputFps);
|
||||
|
||||
// Change the degradation preference back. CPU underuse should not adapt since
|
||||
// QP is most limited.
|
||||
@ -2836,7 +2754,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
CreateFrame(ntp_time, kFrameWidth, kFrameHeight));
|
||||
sink_.WaitForEncodedFrame(ntp_time);
|
||||
ntp_time += kFrameIntervalMs;
|
||||
EXPECT_THAT(video_source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(video_source_.sink_wants(), FpsMax());
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
@ -2868,7 +2786,7 @@ TEST_F(VideoStreamEncoderTest, SinkWantsStoredByDegradationPreference) {
|
||||
EXPECT_FALSE(video_source_.sink_wants().target_pixel_count);
|
||||
EXPECT_LT(video_source_.sink_wants().max_pixel_count,
|
||||
kFrameWidth * kFrameHeight);
|
||||
EXPECT_THAT(video_source_.sink_wants(), FpsUnlimited());
|
||||
EXPECT_EQ(kDefaultFramerate, video_source_.sink_wants().max_framerate_fps);
|
||||
|
||||
// Set new source, switch to maintain-resolution.
|
||||
test::FrameForwarder new_video_source;
|
||||
@ -2881,7 +2799,7 @@ TEST_F(VideoStreamEncoderTest, SinkWantsStoredByDegradationPreference) {
|
||||
sink_.WaitForEncodedFrame(frame_timestamp);
|
||||
frame_timestamp += kFrameIntervalMs;
|
||||
// Initially no degradation registered.
|
||||
EXPECT_THAT(new_video_source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(new_video_source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Force an input frame rate to be available, or the adaptation call won't
|
||||
// know what framerate to adapt form.
|
||||
@ -2911,7 +2829,7 @@ TEST_F(VideoStreamEncoderTest, SinkWantsStoredByDegradationPreference) {
|
||||
CreateFrame(frame_timestamp, kFrameWidth, kFrameWidth));
|
||||
sink_.WaitForEncodedFrame(frame_timestamp);
|
||||
frame_timestamp += kFrameIntervalMs;
|
||||
EXPECT_THAT(new_video_source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(new_video_source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
video_stream_encoder_->TriggerCpuOveruse();
|
||||
new_video_source.IncomingCapturedFrame(
|
||||
@ -2920,7 +2838,7 @@ TEST_F(VideoStreamEncoderTest, SinkWantsStoredByDegradationPreference) {
|
||||
frame_timestamp += kFrameIntervalMs;
|
||||
|
||||
// Still no degradation.
|
||||
EXPECT_THAT(new_video_source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(new_video_source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Calling SetSource with resolution scaling enabled apply the old SinkWants.
|
||||
video_stream_encoder_->SetSourceAndWaitForRestrictionsUpdated(
|
||||
@ -2934,7 +2852,7 @@ TEST_F(VideoStreamEncoderTest, SinkWantsStoredByDegradationPreference) {
|
||||
EXPECT_LT(new_video_source.sink_wants().max_pixel_count,
|
||||
kFrameWidth * kFrameHeight);
|
||||
EXPECT_FALSE(new_video_source.sink_wants().target_pixel_count);
|
||||
EXPECT_THAT(new_video_source.sink_wants(), FpsUnlimited());
|
||||
EXPECT_EQ(kDefaultFramerate, new_video_source.sink_wants().max_framerate_fps);
|
||||
|
||||
// Calling SetSource with framerate scaling enabled apply the old SinkWants.
|
||||
video_stream_encoder_->SetSourceAndWaitForRestrictionsUpdated(
|
||||
@ -3469,14 +3387,14 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
WaitForEncodedFrame(1);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
// Trigger adapt down, expect scaled down resolution.
|
||||
video_stream_encoder_->TriggerCpuOveruse();
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
const int kLastMaxPixelCount = source.sink_wants().max_pixel_count;
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -3502,12 +3420,12 @@ TEST_F(VideoStreamEncoderTest, SkipsSameOrLargerAdaptDownRequest_BalancedMode) {
|
||||
webrtc::DegradationPreference::BALANCED);
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(1);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Trigger adapt down, expect scaled down resolution.
|
||||
video_stream_encoder_->TriggerQualityLow();
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
const int kLastMaxPixelCount = source.sink_wants().max_pixel_count;
|
||||
@ -3548,7 +3466,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
@ -3655,7 +3573,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
@ -3666,7 +3584,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_framerate);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
@ -3676,8 +3594,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionLt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionLt(source.last_wants()));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_framerate);
|
||||
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
@ -3793,13 +3710,13 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
// Trigger adapt up, expect no change.
|
||||
video_stream_encoder_->TriggerCpuUnderuse();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -3820,13 +3737,13 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
// Trigger adapt up, expect no change.
|
||||
video_stream_encoder_->TriggerCpuUnderuse();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -3846,14 +3763,14 @@ TEST_F(VideoStreamEncoderTest, NoChangeForInitialNormalUsage_BalancedMode) {
|
||||
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
// Trigger adapt up, expect no change.
|
||||
video_stream_encoder_->TriggerQualityHigh();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
@ -3874,14 +3791,14 @@ TEST_F(VideoStreamEncoderTest, NoChangeForInitialNormalUsage_DisabledMode) {
|
||||
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
// Trigger adapt up, expect no change.
|
||||
video_stream_encoder_->TriggerQualityHigh();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
@ -3904,7 +3821,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
WaitForEncodedFrame(1);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
@ -3913,13 +3830,13 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight));
|
||||
WaitForEncodedFrame(2);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
// Trigger adapt up, expect no restriction.
|
||||
video_stream_encoder_->TriggerQualityHigh();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -3942,14 +3859,14 @@ TEST_F(VideoStreamEncoderTest,
|
||||
// Expect no scaling to begin with (preference: MAINTAIN_FRAMERATE).
|
||||
video_source_.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(1);
|
||||
EXPECT_THAT(video_source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(video_source_.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Trigger adapt down, expect scaled down resolution.
|
||||
video_stream_encoder_->TriggerQualityLow();
|
||||
video_source_.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(2);
|
||||
EXPECT_THAT(video_source_.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
|
||||
// Enable MAINTAIN_RESOLUTION preference.
|
||||
test::FrameForwarder new_video_source;
|
||||
@ -3959,7 +3876,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
// by waiting for an encoded frame.
|
||||
new_video_source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(3);
|
||||
EXPECT_THAT(new_video_source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(new_video_source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Trigger adapt down, expect reduced framerate.
|
||||
video_stream_encoder_->TriggerQualityLow();
|
||||
@ -3970,7 +3887,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
// Trigger adapt up, expect no restriction.
|
||||
video_stream_encoder_->TriggerQualityHigh();
|
||||
EXPECT_THAT(new_video_source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(new_video_source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
@ -4028,7 +3945,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -4038,7 +3955,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -4047,7 +3964,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -4057,7 +3974,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(3, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -4066,7 +3983,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(4, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -4089,7 +4006,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
@ -4099,7 +4016,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
@ -4108,7 +4025,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
@ -4118,7 +4035,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(3, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
@ -4127,7 +4044,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
sink_.WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(4, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
@ -4171,8 +4088,7 @@ TEST_F(VideoStreamEncoderTest, AdaptUpIfBwEstimateIsHigherThanMinBitrate) {
|
||||
// Trigger adapt up. Higher resolution should not be requested duo to lack
|
||||
// of bitrate.
|
||||
video_stream_encoder_->TriggerQualityHigh();
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(1280 * 720)));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMatches(Lt(1280 * 720)));
|
||||
|
||||
// Increase bitrate.
|
||||
video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
|
||||
@ -4183,7 +4099,7 @@ TEST_F(VideoStreamEncoderTest, AdaptUpIfBwEstimateIsHigherThanMinBitrate) {
|
||||
|
||||
// Trigger adapt up. Higher resolution should be requested.
|
||||
video_stream_encoder_->TriggerQualityHigh();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
@ -4268,7 +4184,7 @@ TEST_F(BalancedDegradationTest, AdaptDownTwiceIfMinFpsDiffLtThreshold) {
|
||||
stats_proxy_->SetMockStats(stats);
|
||||
|
||||
InsertFrameAndWaitForEncoded();
|
||||
EXPECT_THAT(source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source_.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Trigger adapt down, expect scaled down framerate and resolution,
|
||||
// since Fps diff (input-requested:0) < threshold.
|
||||
@ -4293,7 +4209,7 @@ TEST_F(BalancedDegradationTest, AdaptDownOnceIfFpsDiffGeThreshold) {
|
||||
stats_proxy_->SetMockStats(stats);
|
||||
|
||||
InsertFrameAndWaitForEncoded();
|
||||
EXPECT_THAT(source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source_.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Trigger adapt down, expect scaled down framerate only (640x360@24fps).
|
||||
// Fps diff (input-requested:1) == threshold.
|
||||
@ -4313,7 +4229,7 @@ TEST_F(BalancedDegradationTest, AdaptDownUsesCodecSpecificFps) {
|
||||
EXPECT_EQ(kVideoCodecVP8, video_encoder_config_.codec_type);
|
||||
|
||||
InsertFrameAndWaitForEncoded();
|
||||
EXPECT_THAT(source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source_.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Trigger adapt down, expect scaled down framerate (640x360@22fps).
|
||||
video_stream_encoder_->TriggerQualityLow();
|
||||
@ -4334,7 +4250,7 @@ TEST_F(BalancedDegradationTest, NoAdaptUpIfBwEstimateIsLessThanMinBitrate) {
|
||||
OnBitrateUpdated(kTooLowMinBitrate);
|
||||
|
||||
InsertFrameAndWaitForEncoded();
|
||||
EXPECT_THAT(source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source_.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
// Trigger adapt down, expect scaled down framerate (640x360@14fps).
|
||||
@ -4416,7 +4332,7 @@ TEST_F(BalancedDegradationTest,
|
||||
OnBitrateUpdated(kTooLowMinResolutionBitrate);
|
||||
|
||||
InsertFrameAndWaitForEncoded();
|
||||
EXPECT_THAT(source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source_.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
// Trigger adapt down, expect scaled down framerate (640x360@14fps).
|
||||
@ -4473,7 +4389,7 @@ TEST_F(BalancedDegradationTest,
|
||||
OnBitrateUpdated(kTooLowMinBitrate);
|
||||
|
||||
InsertFrameAndWaitForEncoded();
|
||||
EXPECT_THAT(source_.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source_.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes);
|
||||
|
||||
// Trigger adapt down, expect scaled down framerate (640x360@14fps).
|
||||
@ -4538,7 +4454,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4550,7 +4466,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionMatches(Lt(kWidth * kHeight)));
|
||||
FpsMaxResolutionMatches(Lt(kWidth * kHeight)));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4561,8 +4477,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionLt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionLt(source.last_wants()));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4573,8 +4488,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionLt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionLt(source.last_wants()));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(3, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4585,8 +4499,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionLt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionLt(source.last_wants()));
|
||||
rtc::VideoSinkWants last_wants = source.sink_wants();
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
@ -4598,7 +4511,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(), FpsUnlimited());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMax());
|
||||
EXPECT_EQ(source.sink_wants().max_pixel_count, last_wants.max_pixel_count);
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
@ -4610,8 +4523,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionGt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionGt(source.last_wants()));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(3, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4624,8 +4536,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionGt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionGt(source.last_wants()));
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(4, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4638,8 +4549,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(timestamp_ms);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionGt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionGt(source.last_wants()));
|
||||
last_wants = source.sink_wants();
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
@ -4663,9 +4573,8 @@ TEST_F(VideoStreamEncoderTest,
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
source.IncomingCapturedFrame(CreateFrame(timestamp_ms, kWidth, kHeight));
|
||||
WaitForEncodedFrame(kWidth, kHeight);
|
||||
EXPECT_THAT(source.sink_wants(),
|
||||
FpsUnlimitedResolutionGt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionGt(source.last_wants()));
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
|
||||
EXPECT_EQ(6, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
@ -4727,7 +4636,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest, ReportsVideoBitrateAllocation) {
|
||||
ResetEncoder("FAKE", 1, 1, 1, /*screenshare*/ false, kDefaultFramerate,
|
||||
ResetEncoder("FAKE", 1, 1, 1, /*screenshare*/ false,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocation);
|
||||
|
||||
@ -4772,7 +4681,6 @@ TEST_F(VideoStreamEncoderTest, ReportsVideoBitrateAllocation) {
|
||||
|
||||
TEST_F(VideoStreamEncoderTest, ReportsVideoLayersAllocationForVP8Simulcast) {
|
||||
ResetEncoder("VP8", /*num_streams*/ 2, 1, 1, /*screenshare*/ false,
|
||||
kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoLayersAllocation);
|
||||
|
||||
@ -5208,7 +5116,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest, ReportsVideoLayersAllocationForH264) {
|
||||
ResetEncoder("H264", 1, 1, 1, false, kDefaultFramerate,
|
||||
ResetEncoder("H264", 1, 1, 1, false,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoLayersAllocation);
|
||||
video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
|
||||
@ -5236,7 +5144,6 @@ TEST_F(VideoStreamEncoderTest, ReportsVideoLayersAllocationForH264) {
|
||||
TEST_F(VideoStreamEncoderTest,
|
||||
ReportsUpdatedVideoLayersAllocationWhenBweChanges) {
|
||||
ResetEncoder("VP8", /*num_streams*/ 2, 1, 1, /*screenshare*/ false,
|
||||
kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoLayersAllocation);
|
||||
|
||||
@ -5275,7 +5182,6 @@ TEST_F(VideoStreamEncoderTest,
|
||||
TEST_F(VideoStreamEncoderTest,
|
||||
ReportsUpdatedVideoLayersAllocationWhenResolutionChanges) {
|
||||
ResetEncoder("VP8", /*num_streams*/ 2, 1, 1, /*screenshare*/ false,
|
||||
kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoLayersAllocation);
|
||||
|
||||
@ -5314,7 +5220,6 @@ TEST_F(VideoStreamEncoderTest, TemporalLayersNotDisabledIfSupported) {
|
||||
// 2 TLs configured, temporal layers supported by encoder.
|
||||
const int kNumTemporalLayers = 2;
|
||||
ResetEncoder("VP8", 1, kNumTemporalLayers, 1, /*screenshare*/ false,
|
||||
kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocation);
|
||||
fake_encoder_.SetTemporalLayersSupported(0, true);
|
||||
@ -5339,7 +5244,6 @@ TEST_F(VideoStreamEncoderTest, TemporalLayersNotDisabledIfSupported) {
|
||||
TEST_F(VideoStreamEncoderTest, TemporalLayersDisabledIfNotSupported) {
|
||||
// 2 TLs configured, temporal layers not supported by encoder.
|
||||
ResetEncoder("VP8", 1, /*num_temporal_layers*/ 2, 1, /*screenshare*/ false,
|
||||
kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocation);
|
||||
fake_encoder_.SetTemporalLayersSupported(0, false);
|
||||
@ -5363,7 +5267,6 @@ TEST_F(VideoStreamEncoderTest, VerifyBitrateAllocationForTwoStreams) {
|
||||
|
||||
// 2 TLs configured, temporal layers only supported for first stream.
|
||||
ResetEncoder("VP8", 2, /*num_temporal_layers*/ 2, 1, /*screenshare*/ false,
|
||||
kDefaultFramerate,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocation);
|
||||
fake_encoder_.SetTemporalLayersSupported(0, true);
|
||||
@ -6346,7 +6249,7 @@ TEST_F(VideoStreamEncoderTest, RampsUpInQualityWhenBwIsHigh) {
|
||||
// The ramp-up code involves the adaptation queue, give it time to execute.
|
||||
// TODO(hbos): Can we await an appropriate event instead?
|
||||
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
|
||||
// Frame should not be adapted.
|
||||
timestamp_ms += kFrameIntervalMs;
|
||||
@ -6423,7 +6326,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
source.IncomingCapturedFrame(CreateFrame(1, kTooSmallWidth, kTooSmallHeight));
|
||||
WaitForEncodedFrame(1);
|
||||
video_stream_encoder_->TriggerCpuOveruse();
|
||||
EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
|
||||
EXPECT_THAT(source.sink_wants(), FpsMaxResolutionMax());
|
||||
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution);
|
||||
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes);
|
||||
|
||||
@ -6659,11 +6562,6 @@ TEST_F(VideoStreamEncoderTest,
|
||||
const int kHeight = 720;
|
||||
const int64_t kFrameIntervalMs = 150;
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
ASSERT_EQ(video_encoder_config_.simulcast_layers.size(), 1u);
|
||||
video_encoder_config_.simulcast_layers[0].width = kWidth;
|
||||
video_encoder_config_.simulcast_layers[0].height = kHeight;
|
||||
video_encoder_config_.simulcast_layers[0].max_framerate = kDefaultFramerate;
|
||||
ConfigureEncoder(video_encoder_config_.Copy());
|
||||
video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
|
||||
kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
|
||||
|
||||
@ -6848,11 +6746,6 @@ TEST_F(VideoStreamEncoderTest, AdaptWithTwoReasonsAndDifferentOrder_Framerate) {
|
||||
const int kHeight = 720;
|
||||
const int64_t kFrameIntervalMs = 150;
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
ASSERT_EQ(video_encoder_config_.simulcast_layers.size(), 1u);
|
||||
video_encoder_config_.simulcast_layers[0].width = kWidth;
|
||||
video_encoder_config_.simulcast_layers[0].height = kHeight;
|
||||
video_encoder_config_.simulcast_layers[0].max_framerate = kDefaultFramerate;
|
||||
ConfigureEncoder(video_encoder_config_.Copy());
|
||||
video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
|
||||
kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
|
||||
|
||||
@ -6985,11 +6878,6 @@ TEST_F(VideoStreamEncoderTest,
|
||||
const int kHeight = 360;
|
||||
const int kFpsLimit = 15;
|
||||
const int64_t kFrameIntervalMs = 150;
|
||||
ASSERT_EQ(video_encoder_config_.simulcast_layers.size(), 1u);
|
||||
video_encoder_config_.simulcast_layers[0].width = kWidth;
|
||||
video_encoder_config_.simulcast_layers[0].height = kHeight;
|
||||
video_encoder_config_.simulcast_layers[0].max_framerate = kDefaultFramerate;
|
||||
ConfigureEncoder(video_encoder_config_.Copy());
|
||||
int64_t timestamp_ms = kFrameIntervalMs;
|
||||
video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
|
||||
kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
|
||||
@ -7094,7 +6982,6 @@ TEST_F(VideoStreamEncoderTest, AcceptsFullHdAdaptedDownSimulcastFrames) {
|
||||
// 2/3 of 1080.
|
||||
const int kAdaptedFrameHeight = 720;
|
||||
const int kFramerate = 24;
|
||||
uint64_t ntp_time_ms = 123;
|
||||
|
||||
video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
|
||||
kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
|
||||
@ -7112,14 +6999,13 @@ TEST_F(VideoStreamEncoderTest, AcceptsFullHdAdaptedDownSimulcastFrames) {
|
||||
video_source_.set_adaptation_enabled(true);
|
||||
|
||||
video_source_.IncomingCapturedFrame(
|
||||
CreateFrame(ntp_time_ms, kFrameWidth, kFrameHeight));
|
||||
CreateFrame(1, kFrameWidth, kFrameHeight));
|
||||
WaitForEncodedFrame(kFrameWidth, kFrameHeight);
|
||||
|
||||
// Trigger CPU overuse, downscale by 3/4.
|
||||
video_stream_encoder_->TriggerCpuOveruse();
|
||||
ntp_time_ms += 1000 / kFramerate;
|
||||
video_source_.IncomingCapturedFrame(
|
||||
CreateFrame(ntp_time_ms, kFrameWidth, kFrameHeight));
|
||||
CreateFrame(2, kFrameWidth, kFrameHeight));
|
||||
WaitForEncodedFrame(kAdaptedFrameWidth, kAdaptedFrameHeight);
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
@ -7180,7 +7066,7 @@ TEST_F(VideoStreamEncoderTest, PeriodicallyUpdatesChannelParameters) {
|
||||
TEST_F(VideoStreamEncoderTest, DoesNotUpdateBitrateAllocationWhenSuspended) {
|
||||
const int kFrameWidth = 1280;
|
||||
const int kFrameHeight = 720;
|
||||
ResetEncoder("FAKE", 1, 1, 1, false, kDefaultFramerate,
|
||||
ResetEncoder("FAKE", 1, 1, 1, false,
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocation);
|
||||
|
||||
@ -8053,10 +7939,8 @@ TEST_F(VideoStreamEncoderTest, AutomaticAnimationDetection) {
|
||||
const int kWidth = 1920;
|
||||
const int kHeight = 1080;
|
||||
const int kNumFrames = 2 * kFramerateFps; // >1 seconds of frames.
|
||||
ASSERT_EQ(video_encoder_config_.simulcast_layers.size(), 1u);
|
||||
// Works on screenshare mode.
|
||||
ResetEncoder("VP8", 1, 1, 1, /*screenshare*/ true,
|
||||
/*max_frame_rate=*/kFramerateFps);
|
||||
ResetEncoder("VP8", 1, 1, 1, /*screenshare*/ true);
|
||||
// We rely on the automatic resolution adaptation, but we handle framerate
|
||||
// adaptation manually by mocking the stats proxy.
|
||||
video_source_.set_adaptation_enabled(true);
|
||||
@ -8066,7 +7950,7 @@ TEST_F(VideoStreamEncoderTest, AutomaticAnimationDetection) {
|
||||
kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
|
||||
video_stream_encoder_->SetSource(&video_source_,
|
||||
webrtc::DegradationPreference::BALANCED);
|
||||
EXPECT_THAT(video_source_.sink_wants(), WantsFps(Eq(kFramerateFps)));
|
||||
EXPECT_THAT(video_source_.sink_wants(), UnlimitedSinkWants());
|
||||
|
||||
VideoFrame frame = CreateFrame(1, kWidth, kHeight);
|
||||
frame.set_update_rect(VideoFrame::UpdateRect{0, 0, kWidth, kHeight});
|
||||
@ -8390,8 +8274,6 @@ TEST_F(VideoStreamEncoderTest, QpAbsentParsingDisabled_QpAbsent) {
|
||||
TEST_F(VideoStreamEncoderTest,
|
||||
QualityScalingNotAllowed_QualityScalingDisabled) {
|
||||
VideoEncoderConfig video_encoder_config = video_encoder_config_.Copy();
|
||||
video_encoder_config.simulcast_layers[0].max_framerate =
|
||||
-1; // No max frame rate.
|
||||
|
||||
// Disable scaling settings in encoder info.
|
||||
fake_encoder_.SetQualityScaling(false);
|
||||
@ -8627,8 +8509,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
TEST_F(VideoStreamEncoderTest, NormalComplexityWithMoreThanTwoCores) {
|
||||
ResetEncoder("VP9", /*num_stream=*/1, /*num_temporal_layers=*/1,
|
||||
/*num_spatial_layers=*/1,
|
||||
/*screenshare=*/false,
|
||||
kDefaultFramerate, /*allocation_callback_type=*/
|
||||
/*screenshare=*/false, /*allocation_callback_type=*/
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocationWhenScreenSharing,
|
||||
/*num_cores=*/3);
|
||||
@ -8650,8 +8531,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
ResetEncoder("VP9", /*num_stream=*/1, /*num_temporal_layers=*/1,
|
||||
/*num_spatial_layers=*/1,
|
||||
/*screenshare=*/false,
|
||||
kDefaultFramerate, /*allocation_callback_type=*/
|
||||
/*screenshare=*/false, /*allocation_callback_type=*/
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocationWhenScreenSharing,
|
||||
/*num_cores=*/2);
|
||||
@ -8669,8 +8549,7 @@ TEST_F(VideoStreamEncoderTest,
|
||||
TEST_F(VideoStreamEncoderTest, LowComplexityWithTwoCores) {
|
||||
ResetEncoder("VP9", /*num_stream=*/1, /*num_temporal_layers=*/1,
|
||||
/*num_spatial_layers=*/1,
|
||||
/*screenshare=*/false,
|
||||
kDefaultFramerate, /*allocation_callback_type=*/
|
||||
/*screenshare=*/false, /*allocation_callback_type=*/
|
||||
VideoStreamEncoder::BitrateAllocationCallbackType::
|
||||
kVideoBitrateAllocationWhenScreenSharing,
|
||||
/*num_cores=*/2);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user