Fix calculation of target bitrate of VP9 spatial layer.
This fixes misprint in the code which calculates target bitrate of a
VP9 spatial layer where "-" was used instead of "+".
Bug: none
Change-Id: I17d76a84d00e453c055c068968d7b276e9c23f51
Reviewed-on: https://webrtc-review.googlesource.com/71663
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22974}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index b8022e7..3a37bcb 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -745,6 +745,7 @@
"codecs/vp8/default_temporal_layers_unittest.cc",
"codecs/vp8/screenshare_layers_unittest.cc",
"codecs/vp8/simulcast_unittest.cc",
+ "codecs/vp9/svc_config_unittest.cc",
"codecs/vp9/svc_rate_allocator_unittest.cc",
"decoding_state_unittest.cc",
"fec_controller_unittest.cc",
diff --git a/modules/video_coding/codecs/vp9/svc_config.cc b/modules/video_coding/codecs/vp9/svc_config.cc
index 137b167..2935dd1 100644
--- a/modules/video_coding/codecs/vp9/svc_config.cc
+++ b/modules/video_coding/codecs/vp9/svc_config.cc
@@ -56,7 +56,7 @@
spatial_layer.maxBitrate =
static_cast<int>((1.5 * num_pixels + 75 * 1000) / 1000);
spatial_layer.targetBitrate =
- (spatial_layer.maxBitrate - spatial_layer.minBitrate) / 2;
+ (spatial_layer.maxBitrate + spatial_layer.minBitrate) / 2;
spatial_layers.push_back(spatial_layer);
}
diff --git a/modules/video_coding/codecs/vp9/svc_config_unittest.cc b/modules/video_coding/codecs/vp9/svc_config_unittest.cc
new file mode 100644
index 0000000..ab47a6f
--- /dev/null
+++ b/modules/video_coding/codecs/vp9/svc_config_unittest.cc
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ * 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 <cstddef>
+#include <cstdint>
+#include <vector>
+
+#include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
+#include "modules/video_coding/codecs/vp9/svc_config.h"
+#include "test/gtest.h"
+
+namespace webrtc {
+TEST(SvcConfig, NumSpatialLayers) {
+ const size_t max_num_spatial_layers = 6;
+ const size_t num_spatial_layers = 2;
+
+ std::vector<SpatialLayer> spatial_layers =
+ GetSvcConfig(kMinVp9SpatialLayerWidth << (num_spatial_layers - 1),
+ kMinVp9SpatialLayerHeight << (num_spatial_layers - 1),
+ max_num_spatial_layers, 1);
+
+ EXPECT_EQ(spatial_layers.size(), num_spatial_layers);
+}
+
+TEST(SvcConfig, BitrateThresholds) {
+ const size_t num_spatial_layers = 3;
+ std::vector<SpatialLayer> spatial_layers =
+ GetSvcConfig(kMinVp9SpatialLayerWidth << (num_spatial_layers - 1),
+ kMinVp9SpatialLayerHeight << (num_spatial_layers - 1),
+ num_spatial_layers, 1);
+
+ EXPECT_EQ(spatial_layers.size(), num_spatial_layers);
+
+ for (const SpatialLayer& layer : spatial_layers) {
+ EXPECT_LE(layer.minBitrate, layer.maxBitrate);
+ EXPECT_LE(layer.minBitrate, layer.targetBitrate);
+ EXPECT_LE(layer.targetBitrate, layer.maxBitrate);
+ }
+}
+} // namespace webrtc