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