From: Yaowu Xu Date: Wed, 14 Nov 2012 18:32:39 +0000 (-0800) Subject: subpelrefmv for superblocks X-Git-Tag: v1.3.0~1217^2~93^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=61416aedc269eceb1c85e553cd6da9a9884b9d7d;p=libvpx subpelrefmv for superblocks duplicate code clean-up and variable name corrections Change-Id: Ibc4703228e652ec425125de5e7bc038fa46595c5 --- diff --git a/vp9/common/findnearmv.c b/vp9/common/findnearmv.c index 2daa344d7..768abf23e 100644 --- a/vp9/common/findnearmv.c +++ b/vp9/common/findnearmv.c @@ -57,36 +57,15 @@ unsigned int vp9_sad16x3_c(const unsigned char *src_ptr, 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, 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 @@ unsigned int vp9_variance16x2_c(const unsigned char *src_ptr, 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 @@ unsigned int vp9_sub_pixel_variance16x2_c(const unsigned char *src_ptr, 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,76 +119,6 @@ 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); } - -#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 @@ -231,9 +137,9 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd, 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,46 +180,46 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd, 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; 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 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd, 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 }