| Index: source/libvpx/vp8/common/variance_c.c
|
| diff --git a/source/libvpx/vp8/common/variance_c.c b/source/libvpx/vp8/common/variance_c.c
|
| index 773b655efc518128e9ac38c71a025f78ef21e842..79d1ca00c1cc319af84fe351424e510954ff8ee1 100644
|
| --- a/source/libvpx/vp8/common/variance_c.c
|
| +++ b/source/libvpx/vp8/common/variance_c.c
|
| @@ -8,43 +8,34 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| -
|
| -#include "variance.h"
|
| +#include "./vp8_rtcd.h"
|
| #include "filter.h"
|
| +#include "variance.h"
|
|
|
| -
|
| -unsigned int vp8_get_mb_ss_c
|
| -(
|
| - const short *src_ptr
|
| -)
|
| -{
|
| - unsigned int i = 0, sum = 0;
|
| -
|
| - do
|
| - {
|
| - sum += (src_ptr[i] * src_ptr[i]);
|
| - i++;
|
| - }
|
| - while (i < 256);
|
| -
|
| - return sum;
|
| +/* This is a bad idea.
|
| + * ctz = count trailing zeros */
|
| +static int ctz(int a) {
|
| + int b = 0;
|
| + while (a != 1) {
|
| + a >>= 1;
|
| + b++;
|
| + }
|
| + return b;
|
| }
|
|
|
| -
|
| -static void variance(
|
| +static unsigned int 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)
|
| + unsigned int *sse)
|
| {
|
| int i, j;
|
| - int diff;
|
| + int diff, sum;
|
|
|
| - *sum = 0;
|
| + sum = 0;
|
| *sse = 0;
|
|
|
| for (i = 0; i < h; i++)
|
| @@ -52,114 +43,17 @@ static void variance(
|
| for (j = 0; j < w; j++)
|
| {
|
| diff = src_ptr[j] - ref_ptr[j];
|
| - *sum += diff;
|
| + sum += diff;
|
| *sse += diff * diff;
|
| }
|
|
|
| src_ptr += source_stride;
|
| ref_ptr += recon_stride;
|
| }
|
| -}
|
| -
|
| -
|
| -unsigned int vp8_variance16x16_c(
|
| - const unsigned char *src_ptr,
|
| - int source_stride,
|
| - const unsigned char *ref_ptr,
|
| - int recon_stride,
|
| - unsigned int *sse)
|
| -{
|
| - unsigned int var;
|
| - int avg;
|
|
|
| -
|
| - variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg);
|
| - *sse = var;
|
| - return (var - (((unsigned int)avg * avg) >> 8));
|
| + return (*sse - (((unsigned int)sum * sum) >> (int)((ctz(w) + ctz(h)))));
|
| }
|
|
|
| -unsigned int vp8_variance8x16_c(
|
| - const unsigned char *src_ptr,
|
| - int source_stride,
|
| - const unsigned char *ref_ptr,
|
| - int recon_stride,
|
| - unsigned int *sse)
|
| -{
|
| - unsigned int var;
|
| - int avg;
|
| -
|
| -
|
| - variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 16, &var, &avg);
|
| - *sse = var;
|
| - return (var - (((unsigned int)avg * avg) >> 7));
|
| -}
|
| -
|
| -unsigned int vp8_variance16x8_c(
|
| - const unsigned char *src_ptr,
|
| - int source_stride,
|
| - const unsigned char *ref_ptr,
|
| - int recon_stride,
|
| - unsigned int *sse)
|
| -{
|
| - unsigned int var;
|
| - int avg;
|
| -
|
| -
|
| - variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 8, &var, &avg);
|
| - *sse = var;
|
| - return (var - (((unsigned int)avg * avg) >> 7));
|
| -}
|
| -
|
| -
|
| -unsigned int vp8_variance8x8_c(
|
| - const unsigned char *src_ptr,
|
| - int source_stride,
|
| - const unsigned char *ref_ptr,
|
| - int recon_stride,
|
| - unsigned int *sse)
|
| -{
|
| - unsigned int var;
|
| - int avg;
|
| -
|
| -
|
| - variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, &var, &avg);
|
| - *sse = var;
|
| - return (var - (((unsigned int)avg * avg) >> 6));
|
| -}
|
| -
|
| -unsigned int vp8_variance4x4_c(
|
| - const unsigned char *src_ptr,
|
| - int source_stride,
|
| - const unsigned char *ref_ptr,
|
| - int recon_stride,
|
| - unsigned int *sse)
|
| -{
|
| - unsigned int var;
|
| - int avg;
|
| -
|
| -
|
| - variance(src_ptr, source_stride, ref_ptr, recon_stride, 4, 4, &var, &avg);
|
| - *sse = var;
|
| - return (var - (((unsigned int)avg * avg) >> 4));
|
| -}
|
| -
|
| -
|
| -unsigned int vp8_mse16x16_c(
|
| - const unsigned char *src_ptr,
|
| - int source_stride,
|
| - const unsigned char *ref_ptr,
|
| - int recon_stride,
|
| - unsigned int *sse)
|
| -{
|
| - unsigned int var;
|
| - int avg;
|
| -
|
| - variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg);
|
| - *sse = var;
|
| - return var;
|
| -}
|
| -
|
| -
|
| /****************************************************************************
|
| *
|
| * ROUTINE : filter_block2d_bil_first_pass
|
| @@ -303,7 +197,7 @@ unsigned int vp8_sub_pixel_variance4x4_c
|
| /* Now filter Verticaly */
|
| var_filter_block2d_bil_second_pass(FData3, temp2, 4, 4, 4, 4, VFilter);
|
|
|
| - return vp8_variance4x4_c(temp2, 4, dst_ptr, dst_pixels_per_line, sse);
|
| + return variance(temp2, 4, dst_ptr, dst_pixels_per_line, 4, 4, sse);
|
| }
|
|
|
|
|
| @@ -328,7 +222,7 @@ unsigned int vp8_sub_pixel_variance8x8_c
|
| var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9, 8, HFilter);
|
| var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 8, 8, VFilter);
|
|
|
| - return vp8_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse);
|
| + return variance(temp2, 8, dst_ptr, dst_pixels_per_line, 8, 8, sse);
|
| }
|
|
|
| unsigned int vp8_sub_pixel_variance16x16_c
|
| @@ -352,7 +246,7 @@ unsigned int vp8_sub_pixel_variance16x16_c
|
| var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17, 16, HFilter);
|
| var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 16, 16, VFilter);
|
|
|
| - return vp8_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse);
|
| + return variance(temp2, 16, dst_ptr, dst_pixels_per_line, 16, 16, sse);
|
| }
|
|
|
|
|
| @@ -428,7 +322,7 @@ unsigned int vp8_sub_pixel_variance16x8_c
|
| var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9, 16, HFilter);
|
| var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 8, 16, VFilter);
|
|
|
| - return vp8_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse);
|
| + return variance(temp2, 16, dst_ptr, dst_pixels_per_line, 16, 8, sse);
|
| }
|
|
|
| unsigned int vp8_sub_pixel_variance8x16_c
|
| @@ -454,5 +348,5 @@ unsigned int vp8_sub_pixel_variance8x16_c
|
| var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17, 8, HFilter);
|
| var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 16, 8, VFilter);
|
|
|
| - return vp8_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse);
|
| + return variance(temp2, 8, dst_ptr, dst_pixels_per_line, 8, 16, sse);
|
| }
|
|
|