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
18159614
Commit
18159614
authored
Mar 07, 2016
by
Debargha Mukherjee
Committed by
Gerrit Code Review
Mar 07, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Add 128 pixel variance and SAD functions" into nextgenv2
parents
5e5bef6c
697bf5be
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 @
18159614
...
...
@@ -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 @
18159614
This diff is collapsed.
Click to expand it.
test/sad_test.cc
View file @
18159614
...
...
@@ -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 @
18159614
...
...
@@ -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 @
18159614
...
...
@@ -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 @
18159614
...
...
@@ -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]); \