| Index: webrtc/video/vie_encoder.h
|
| diff --git a/webrtc/video/vie_encoder.h b/webrtc/video/vie_encoder.h
|
| index c0b80baadd6e948c918b8f75fb704b5b77b4e2b4..d0325fe6d9de47255e4729fccaf1b5ce86989a4e 100644
|
| --- a/webrtc/video/vie_encoder.h
|
| +++ b/webrtc/video/vie_encoder.h
|
| @@ -11,6 +11,7 @@
|
| #ifndef WEBRTC_VIDEO_VIE_ENCODER_H_
|
| #define WEBRTC_VIDEO_VIE_ENCODER_H_
|
|
|
| +#include <map>
|
| #include <memory>
|
| #include <string>
|
| #include <vector>
|
| @@ -62,7 +63,9 @@ class ViEEncoder : public rtc::VideoSinkInterface<VideoFrame>,
|
| };
|
|
|
| // Downscale resolution at most 2 times for CPU reasons.
|
| - static const int kMaxCpuDowngrades = 2;
|
| + static const int kMaxCpuResolutionDowngrades = 2;
|
| + // Downscale framerate at most 4 times.
|
| + static const int kMaxCpuFramerateDowngrades = 4;
|
|
|
| ViEEncoder(uint32_t number_of_cores,
|
| SendStatisticsProxy* stats_proxy,
|
| @@ -174,6 +177,11 @@ class ViEEncoder : public rtc::VideoSinkInterface<VideoFrame>,
|
| void TraceFrameDropStart();
|
| void TraceFrameDropEnd();
|
|
|
| + const std::vector<int>& GetScaleCounters()
|
| + EXCLUSIVE_LOCKS_REQUIRED(&encoder_queue_);
|
| + void IncrementScaleCounter(int reason, int delta)
|
| + EXCLUSIVE_LOCKS_REQUIRED(&encoder_queue_);
|
| +
|
| rtc::Event shutdown_event_;
|
|
|
| const uint32_t number_of_cores_;
|
| @@ -216,8 +224,11 @@ class ViEEncoder : public rtc::VideoSinkInterface<VideoFrame>,
|
| uint64_t picture_id_rpsi_ ACCESS_ON(&encoder_queue_);
|
| Clock* const clock_;
|
| // Counters used for deciding if the video resolution is currently
|
| - // restricted, and if so, why.
|
| - std::vector<int> scale_counter_ ACCESS_ON(&encoder_queue_);
|
| + // restricted, and if so, why, on a per degradation preference basis.
|
| + // TODO(sprang): Replace this with a state holding a relative overuse measure
|
| + // instead, that can be translated into suitable down-scale or fps limit.
|
| + std::map<const VideoSendStream::DegradationPreference, std::vector<int>>
|
| + scale_counters_ ACCESS_ON(&encoder_queue_);
|
| // Set depending on degradation preferences
|
| VideoSendStream::DegradationPreference degradation_preference_
|
| ACCESS_ON(&encoder_queue_);
|
| @@ -225,6 +236,8 @@ class ViEEncoder : public rtc::VideoSinkInterface<VideoFrame>,
|
| struct AdaptationRequest {
|
| // The pixel count produced by the source at the time of the adaptation.
|
| int input_pixel_count_;
|
| + // Framerate received from the source at the time of the adaptation.
|
| + int framerate_fps_;
|
| // Indicates if request was to adapt up or down.
|
| enum class Mode { kAdaptUp, kAdaptDown } mode_;
|
| };
|
|
|