Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
5bf11e12
Commit
5bf11e12
authored
Jun 04, 2014
by
Jingning Han
Committed by
Gerrit Code Review
Jun 04, 2014
Browse files
Merge "Enable unit test for partial 16x16 inverse 2D-DCT"
parents
4a26b240
7eaad70b
Changes
1
Show whitespace changes
Inline
Side-by-side
test/partial_idct_test.cc
View file @
5bf11e12
...
...
@@ -28,7 +28,8 @@ using libvpx_test::ACMRandom;
namespace
{
typedef
void
(
*
fwd_txfm_t
)(
const
int16_t
*
in
,
int16_t
*
out
,
int
stride
);
typedef
void
(
*
inv_txfm_t
)(
const
int16_t
*
in
,
uint8_t
*
out
,
int
stride
);
typedef
std
::
tr1
::
tuple
<
inv_txfm_t
,
typedef
std
::
tr1
::
tuple
<
fwd_txfm_t
,
inv_txfm_t
,
inv_txfm_t
,
TX_SIZE
,
int
>
partial_itxfm_param_t
;
const
int
kMaxNumCoeffs
=
1024
;
...
...
@@ -36,10 +37,11 @@ class PartialIDctTest : public ::testing::TestWithParam<partial_itxfm_param_t> {
public:
virtual
~
PartialIDctTest
()
{}
virtual
void
SetUp
()
{
full_itxfm_
=
GET_PARAM
(
0
);
partial_itxfm_
=
GET_PARAM
(
1
);
tx_size_
=
GET_PARAM
(
2
);
last_nonzero_
=
GET_PARAM
(
3
);
ftxfm_
=
GET_PARAM
(
0
);
full_itxfm_
=
GET_PARAM
(
1
);
partial_itxfm_
=
GET_PARAM
(
2
);
tx_size_
=
GET_PARAM
(
3
);
last_nonzero_
=
GET_PARAM
(
4
);
}
virtual
void
TearDown
()
{
libvpx_test
::
ClearSystemState
();
}
...
...
@@ -47,10 +49,90 @@ class PartialIDctTest : public ::testing::TestWithParam<partial_itxfm_param_t> {
protected:
int
last_nonzero_
;
TX_SIZE
tx_size_
;
fwd_txfm_t
ftxfm_
;
inv_txfm_t
full_itxfm_
;
inv_txfm_t
partial_itxfm_
;
};
TEST_P
(
PartialIDctTest
,
RunQuantCheck
)
{
ACMRandom
rnd
(
ACMRandom
::
DeterministicSeed
());
int
size
;
switch
(
tx_size_
)
{
case
TX_4X4
:
size
=
4
;
break
;
case
TX_8X8
:
size
=
8
;
break
;
case
TX_16X16
:
size
=
16
;
break
;
case
TX_32X32
:
size
=
32
;
break
;
default:
FAIL
()
<<
"Wrong Size!"
;
break
;
}
DECLARE_ALIGNED_ARRAY
(
16
,
int16_t
,
test_coef_block1
,
kMaxNumCoeffs
);
DECLARE_ALIGNED_ARRAY
(
16
,
int16_t
,
test_coef_block2
,
kMaxNumCoeffs
);
DECLARE_ALIGNED_ARRAY
(
16
,
uint8_t
,
dst1
,
kMaxNumCoeffs
);
DECLARE_ALIGNED_ARRAY
(
16
,
uint8_t
,
dst2
,
kMaxNumCoeffs
);
const
int
count_test_block
=
1000
;
const
int
block_size
=
size
*
size
;
DECLARE_ALIGNED_ARRAY
(
16
,
int16_t
,
input_extreme_block
,
kMaxNumCoeffs
);
DECLARE_ALIGNED_ARRAY
(
16
,
int16_t
,
output_ref_block
,
kMaxNumCoeffs
);
int
max_error
=
0
;
for
(
int
i
=
0
;
i
<
count_test_block
;
++
i
)
{
// clear out destination buffer
memset
(
dst1
,
0
,
sizeof
(
*
dst1
)
*
block_size
);
memset
(
dst2
,
0
,
sizeof
(
*
dst2
)
*
block_size
);
memset
(
test_coef_block1
,
0
,
sizeof
(
*
test_coef_block1
)
*
block_size
);
memset
(
test_coef_block2
,
0
,
sizeof
(
*
test_coef_block2
)
*
block_size
);
ACMRandom
rnd
(
ACMRandom
::
DeterministicSeed
());
for
(
int
i
=
0
;
i
<
count_test_block
;
++
i
)
{
// Initialize a test block with input range [-255, 255].
if
(
i
==
0
)
{
for
(
int
j
=
0
;
j
<
block_size
;
++
j
)
input_extreme_block
[
j
]
=
255
;
}
else
if
(
i
==
1
)
{
for
(
int
j
=
0
;
j
<
block_size
;
++
j
)
input_extreme_block
[
j
]
=
-
255
;
}
else
{
for
(
int
j
=
0
;
j
<
block_size
;
++
j
)
{
input_extreme_block
[
j
]
=
rnd
.
Rand8
()
%
2
?
255
:
-
255
;
}
}
ftxfm_
(
input_extreme_block
,
output_ref_block
,
size
);
// quantization with maximum allowed step sizes
test_coef_block1
[
0
]
=
(
output_ref_block
[
0
]
/
1336
)
*
1336
;
for
(
int
j
=
1
;
j
<
last_nonzero_
;
++
j
)
test_coef_block1
[
vp9_default_scan_orders
[
tx_size_
].
scan
[
j
]]
=
(
output_ref_block
[
j
]
/
1828
)
*
1828
;
}
REGISTER_STATE_CHECK
(
full_itxfm_
(
test_coef_block1
,
dst1
,
size
));
REGISTER_STATE_CHECK
(
partial_itxfm_
(
test_coef_block1
,
dst2
,
size
));
for
(
int
j
=
0
;
j
<
block_size
;
++
j
)
{
const
int
diff
=
dst1
[
j
]
-
dst2
[
j
];
const
int
error
=
diff
*
diff
;
if
(
max_error
<
error
)
max_error
=
error
;
}
}
EXPECT_EQ
(
0
,
max_error
)
<<
"Error: partial inverse transform produces different results"
;
}
TEST_P
(
PartialIDctTest
,
ResultsMatch
)
{
ACMRandom
rnd
(
ACMRandom
::
DeterministicSeed
());
int
size
;
...
...
@@ -119,47 +201,60 @@ using std::tr1::make_tuple;
INSTANTIATE_TEST_CASE_P
(
C
,
PartialIDctTest
,
::
testing
::
Values
(
make_tuple
(
&
vp9_idct32x32_1024_add_c
,
make_tuple
(
&
vp9_fdct32x32_c
,
&
vp9_idct32x32_1024_add_c
,
&
vp9_idct32x32_34_add_c
,
TX_32X32
,
34
),
make_tuple
(
&
vp9_idct32x32_1024_add_c
,
make_tuple
(
&
vp9_fdct32x32_c
,
&
vp9_idct32x32_1024_add_c
,
&
vp9_idct32x32_1_add_c
,
TX_32X32
,
1
),
make_tuple
(
&
vp9_idct16x16_256_add_c
,
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_10_add_c
,
TX_16X16
,
10
),
make_tuple
(
&
vp9_idct16x16_256_add_c
,
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_1_add_c
,
TX_16X16
,
1
),
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_12_add_c
,
TX_8X8
,
12
),
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_1_add_c
,
TX_8X8
,
1
),
make_tuple
(
&
vp9_idct4x4_16_add_c
,
make_tuple
(
&
vp9_fdct4x4_c
,
&
vp9_idct4x4_16_add_c
,
&
vp9_idct4x4_1_add_c
,
TX_4X4
,
1
)));
#if HAVE_NEON_ASM
INSTANTIATE_TEST_CASE_P
(
NEON
,
PartialIDctTest
,
::
testing
::
Values
(
make_tuple
(
&
vp9_idct32x32_1024_add_c
,
make_tuple
(
&
vp9_fdct32x32_c
,
&
vp9_idct32x32_1024_add_c
,
&
vp9_idct32x32_1_add_neon
,
TX_32X32
,
1
),
make_tuple
(
&
vp9_idct16x16_256_add_c
,
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_10_add_neon
,
TX_16X16
,
10
),
make_tuple
(
&
vp9_idct16x16_256_add_c
,
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_1_add_neon
,
TX_16X16
,
1
),
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_12_add_neon
,
TX_8X8
,
12
),
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_1_add_neon
,
TX_8X8
,
1
),
make_tuple
(
&
vp9_idct4x4_16_add_c
,
make_tuple
(
&
vp9_fdct4x4_c
,
&
vp9_idct4x4_16_add_c
,
&
vp9_idct4x4_1_add_neon
,
TX_4X4
,
1
)));
#endif
...
...
@@ -168,25 +263,32 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
SSE2
,
PartialIDctTest
,
::
testing
::
Values
(
make_tuple
(
&
vp9_idct32x32_1024_add_c
,
make_tuple
(
&
vp9_fdct32x32_c
,
&
vp9_idct32x32_1024_add_c
,
&
vp9_idct32x32_34_add_sse2
,
TX_32X32
,
34
),
make_tuple
(
&
vp9_idct32x32_1024_add_c
,
make_tuple
(
&
vp9_fdct32x32_c
,
&
vp9_idct32x32_1024_add_c
,
&
vp9_idct32x32_1_add_sse2
,
TX_32X32
,
1
),
make_tuple
(
&
vp9_idct16x16_256_add_c
,
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_10_add_sse2
,
TX_16X16
,
10
),
make_tuple
(
&
vp9_idct16x16_256_add_c
,
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_1_add_sse2
,
TX_16X16
,
1
),
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_12_add_sse2
,
TX_8X8
,
12
),
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_1_add_sse2
,
TX_8X8
,
1
),
make_tuple
(
&
vp9_idct4x4_16_add_c
,
make_tuple
(
&
vp9_fdct4x4_c
,
&
vp9_idct4x4_16_add_c
,
&
vp9_idct4x4_1_add_sse2
,
TX_4X4
,
1
)));
#endif
...
...
@@ -195,8 +297,19 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
SSSE3_64
,
PartialIDctTest
,
::
testing
::
Values
(
make_tuple
(
&
vp9_idct8x8_64_add_c
,
make_tuple
(
&
vp9_fdct8x8_c
,
&
vp9_idct8x8_64_add_c
,
&
vp9_idct8x8_12_add_ssse3
,
TX_8X8
,
12
)));
#endif
#if HAVE_SSSE3
INSTANTIATE_TEST_CASE_P
(
SSSE3
,
PartialIDctTest
,
::
testing
::
Values
(
make_tuple
(
&
vp9_fdct16x16_c
,
&
vp9_idct16x16_256_add_c
,
&
vp9_idct16x16_10_add_ssse3
,
TX_16X16
,
10
)));
#endif
}
// namespace
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment