rd_test.cc (2815B)
1 /* 2 * Copyright (c) 2021, Alliance for Open Media. All rights reserved. 3 * 4 * This source code is subject to the terms of the BSD 2 Clause License and 5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License 6 * was not distributed with this source code in the LICENSE file, you can 7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open 8 * Media Patent License 1.0 was not distributed with this source code in the 9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent. 10 */ 11 12 #include <math.h> 13 #include <vector> 14 15 #include "av1/common/quant_common.h" 16 #include "av1/encoder/rd.h" 17 #include "aom/aom_codec.h" 18 #include "gtest/gtest.h" 19 20 namespace { 21 22 TEST(RdTest, GetDeltaqOffsetValueTest1) { 23 aom_bit_depth_t bit_depth = AOM_BITS_8; 24 double beta = 4; 25 int q_index = 29; 26 int dc_q_step = 27 av1_dc_quant_QTX(q_index, 0, static_cast<aom_bit_depth_t>(bit_depth)); 28 EXPECT_EQ(dc_q_step, 32); 29 30 int ref_new_dc_q_step = static_cast<int>(round(dc_q_step / sqrt(beta))); 31 EXPECT_EQ(ref_new_dc_q_step, 16); 32 33 int delta_q = av1_get_deltaq_offset(bit_depth, q_index, beta); 34 int new_dc_q_step = av1_dc_quant_QTX(q_index, delta_q, 35 static_cast<aom_bit_depth_t>(bit_depth)); 36 37 EXPECT_EQ(new_dc_q_step, ref_new_dc_q_step); 38 } 39 40 TEST(RdTest, GetDeltaqOffsetValueTest2) { 41 aom_bit_depth_t bit_depth = AOM_BITS_8; 42 double beta = 1.0 / 4.0; 43 int q_index = 29; 44 int dc_q_step = 45 av1_dc_quant_QTX(q_index, 0, static_cast<aom_bit_depth_t>(bit_depth)); 46 EXPECT_EQ(dc_q_step, 32); 47 48 int ref_new_dc_q_step = static_cast<int>(round(dc_q_step / sqrt(beta))); 49 EXPECT_EQ(ref_new_dc_q_step, 64); 50 51 int delta_q = av1_get_deltaq_offset(bit_depth, q_index, beta); 52 int new_dc_q_step = av1_dc_quant_QTX(q_index, delta_q, 53 static_cast<aom_bit_depth_t>(bit_depth)); 54 55 EXPECT_EQ(new_dc_q_step, ref_new_dc_q_step); 56 } 57 58 TEST(RdTest, GetDeltaqOffsetBoundaryTest1) { 59 aom_bit_depth_t bit_depth = AOM_BITS_8; 60 double beta = 0.000000001; 61 std::vector<int> q_index_ls = { 254, 255 }; 62 for (auto q_index : q_index_ls) { 63 int delta_q = av1_get_deltaq_offset(bit_depth, q_index, beta); 64 EXPECT_EQ(q_index + delta_q, 255); 65 } 66 } 67 68 TEST(RdTest, GetDeltaqOffsetBoundaryTest2) { 69 aom_bit_depth_t bit_depth = AOM_BITS_8; 70 double beta = 100; 71 std::vector<int> q_index_ls = { 1, 0 }; 72 for (auto q_index : q_index_ls) { 73 int delta_q = av1_get_deltaq_offset(bit_depth, q_index, beta); 74 EXPECT_EQ(q_index + delta_q, 0); 75 } 76 } 77 78 TEST(RdTest, GetDeltaqOffsetUnitaryTest1) { 79 aom_bit_depth_t bit_depth = AOM_BITS_8; 80 double beta = 1; 81 for (int q_index = 0; q_index < 255; ++q_index) { 82 int delta_q = av1_get_deltaq_offset(bit_depth, q_index, beta); 83 EXPECT_EQ(delta_q, 0); 84 } 85 } 86 87 } // namespace