Merge "Use full 32-pixel edge for superblock bestrefmv motion vector ordering." into experimental
This commit is contained in:
commit
1761a6b55a
@ -42,23 +42,39 @@ vp9_prob *vp9_mv_ref_probs(VP9_COMMON *pc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define SP(x) (((x) & 7) << 1)
|
#define SP(x) (((x) & 7) << 1)
|
||||||
unsigned int vp9_sad3x16_c(
|
unsigned int vp9_sad3x16_c(const unsigned char *src_ptr,
|
||||||
const unsigned char *src_ptr,
|
int src_stride,
|
||||||
int src_stride,
|
const unsigned char *ref_ptr,
|
||||||
const unsigned char *ref_ptr,
|
int ref_stride,
|
||||||
int ref_stride,
|
int max_sad) {
|
||||||
int max_sad) {
|
|
||||||
return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 3, 16);
|
return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 3, 16);
|
||||||
}
|
}
|
||||||
unsigned int vp9_sad16x3_c(
|
unsigned int vp9_sad16x3_c(const unsigned char *src_ptr,
|
||||||
const unsigned char *src_ptr,
|
int src_stride,
|
||||||
int src_stride,
|
const unsigned char *ref_ptr,
|
||||||
const unsigned char *ref_ptr,
|
int ref_stride,
|
||||||
int ref_stride,
|
int max_sad) {
|
||||||
int max_sad) {
|
|
||||||
return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 16, 3);
|
return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 16, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_SUPERBLOCKS
|
||||||
|
unsigned int vp9_sad3x32_c(const unsigned char *src_ptr,
|
||||||
|
int src_stride,
|
||||||
|
const unsigned char *ref_ptr,
|
||||||
|
int ref_stride,
|
||||||
|
int max_sad) {
|
||||||
|
return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 3, 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int vp9_sad32x3_c(const unsigned char *src_ptr,
|
||||||
|
int src_stride,
|
||||||
|
const unsigned char *ref_ptr,
|
||||||
|
int ref_stride,
|
||||||
|
int max_sad) {
|
||||||
|
return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 32, 3);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_SUBPELREFMV
|
#if CONFIG_SUBPELREFMV
|
||||||
unsigned int vp9_variance2x16_c(const unsigned char *src_ptr,
|
unsigned int vp9_variance2x16_c(const unsigned char *src_ptr,
|
||||||
const int source_stride,
|
const int source_stride,
|
||||||
@ -93,7 +109,7 @@ unsigned int vp9_sub_pixel_variance16x2_c(const unsigned char *src_ptr,
|
|||||||
const unsigned char *dst_ptr,
|
const unsigned char *dst_ptr,
|
||||||
const int dst_pixels_per_line,
|
const int dst_pixels_per_line,
|
||||||
unsigned int *sse) {
|
unsigned int *sse) {
|
||||||
unsigned short FData3[16 * 3]; // Temp data bufffer used in filtering
|
unsigned short FData3[16 * 3]; // Temp data buffer used in filtering
|
||||||
unsigned char temp2[20 * 16];
|
unsigned char temp2[20 * 16];
|
||||||
const short *HFilter, *VFilter;
|
const short *HFilter, *VFilter;
|
||||||
|
|
||||||
@ -114,7 +130,7 @@ unsigned int vp9_sub_pixel_variance2x16_c(const unsigned char *src_ptr,
|
|||||||
const unsigned char *dst_ptr,
|
const unsigned char *dst_ptr,
|
||||||
const int dst_pixels_per_line,
|
const int dst_pixels_per_line,
|
||||||
unsigned int *sse) {
|
unsigned int *sse) {
|
||||||
unsigned short FData3[2 * 17]; // Temp data bufffer used in filtering
|
unsigned short FData3[2 * 17]; // Temp data buffer used in filtering
|
||||||
unsigned char temp2[2 * 16];
|
unsigned char temp2[2 * 16];
|
||||||
const short *HFilter, *VFilter;
|
const short *HFilter, *VFilter;
|
||||||
|
|
||||||
@ -127,6 +143,76 @@ unsigned int vp9_sub_pixel_variance2x16_c(const unsigned char *src_ptr,
|
|||||||
|
|
||||||
return vp9_variance2x16_c(temp2, 2, dst_ptr, dst_pixels_per_line, sse);
|
return vp9_variance2x16_c(temp2, 2, dst_ptr, dst_pixels_per_line, sse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_SUPERBLOCKS
|
||||||
|
unsigned int vp9_variance2x32_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, 32, &var, &avg);
|
||||||
|
*sse = var;
|
||||||
|
return (var - (((unsigned int)avg * avg) >> 5));
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int vp9_variance32x2_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, 32, 2, &var, &avg);
|
||||||
|
*sse = var;
|
||||||
|
return (var - (((unsigned int)avg * avg) >> 5));
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int vp9_sub_pixel_variance32x2_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[32 * 3]; // Temp data buffer used in filtering
|
||||||
|
unsigned char temp2[20 * 32];
|
||||||
|
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, 32, HFilter);
|
||||||
|
var_filter_block2d_bil_second_pass(FData3, temp2, 32, 32, 2, 32, VFilter);
|
||||||
|
|
||||||
|
return vp9_variance16x2_c(temp2, 32, 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 * 33]; // Temp data buffer used in filtering
|
||||||
|
unsigned char temp2[2 * 32];
|
||||||
|
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, 33, 2, HFilter);
|
||||||
|
var_filter_block2d_bil_second_pass(FData3, temp2, 2, 2, 32, 2, VFilter);
|
||||||
|
|
||||||
|
return vp9_variance2x16_c(temp2, 2, dst_ptr, dst_pixels_per_line, sse);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* check a list of motion vectors by sad score using a number rows of pixels
|
/* check a list of motion vectors by sad score using a number rows of pixels
|
||||||
@ -194,15 +280,39 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd,
|
|||||||
offset = ref_y_stride * row_offset + col_offset;
|
offset = ref_y_stride * row_offset + col_offset;
|
||||||
score = 0;
|
score = 0;
|
||||||
if (xd->up_available) {
|
if (xd->up_available) {
|
||||||
vp9_sub_pixel_variance16x2_c(above_ref + offset, ref_y_stride,
|
#if CONFIG_SUPERBLOCKS
|
||||||
SP(this_mv.as_mv.col), SP(this_mv.as_mv.row),
|
if (xd->mode_info_context->mbmi.encoded_as_sb) {
|
||||||
above_src, xd->dst.y_stride, &sse);
|
vp9_sub_pixel_variance32x2_c(above_ref + offset, ref_y_stride,
|
||||||
|
SP(this_mv.as_mv.col),
|
||||||
|
SP(this_mv.as_mv.row),
|
||||||
|
above_src, xd->dst.y_stride, &sse);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
vp9_sub_pixel_variance16x2_c(above_ref + offset, ref_y_stride,
|
||||||
|
SP(this_mv.as_mv.col),
|
||||||
|
SP(this_mv.as_mv.row),
|
||||||
|
above_src, xd->dst.y_stride, &sse);
|
||||||
|
#if CONFIG_SUPERBLOCKS
|
||||||
|
}
|
||||||
|
#endif
|
||||||
score += sse;
|
score += sse;
|
||||||
}
|
}
|
||||||
if (xd->left_available) {
|
if (xd->left_available) {
|
||||||
vp9_sub_pixel_variance2x16_c(left_ref + offset, ref_y_stride,
|
#if CONFIG_SUPERBLOCKS
|
||||||
SP(this_mv.as_mv.col), SP(this_mv.as_mv.row),
|
if (xd->mode_info_context->mbmi.encoded_as_sb) {
|
||||||
left_src, xd->dst.y_stride, &sse);
|
vp9_sub_pixel_variance2x32_c(left_ref + offset, ref_y_stride,
|
||||||
|
SP(this_mv.as_mv.col),
|
||||||
|
SP(this_mv.as_mv.row),
|
||||||
|
left_src, xd->dst.y_stride, &sse);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
vp9_sub_pixel_variance2x16_c(left_ref + offset, ref_y_stride,
|
||||||
|
SP(this_mv.as_mv.col),
|
||||||
|
SP(this_mv.as_mv.row),
|
||||||
|
left_src, xd->dst.y_stride, &sse);
|
||||||
|
#if CONFIG_SUPERBLOCKS
|
||||||
|
}
|
||||||
|
#endif
|
||||||
score += sse;
|
score += sse;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -213,12 +323,30 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd,
|
|||||||
offset = ref_y_stride * row_offset + col_offset;
|
offset = ref_y_stride * row_offset + col_offset;
|
||||||
score = 0;
|
score = 0;
|
||||||
if (xd->up_available) {
|
if (xd->up_available) {
|
||||||
score += vp9_sad16x3(above_src, xd->dst.y_stride,
|
#if CONFIG_SUPERBLOCKS
|
||||||
above_ref + offset, ref_y_stride, INT_MAX);
|
if (xd->mode_info_context->mbmi.encoded_as_sb) {
|
||||||
|
score += vp9_sad32x3(above_src, xd->dst.y_stride,
|
||||||
|
above_ref + offset, ref_y_stride, INT_MAX);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
score += vp9_sad16x3(above_src, xd->dst.y_stride,
|
||||||
|
above_ref + offset, ref_y_stride, INT_MAX);
|
||||||
|
#if CONFIG_SUPERBLOCKS
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (xd->left_available) {
|
if (xd->left_available) {
|
||||||
score += vp9_sad3x16(left_src, xd->dst.y_stride,
|
#if CONFIG_SUPERBLOCKS
|
||||||
left_ref + offset, ref_y_stride, INT_MAX);
|
if (xd->mode_info_context->mbmi.encoded_as_sb) {
|
||||||
|
score += vp9_sad3x32(left_src, xd->dst.y_stride,
|
||||||
|
left_ref + offset, ref_y_stride, INT_MAX);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
score += vp9_sad3x16(left_src, xd->dst.y_stride,
|
||||||
|
left_ref + offset, ref_y_stride, INT_MAX);
|
||||||
|
#if CONFIG_SUPERBLOCKS
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// Add the entry to our list and then resort the list on score.
|
// Add the entry to our list and then resort the list on score.
|
||||||
|
@ -233,6 +233,16 @@ specialize vp9_sad16x3 sse2
|
|||||||
prototype unsigned int vp9_sad3x16 "const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride, int max_sad"
|
prototype unsigned int vp9_sad3x16 "const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride, int max_sad"
|
||||||
specialize vp9_sad3x16 sse2
|
specialize vp9_sad3x16 sse2
|
||||||
|
|
||||||
|
if [ "$CONFIG_SUPERBLOCKS" = "yes" ]; then
|
||||||
|
|
||||||
|
prototype unsigned int vp9_sad32x3 "const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride, int max_sad"
|
||||||
|
specialize vp9_sad32x3
|
||||||
|
|
||||||
|
prototype unsigned int vp9_sad3x32 "const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride, int max_sad"
|
||||||
|
specialize vp9_sad3x32
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# Encoder functions below this point.
|
# Encoder functions below this point.
|
||||||
#
|
#
|
||||||
|
Loading…
x
Reference in New Issue
Block a user