aom/test/vp10_fwd_txfm2d_sse4_test.cc

77 строки
2.4 KiB
C++

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "./vp10_rtcd.h"
#include "test/acm_random.h"
#include "test/vp10_txfm_test.h"
#include "vp10/common/vp10_fwd_txfm2d_cfg.h"
using libvpx_test::ACMRandom;
using libvpx_test::Fwd_Txfm2d_Func;
using libvpx_test::input_base;
using libvpx_test::bd;
namespace {
#if CONFIG_VP9_HIGHBITDEPTH
TEST(vp10_fwd_txfm2d_sse4_1, accuracy) {
int16_t input[4096] = {0};
int32_t output_sse4_1[4096] = {0};
int32_t output_c[4096] = {0};
int txfm_num = 17;
TXFM_2D_CFG cfg_list[] = {
fwd_txfm_2d_cfg_dct_dct_4, fwd_txfm_2d_cfg_dct_dct_8,
fwd_txfm_2d_cfg_dct_dct_16, fwd_txfm_2d_cfg_dct_dct_32,
fwd_txfm_2d_cfg_dct_dct_64, fwd_txfm_2d_cfg_dct_adst_4,
fwd_txfm_2d_cfg_dct_adst_8, fwd_txfm_2d_cfg_dct_adst_16,
fwd_txfm_2d_cfg_dct_adst_32, fwd_txfm_2d_cfg_adst_dct_4,
fwd_txfm_2d_cfg_adst_dct_8, fwd_txfm_2d_cfg_adst_dct_16,
fwd_txfm_2d_cfg_adst_dct_32, fwd_txfm_2d_cfg_adst_adst_4,
fwd_txfm_2d_cfg_adst_adst_8, fwd_txfm_2d_cfg_adst_adst_16,
fwd_txfm_2d_cfg_adst_adst_32,
};
Fwd_Txfm2d_Func txfm2d_func_c_list[] = {
vp10_fwd_txfm2d_4x4_c, vp10_fwd_txfm2d_8x8_c, vp10_fwd_txfm2d_16x16_c,
vp10_fwd_txfm2d_32x32_c, vp10_fwd_txfm2d_64x64_c,
};
Fwd_Txfm2d_Func txfm2d_func_sse4_1_list[] = {
vp10_fwd_txfm2d_4x4_sse4_1, vp10_fwd_txfm2d_8x8_sse4_1,
vp10_fwd_txfm2d_16x16_sse4_1, vp10_fwd_txfm2d_32x32_sse4_1,
vp10_fwd_txfm2d_64x64_sse4_1,
};
for (int i = 0; i < txfm_num; i++) {
TXFM_2D_CFG cfg = cfg_list[i];
int txfm_size = cfg.txfm_size;
int func_idx = get_max_bit(txfm_size) - 2;
Fwd_Txfm2d_Func txfm2d_func_c = txfm2d_func_c_list[func_idx];
Fwd_Txfm2d_Func txfm2d_func_sse4_1 = txfm2d_func_sse4_1_list[func_idx];
int tx_type = libvpx_test::get_tx_type(&cfg);
ACMRandom rnd(ACMRandom::DeterministicSeed());
// init input
for (int r = 0; r < txfm_size; r++) {
for (int c = 0; c < txfm_size; c++) {
input[r * txfm_size + c] = rnd.Rand16() % input_base;
}
}
txfm2d_func_c(input, output_c, cfg.txfm_size, tx_type, bd);
txfm2d_func_sse4_1(input, output_sse4_1, cfg.txfm_size, tx_type, bd);
for (int r = 0; r < txfm_size; r++) {
for (int c = 0; c < txfm_size; c++) {
EXPECT_EQ(output_c[r * txfm_size + c],
output_sse4_1[r * txfm_size + c]);
}
}
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH
} // anonymous namespace