Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Guillaume Martres
aom-rav1e
Commits
acadcec5
Commit
acadcec5
authored
Nov 06, 2012
by
Yaowu Xu
Browse files
group refmv experiment related functions
Change-Id: Iedaa108ddb65f54d768424f9c47ad4d069b656fd
parent
182f99f0
Changes
4
Hide whitespace changes
Inline
Side-by-side
vp9/common/findnearmv.c
View file @
acadcec5
...
...
@@ -11,6 +11,7 @@
#include
"findnearmv.h"
#include
"vp9/common/sadmxn.h"
#include
"vp9/common/subpelvar.h"
#include
<limits.h>
const
unsigned
char
vp9_mbsplit_offset
[
4
][
16
]
=
{
...
...
@@ -186,6 +187,76 @@ unsigned int vp9_sad16x3_c(
return
sad_mx_n_c
(
src_ptr
,
src_stride
,
ref_ptr
,
ref_stride
,
16
,
3
);
}
#if CONFIG_SUBPELREFMV
unsigned
int
vp9_variance2x16_c
(
const
unsigned
char
*
src_ptr
,
const
int
source_stride
,
const
unsigned
char
*
ref_ptr
,
const
int
recon_stride
,
unsigned
int
*
sse
)
{
unsigned
int
var
;
int
avg
;
variance
(
src_ptr
,
source_stride
,
ref_ptr
,
recon_stride
,
2
,
16
,
&
var
,
&
avg
);
*
sse
=
var
;
return
(
var
-
((
avg
*
avg
)
>>
5
));
}
unsigned
int
vp9_variance16x2_c
(
const
unsigned
char
*
src_ptr
,
const
int
source_stride
,
const
unsigned
char
*
ref_ptr
,
const
int
recon_stride
,
unsigned
int
*
sse
)
{
unsigned
int
var
;
int
avg
;
variance
(
src_ptr
,
source_stride
,
ref_ptr
,
recon_stride
,
16
,
2
,
&
var
,
&
avg
);
*
sse
=
var
;
return
(
var
-
((
avg
*
avg
)
>>
5
));
}
unsigned
int
vp9_sub_pixel_variance16x2_c
(
const
unsigned
char
*
src_ptr
,
const
int
src_pixels_per_line
,
const
int
xoffset
,
const
int
yoffset
,
const
unsigned
char
*
dst_ptr
,
const
int
dst_pixels_per_line
,
unsigned
int
*
sse
)
{
unsigned
short
FData3
[
16
*
3
];
// Temp data bufffer used in filtering
unsigned
char
temp2
[
20
*
16
];
const
short
*
HFilter
,
*
VFilter
;
HFilter
=
vp9_bilinear_filters
[
xoffset
];
VFilter
=
vp9_bilinear_filters
[
yoffset
];
var_filter_block2d_bil_first_pass
(
src_ptr
,
FData3
,
src_pixels_per_line
,
1
,
3
,
16
,
HFilter
);
var_filter_block2d_bil_second_pass
(
FData3
,
temp2
,
16
,
16
,
2
,
16
,
VFilter
);
return
vp9_variance16x2_c
(
temp2
,
16
,
dst_ptr
,
dst_pixels_per_line
,
sse
);
}
unsigned
int
vp9_sub_pixel_variance2x16_c
(
const
unsigned
char
*
src_ptr
,
const
int
src_pixels_per_line
,
const
int
xoffset
,
const
int
yoffset
,
const
unsigned
char
*
dst_ptr
,
const
int
dst_pixels_per_line
,
unsigned
int
*
sse
)
{
unsigned
short
FData3
[
2
*
17
];
// Temp data bufffer used in filtering
unsigned
char
temp2
[
2
*
16
];
const
short
*
HFilter
,
*
VFilter
;
HFilter
=
vp9_bilinear_filters
[
xoffset
];
VFilter
=
vp9_bilinear_filters
[
yoffset
];
var_filter_block2d_bil_first_pass
(
src_ptr
,
FData3
,
src_pixels_per_line
,
1
,
17
,
2
,
HFilter
);
var_filter_block2d_bil_second_pass
(
FData3
,
temp2
,
2
,
2
,
16
,
2
,
VFilter
);
return
vp9_variance2x16_c
(
temp2
,
2
,
dst_ptr
,
dst_pixels_per_line
,
sse
);
}
#endif
/* check a list of motion vectors by sad score using a number rows of pixels
* above and a number cols of pixels in the left to select the one with best
* score to use as ref motion vector
...
...
vp9/common/subpelvar.h
0 → 100644
View file @
acadcec5
/*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include
"vp9/common/filter.h"
static
void
variance
(
const
unsigned
char
*
src_ptr
,
int
source_stride
,
const
unsigned
char
*
ref_ptr
,
int
recon_stride
,
int
w
,
int
h
,
unsigned
int
*
sse
,
int
*
sum
)
{
int
i
,
j
;
int
diff
;
*
sum
=
0
;
*
sse
=
0
;
for
(
i
=
0
;
i
<
h
;
i
++
)
{
for
(
j
=
0
;
j
<
w
;
j
++
)
{
diff
=
src_ptr
[
j
]
-
ref_ptr
[
j
];
*
sum
+=
diff
;
*
sse
+=
diff
*
diff
;
}
src_ptr
+=
source_stride
;
ref_ptr
+=
recon_stride
;
}
}
/****************************************************************************
*
* ROUTINE : filter_block2d_bil_first_pass
*
* INPUTS : UINT8 *src_ptr : Pointer to source block.
* UINT32 src_pixels_per_line : Stride of input block.
* UINT32 pixel_step : Offset between filter input samples (see notes).
* UINT32 output_height : Input block height.
* UINT32 output_width : Input block width.
* INT32 *vp9_filter : Array of 2 bi-linear filter taps.
*
* OUTPUTS : INT32 *output_ptr : Pointer to filtered block.
*
* RETURNS : void
*
* FUNCTION : Applies a 1-D 2-tap bi-linear filter to the source block in
* either horizontal or vertical direction to produce the
* filtered output block. Used to implement first-pass
* of 2-D separable filter.
*
* SPECIAL NOTES : Produces INT32 output to retain precision for next pass.
* Two filter taps should sum to VP9_FILTER_WEIGHT.
* pixel_step defines whether the filter is applied
* horizontally (pixel_step=1) or vertically (pixel_step=stride).
* It defines the offset required to move from one input
* to the next.
*
****************************************************************************/
static
void
var_filter_block2d_bil_first_pass
(
const
unsigned
char
*
src_ptr
,
unsigned
short
*
output_ptr
,
unsigned
int
src_pixels_per_line
,
int
pixel_step
,
unsigned
int
output_height
,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
// Apply bilinear filter
output_ptr
[
j
]
=
(((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
))
>>
VP9_FILTER_SHIFT
;
src_ptr
++
;
}
// Next row...
src_ptr
+=
src_pixels_per_line
-
output_width
;
output_ptr
+=
output_width
;
}
}
/****************************************************************************
*
* ROUTINE : filter_block2d_bil_second_pass
*
* INPUTS : INT32 *src_ptr : Pointer to source block.
* UINT32 src_pixels_per_line : Stride of input block.
* UINT32 pixel_step : Offset between filter input samples (see notes).
* UINT32 output_height : Input block height.
* UINT32 output_width : Input block width.
* INT32 *vp9_filter : Array of 2 bi-linear filter taps.
*
* OUTPUTS : UINT16 *output_ptr : Pointer to filtered block.
*
* RETURNS : void
*
* FUNCTION : Applies a 1-D 2-tap bi-linear filter to the source block in
* either horizontal or vertical direction to produce the
* filtered output block. Used to implement second-pass
* of 2-D separable filter.
*
* SPECIAL NOTES : Requires 32-bit input as produced by filter_block2d_bil_first_pass.
* Two filter taps should sum to VP9_FILTER_WEIGHT.
* pixel_step defines whether the filter is applied
* horizontally (pixel_step=1) or vertically (pixel_step=stride).
* It defines the offset required to move from one input
* to the next.
*
****************************************************************************/
static
void
var_filter_block2d_bil_second_pass
(
const
unsigned
short
*
src_ptr
,
unsigned
char
*
output_ptr
,
unsigned
int
src_pixels_per_line
,
unsigned
int
pixel_step
,
unsigned
int
output_height
,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
Temp
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
// Apply filter
Temp
=
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
);
output_ptr
[
j
]
=
(
unsigned
int
)(
Temp
>>
VP9_FILTER_SHIFT
);
src_ptr
++
;
}
// Next row...
src_ptr
+=
src_pixels_per_line
-
output_width
;
output_ptr
+=
output_width
;
}
}
vp9/encoder/variance_c.c
View file @
acadcec5
...
...
@@ -11,6 +11,7 @@
#include
"variance.h"
#include
"vp9/common/filter.h"
#include
"vp9/common/subpelvar.h"
unsigned
int
vp9_get_mb_ss_c
(
const
short
*
src_ptr
)
{
...
...
@@ -24,31 +25,6 @@ unsigned int vp9_get_mb_ss_c(const short *src_ptr) {
}
static
void
variance
(
const
unsigned
char
*
src_ptr
,
int
source_stride
,
const
unsigned
char
*
ref_ptr
,
int
recon_stride
,
int
w
,
int
h
,
unsigned
int
*
sse
,
int
*
sum
)
{
int
i
,
j
;
int
diff
;
*
sum
=
0
;
*
sse
=
0
;
for
(
i
=
0
;
i
<
h
;
i
++
)
{
for
(
j
=
0
;
j
<
w
;
j
++
)
{
diff
=
src_ptr
[
j
]
-
ref_ptr
[
j
];
*
sum
+=
diff
;
*
sse
+=
diff
*
diff
;
}
src_ptr
+=
source_stride
;
ref_ptr
+=
recon_stride
;
}
}
#if CONFIG_SUPERBLOCKS
unsigned
int
vp9_variance32x32_c
(
const
unsigned
char
*
src_ptr
,
...
...
@@ -146,113 +122,6 @@ unsigned int vp9_mse16x16_c(const unsigned char *src_ptr,
}
/****************************************************************************
*
* ROUTINE : filter_block2d_bil_first_pass
*
* INPUTS : UINT8 *src_ptr : Pointer to source block.
* UINT32 src_pixels_per_line : Stride of input block.
* UINT32 pixel_step : Offset between filter input samples (see notes).
* UINT32 output_height : Input block height.
* UINT32 output_width : Input block width.
* INT32 *vp9_filter : Array of 2 bi-linear filter taps.
*
* OUTPUTS : INT32 *output_ptr : Pointer to filtered block.
*
* RETURNS : void
*
* FUNCTION : Applies a 1-D 2-tap bi-linear filter to the source block in
* either horizontal or vertical direction to produce the
* filtered output block. Used to implement first-pass
* of 2-D separable filter.
*
* SPECIAL NOTES : Produces INT32 output to retain precision for next pass.
* Two filter taps should sum to VP9_FILTER_WEIGHT.
* pixel_step defines whether the filter is applied
* horizontally (pixel_step=1) or vertically (pixel_step=stride).
* It defines the offset required to move from one input
* to the next.
*
****************************************************************************/
static
void
var_filter_block2d_bil_first_pass
(
const
unsigned
char
*
src_ptr
,
unsigned
short
*
output_ptr
,
unsigned
int
src_pixels_per_line
,
int
pixel_step
,
unsigned
int
output_height
,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
// Apply bilinear filter
output_ptr
[
j
]
=
(((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
))
>>
VP9_FILTER_SHIFT
;
src_ptr
++
;
}
// Next row...
src_ptr
+=
src_pixels_per_line
-
output_width
;
output_ptr
+=
output_width
;
}
}
/****************************************************************************
*
* ROUTINE : filter_block2d_bil_second_pass
*
* INPUTS : INT32 *src_ptr : Pointer to source block.
* UINT32 src_pixels_per_line : Stride of input block.
* UINT32 pixel_step : Offset between filter input samples (see notes).
* UINT32 output_height : Input block height.
* UINT32 output_width : Input block width.
* INT32 *vp9_filter : Array of 2 bi-linear filter taps.
*
* OUTPUTS : UINT16 *output_ptr : Pointer to filtered block.
*
* RETURNS : void
*
* FUNCTION : Applies a 1-D 2-tap bi-linear filter to the source block in
* either horizontal or vertical direction to produce the
* filtered output block. Used to implement second-pass
* of 2-D separable filter.
*
* SPECIAL NOTES : Requires 32-bit input as produced by filter_block2d_bil_first_pass.
* Two filter taps should sum to VP9_FILTER_WEIGHT.
* pixel_step defines whether the filter is applied
* horizontally (pixel_step=1) or vertically (pixel_step=stride).
* It defines the offset required to move from one input
* to the next.
*
****************************************************************************/
static
void
var_filter_block2d_bil_second_pass
(
const
unsigned
short
*
src_ptr
,
unsigned
char
*
output_ptr
,
unsigned
int
src_pixels_per_line
,
unsigned
int
pixel_step
,
unsigned
int
output_height
,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
Temp
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
// Apply filter
Temp
=
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
);
output_ptr
[
j
]
=
(
unsigned
int
)(
Temp
>>
VP9_FILTER_SHIFT
);
src_ptr
++
;
}
// Next row...
src_ptr
+=
src_pixels_per_line
-
output_width
;
output_ptr
+=
output_width
;
}
}
unsigned
int
vp9_sub_pixel_variance4x4_c
(
const
unsigned
char
*
src_ptr
,
int
src_pixels_per_line
,
int
xoffset
,
...
...
@@ -469,72 +338,3 @@ unsigned int vp9_sub_pixel_variance8x16_c(const unsigned char *src_ptr,
return
vp9_variance8x16_c
(
temp2
,
8
,
dst_ptr
,
dst_pixels_per_line
,
sse
);
}
#if CONFIG_NEWBESTREFMV
unsigned
int
vp9_variance2x16_c
(
const
unsigned
char
*
src_ptr
,
const
int
source_stride
,
const
unsigned
char
*
ref_ptr
,
const
int
recon_stride
,
unsigned
int
*
sse
)
{
unsigned
int
var
;
int
avg
;
variance
(
src_ptr
,
source_stride
,
ref_ptr
,
recon_stride
,
2
,
16
,
&
var
,
&
avg
);
*
sse
=
var
;
return
(
var
-
((
avg
*
avg
)
>>
5
));
}
unsigned
int
vp9_variance16x2_c
(
const
unsigned
char
*
src_ptr
,
const
int
source_stride
,
const
unsigned
char
*
ref_ptr
,
const
int
recon_stride
,
unsigned
int
*
sse
)
{
unsigned
int
var
;
int
avg
;
variance
(
src_ptr
,
source_stride
,
ref_ptr
,
recon_stride
,
16
,
2
,
&
var
,
&
avg
);
*
sse
=
var
;
return
(
var
-
((
avg
*
avg
)
>>
5
));
}
unsigned
int
vp9_sub_pixel_variance16x2_c
(
const
unsigned
char
*
src_ptr
,
const
int
src_pixels_per_line
,
const
int
xoffset
,
const
int
yoffset
,
const
unsigned
char
*
dst_ptr
,
const
int
dst_pixels_per_line
,
unsigned
int
*
sse
)
{
unsigned
short
FData3
[
16
*
3
];
// Temp data bufffer used in filtering
unsigned
char
temp2
[
20
*
16
];
const
short
*
HFilter
,
*
VFilter
;
HFilter
=
vp9_bilinear_filters
[
xoffset
];
VFilter
=
vp9_bilinear_filters
[
yoffset
];
var_filter_block2d_bil_first_pass
(
src_ptr
,
FData3
,
src_pixels_per_line
,
1
,
3
,
16
,
HFilter
);
var_filter_block2d_bil_second_pass
(
FData3
,
temp2
,
16
,
16
,
2
,
16
,
VFilter
);
return
vp9_variance16x2_c
(
temp2
,
16
,
dst_ptr
,
dst_pixels_per_line
,
sse
);
}
unsigned
int
vp9_sub_pixel_variance2x16_c
(
const
unsigned
char
*
src_ptr
,
const
int
src_pixels_per_line
,
const
int
xoffset
,
const
int
yoffset
,
const
unsigned
char
*
dst_ptr
,
const
int
dst_pixels_per_line
,
unsigned
int
*
sse
)
{
unsigned
short
FData3
[
2
*
17
];
// Temp data bufffer used in filtering
unsigned
char
temp2
[
2
*
16
];
const
short
*
HFilter
,
*
VFilter
;
HFilter
=
vp9_bilinear_filters
[
xoffset
];
VFilter
=
vp9_bilinear_filters
[
yoffset
];
var_filter_block2d_bil_first_pass
(
src_ptr
,
FData3
,
src_pixels_per_line
,
1
,
17
,
2
,
HFilter
);
var_filter_block2d_bil_second_pass
(
FData3
,
temp2
,
2
,
2
,
16
,
2
,
VFilter
);
return
vp9_variance2x16_c
(
temp2
,
2
,
dst_ptr
,
dst_pixels_per_line
,
sse
);
}
#endif
vp9/vp9_common.mk
View file @
acadcec5
...
...
@@ -53,6 +53,7 @@ VP9_COMMON_SRCS-yes += common/reconintra4x4.h
VP9_COMMON_SRCS-yes
+=
common/rtcd.c
VP9_COMMON_SRCS-yes
+=
common/rtcd_defs.sh
VP9_COMMON_SRCS-yes
+=
common/sadmxn.h
VP9_COMMON_SRCS-yes
+=
common/subpelvar.h
VP9_COMMON_SRCS-yes
+=
common/seg_common.h
VP9_COMMON_SRCS-yes
+=
common/seg_common.c
VP9_COMMON_SRCS-yes
+=
common/setupintrarecon.h
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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