| /* |
| * Copyright (c) 2021, Alliance for Open Media. All rights reserved |
| * |
| * This source code is subject to the terms of the BSD 2 Clause License and |
| * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License |
| * was not distributed with this source code in the LICENSE file, you can |
| * obtain it at www.aomedia.org/license/software. If the Alliance for Open |
| * Media Patent License 1.0 was not distributed with this source code in the |
| * PATENTS file, you can obtain it at www.aomedia.org/license/patent. |
| */ |
| |
| #include "av1/encoder/firstpass.h" |
| #include "av1/encoder/ratectrl.h" |
| #include "av1/encoder/tpl_model.h" |
| #include "third_party/googletest/src/googletest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| TEST(RatectrlTest, QModeGetQIndexTest) { |
| int base_q_index = 36; |
| int gf_update_type = INTNL_ARF_UPDATE; |
| int gf_pyramid_level = 1; |
| int arf_q = 100; |
| int q_index = av1_q_mode_get_q_index(base_q_index, gf_update_type, |
| gf_pyramid_level, arf_q); |
| EXPECT_EQ(q_index, arf_q); |
| |
| gf_update_type = INTNL_ARF_UPDATE; |
| gf_pyramid_level = 3; |
| q_index = av1_q_mode_get_q_index(base_q_index, gf_update_type, |
| gf_pyramid_level, arf_q); |
| EXPECT_LT(q_index, arf_q); |
| |
| gf_update_type = LF_UPDATE; |
| q_index = av1_q_mode_get_q_index(base_q_index, gf_update_type, |
| gf_pyramid_level, arf_q); |
| EXPECT_EQ(q_index, base_q_index); |
| } |
| |
| #if !CONFIG_REALTIME_ONLY |
| // TODO(angiebird): Move this test to tpl_mode_test.cc |
| TEST(RatectrlTest, QModeComputeGOPQIndicesTest) { |
| const int base_q_index = 80; |
| const double arf_qstep_ratio = 0.5; |
| const aom_bit_depth_t bit_depth = AOM_BITS_8; |
| |
| const int gf_frame_index = 0; |
| GF_GROUP gf_group = {}; |
| gf_group.size = 5; |
| const int layer_depth[5] = { 1, 3, 2, 3, 1 }; |
| const int update_type[5] = { KF_UPDATE, INTNL_ARF_UPDATE, |
| INTNL_OVERLAY_UPDATE, INTNL_ARF_UPDATE, |
| ARF_UPDATE }; |
| |
| for (int i = 0; i < gf_group.size; i++) { |
| gf_group.layer_depth[i] = layer_depth[i]; |
| gf_group.update_type[i] = update_type[i]; |
| } |
| |
| const int arf_q = av1_get_q_index_from_qstep_ratio( |
| base_q_index, arf_qstep_ratio, bit_depth); |
| |
| av1_q_mode_compute_gop_q_indices(gf_frame_index, base_q_index, |
| arf_qstep_ratio, bit_depth, &gf_group, |
| gf_group.q_val); |
| |
| for (int i = 0; i < gf_group.size; i++) { |
| if (layer_depth[i] == 1) { |
| EXPECT_EQ(gf_group.q_val[i], arf_q); |
| } else { |
| EXPECT_GT(gf_group.q_val[i], arf_q); |
| } |
| } |
| } |
| #endif // !CONFIG_REALTIME_ONLY |
| |
| } // namespace |