ref: 61416aedc269eceb1c85e553cd6da9a9884b9d7d
parent: 3fa1348d5fa06585e40bf402f3c9cd7be7839c3a
author: Yaowu Xu <yaowu@google.com>
date: Wed Nov 14 05:32:39 EST 2012
subpelrefmv for superblocks duplicate code clean-up and variable name corrections Change-Id: Ibc4703228e652ec425125de5e7bc038fa46595c5
--- a/vp9/common/findnearmv.c
+++ b/vp9/common/findnearmv.c
@@ -57,24 +57,6 @@
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
unsigned int vp9_variance2x16_c(const unsigned char *src_ptr,
const int source_stride,
@@ -81,12 +63,9 @@
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 - (((unsigned int)avg * avg) >> 5));
+ int sum;
+ variance(src_ptr, source_stride, ref_ptr, recon_stride, 2, 16, sse, &sum);
+ return (*sse - (((unsigned int)sum * sum) >> 5));
}
unsigned int vp9_variance16x2_c(const unsigned char *src_ptr,
@@ -94,12 +73,9 @@
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 - (((unsigned int)avg * avg) >> 5));
+ int sum;
+ variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 2, sse, &sum);
+ return (*sse - (((unsigned int)sum * sum) >> 5));
}
unsigned int vp9_sub_pixel_variance16x2_c(const unsigned char *src_ptr,
@@ -110,7 +86,7 @@
const int dst_pixels_per_line,
unsigned int *sse) {
unsigned short FData3[16 * 3]; // Temp data buffer used in filtering
- unsigned char temp2[20 * 16];
+ unsigned char temp2[2 * 16];
const short *HFilter, *VFilter;
HFilter = vp9_bilinear_filters[xoffset];
@@ -143,77 +119,7 @@
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) >> 6));
-}
-
-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) >> 6));
-}
-
-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_variance32x2_c(temp2, 32, dst_ptr, dst_pixels_per_line, sse);
-}
-
-unsigned int vp9_sub_pixel_variance2x32_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_variance2x32_c(temp2, 2, dst_ptr, dst_pixels_per_line, sse);
-}
#endif
-#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
@@ -231,9 +137,9 @@
unsigned char *left_src;
unsigned char *above_ref;
unsigned char *left_ref;
- int score;
- int sse;
- int ref_scores[MAX_MV_REFS] = {0};
+ unsigned int score;
+ unsigned int sse;
+ unsigned int ref_scores[MAX_MV_REFS] = {0};
int_mv sorted_mvs[MAX_MV_REFS];
int zero_seen = FALSE;
@@ -274,6 +180,7 @@
xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN,
xd->mb_to_top_edge - LEFT_TOP_MARGIN + 24,
xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN);
+
#if CONFIG_SUBPELREFMV
row_offset = this_mv.as_mv.row >> 3;
col_offset = this_mv.as_mv.col >> 3;
@@ -280,40 +187,39 @@
offset = ref_y_stride * row_offset + col_offset;
score = 0;
if (xd->up_available) {
+ 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);
+ score += sse;
#if CONFIG_SUPERBLOCKS
if (xd->mode_info_context->mbmi.encoded_as_sb) {
- vp9_sub_pixel_variance32x2_c(above_ref + offset, ref_y_stride,
+ vp9_sub_pixel_variance16x2_c(above_ref + offset + 16,
+ 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
+ above_src + 16, xd->dst.y_stride, &sse);
+ score += sse;
}
#endif
- score += sse;
}
if (xd->left_available) {
+ 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);
+ score += sse;
#if CONFIG_SUPERBLOCKS
if (xd->mode_info_context->mbmi.encoded_as_sb) {
- vp9_sub_pixel_variance2x32_c(left_ref + offset, ref_y_stride,
+ vp9_sub_pixel_variance2x16_c(left_ref + offset + ref_y_stride * 16,
+ 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
+ left_src + xd->dst.y_stride * 16,
+ xd->dst.y_stride, &sse);
+ score += sse;
}
#endif
- score += sse;
}
#else
row_offset = (this_mv.as_mv.row > 0) ?
@@ -323,28 +229,24 @@
offset = ref_y_stride * row_offset + col_offset;
score = 0;
if (xd->up_available) {
+ score += vp9_sad16x3(above_src, xd->dst.y_stride,
+ above_ref + offset, ref_y_stride, INT_MAX);
#if CONFIG_SUPERBLOCKS
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
+ score += vp9_sad16x3(above_src + 16, xd->dst.y_stride,
+ above_ref + offset + 16, ref_y_stride, INT_MAX);
}
#endif
}
if (xd->left_available) {
+ score += vp9_sad3x16(left_src, xd->dst.y_stride,
+ left_ref + offset, ref_y_stride, INT_MAX);
#if CONFIG_SUPERBLOCKS
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
+ score += vp9_sad3x16(left_src + xd->dst.y_stride * 16,
+ xd->dst.y_stride,
+ left_ref + offset + ref_y_stride * 16,
+ ref_y_stride, INT_MAX);
}
#endif
}