Merge changes I8e9692fc,Ifc06110c
* changes: vpx_fdctNxN_1_c: remove unnecessary store vpx_fdct32x32_1_c: fix accumulator overflow
This commit is contained in:
commit
a0359b8c90
@ -305,6 +305,45 @@ TEST_P(Trans32x32Test, InverseAccuracy) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PartialTrans32x32Test
|
||||||
|
: public ::testing::TestWithParam<
|
||||||
|
std::tr1::tuple<FwdTxfmFunc, vpx_bit_depth_t> > {
|
||||||
|
public:
|
||||||
|
virtual ~PartialTrans32x32Test() {}
|
||||||
|
virtual void SetUp() {
|
||||||
|
fwd_txfm_ = GET_PARAM(0);
|
||||||
|
bit_depth_ = GET_PARAM(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void TearDown() { libvpx_test::ClearSystemState(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
vpx_bit_depth_t bit_depth_;
|
||||||
|
FwdTxfmFunc fwd_txfm_;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_P(PartialTrans32x32Test, Extremes) {
|
||||||
|
#if CONFIG_VP9_HIGHBITDEPTH
|
||||||
|
const int16_t maxval =
|
||||||
|
static_cast<int16_t>(clip_pixel_highbd(1 << 30, bit_depth_));
|
||||||
|
#else
|
||||||
|
const int16_t maxval = 255;
|
||||||
|
#endif
|
||||||
|
const int minval = -maxval;
|
||||||
|
DECLARE_ALIGNED(16, int16_t, input[kNumCoeffs]);
|
||||||
|
DECLARE_ALIGNED(16, tran_low_t, output[kNumCoeffs]);
|
||||||
|
|
||||||
|
for (int i = 0; i < kNumCoeffs; ++i) input[i] = maxval;
|
||||||
|
output[0] = 0;
|
||||||
|
ASM_REGISTER_STATE_CHECK(fwd_txfm_(input, output, 32));
|
||||||
|
EXPECT_EQ((maxval * kNumCoeffs) >> 3, output[0]);
|
||||||
|
|
||||||
|
for (int i = 0; i < kNumCoeffs; ++i) input[i] = minval;
|
||||||
|
output[0] = 0;
|
||||||
|
ASM_REGISTER_STATE_CHECK(fwd_txfm_(input, output, 32));
|
||||||
|
EXPECT_EQ((minval * kNumCoeffs) >> 3, output[0]);
|
||||||
|
}
|
||||||
|
|
||||||
using std::tr1::make_tuple;
|
using std::tr1::make_tuple;
|
||||||
|
|
||||||
#if CONFIG_VP9_HIGHBITDEPTH
|
#if CONFIG_VP9_HIGHBITDEPTH
|
||||||
@ -323,6 +362,11 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
&vpx_idct32x32_1024_add_c, 0, VPX_BITS_8),
|
&vpx_idct32x32_1024_add_c, 0, VPX_BITS_8),
|
||||||
make_tuple(&vpx_fdct32x32_rd_c,
|
make_tuple(&vpx_fdct32x32_rd_c,
|
||||||
&vpx_idct32x32_1024_add_c, 1, VPX_BITS_8)));
|
&vpx_idct32x32_1024_add_c, 1, VPX_BITS_8)));
|
||||||
|
INSTANTIATE_TEST_CASE_P(
|
||||||
|
C, PartialTrans32x32Test,
|
||||||
|
::testing::Values(make_tuple(vpx_highbd_fdct32x32_1_c, VPX_BITS_8),
|
||||||
|
make_tuple(vpx_highbd_fdct32x32_1_c, VPX_BITS_10),
|
||||||
|
make_tuple(vpx_highbd_fdct32x32_1_c, VPX_BITS_12)));
|
||||||
#else
|
#else
|
||||||
INSTANTIATE_TEST_CASE_P(
|
INSTANTIATE_TEST_CASE_P(
|
||||||
C, Trans32x32Test,
|
C, Trans32x32Test,
|
||||||
@ -331,6 +375,9 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
&vpx_idct32x32_1024_add_c, 0, VPX_BITS_8),
|
&vpx_idct32x32_1024_add_c, 0, VPX_BITS_8),
|
||||||
make_tuple(&vpx_fdct32x32_rd_c,
|
make_tuple(&vpx_fdct32x32_rd_c,
|
||||||
&vpx_idct32x32_1024_add_c, 1, VPX_BITS_8)));
|
&vpx_idct32x32_1024_add_c, 1, VPX_BITS_8)));
|
||||||
|
INSTANTIATE_TEST_CASE_P(C, PartialTrans32x32Test,
|
||||||
|
::testing::Values(make_tuple(vpx_fdct32x32_1_c,
|
||||||
|
VPX_BITS_8)));
|
||||||
#endif // CONFIG_VP9_HIGHBITDEPTH
|
#endif // CONFIG_VP9_HIGHBITDEPTH
|
||||||
|
|
||||||
#if HAVE_NEON_ASM && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
#if HAVE_NEON_ASM && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
||||||
@ -351,6 +398,9 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
&vpx_idct32x32_1024_add_sse2, 0, VPX_BITS_8),
|
&vpx_idct32x32_1024_add_sse2, 0, VPX_BITS_8),
|
||||||
make_tuple(&vpx_fdct32x32_rd_sse2,
|
make_tuple(&vpx_fdct32x32_rd_sse2,
|
||||||
&vpx_idct32x32_1024_add_sse2, 1, VPX_BITS_8)));
|
&vpx_idct32x32_1024_add_sse2, 1, VPX_BITS_8)));
|
||||||
|
INSTANTIATE_TEST_CASE_P(SSE2, PartialTrans32x32Test,
|
||||||
|
::testing::Values(make_tuple(vpx_fdct32x32_1_sse2,
|
||||||
|
VPX_BITS_8)));
|
||||||
#endif // HAVE_SSE2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
#endif // HAVE_SSE2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
||||||
|
|
||||||
#if HAVE_SSE2 && CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
#if HAVE_SSE2 && CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
||||||
@ -367,6 +417,9 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
VPX_BITS_8),
|
VPX_BITS_8),
|
||||||
make_tuple(&vpx_fdct32x32_rd_sse2, &vpx_idct32x32_1024_add_c, 1,
|
make_tuple(&vpx_fdct32x32_rd_sse2, &vpx_idct32x32_1024_add_c, 1,
|
||||||
VPX_BITS_8)));
|
VPX_BITS_8)));
|
||||||
|
INSTANTIATE_TEST_CASE_P(SSE2, PartialTrans32x32Test,
|
||||||
|
::testing::Values(make_tuple(vpx_fdct32x32_1_sse2,
|
||||||
|
VPX_BITS_8)));
|
||||||
#endif // HAVE_SSE2 && CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
#endif // HAVE_SSE2 && CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
||||||
|
|
||||||
#if HAVE_AVX2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
#if HAVE_AVX2 && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
||||||
@ -387,5 +440,8 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
&vpx_idct32x32_1024_add_msa, 0, VPX_BITS_8),
|
&vpx_idct32x32_1024_add_msa, 0, VPX_BITS_8),
|
||||||
make_tuple(&vpx_fdct32x32_rd_msa,
|
make_tuple(&vpx_fdct32x32_rd_msa,
|
||||||
&vpx_idct32x32_1024_add_msa, 1, VPX_BITS_8)));
|
&vpx_idct32x32_1024_add_msa, 1, VPX_BITS_8)));
|
||||||
|
INSTANTIATE_TEST_CASE_P(MSA, PartialTrans32x32Test,
|
||||||
|
::testing::Values(make_tuple(vpx_fdct32x32_1_msa,
|
||||||
|
VPX_BITS_8)));
|
||||||
#endif // HAVE_MSA && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
#endif // HAVE_MSA && !CONFIG_VP9_HIGHBITDEPTH && !CONFIG_EMULATE_HARDWARE
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -85,7 +85,6 @@ void vpx_fdct4x4_1_c(const int16_t *input, tran_low_t *output, int stride) {
|
|||||||
sum += input[r * stride + c];
|
sum += input[r * stride + c];
|
||||||
|
|
||||||
output[0] = sum << 1;
|
output[0] = sum << 1;
|
||||||
output[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vpx_fdct8x8_c(const int16_t *input, tran_low_t *final_output, int stride) {
|
void vpx_fdct8x8_c(const int16_t *input, tran_low_t *final_output, int stride) {
|
||||||
@ -182,7 +181,6 @@ void vpx_fdct8x8_1_c(const int16_t *input, tran_low_t *output, int stride) {
|
|||||||
sum += input[r * stride + c];
|
sum += input[r * stride + c];
|
||||||
|
|
||||||
output[0] = sum;
|
output[0] = sum;
|
||||||
output[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vpx_fdct16x16_c(const int16_t *input, tran_low_t *output, int stride) {
|
void vpx_fdct16x16_c(const int16_t *input, tran_low_t *output, int stride) {
|
||||||
@ -373,7 +371,6 @@ void vpx_fdct16x16_1_c(const int16_t *input, tran_low_t *output, int stride) {
|
|||||||
sum += input[r * stride + c];
|
sum += input[r * stride + c];
|
||||||
|
|
||||||
output[0] = sum >> 1;
|
output[0] = sum >> 1;
|
||||||
output[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE tran_high_t dct_32_round(tran_high_t input) {
|
static INLINE tran_high_t dct_32_round(tran_high_t input) {
|
||||||
@ -771,13 +768,12 @@ void vpx_fdct32x32_rd_c(const int16_t *input, tran_low_t *out, int stride) {
|
|||||||
|
|
||||||
void vpx_fdct32x32_1_c(const int16_t *input, tran_low_t *output, int stride) {
|
void vpx_fdct32x32_1_c(const int16_t *input, tran_low_t *output, int stride) {
|
||||||
int r, c;
|
int r, c;
|
||||||
tran_low_t sum = 0;
|
int sum = 0;
|
||||||
for (r = 0; r < 32; ++r)
|
for (r = 0; r < 32; ++r)
|
||||||
for (c = 0; c < 32; ++c)
|
for (c = 0; c < 32; ++c)
|
||||||
sum += input[r * stride + c];
|
sum += input[r * stride + c];
|
||||||
|
|
||||||
output[0] = sum >> 3;
|
output[0] = (tran_low_t)(sum >> 3);
|
||||||
output[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_VP9_HIGHBITDEPTH
|
#if CONFIG_VP9_HIGHBITDEPTH
|
||||||
|
Loading…
x
Reference in New Issue
Block a user