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

Unified Diff: webrtc/modules/video_coding/codecs/vp9/screenshare_layers.cc

Issue 1328113004: Work on flexible mode and screen sharing. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Undo renaming Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/video_coding/codecs/vp9/screenshare_layers.cc
diff --git a/webrtc/modules/video_coding/codecs/vp9/screenshare_layers.cc b/webrtc/modules/video_coding/codecs/vp9/screenshare_layers.cc
new file mode 100644
index 0000000000000000000000000000000000000000..747be9cb05e19aa3b8804f00349879d3a9f6174b
--- /dev/null
+++ b/webrtc/modules/video_coding/codecs/vp9/screenshare_layers.cc
@@ -0,0 +1,65 @@
+/* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
sprang_webrtc 2015/09/07 14:39:04 2015? :)
+*
+* Use of this source code is governed by a BSD-style license
+* that can be found in the LICENSE file in the root of the source
+* tree. An additional intellectual property rights grant can be found
+* in the file PATENTS. All contributing project authors may
+* be found in the AUTHORS file in the root of the source tree.
+*/
+
+#include <algorithm>
+#include "webrtc/modules/video_coding/codecs/vp9/screenshare_layers.h"
+#include "webrtc/base/checks.h"
+
+namespace webrtc {
+
+ScreenshareLayersVP9::ScreenshareLayersVP9()
+ : threshold_kbps_(0.f), sl0_bits_used_(0.f), current_sl_(0), last_ts_(0) {
+}
+
+bool ScreenshareLayersVP9::ConfigureBitrate(int threshold_kbps) {
+ threshold_kbps_ = threshold_kbps;
+ return true;
sprang_webrtc 2015/09/07 14:39:04 Why do we return a bool here?
philipel 2015/09/10 14:47:01 Because I copied the interface from the temporal l
+}
+
+void ScreenshareLayersVP9::FrameEncoded(unsigned int size_bytes) {
+ sl0_bits_used_ += current_sl_ == 0 ? size_bytes * 8 : 0;
sprang_webrtc 2015/09/07 14:39:04 Would prefer if (current_sl_ == 0) sl0_bits_used
philipel 2015/09/10 14:47:01 Done.
+}
+
+int8_t ScreenshareLayersVP9::CurrentLayer() {
sprang_webrtc 2015/09/07 14:39:04 const?
philipel 2015/09/10 14:47:01 Done.
+ return current_sl_;
+}
+
+// TODO(philipel): suppose to be used for different spatial layers,
sprang_webrtc 2015/09/07 14:39:04 Can we refer to a libvpx issue or some other refer
philipel 2015/09/10 14:47:01 Comment removed.
+// but for now is used for different temporal layers.
+std::array<int8_t, 4> ScreenshareLayersVP9::BufferArguments(
+ uint32_t timestamp) {
+ std::array<int8_t, 4> res;
sprang_webrtc 2015/09/07 14:39:04 Please comment how this res (result?) is to be int
philipel 2015/09/10 14:47:01 Changed to new data structure
+ if (last_ts_ == 0) {
+ res[0] = 0;
+ res[1] = 0;
+ } else {
+ float diff = timestamp - last_ts_;
+ // A check to make sure the used bits calculation doesn't overflow,
+ // which can happen if you debug and use a real time clock
+ // (diff becomes to big).
sprang_webrtc 2015/09/07 14:39:04 or too big?
philipel 2015/09/10 14:47:01 Removed check and comment.
+ DCHECK(sl0_bits_used_ >= (sl0_bits_used_ - diff / 90.f * threshold_kbps_));
+ sl0_bits_used_ =
+ std::max(0.f, sl0_bits_used_ - diff / 90.f * threshold_kbps_);
+
sprang_webrtc 2015/09/07 14:39:04 This means you are looking at the average bitrate
philipel 2015/09/10 14:47:01 No, this is not the bitrate over the entire lifeti
+ if (sl0_bits_used_ > threshold_kbps_ * 1000) {
+ res[0] = 1;
+ res[1] = current_sl_;
+ current_sl_ = 1;
+ } else {
+ res[0] = 0;
+ res[1] = 0;
+ current_sl_ = 0;
+ }
+ }
+ last_ts_ = timestamp;
+ res[2] = res[3] = -1;
+ return res;
+}
+
+} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698