MediaOptimization: Remove unneeded member variable: video_target_bitrate_
Remove unimplemented function declaration CheckSuspendConditions.
Make UpdateWithEncodedData void (always returning ok).
Rename user_frame_rate_ -> max_frame_rate_
Bug: none
Change-Id: I2eb5419a670e31d417f1bec8c163839c01f8c1fa
Reviewed-on: https://webrtc-review.googlesource.com/20500
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20612}
diff --git a/modules/video_coding/media_optimization.cc b/modules/video_coding/media_optimization.cc
index fce1be5..beb3680 100644
--- a/modules/video_coding/media_optimization.cc
+++ b/modules/video_coding/media_optimization.cc
@@ -17,13 +17,15 @@
namespace webrtc {
namespace media_optimization {
+namespace {
+const int64_t kFrameHistoryWinMs = 2000;
+} // namespace
MediaOptimization::MediaOptimization(Clock* clock)
: clock_(clock),
max_bit_rate_(0),
- user_frame_rate_(0),
+ max_frame_rate_(0),
frame_dropper_(new FrameDropper),
- video_target_bitrate_(0),
incoming_frame_rate_(0) {
memset(incoming_frame_times_, -1, sizeof(incoming_frame_times_));
}
@@ -38,52 +40,49 @@
incoming_frame_rate_ = 0.0;
frame_dropper_->Reset();
frame_dropper_->SetRates(0, 0);
- video_target_bitrate_ = 0;
- user_frame_rate_ = 0;
+ max_frame_rate_ = 0;
}
void MediaOptimization::SetEncodingData(int32_t max_bit_rate,
uint32_t target_bitrate,
- uint32_t frame_rate) {
+ uint32_t max_frame_rate) {
rtc::CritScope lock(&crit_sect_);
- SetEncodingDataInternal(max_bit_rate, frame_rate, target_bitrate);
+ SetEncodingDataInternal(max_bit_rate, max_frame_rate, target_bitrate);
}
void MediaOptimization::SetEncodingDataInternal(int32_t max_bit_rate,
- uint32_t frame_rate,
+ uint32_t max_frame_rate,
uint32_t target_bitrate) {
// Everything codec specific should be reset here since this means the codec
// has changed.
max_bit_rate_ = max_bit_rate;
- video_target_bitrate_ = target_bitrate;
+ max_frame_rate_ = static_cast<float>(max_frame_rate);
float target_bitrate_kbps = static_cast<float>(target_bitrate) / 1000.0f;
frame_dropper_->Reset();
- frame_dropper_->SetRates(target_bitrate_kbps, static_cast<float>(frame_rate));
- user_frame_rate_ = static_cast<float>(frame_rate);
+ frame_dropper_->SetRates(target_bitrate_kbps, max_frame_rate_);
}
uint32_t MediaOptimization::SetTargetRates(uint32_t target_bitrate) {
rtc::CritScope lock(&crit_sect_);
- video_target_bitrate_ = target_bitrate;
-
// Cap target video bitrate to codec maximum.
- if (max_bit_rate_ > 0 && video_target_bitrate_ > max_bit_rate_) {
- video_target_bitrate_ = max_bit_rate_;
+ int video_target_bitrate = target_bitrate;
+ if (max_bit_rate_ > 0 && video_target_bitrate > max_bit_rate_) {
+ video_target_bitrate = max_bit_rate_;
}
// Update encoding rates following protection settings.
float target_video_bitrate_kbps =
- static_cast<float>(video_target_bitrate_) / 1000.0f;
+ static_cast<float>(video_target_bitrate) / 1000.0f;
float framerate = incoming_frame_rate_;
if (framerate == 0.0) {
// No framerate estimate available, use configured max framerate instead.
- framerate = user_frame_rate_;
+ framerate = max_frame_rate_;
}
frame_dropper_->SetRates(target_video_bitrate_kbps, framerate);
- return video_target_bitrate_;
+ return video_target_bitrate;
}
uint32_t MediaOptimization::InputFrameRate() {
@@ -98,7 +97,7 @@
return framerate;
}
-int32_t MediaOptimization::UpdateWithEncodedData(
+void MediaOptimization::UpdateWithEncodedData(
const EncodedImage& encoded_image) {
size_t encoded_length = encoded_image._length;
rtc::CritScope lock(&crit_sect_);
@@ -106,7 +105,6 @@
const bool delta_frame = encoded_image._frameType != kVideoFrameKey;
frame_dropper_->Fill(encoded_length, delta_frame);
}
- return VCM_OK;
}
void MediaOptimization::EnableFrameDropper(bool enable) {
diff --git a/modules/video_coding/media_optimization.h b/modules/video_coding/media_optimization.h
index c72c0a5..5d5859a 100644
--- a/modules/video_coding/media_optimization.h
+++ b/modules/video_coding/media_optimization.h
@@ -11,7 +11,6 @@
#ifndef MODULES_VIDEO_CODING_MEDIA_OPTIMIZATION_H_
#define MODULES_VIDEO_CODING_MEDIA_OPTIMIZATION_H_
-#include <list>
#include <memory>
#include "modules/include/module_common_types.h"
@@ -23,7 +22,6 @@
class Clock;
class FrameDropper;
-class VCMContentMetricsProcessing;
namespace media_optimization {
@@ -38,10 +36,10 @@
// Informs media optimization of initial encoding state.
// TODO(perkj): Deprecate SetEncodingData once its not used for stats in
- // VieEncoder.
+ // VideoStreamEncoder.
void SetEncodingData(int32_t max_bit_rate,
uint32_t bit_rate,
- uint32_t frame_rate);
+ uint32_t max_frame_rate);
// Sets target rates for the encoder given the channel parameters.
// Input: |target bitrate| - the encoder target bitrate in bits/s.
@@ -52,27 +50,21 @@
// Informs Media Optimization of encoded output.
// TODO(perkj): Deprecate SetEncodingData once its not used for stats in
- // VieEncoder.
- int32_t UpdateWithEncodedData(const EncodedImage& encoded_image);
+ // VideoStreamEncoder.
+ void UpdateWithEncodedData(const EncodedImage& encoded_image);
// InputFrameRate 0 = no frame rate estimate available.
uint32_t InputFrameRate();
private:
enum { kFrameCountHistorySize = 90 };
- enum { kFrameHistoryWinMs = 2000 };
void UpdateIncomingFrameRate() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
void ProcessIncomingFrameRate(int64_t now)
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
- // Checks conditions for suspending the video. The method compares
- // |video_target_bitrate_| with the threshold values for suspension, and
- // changes the state of |video_suspended_| accordingly.
- void CheckSuspendConditions() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
-
void SetEncodingDataInternal(int32_t max_bit_rate,
- uint32_t frame_rate,
+ uint32_t max_frame_rate,
uint32_t bit_rate)
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
@@ -81,11 +73,10 @@
// Protect all members.
rtc::CriticalSection crit_sect_;
- Clock* clock_ RTC_GUARDED_BY(crit_sect_);
+ Clock* const clock_ RTC_GUARDED_BY(crit_sect_);
int32_t max_bit_rate_ RTC_GUARDED_BY(crit_sect_);
- float user_frame_rate_ RTC_GUARDED_BY(crit_sect_);
+ float max_frame_rate_ RTC_GUARDED_BY(crit_sect_);
std::unique_ptr<FrameDropper> frame_dropper_ RTC_GUARDED_BY(crit_sect_);
- int video_target_bitrate_ RTC_GUARDED_BY(crit_sect_);
float incoming_frame_rate_ RTC_GUARDED_BY(crit_sect_);
int64_t incoming_frame_times_[kFrameCountHistorySize] RTC_GUARDED_BY(
crit_sect_);
diff --git a/modules/video_coding/utility/frame_dropper.cc b/modules/video_coding/utility/frame_dropper.cc
index 29f2774..918f5da 100644
--- a/modules/video_coding/utility/frame_dropper.cc
+++ b/modules/video_coding/utility/frame_dropper.cc
@@ -12,8 +12,6 @@
#include <algorithm>
-#include "rtc_base/logging.h"
-
namespace webrtc {
namespace {
@@ -52,15 +50,6 @@
Reset();
}
-FrameDropper::FrameDropper(float max_drop_duration_secs)
- : key_frame_ratio_(kDefaultKeyFrameRatioAlpha),
- delta_frame_size_avg_kbits_(kDefaultFrameSizeAlpha),
- drop_ratio_(kDefaultDropRatioAlpha, kDefaultDropRatioValue),
- enabled_(true),
- max_drop_duration_secs_(max_drop_duration_secs) {
- Reset();
-}
-
void FrameDropper::Reset() {
key_frame_ratio_.Reset(kDefaultKeyFrameRatioAlpha);
key_frame_ratio_.Apply(1.0f, kDefaultKeyFrameRatioValue);
@@ -94,8 +83,8 @@
if (!delta_frame) {
key_frame_ratio_.Apply(1.0, 1.0);
// Do not spread if we are already doing it (or we risk dropping bits that
- // need accumulation). Given we compute the key
- // frame ratio and spread based on that, this should not normally happen.
+ // need accumulation). Given we compute the key frame ratio and spread
+ // based on that, this should not normally happen.
if (large_frame_accumulation_count_ == 0) {
if (key_frame_ratio_.filtered() > 1e-5 &&
1 / key_frame_ratio_.filtered() < large_frame_accumulation_spread_) {
@@ -158,16 +147,15 @@
void FrameDropper::UpdateRatio() {
if (accumulator_ > 1.3f * accumulator_max_) {
- // Too far above accumulator max, react faster
+ // Too far above accumulator max, react faster.
drop_ratio_.UpdateBase(0.8f);
} else {
- // Go back to normal reaction
+ // Go back to normal reaction.
drop_ratio_.UpdateBase(0.9f);
}
if (accumulator_ > accumulator_max_) {
- // We are above accumulator max, and should ideally
- // drop a frame. Increase the dropRatio and drop
- // the frame later.
+ // We are above accumulator max, and should ideally drop a frame. Increase
+ // the drop_ratio_ and drop the frame later.
if (was_below_max_) {
drop_next_ = true;
}
@@ -180,8 +168,7 @@
}
// This function signals when to drop frames to the caller. It makes use of the
-// dropRatio
-// to smooth out the drops over time.
+// drop_ratio_ to smooth out the drops over time.
bool FrameDropper::DropFrame() {
if (!enabled_) {
return false;
@@ -192,7 +179,7 @@
}
if (drop_ratio_.filtered() >= 0.5f) { // Drops per keep
- // limit is the number of frames we should drop between each kept frame
+ // Limit is the number of frames we should drop between each kept frame
// to keep our drop ratio. limit is positive in this case.
float denom = 1.0f - drop_ratio_.filtered();
if (denom < 1e-5) {
@@ -221,7 +208,7 @@
}
} else if (drop_ratio_.filtered() > 0.0f &&
drop_ratio_.filtered() < 0.5f) { // Keeps per drop
- // limit is the number of frames we should keep between each drop
+ // Limit is the number of frames we should keep between each drop
// in order to keep the drop ratio. limit is negative in this case,
// and the drop_count_ is also negative.
float denom = drop_ratio_.filtered();
diff --git a/modules/video_coding/utility/frame_dropper.h b/modules/video_coding/utility/frame_dropper.h
index 2c96259..224f31b 100644
--- a/modules/video_coding/utility/frame_dropper.h
+++ b/modules/video_coding/utility/frame_dropper.h
@@ -24,41 +24,36 @@
class FrameDropper {
public:
FrameDropper();
- explicit FrameDropper(float max_time_drops);
virtual ~FrameDropper() {}
// Resets the FrameDropper to its initial state.
- // This means that the frameRateWeight is set to its
- // default value as well.
virtual void Reset();
virtual void Enable(bool enable);
- // Answers the question if it's time to drop a frame
- // if we want to reach a given frame rate. Must be
- // called for every frame.
+
+ // Answers the question if it's time to drop a frame if we want to reach a
+ // given frame rate. Must be called for every frame.
//
- // Return value : True if we should drop the current frame
+ // Return value : True if we should drop the current frame.
virtual bool DropFrame();
- // Updates the FrameDropper with the size of the latest encoded
- // frame. The FrameDropper calculates a new drop ratio (can be
- // seen as the probability to drop a frame) and updates its
- // internal statistics.
+
+ // Updates the FrameDropper with the size of the latest encoded frame.
+ // The FrameDropper calculates a new drop ratio (can be seen as the
+ // probability to drop a frame) and updates its internal statistics.
//
// Input:
- // - frameSizeBytes : The size of the latest frame
- // returned from the encoder.
- // - deltaFrame : True if the encoder returned
- // a key frame.
- virtual void Fill(size_t frameSizeBytes, bool deltaFrame);
+ // - framesize_bytes : The size of the latest frame returned
+ // from the encoder.
+ // - delta_frame : True if the encoder returned a key frame.
+ virtual void Fill(size_t framesize_bytes, bool delta_frame);
- virtual void Leak(uint32_t inputFrameRate);
+ virtual void Leak(uint32_t input_framerate);
- // Sets the target bit rate and the frame rate produced by
- // the camera.
+ // Sets the target bit rate and the frame rate produced by the camera.
//
// Input:
- // - bitRate : The target bit rate
- virtual void SetRates(float bitRate, float incoming_frame_rate);
+ // - bitrate : The target bit rate.
+ virtual void SetRates(float bitrate, float incoming_frame_rate);
private:
void UpdateRatio();