1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "./vpx_config.h" 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "./vp8_rtcd.h" 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/clear_system_state.h" 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/register_state_check.h" 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "third_party/googletest/src/include/gtest/gtest.h" 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vpx_integer.h" 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan 19233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef void (*idct_fn_t)(int16_t *input, unsigned char *pred_ptr, 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan int pred_stride, unsigned char *dst_ptr, 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan int dst_stride); 22233d2500723e5594f3e7c70896ffeeef32b9c950ywannamespace { 23233d2500723e5594f3e7c70896ffeeef32b9c950ywanclass IDCTTest : public ::testing::TestWithParam<idct_fn_t> { 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan protected: 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual void SetUp() { 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan int i; 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan UUT = GetParam(); 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan memset(input, 0, sizeof(input)); 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* Set up guard blocks */ 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) output[i] = ((i & 0xF) < 4 && (i < 64)) ? 0 : -1; 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual void TearDown() { libvpx_test::ClearSystemState(); } 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan idct_fn_t UUT; 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan int16_t input[16]; 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char output[256]; 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char predict[256]; 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan 42233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(IDCTTest, TestGuardBlocks) { 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan int i; 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan if ((i & 0xF) < 4 && i < 64) 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(0, output[i]) << i; 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan else 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(255, output[i]); 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan 52233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(IDCTTest, TestAllZeros) { 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan int i; 54233d2500723e5594f3e7c70896ffeeef32b9c950ywan 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(UUT(input, output, 16, output, 16)); 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan if ((i & 0xF) < 4 && i < 64) 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(0, output[i]) << "i==" << i; 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan else 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(255, output[i]) << "i==" << i; 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan 64233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(IDCTTest, TestAllOnes) { 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan int i; 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan input[0] = 4; 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(UUT(input, output, 16, output, 16)); 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan if ((i & 0xF) < 4 && i < 64) 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(1, output[i]) << "i==" << i; 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan else 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(255, output[i]) << "i==" << i; 75233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan 77233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(IDCTTest, TestAddOne) { 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan int i; 79233d2500723e5594f3e7c70896ffeeef32b9c950ywan 80233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) predict[i] = i; 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan input[0] = 4; 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(UUT(input, predict, 16, output, 16)); 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan if ((i & 0xF) < 4 && i < 64) 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(i + 1, output[i]) << "i==" << i; 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan else 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(255, output[i]) << "i==" << i; 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan 91233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(IDCTTest, TestWithData) { 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan int i; 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 16; i++) input[i] = i; 95233d2500723e5594f3e7c70896ffeeef32b9c950ywan 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(UUT(input, output, 16, output, 16)); 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan 98233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (i = 0; i < 256; i++) 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan if ((i & 0xF) > 3 || i > 63) 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(255, output[i]) << "i==" << i; 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan else if (i == 0) 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(11, output[i]) << "i==" << i; 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan else if (i == 34) 104233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(1, output[i]) << "i==" << i; 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan else if (i == 2 || i == 17 || i == 32) 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(3, output[i]) << "i==" << i; 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan else 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(0, output[i]) << "i==" << i; 109233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan 111233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P(C, IDCTTest, ::testing::Values(vp8_short_idct4x4llm_c)); 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_MMX 113233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P(MMX, IDCTTest, 114233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(vp8_short_idct4x4llm_mmx)); 115233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 116233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 117