New api function CreateVideoStreamEncoder.
Bug: webrtc:8830
Change-Id: I01de86f601e48f76e6b41b4182ce006d397a190c
Reviewed-on: https://webrtc-review.googlesource.com/78260
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24079}
diff --git a/video/send_statistics_proxy.cc b/video/send_statistics_proxy.cc
index b446d19..dac3c03 100644
--- a/video/send_statistics_proxy.cc
+++ b/video/send_statistics_proxy.cc
@@ -653,14 +653,13 @@
streams.empty() ? 0 : (streams.back().width * streams.back().height);
}
-void SendStatisticsProxy::OnEncodedFrameTimeMeasured(
- int encode_time_ms,
- const CpuOveruseMetrics& metrics) {
+void SendStatisticsProxy::OnEncodedFrameTimeMeasured(int encode_time_ms,
+ int encode_usage_percent) {
rtc::CritScope lock(&crit_);
uma_container_->encode_time_counter_.Add(encode_time_ms);
encode_time_.Apply(1.0f, encode_time_ms);
stats_.avg_encode_time_ms = round(encode_time_.filtered());
- stats_.encode_usage_percent = metrics.encode_usage_percent;
+ stats_.encode_usage_percent = encode_usage_percent;
}
void SendStatisticsProxy::OnSuspendChange(bool is_suspended) {
@@ -960,6 +959,11 @@
}
}
+int SendStatisticsProxy::GetInputFrameRate() const {
+ rtc::CritScope lock(&crit_);
+ return round(uma_container_->input_frame_rate_tracker_.ComputeRate());
+}
+
int SendStatisticsProxy::GetSendFrameRate() const {
rtc::CritScope lock(&crit_);
return round(encoded_frame_rate_tracker_.ComputeRate());
@@ -982,62 +986,55 @@
}
}
-void SendStatisticsProxy::OnFrameDroppedBySource() {
+void SendStatisticsProxy::OnFrameDropped(DropReason reason) {
rtc::CritScope lock(&crit_);
- ++stats_.frames_dropped_by_capturer;
+ switch (reason) {
+ case DropReason::kSource:
+ ++stats_.frames_dropped_by_capturer;
+ break;
+ case DropReason::kEncoderQueue:
+ ++stats_.frames_dropped_by_encoder_queue;
+ break;
+ case DropReason::kEncoder:
+ ++stats_.frames_dropped_by_encoder;
+ break;
+ case DropReason::kMediaOptimization:
+ ++stats_.frames_dropped_by_rate_limiter;
+ break;
+ }
}
-void SendStatisticsProxy::OnFrameDroppedInEncoderQueue() {
+void SendStatisticsProxy::OnAdaptationChanged(
+ AdaptationReason reason,
+ const AdaptationSteps& cpu_counts,
+ const AdaptationSteps& quality_counts) {
rtc::CritScope lock(&crit_);
- ++stats_.frames_dropped_by_encoder_queue;
-}
-
-void SendStatisticsProxy::OnFrameDroppedByEncoder() {
- rtc::CritScope lock(&crit_);
- ++stats_.frames_dropped_by_encoder;
-}
-
-void SendStatisticsProxy::OnFrameDroppedByMediaOptimizations() {
- rtc::CritScope lock(&crit_);
- ++stats_.frames_dropped_by_rate_limiter;
-}
-
-void SendStatisticsProxy::SetAdaptationStats(
- const VideoStreamEncoder::AdaptCounts& cpu_counts,
- const VideoStreamEncoder::AdaptCounts& quality_counts) {
- rtc::CritScope lock(&crit_);
- SetAdaptTimer(cpu_counts, &uma_container_->cpu_adapt_timer_);
- SetAdaptTimer(quality_counts, &uma_container_->quality_adapt_timer_);
- UpdateAdaptationStats(cpu_counts, quality_counts);
-}
-
-void SendStatisticsProxy::OnCpuAdaptationChanged(
- const VideoStreamEncoder::AdaptCounts& cpu_counts,
- const VideoStreamEncoder::AdaptCounts& quality_counts) {
- rtc::CritScope lock(&crit_);
- ++stats_.number_of_cpu_adapt_changes;
- UpdateAdaptationStats(cpu_counts, quality_counts);
-}
-
-void SendStatisticsProxy::OnQualityAdaptationChanged(
- const VideoStreamEncoder::AdaptCounts& cpu_counts,
- const VideoStreamEncoder::AdaptCounts& quality_counts) {
- rtc::CritScope lock(&crit_);
- TryUpdateInitialQualityResolutionAdaptUp(quality_counts);
- ++stats_.number_of_quality_adapt_changes;
+ switch (reason) {
+ case AdaptationReason::kNone:
+ SetAdaptTimer(cpu_counts, &uma_container_->cpu_adapt_timer_);
+ SetAdaptTimer(quality_counts, &uma_container_->quality_adapt_timer_);
+ break;
+ case AdaptationReason::kCpu:
+ ++stats_.number_of_cpu_adapt_changes;
+ break;
+ case AdaptationReason::kQuality:
+ TryUpdateInitialQualityResolutionAdaptUp(quality_counts);
+ ++stats_.number_of_quality_adapt_changes;
+ break;
+ }
UpdateAdaptationStats(cpu_counts, quality_counts);
}
void SendStatisticsProxy::UpdateAdaptationStats(
- const VideoStreamEncoder::AdaptCounts& cpu_counts,
- const VideoStreamEncoder::AdaptCounts& quality_counts) {
- cpu_downscales_ = cpu_counts.resolution;
- quality_downscales_ = quality_counts.resolution;
+ const AdaptationSteps& cpu_counts,
+ const AdaptationSteps& quality_counts) {
+ cpu_downscales_ = cpu_counts.num_resolution_reductions.value_or(-1);
+ quality_downscales_ = quality_counts.num_resolution_reductions.value_or(-1);
- stats_.cpu_limited_resolution = cpu_counts.resolution > 0;
- stats_.cpu_limited_framerate = cpu_counts.fps > 0;
- stats_.bw_limited_resolution = quality_counts.resolution > 0;
- stats_.bw_limited_framerate = quality_counts.fps > 0;
+ stats_.cpu_limited_resolution = cpu_counts.num_resolution_reductions > 0;
+ stats_.cpu_limited_framerate = cpu_counts.num_framerate_reductions > 0;
+ stats_.bw_limited_resolution = quality_counts.num_resolution_reductions > 0;
+ stats_.bw_limited_framerate = quality_counts.num_framerate_reductions > 0;
}
// TODO(asapersson): Include fps changes.
@@ -1047,12 +1044,13 @@
}
void SendStatisticsProxy::TryUpdateInitialQualityResolutionAdaptUp(
- const VideoStreamEncoder::AdaptCounts& quality_counts) {
+ const AdaptationSteps& quality_counts) {
if (uma_container_->initial_quality_changes_.down == 0)
return;
if (quality_downscales_ > 0 &&
- quality_counts.resolution < quality_downscales_) {
+ quality_counts.num_resolution_reductions.value_or(-1) <
+ quality_downscales_) {
// Adapting up in quality.
if (uma_container_->initial_quality_changes_.down >
uma_container_->initial_quality_changes_.up) {
@@ -1061,10 +1059,9 @@
}
}
-void SendStatisticsProxy::SetAdaptTimer(
- const VideoStreamEncoder::AdaptCounts& counts,
- StatsTimer* timer) {
- if (counts.resolution >= 0 || counts.fps >= 0) {
+void SendStatisticsProxy::SetAdaptTimer(const AdaptationSteps& counts,
+ StatsTimer* timer) {
+ if (counts.num_resolution_reductions || counts.num_framerate_reductions) {
// Adaptation enabled.
if (!stats_.suspended)
timer->Start(clock_->TimeInMilliseconds());