From 1322dbc81a3c07cebec3fd9894db68dd812b2cf9 Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Mon, 23 Apr 2018 12:30:35 +0200 Subject: [PATCH] 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 Reviewed-by: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#22974} --- modules/video_coding/BUILD.gn | 1 + modules/video_coding/codecs/vp9/svc_config.cc | 2 +- .../codecs/vp9/svc_config_unittest.cc | 47 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 modules/video_coding/codecs/vp9/svc_config_unittest.cc diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index b8022e7294..3a37bcb553 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -745,6 +745,7 @@ if (rtc_include_tests) { "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 137b167e78..2935dd1571 100644 --- a/modules/video_coding/codecs/vp9/svc_config.cc +++ b/modules/video_coding/codecs/vp9/svc_config.cc @@ -56,7 +56,7 @@ std::vector GetSvcConfig(size_t input_width, spatial_layer.maxBitrate = static_cast((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 0000000000..ab47a6fdee --- /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 +#include +#include + +#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 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 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