Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xiph.Org
aom-rav1e
Commits
697bf5be
Commit
697bf5be
authored
Mar 02, 2016
by
Geza Lore
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add 128 pixel variance and SAD functions
Change-Id: I8fde245b32c9e586683a28aa6925da0b83850b39
parent
339ef0ce
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1193 additions
and
2013 deletions
+1193
-2013
test/masked_sad_test.cc
test/masked_sad_test.cc
+58
-40
test/masked_variance_test.cc
test/masked_variance_test.cc
+300
-234
test/sad_test.cc
test/sad_test.cc
+64
-4
test/variance_test.cc
test/variance_test.cc
+68
-4
vpx_dsp/sad.c
vpx_dsp/sad.c
+32
-0
vpx_dsp/variance.c
vpx_dsp/variance.c
+54
-49
vpx_dsp/vpx_dsp_rtcd_defs.pl
vpx_dsp/vpx_dsp_rtcd_defs.pl
+305
-1343
vpx_dsp/vpx_filter.h
vpx_dsp/vpx_filter.h
+12
-1
vpx_dsp/x86/masked_sad_intrin_ssse3.c
vpx_dsp/x86/masked_sad_intrin_ssse3.c
+11
-1
vpx_dsp/x86/masked_variance_intrin_ssse3.c
vpx_dsp/x86/masked_variance_intrin_ssse3.c
+289
-337
No files found.
test/masked_sad_test.cc
View file @
697bf5be
...
...
@@ -22,6 +22,8 @@
#include "./vpx_dsp_rtcd.h"
#include "vpx/vpx_integer.h"
#define MAX_CU_SIZE 128
using
libvpx_test
::
ACMRandom
;
namespace
{
...
...
@@ -50,16 +52,16 @@ class MaskedSADTest : public ::testing::TestWithParam<MaskedSADParam> {
TEST_P
(
MaskedSADTest
,
OperationCheck
)
{
unsigned
int
ref_ret
,
ret
;
ACMRandom
rnd
(
ACMRandom
::
DeterministicSeed
());
DECLARE_ALIGNED
(
16
,
uint8_t
,
src_ptr
[
4096
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
ref_ptr
[
4096
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
msk_ptr
[
4096
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
src_ptr
[
MAX_CU_SIZE
*
MAX_CU_SIZE
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
ref_ptr
[
MAX_CU_SIZE
*
MAX_CU_SIZE
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
msk_ptr
[
MAX_CU_SIZE
*
MAX_CU_SIZE
]);
int
err_count
=
0
;
int
first_failure
=
-
1
;
int
src_stride
=
64
;
int
ref_stride
=
64
;
int
msk_stride
=
64
;
int
src_stride
=
MAX_CU_SIZE
;
int
ref_stride
=
MAX_CU_SIZE
;
int
msk_stride
=
MAX_CU_SIZE
;
for
(
int
i
=
0
;
i
<
number_of_iterations
;
++
i
)
{
for
(
int
j
=
0
;
j
<
4096
;
j
++
)
{
for
(
int
j
=
0
;
j
<
MAX_CU_SIZE
*
MAX_CU_SIZE
;
j
++
)
{
src_ptr
[
j
]
=
rnd
.
Rand8
();
ref_ptr
[
j
]
=
rnd
.
Rand8
();
msk_ptr
[
j
]
=
((
rnd
.
Rand8
()
&
0x7f
)
>
64
)
?
rnd
.
Rand8
()
&
0x3f
:
64
;
...
...
@@ -108,18 +110,18 @@ class HighbdMaskedSADTest : public ::testing::
TEST_P
(
HighbdMaskedSADTest
,
OperationCheck
)
{
unsigned
int
ref_ret
,
ret
;
ACMRandom
rnd
(
ACMRandom
::
DeterministicSeed
());
DECLARE_ALIGNED
(
16
,
uint16_t
,
src_ptr
[
4096
]);
DECLARE_ALIGNED
(
16
,
uint16_t
,
ref_ptr
[
4096
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
msk_ptr
[
4096
]);
DECLARE_ALIGNED
(
16
,
uint16_t
,
src_ptr
[
MAX_CU_SIZE
*
MAX_CU_SIZE
]);
DECLARE_ALIGNED
(
16
,
uint16_t
,
ref_ptr
[
MAX_CU_SIZE
*
MAX_CU_SIZE
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
msk_ptr
[
MAX_CU_SIZE
*
MAX_CU_SIZE
]);
uint8_t
*
src8_ptr
=
CONVERT_TO_BYTEPTR
(
src_ptr
);
uint8_t
*
ref8_ptr
=
CONVERT_TO_BYTEPTR
(
ref_ptr
);
int
err_count
=
0
;
int
first_failure
=
-
1
;
int
src_stride
=
64
;
int
ref_stride
=
64
;
int
msk_stride
=
64
;
int
src_stride
=
MAX_CU_SIZE
;
int
ref_stride
=
MAX_CU_SIZE
;
int
msk_stride
=
MAX_CU_SIZE
;
for
(
int
i
=
0
;
i
<
number_of_iterations
;
++
i
)
{
for
(
int
j
=
0
;
j
<
4096
;
j
++
)
{
for
(
int
j
=
0
;
j
<
MAX_CU_SIZE
*
MAX_CU_SIZE
;
j
++
)
{
src_ptr
[
j
]
=
rnd
.
Rand16
()
&
0xfff
;
ref_ptr
[
j
]
=
rnd
.
Rand16
()
&
0xfff
;
msk_ptr
[
j
]
=
((
rnd
.
Rand8
()
&
0x7f
)
>
64
)
?
rnd
.
Rand8
()
&
0x3f
:
64
;
...
...
@@ -148,6 +150,14 @@ using std::tr1::make_tuple;
INSTANTIATE_TEST_CASE_P
(
SSSE3_C_COMPARE
,
MaskedSADTest
,
::
testing
::
Values
(
#if CONFIG_EXT_PARTITION
make_tuple
(
&
vpx_masked_sad128x128_ssse3
,
&
vpx_masked_sad128x128_c
),
make_tuple
(
&
vpx_masked_sad128x64_ssse3
,
&
vpx_masked_sad128x64_c
),
make_tuple
(
&
vpx_masked_sad64x128_ssse3
,
&
vpx_masked_sad64x128_c
),
#endif // CONFIG_EXT_PARTITION
make_tuple
(
&
vpx_masked_sad64x64_ssse3
,
&
vpx_masked_sad64x64_c
),
make_tuple
(
&
vpx_masked_sad64x32_ssse3
,
...
...
@@ -178,32 +188,40 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
SSSE3_C_COMPARE
,
HighbdMaskedSADTest
,
::
testing
::
Values
(
make_tuple
(
&
vp9_highbd_masked_sad64x64_ssse3
,
&
vp9_highbd_masked_sad64x64_c
),
make_tuple
(
&
vp9_highbd_masked_sad64x32_ssse3
,
&
vp9_highbd_masked_sad64x32_c
),
make_tuple
(
&
vp9_highbd_masked_sad32x64_ssse3
,
&
vp9_highbd_masked_sad32x64_c
),
make_tuple
(
&
vp9_highbd_masked_sad32x32_ssse3
,
&
vp9_highbd_masked_sad32x32_c
),
make_tuple
(
&
vp9_highbd_masked_sad32x16_ssse3
,
&
vp9_highbd_masked_sad32x16_c
),
make_tuple
(
&
vp9_highbd_masked_sad16x32_ssse3
,
&
vp9_highbd_masked_sad16x32_c
),
make_tuple
(
&
vp9_highbd_masked_sad16x16_ssse3
,
&
vp9_highbd_masked_sad16x16_c
),
make_tuple
(
&
vp9_highbd_masked_sad16x8_ssse3
,
&
vp9_highbd_masked_sad16x8_c
),
make_tuple
(
&
vp9_highbd_masked_sad8x16_ssse3
,
&
vp9_highbd_masked_sad8x16_c
),
make_tuple
(
&
vp9_highbd_masked_sad8x8_ssse3
,
&
vp9_highbd_masked_sad8x8_c
),
make_tuple
(
&
vp9_highbd_masked_sad8x4_ssse3
,
&
vp9_highbd_masked_sad8x4_c
),
make_tuple
(
&
vp9_highbd_masked_sad4x8_ssse3
,
&
vp9_highbd_masked_sad4x8_c
),
make_tuple
(
&
vp9_highbd_masked_sad4x4_ssse3
,
&
vp9_highbd_masked_sad4x4_c
)));
#if CONFIG_EXT_PARTITION
make_tuple
(
&
vpx_highbd_masked_sad128x128_ssse3
,
&
vpx_highbd_masked_sad128x128_c
),
make_tuple
(
&
vpx_highbd_masked_sad128x64_ssse3
,
&
vpx_highbd_masked_sad128x64_c
),
make_tuple
(
&
vpx_highbd_masked_sad64x128_ssse3
,
&
vpx_highbd_masked_sad64x128_c
),
#endif // CONFIG_EXT_PARTITION
make_tuple
(
&
vpx_highbd_masked_sad64x64_ssse3
,
&
vpx_highbd_masked_sad64x64_c
),
make_tuple
(
&
vpx_highbd_masked_sad64x32_ssse3
,
&
vpx_highbd_masked_sad64x32_c
),
make_tuple
(
&
vpx_highbd_masked_sad32x64_ssse3
,
&
vpx_highbd_masked_sad32x64_c
),
make_tuple
(
&
vpx_highbd_masked_sad32x32_ssse3
,
&
vpx_highbd_masked_sad32x32_c
),
make_tuple
(
&
vpx_highbd_masked_sad32x16_ssse3
,
&
vpx_highbd_masked_sad32x16_c
),
make_tuple
(
&
vpx_highbd_masked_sad16x32_ssse3
,
&
vpx_highbd_masked_sad16x32_c
),
make_tuple
(
&
vpx_highbd_masked_sad16x16_ssse3
,
&
vpx_highbd_masked_sad16x16_c
),
make_tuple
(
&
vpx_highbd_masked_sad16x8_ssse3
,
&
vpx_highbd_masked_sad16x8_c
),
make_tuple
(
&
vpx_highbd_masked_sad8x16_ssse3
,
&
vpx_highbd_masked_sad8x16_c
),
make_tuple
(
&
vpx_highbd_masked_sad8x8_ssse3
,
&
vpx_highbd_masked_sad8x8_c
),
make_tuple
(
&
vpx_highbd_masked_sad8x4_ssse3
,
&
vpx_highbd_masked_sad8x4_c
),
make_tuple
(
&
vpx_highbd_masked_sad4x8_ssse3
,
&
vpx_highbd_masked_sad4x8_c
),
make_tuple
(
&
vpx_highbd_masked_sad4x4_ssse3
,
&
vpx_highbd_masked_sad4x4_c
)));
#endif // CONFIG_VP9_HIGHBITDEPTH
#endif // HAVE_SSSE3
}
// namespace
test/masked_variance_test.cc
View file @
697bf5be
This diff is collapsed.
Click to expand it.
test/sad_test.cc
View file @
697bf5be
...
...
@@ -59,13 +59,13 @@ class SADTestBase : public ::testing::Test {
reference_data8_
=
reinterpret_cast
<
uint8_t
*>
(
vpx_memalign
(
kDataAlignment
,
kDataBufferSize
));
second_pred8_
=
reinterpret_cast
<
uint8_t
*>
(
vpx_memalign
(
kDataAlignment
,
64
*
64
));
vpx_memalign
(
kDataAlignment
,
128
*
128
));
source_data16_
=
reinterpret_cast
<
uint16_t
*>
(
vpx_memalign
(
kDataAlignment
,
kDataBlockSize
*
sizeof
(
uint16_t
)));
reference_data16_
=
reinterpret_cast
<
uint16_t
*>
(
vpx_memalign
(
kDataAlignment
,
kDataBufferSize
*
sizeof
(
uint16_t
)));
second_pred16_
=
reinterpret_cast
<
uint16_t
*>
(
vpx_memalign
(
kDataAlignment
,
64
*
64
*
sizeof
(
uint16_t
)));
vpx_memalign
(
kDataAlignment
,
128
*
128
*
sizeof
(
uint16_t
)));
}
static
void
TearDownTestCase
()
{
...
...
@@ -88,9 +88,9 @@ class SADTestBase : public ::testing::Test {
}
protected:
// Handle
blocks
up to 4
blocks 64x64
with stride up to
128
// Handle up to 4
128x128 blocks,
with stride up to
256
static
const
int
kDataAlignment
=
16
;
static
const
int
kDataBlockSize
=
64
*
128
;
static
const
int
kDataBlockSize
=
128
*
256
;
static
const
int
kDataBufferSize
=
4
*
kDataBlockSize
;
virtual
void
SetUp
()
{
...
...
@@ -485,6 +485,11 @@ using std::tr1::make_tuple;
//------------------------------------------------------------------------------
// C functions
const
SadMxNParam
c_tests
[]
=
{
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_sad128x128_c
,
-
1
),
make_tuple
(
128
,
64
,
&
vpx_sad128x64_c
,
-
1
),
make_tuple
(
64
,
128
,
&
vpx_sad64x128_c
,
-
1
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_sad64x64_c
,
-
1
),
make_tuple
(
64
,
32
,
&
vpx_sad64x32_c
,
-
1
),
make_tuple
(
32
,
64
,
&
vpx_sad32x64_c
,
-
1
),
...
...
@@ -499,6 +504,11 @@ const SadMxNParam c_tests[] = {
make_tuple
(
4
,
8
,
&
vpx_sad4x8_c
,
-
1
),
make_tuple
(
4
,
4
,
&
vpx_sad4x4_c
,
-
1
),
#if CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128_c
,
8
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64_c
,
8
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128_c
,
8
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64_c
,
8
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32_c
,
8
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64_c
,
8
),
...
...
@@ -512,6 +522,11 @@ const SadMxNParam c_tests[] = {
make_tuple
(
8
,
4
,
&
vpx_highbd_sad8x4_c
,
8
),
make_tuple
(
4
,
8
,
&
vpx_highbd_sad4x8_c
,
8
),
make_tuple
(
4
,
4
,
&
vpx_highbd_sad4x4_c
,
8
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128_c
,
10
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64_c
,
10
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128_c
,
10
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64_c
,
10
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32_c
,
10
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64_c
,
10
),
...
...
@@ -525,6 +540,11 @@ const SadMxNParam c_tests[] = {
make_tuple
(
8
,
4
,
&
vpx_highbd_sad8x4_c
,
10
),
make_tuple
(
4
,
8
,
&
vpx_highbd_sad4x8_c
,
10
),
make_tuple
(
4
,
4
,
&
vpx_highbd_sad4x4_c
,
10
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128_c
,
12
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64_c
,
12
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128_c
,
12
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64_c
,
12
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32_c
,
12
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64_c
,
12
),
...
...
@@ -543,6 +563,11 @@ const SadMxNParam c_tests[] = {
INSTANTIATE_TEST_CASE_P
(
C
,
SADTest
,
::
testing
::
ValuesIn
(
c_tests
));
const
SadMxNAvgParam
avg_c_tests
[]
=
{
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_sad128x128_avg_c
,
-
1
),
make_tuple
(
128
,
64
,
&
vpx_sad128x64_avg_c
,
-
1
),
make_tuple
(
64
,
128
,
&
vpx_sad64x128_avg_c
,
-
1
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_sad64x64_avg_c
,
-
1
),
make_tuple
(
64
,
32
,
&
vpx_sad64x32_avg_c
,
-
1
),
make_tuple
(
32
,
64
,
&
vpx_sad32x64_avg_c
,
-
1
),
...
...
@@ -557,6 +582,11 @@ const SadMxNAvgParam avg_c_tests[] = {
make_tuple
(
4
,
8
,
&
vpx_sad4x8_avg_c
,
-
1
),
make_tuple
(
4
,
4
,
&
vpx_sad4x4_avg_c
,
-
1
),
#if CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128_avg_c
,
8
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64_avg_c
,
8
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128_avg_c
,
8
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64_avg_c
,
8
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32_avg_c
,
8
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64_avg_c
,
8
),
...
...
@@ -570,6 +600,11 @@ const SadMxNAvgParam avg_c_tests[] = {
make_tuple
(
8
,
4
,
&
vpx_highbd_sad8x4_avg_c
,
8
),
make_tuple
(
4
,
8
,
&
vpx_highbd_sad4x8_avg_c
,
8
),
make_tuple
(
4
,
4
,
&
vpx_highbd_sad4x4_avg_c
,
8
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128_avg_c
,
10
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64_avg_c
,
10
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128_avg_c
,
10
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64_avg_c
,
10
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32_avg_c
,
10
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64_avg_c
,
10
),
...
...
@@ -583,6 +618,11 @@ const SadMxNAvgParam avg_c_tests[] = {
make_tuple
(
8
,
4
,
&
vpx_highbd_sad8x4_avg_c
,
10
),
make_tuple
(
4
,
8
,
&
vpx_highbd_sad4x8_avg_c
,
10
),
make_tuple
(
4
,
4
,
&
vpx_highbd_sad4x4_avg_c
,
10
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128_avg_c
,
12
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64_avg_c
,
12
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128_avg_c
,
12
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64_avg_c
,
12
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32_avg_c
,
12
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64_avg_c
,
12
),
...
...
@@ -601,6 +641,11 @@ const SadMxNAvgParam avg_c_tests[] = {
INSTANTIATE_TEST_CASE_P
(
C
,
SADavgTest
,
::
testing
::
ValuesIn
(
avg_c_tests
));
const
SadMxNx4Param
x4d_c_tests
[]
=
{
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_sad128x128x4d_c
,
-
1
),
make_tuple
(
128
,
64
,
&
vpx_sad128x64x4d_c
,
-
1
),
make_tuple
(
64
,
128
,
&
vpx_sad64x128x4d_c
,
-
1
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_sad64x64x4d_c
,
-
1
),
make_tuple
(
64
,
32
,
&
vpx_sad64x32x4d_c
,
-
1
),
make_tuple
(
32
,
64
,
&
vpx_sad32x64x4d_c
,
-
1
),
...
...
@@ -615,6 +660,11 @@ const SadMxNx4Param x4d_c_tests[] = {
make_tuple
(
4
,
8
,
&
vpx_sad4x8x4d_c
,
-
1
),
make_tuple
(
4
,
4
,
&
vpx_sad4x4x4d_c
,
-
1
),
#if CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128x4d_c
,
8
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64x4d_c
,
8
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128x4d_c
,
8
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64x4d_c
,
8
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32x4d_c
,
8
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64x4d_c
,
8
),
...
...
@@ -628,6 +678,11 @@ const SadMxNx4Param x4d_c_tests[] = {
make_tuple
(
8
,
4
,
&
vpx_highbd_sad8x4x4d_c
,
8
),
make_tuple
(
4
,
8
,
&
vpx_highbd_sad4x8x4d_c
,
8
),
make_tuple
(
4
,
4
,
&
vpx_highbd_sad4x4x4d_c
,
8
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128x4d_c
,
10
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64x4d_c
,
10
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128x4d_c
,
10
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64x4d_c
,
10
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32x4d_c
,
10
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64x4d_c
,
10
),
...
...
@@ -641,6 +696,11 @@ const SadMxNx4Param x4d_c_tests[] = {
make_tuple
(
8
,
4
,
&
vpx_highbd_sad8x4x4d_c
,
10
),
make_tuple
(
4
,
8
,
&
vpx_highbd_sad4x8x4d_c
,
10
),
make_tuple
(
4
,
4
,
&
vpx_highbd_sad4x4x4d_c
,
10
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
128
,
128
,
&
vpx_highbd_sad128x128x4d_c
,
12
),
make_tuple
(
128
,
64
,
&
vpx_highbd_sad128x64x4d_c
,
12
),
make_tuple
(
64
,
128
,
&
vpx_highbd_sad64x128x4d_c
,
12
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
64
,
64
,
&
vpx_highbd_sad64x64x4d_c
,
12
),
make_tuple
(
64
,
32
,
&
vpx_highbd_sad64x32x4d_c
,
12
),
make_tuple
(
32
,
64
,
&
vpx_highbd_sad32x64x4d_c
,
12
),
...
...
test/variance_test.cc
View file @
697bf5be
...
...
@@ -759,7 +759,13 @@ INSTANTIATE_TEST_CASE_P(C, VpxMseTest,
INSTANTIATE_TEST_CASE_P
(
C
,
VpxVarianceTest
,
::
testing
::
Values
(
make_tuple
(
6
,
6
,
&
vpx_variance64x64_c
,
0
),
::
testing
::
Values
(
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_variance128x128_c
,
0
),
make_tuple
(
7
,
6
,
&
vpx_variance128x64_c
,
0
),
make_tuple
(
6
,
7
,
&
vpx_variance64x128_c
,
0
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_variance64x64_c
,
0
),
make_tuple
(
6
,
5
,
&
vpx_variance64x32_c
,
0
),
make_tuple
(
5
,
6
,
&
vpx_variance32x64_c
,
0
),
make_tuple
(
5
,
5
,
&
vpx_variance32x32_c
,
0
),
...
...
@@ -775,7 +781,13 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
C
,
VpxSubpelVarianceTest
,
::
testing
::
Values
(
make_tuple
(
6
,
6
,
&
vpx_sub_pixel_variance64x64_c
,
0
),
::
testing
::
Values
(
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_sub_pixel_variance128x128_c
,
0
),
make_tuple
(
7
,
6
,
&
vpx_sub_pixel_variance128x64_c
,
0
),
make_tuple
(
6
,
7
,
&
vpx_sub_pixel_variance64x128_c
,
0
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_sub_pixel_variance64x64_c
,
0
),
make_tuple
(
6
,
5
,
&
vpx_sub_pixel_variance64x32_c
,
0
),
make_tuple
(
5
,
6
,
&
vpx_sub_pixel_variance32x64_c
,
0
),
make_tuple
(
5
,
5
,
&
vpx_sub_pixel_variance32x32_c
,
0
),
...
...
@@ -791,7 +803,13 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
C
,
VpxSubpelAvgVarianceTest
,
::
testing
::
Values
(
make_tuple
(
6
,
6
,
&
vpx_sub_pixel_avg_variance64x64_c
,
0
),
::
testing
::
Values
(
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_sub_pixel_avg_variance128x128_c
,
0
),
make_tuple
(
7
,
6
,
&
vpx_sub_pixel_avg_variance128x64_c
,
0
),
make_tuple
(
6
,
7
,
&
vpx_sub_pixel_avg_variance64x128_c
,
0
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_sub_pixel_avg_variance64x64_c
,
0
),
make_tuple
(
6
,
5
,
&
vpx_sub_pixel_avg_variance64x32_c
,
0
),
make_tuple
(
5
,
6
,
&
vpx_sub_pixel_avg_variance32x64_c
,
0
),
make_tuple
(
5
,
5
,
&
vpx_sub_pixel_avg_variance32x32_c
,
0
),
...
...
@@ -841,7 +859,13 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
C
,
VpxHBDVarianceTest
,
::
testing
::
Values
(
make_tuple
(
6
,
6
,
&
vpx_highbd_12_variance64x64_c
,
12
),
::
testing
::
Values
(
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_12_variance128x128_c
,
12
),
make_tuple
(
7
,
6
,
&
vpx_highbd_12_variance128x64_c
,
12
),
make_tuple
(
6
,
7
,
&
vpx_highbd_12_variance64x128_c
,
12
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_12_variance64x64_c
,
12
),
make_tuple
(
6
,
5
,
&
vpx_highbd_12_variance64x32_c
,
12
),
make_tuple
(
5
,
6
,
&
vpx_highbd_12_variance32x64_c
,
12
),
make_tuple
(
5
,
5
,
&
vpx_highbd_12_variance32x32_c
,
12
),
...
...
@@ -854,6 +878,11 @@ INSTANTIATE_TEST_CASE_P(
make_tuple
(
3
,
2
,
&
vpx_highbd_12_variance8x4_c
,
12
),
make_tuple
(
2
,
3
,
&
vpx_highbd_12_variance4x8_c
,
12
),
make_tuple
(
2
,
2
,
&
vpx_highbd_12_variance4x4_c
,
12
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_10_variance128x128_c
,
10
),
make_tuple
(
7
,
6
,
&
vpx_highbd_10_variance128x64_c
,
10
),
make_tuple
(
6
,
7
,
&
vpx_highbd_10_variance64x128_c
,
10
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_10_variance64x64_c
,
10
),
make_tuple
(
6
,
5
,
&
vpx_highbd_10_variance64x32_c
,
10
),
make_tuple
(
5
,
6
,
&
vpx_highbd_10_variance32x64_c
,
10
),
...
...
@@ -867,6 +896,11 @@ INSTANTIATE_TEST_CASE_P(
make_tuple
(
3
,
2
,
&
vpx_highbd_10_variance8x4_c
,
10
),
make_tuple
(
2
,
3
,
&
vpx_highbd_10_variance4x8_c
,
10
),
make_tuple
(
2
,
2
,
&
vpx_highbd_10_variance4x4_c
,
10
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_8_variance128x128_c
,
8
),
make_tuple
(
7
,
6
,
&
vpx_highbd_8_variance128x64_c
,
8
),
make_tuple
(
6
,
7
,
&
vpx_highbd_8_variance64x128_c
,
8
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_8_variance64x64_c
,
8
),
make_tuple
(
6
,
5
,
&
vpx_highbd_8_variance64x32_c
,
8
),
make_tuple
(
5
,
6
,
&
vpx_highbd_8_variance32x64_c
,
8
),
...
...
@@ -884,6 +918,11 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
C
,
VpxHBDSubpelVarianceTest
,
::
testing
::
Values
(
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_8_sub_pixel_variance128x128_c
,
8
),
make_tuple
(
7
,
6
,
&
vpx_highbd_8_sub_pixel_variance128x64_c
,
8
),
make_tuple
(
6
,
7
,
&
vpx_highbd_8_sub_pixel_variance64x128_c
,
8
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_8_sub_pixel_variance64x64_c
,
8
),
make_tuple
(
6
,
5
,
&
vpx_highbd_8_sub_pixel_variance64x32_c
,
8
),
make_tuple
(
5
,
6
,
&
vpx_highbd_8_sub_pixel_variance32x64_c
,
8
),
...
...
@@ -897,6 +936,11 @@ INSTANTIATE_TEST_CASE_P(
make_tuple
(
3
,
2
,
&
vpx_highbd_8_sub_pixel_variance8x4_c
,
8
),
make_tuple
(
2
,
3
,
&
vpx_highbd_8_sub_pixel_variance4x8_c
,
8
),
make_tuple
(
2
,
2
,
&
vpx_highbd_8_sub_pixel_variance4x4_c
,
8
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_10_sub_pixel_variance128x128_c
,
10
),
make_tuple
(
7
,
6
,
&
vpx_highbd_10_sub_pixel_variance128x64_c
,
10
),
make_tuple
(
6
,
7
,
&
vpx_highbd_10_sub_pixel_variance64x128_c
,
10
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_10_sub_pixel_variance64x64_c
,
10
),
make_tuple
(
6
,
5
,
&
vpx_highbd_10_sub_pixel_variance64x32_c
,
10
),
make_tuple
(
5
,
6
,
&
vpx_highbd_10_sub_pixel_variance32x64_c
,
10
),
...
...
@@ -910,6 +954,11 @@ INSTANTIATE_TEST_CASE_P(
make_tuple
(
3
,
2
,
&
vpx_highbd_10_sub_pixel_variance8x4_c
,
10
),
make_tuple
(
2
,
3
,
&
vpx_highbd_10_sub_pixel_variance4x8_c
,
10
),
make_tuple
(
2
,
2
,
&
vpx_highbd_10_sub_pixel_variance4x4_c
,
10
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_12_sub_pixel_variance128x128_c
,
12
),
make_tuple
(
7
,
6
,
&
vpx_highbd_12_sub_pixel_variance128x64_c
,
12
),
make_tuple
(
6
,
7
,
&
vpx_highbd_12_sub_pixel_variance64x128_c
,
12
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_12_sub_pixel_variance64x64_c
,
12
),
make_tuple
(
6
,
5
,
&
vpx_highbd_12_sub_pixel_variance64x32_c
,
12
),
make_tuple
(
5
,
6
,
&
vpx_highbd_12_sub_pixel_variance32x64_c
,
12
),
...
...
@@ -927,6 +976,11 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P
(
C
,
VpxHBDSubpelAvgVarianceTest
,
::
testing
::
Values
(
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_8_sub_pixel_avg_variance128x128_c
,
8
),
make_tuple
(
7
,
6
,
&
vpx_highbd_8_sub_pixel_avg_variance128x64_c
,
8
),
make_tuple
(
6
,
7
,
&
vpx_highbd_8_sub_pixel_avg_variance64x128_c
,
8
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_8_sub_pixel_avg_variance64x64_c
,
8
),
make_tuple
(
6
,
5
,
&
vpx_highbd_8_sub_pixel_avg_variance64x32_c
,
8
),
make_tuple
(
5
,
6
,
&
vpx_highbd_8_sub_pixel_avg_variance32x64_c
,
8
),
...
...
@@ -940,6 +994,11 @@ INSTANTIATE_TEST_CASE_P(
make_tuple
(
3
,
2
,
&
vpx_highbd_8_sub_pixel_avg_variance8x4_c
,
8
),
make_tuple
(
2
,
3
,
&
vpx_highbd_8_sub_pixel_avg_variance4x8_c
,
8
),
make_tuple
(
2
,
2
,
&
vpx_highbd_8_sub_pixel_avg_variance4x4_c
,
8
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_10_sub_pixel_avg_variance128x128_c
,
10
),
make_tuple
(
7
,
6
,
&
vpx_highbd_10_sub_pixel_avg_variance128x64_c
,
10
),
make_tuple
(
6
,
7
,
&
vpx_highbd_10_sub_pixel_avg_variance64x128_c
,
10
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_10_sub_pixel_avg_variance64x64_c
,
10
),
make_tuple
(
6
,
5
,
&
vpx_highbd_10_sub_pixel_avg_variance64x32_c
,
10
),
make_tuple
(
5
,
6
,
&
vpx_highbd_10_sub_pixel_avg_variance32x64_c
,
10
),
...
...
@@ -953,6 +1012,11 @@ INSTANTIATE_TEST_CASE_P(
make_tuple
(
3
,
2
,
&
vpx_highbd_10_sub_pixel_avg_variance8x4_c
,
10
),
make_tuple
(
2
,
3
,
&
vpx_highbd_10_sub_pixel_avg_variance4x8_c
,
10
),
make_tuple
(
2
,
2
,
&
vpx_highbd_10_sub_pixel_avg_variance4x4_c
,
10
),
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
7
,
7
,
&
vpx_highbd_12_sub_pixel_avg_variance128x128_c
,
12
),
make_tuple
(
7
,
6
,
&
vpx_highbd_12_sub_pixel_avg_variance128x64_c
,
12
),
make_tuple
(
6
,
7
,
&
vpx_highbd_12_sub_pixel_avg_variance64x128_c
,
12
),
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
make_tuple
(
6
,
6
,
&
vpx_highbd_12_sub_pixel_avg_variance64x64_c
,
12
),
make_tuple
(
6
,
5
,
&
vpx_highbd_12_sub_pixel_avg_variance64x32_c
,
12
),
make_tuple
(
5
,
6
,
&
vpx_highbd_12_sub_pixel_avg_variance32x64_c
,
12
),
...
...
vpx_dsp/sad.c
View file @
697bf5be
...
...
@@ -108,6 +108,22 @@ void vpx_sad##m##x##n##x4d_c(const uint8_t *src, int src_stride, \
sad_array[i] = vpx_sad##m##x##n##_c(src, src_stride, ref_array[i], ref_stride); \
}
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
// 128x128
sadMxN
(
128
,
128
)
sadMxNxK
(
128
,
128
,
3
)
sadMxNxK
(
128
,
128
,
8
)
sadMxNx4D
(
128
,
128
)
// 128x64
sadMxN
(
128
,
64
)
sadMxNx4D
(
128
,
64
)
// 64x128
sadMxN
(
64
,
128
)
sadMxNx4D
(
64
,
128
)
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
// 64x64
sadMxN
(
64
,
64
)
sadMxNxK
(
64
,
64
,
3
)
...
...
@@ -247,6 +263,22 @@ void vpx_highbd_sad##m##x##n##x4d_c(const uint8_t *src, int src_stride, \
} \
}
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
// 128x128
highbd_sadMxN
(
128
,
128
)
highbd_sadMxNxK
(
128
,
128
,
3
)
highbd_sadMxNxK
(
128
,
128
,
8
)
highbd_sadMxNx4D
(
128
,
128
)
// 128x64
highbd_sadMxN
(
128
,
64
)
highbd_sadMxNx4D
(
128
,
64
)
// 64x128
highbd_sadMxN
(
64
,
128
)
highbd_sadMxNx4D
(
64
,
128
)
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
// 64x64
highbd_sadMxN
(
64
,
64
)
highbd_sadMxNxK
(
64
,
64
,
3
)
...
...
vpx_dsp/variance.c
View file @
697bf5be
...
...
@@ -17,17 +17,6 @@
#include "vpx_dsp/variance.h"
#include "vpx_dsp/vpx_filter.h"
const
uint8_t
vpx_bilinear_filters
[
BIL_SUBPEL_SHIFTS
][
2
]
=
{
{
128
,
0
},
{
112
,
16
},
{
96
,
32
},
{
80
,
48
},
{
64
,
64
},
{
48
,
80
},
{
32
,
96
},
{
16
,
112
},
};
uint32_t
vpx_get4x4sse_cs_c
(
const
uint8_t
*
a
,
int
a_stride
,
const
uint8_t
*
b
,
int
b_stride
)
{
int
distortion
=
0
;
...
...
@@ -176,9 +165,9 @@ uint32_t vpx_sub_pixel_variance##W##x##H##_c(const uint8_t *a, int a_stride, \
uint8_t temp2[H * W]; \
\
var_filter_block2d_bil_first_pass(a, fdata3, a_stride, 1, H + 1, W, \
vpx_
bilinear_filters[xoffset]); \
bilinear_filters
_2t
[xoffset]); \
var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \
vpx_
bilinear_filters[yoffset]); \
bilinear_filters
_2t
[yoffset]); \
\
return vpx_variance##W##x##H##_c(temp2, W, b, b_stride, sse); \
}
...
...
@@ -196,9 +185,9 @@ uint32_t vpx_sub_pixel_avg_variance##W##x##H##_c(const uint8_t *a, \
DECLARE_ALIGNED(16, uint8_t, temp3[H * W]); \
\
var_filter_block2d_bil_first_pass(a, fdata3, a_stride, 1, H + 1, W, \
vpx_
bilinear_filters[xoffset]); \
bilinear_filters
_2t
[xoffset]); \
var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \
vpx_
bilinear_filters[yoffset]); \
bilinear_filters
_2t
[yoffset]); \
\
vpx_comp_avg_pred(temp3, second_pred, W, H, temp2, W); \
\
...
...
@@ -235,6 +224,11 @@ uint32_t vpx_mse##W##x##H##_c(const uint8_t *a, int a_stride, \
SUBPIX_VAR(W, H) \
SUBPIX_AVG_VAR(W, H)
#if CONFIG_VP10 && CONFIG_EXT_PARTITION
VARIANCES
(
128
,
128
)
VARIANCES
(
128
,
64
)
VARIANCES
(
64
,
128
)
#endif // CONFIG_VP10 && CONFIG_EXT_PARTITION
VARIANCES
(
64
,
64
)
VARIANCES
(
64
,
32
)
VARIANCES
(
32
,
64
)
...
...
@@ -501,9 +495,9 @@ uint32_t vpx_highbd_8_sub_pixel_variance##W##x##H##_c( \
uint16_t temp2[H * W]; \
\
highbd_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \
W,
vpx_
bilinear_filters[xoffset]); \
W, bilinear_filters
_2t
[xoffset]); \
highbd_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \
vpx_
bilinear_filters[yoffset]); \
bilinear_filters
_2t
[yoffset]); \
\
return vpx_highbd_8_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp2), W, dst, \
dst_stride, sse); \
...
...
@@ -518,9 +512,9 @@ uint32_t vpx_highbd_10_sub_pixel_variance##W##x##H##_c( \
uint16_t temp2[H * W]; \
\
highbd_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \
W,
vpx_
bilinear_filters[xoffset]); \
W, bilinear_filters
_2t
[xoffset]); \
highbd_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \
vpx_
bilinear_filters[yoffset]); \
bilinear_filters
_2t
[yoffset]); \
\
return vpx_highbd_10_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp2), \
W, dst, dst_stride, sse); \
...
...
@@ -535,9 +529,9 @@ uint32_t vpx_highbd_12_sub_pixel_variance##W##x##H##_c( \
uint16_t temp2[H * W]; \
\
highbd_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \
W,
vpx_
bilinear_filters[xoffset]); \
W, bilinear_filters
_2t
[xoffset]); \
highbd_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \
vpx_
bilinear_filters[yoffset]); \
bilinear_filters
_2t
[yoffset]); \
\
return vpx_highbd_12_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp2), \
W, dst, dst_stride, sse); \
...
...
@@ -555,9 +549,9 @@ uint32_t vpx_highbd_8_sub_pixel_avg_variance##W##x##H##_c( \
DECLARE_ALIGNED(16, uint16_t, temp3[H * W]); \
\
highbd_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \
W,
vpx_
bilinear_filters[xoffset]); \
W, bilinear_filters
_2t
[xoffset]); \
highbd_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \
vpx_
bilinear_filters[yoffset]); \
bilinear_filters
_2t
[yoffset]); \
\
vpx_highbd_comp_avg_pred(temp3, second_pred, W, H, \
CONVERT_TO_BYTEPTR(temp2), W); \
...
...
@@ -577,9 +571,9 @@ uint32_t vpx_highbd_10_sub_pixel_avg_variance##W##x##H##_c( \
DECLARE_ALIGNED(16, uint16_t, temp3[H * W]); \
\
highbd_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \
W,
vpx_
bilinear_filters[xoffset]); \