Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: webrtc/modules/video_coding/media_optimization.cc

Issue 2119503002: Remove all old suspension logic. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 28 matching lines...) Expand all
39 user_frame_rate_(0), 39 user_frame_rate_(0),
40 frame_dropper_(new FrameDropper), 40 frame_dropper_(new FrameDropper),
41 fraction_lost_(0), 41 fraction_lost_(0),
42 send_statistics_zero_encode_(0), 42 send_statistics_zero_encode_(0),
43 max_payload_size_(1460), 43 max_payload_size_(1460),
44 video_target_bitrate_(0), 44 video_target_bitrate_(0),
45 incoming_frame_rate_(0), 45 incoming_frame_rate_(0),
46 encoded_frame_samples_(), 46 encoded_frame_samples_(),
47 avg_sent_bit_rate_bps_(0), 47 avg_sent_bit_rate_bps_(0),
48 avg_sent_framerate_(0), 48 avg_sent_framerate_(0),
49 num_layers_(0), 49 num_layers_(0) {
50 suspension_enabled_(false),
51 video_suspended_(false),
52 suspension_threshold_bps_(0),
53 suspension_window_bps_(0) {
54 memset(send_statistics_, 0, sizeof(send_statistics_)); 50 memset(send_statistics_, 0, sizeof(send_statistics_));
55 memset(incoming_frame_times_, -1, sizeof(incoming_frame_times_)); 51 memset(incoming_frame_times_, -1, sizeof(incoming_frame_times_));
56 } 52 }
57 53
58 MediaOptimization::~MediaOptimization(void) { 54 MediaOptimization::~MediaOptimization(void) {
59 } 55 }
60 56
61 void MediaOptimization::Reset() { 57 void MediaOptimization::Reset() {
62 CriticalSectionScoped lock(crit_sect_.get()); 58 CriticalSectionScoped lock(crit_sect_.get());
63 SetEncodingDataInternal(0, 0, 0, 0, 0, 0, max_payload_size_); 59 SetEncodingDataInternal(0, 0, 0, 0, 0, 0, max_payload_size_);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 // Cap target video bitrate to codec maximum. 125 // Cap target video bitrate to codec maximum.
130 if (max_bit_rate_ > 0 && video_target_bitrate_ > max_bit_rate_) { 126 if (max_bit_rate_ > 0 && video_target_bitrate_ > max_bit_rate_) {
131 video_target_bitrate_ = max_bit_rate_; 127 video_target_bitrate_ = max_bit_rate_;
132 } 128 }
133 129
134 // Update encoding rates following protection settings. 130 // Update encoding rates following protection settings.
135 float target_video_bitrate_kbps = 131 float target_video_bitrate_kbps =
136 static_cast<float>(video_target_bitrate_) / 1000.0f; 132 static_cast<float>(video_target_bitrate_) / 1000.0f;
137 frame_dropper_->SetRates(target_video_bitrate_kbps, incoming_frame_rate_); 133 frame_dropper_->SetRates(target_video_bitrate_kbps, incoming_frame_rate_);
138 134
139 CheckSuspendConditions();
140
141 return video_target_bitrate_; 135 return video_target_bitrate_;
142 } 136 }
143 137
144 uint32_t MediaOptimization::InputFrameRate() { 138 uint32_t MediaOptimization::InputFrameRate() {
145 CriticalSectionScoped lock(crit_sect_.get()); 139 CriticalSectionScoped lock(crit_sect_.get());
146 return InputFrameRateInternal(); 140 return InputFrameRateInternal();
147 } 141 }
148 142
149 uint32_t MediaOptimization::InputFrameRateInternal() { 143 uint32_t MediaOptimization::InputFrameRateInternal() {
150 ProcessIncomingFrameRate(clock_->TimeInMilliseconds()); 144 ProcessIncomingFrameRate(clock_->TimeInMilliseconds());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 } 190 }
197 191
198 return VCM_OK; 192 return VCM_OK;
199 } 193 }
200 194
201 void MediaOptimization::EnableFrameDropper(bool enable) { 195 void MediaOptimization::EnableFrameDropper(bool enable) {
202 CriticalSectionScoped lock(crit_sect_.get()); 196 CriticalSectionScoped lock(crit_sect_.get());
203 frame_dropper_->Enable(enable); 197 frame_dropper_->Enable(enable);
204 } 198 }
205 199
206 void MediaOptimization::SuspendBelowMinBitrate(int threshold_bps,
207 int window_bps) {
208 CriticalSectionScoped lock(crit_sect_.get());
209 assert(threshold_bps > 0 && window_bps >= 0);
210 suspension_threshold_bps_ = threshold_bps;
211 suspension_window_bps_ = window_bps;
212 suspension_enabled_ = true;
213 video_suspended_ = false;
214 }
215
216 bool MediaOptimization::IsVideoSuspended() const {
217 CriticalSectionScoped lock(crit_sect_.get());
218 return video_suspended_;
219 }
220
221 bool MediaOptimization::DropFrame() { 200 bool MediaOptimization::DropFrame() {
222 CriticalSectionScoped lock(crit_sect_.get()); 201 CriticalSectionScoped lock(crit_sect_.get());
223 UpdateIncomingFrameRate(); 202 UpdateIncomingFrameRate();
224 // Leak appropriate number of bytes. 203 // Leak appropriate number of bytes.
225 frame_dropper_->Leak((uint32_t)(InputFrameRateInternal() + 0.5f)); 204 frame_dropper_->Leak((uint32_t)(InputFrameRateInternal() + 0.5f));
226 if (video_suspended_) {
227 return true; // Drop all frames when muted.
228 }
229 return frame_dropper_->DropFrame(); 205 return frame_dropper_->DropFrame();
230 } 206 }
231 207
232 void MediaOptimization::UpdateIncomingFrameRate() { 208 void MediaOptimization::UpdateIncomingFrameRate() {
233 int64_t now = clock_->TimeInMilliseconds(); 209 int64_t now = clock_->TimeInMilliseconds();
234 if (incoming_frame_times_[0] == 0) { 210 if (incoming_frame_times_[0] == 0) {
235 // No shifting if this is the first time. 211 // No shifting if this is the first time.
236 } else { 212 } else {
237 // Shift all times one step. 213 // Shift all times one step.
238 for (int32_t i = (kFrameCountHistorySize - 2); i >= 0; i--) { 214 for (int32_t i = (kFrameCountHistorySize - 2); i >= 0; i--) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 } 280 }
305 if (num > 1) { 281 if (num > 1) {
306 const int64_t diff = 282 const int64_t diff =
307 incoming_frame_times_[0] - incoming_frame_times_[num - 1]; 283 incoming_frame_times_[0] - incoming_frame_times_[num - 1];
308 incoming_frame_rate_ = 0.0; // No frame rate estimate available. 284 incoming_frame_rate_ = 0.0; // No frame rate estimate available.
309 if (diff > 0) { 285 if (diff > 0) {
310 incoming_frame_rate_ = nr_of_frames * 1000.0f / static_cast<float>(diff); 286 incoming_frame_rate_ = nr_of_frames * 1000.0f / static_cast<float>(diff);
311 } 287 }
312 } 288 }
313 } 289 }
314
315 void MediaOptimization::CheckSuspendConditions() {
316 // Check conditions for SuspendBelowMinBitrate. |video_target_bitrate_| is in
317 // bps.
318 if (suspension_enabled_) {
319 if (!video_suspended_) {
320 // Check if we just went below the threshold.
321 if (video_target_bitrate_ < suspension_threshold_bps_) {
322 video_suspended_ = true;
323 }
324 } else {
325 // Video is already suspended. Check if we just went over the threshold
326 // with a margin.
327 if (video_target_bitrate_ >
328 suspension_threshold_bps_ + suspension_window_bps_) {
329 video_suspended_ = false;
330 }
331 }
332 }
333 }
334
335 } // namespace media_optimization 290 } // namespace media_optimization
336 } // namespace webrtc 291 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/media_optimization.h ('k') | webrtc/modules/video_coding/media_optimization_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698