Index: source/libvpx/vp9/encoder/vp9_variance_c.c |
=================================================================== |
--- source/libvpx/vp9/encoder/vp9_variance_c.c (revision 177019) |
+++ source/libvpx/vp9/encoder/vp9_variance_c.c (working copy) |
@@ -14,7 +14,7 @@ |
#include "vp9/common/vp9_subpelvar.h" |
#include "vpx/vpx_integer.h" |
-unsigned int vp9_get_mb_ss_c(const short *src_ptr) { |
+unsigned int vp9_get_mb_ss_c(const int16_t *src_ptr) { |
unsigned int i, sum = 0; |
for (i = 0; i < 256; i++) { |
@@ -24,12 +24,22 @@ |
return sum; |
} |
+unsigned int vp9_variance64x64_c(const uint8_t *src_ptr, |
+ int source_stride, |
+ const uint8_t *ref_ptr, |
+ int recon_stride, |
+ unsigned int *sse) { |
+ unsigned int var; |
+ int avg; |
+ variance(src_ptr, source_stride, ref_ptr, recon_stride, 64, 64, &var, &avg); |
+ *sse = var; |
+ return (var - (((int64_t)avg * avg) >> 12)); |
+} |
-#if CONFIG_SUPERBLOCKS |
-unsigned int vp9_variance32x32_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance32x32_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -39,11 +49,10 @@ |
*sse = var; |
return (var - (((int64_t)avg * avg) >> 10)); |
} |
-#endif |
-unsigned int vp9_variance16x16_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance16x16_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -54,9 +63,9 @@ |
return (var - (((unsigned int)avg * avg) >> 8)); |
} |
-unsigned int vp9_variance8x16_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance8x16_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -67,9 +76,9 @@ |
return (var - (((unsigned int)avg * avg) >> 7)); |
} |
-unsigned int vp9_variance16x8_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance16x8_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -81,9 +90,9 @@ |
} |
-unsigned int vp9_variance8x8_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance8x8_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -94,9 +103,9 @@ |
return (var - (((unsigned int)avg * avg) >> 6)); |
} |
-unsigned int vp9_variance4x4_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance4x4_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -108,9 +117,9 @@ |
} |
-unsigned int vp9_mse16x16_c(const unsigned char *src_ptr, |
+unsigned int vp9_mse16x16_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
unsigned int var; |
@@ -122,16 +131,16 @@ |
} |
-unsigned int vp9_sub_pixel_variance4x4_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_variance4x4_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
- unsigned char temp2[20 * 16]; |
- const short *HFilter, *VFilter; |
- unsigned short FData3[5 * 4]; // Temp data bufffer used in filtering |
+ uint8_t temp2[20 * 16]; |
+ const int16_t *HFilter, *VFilter; |
+ uint16_t FData3[5 * 4]; // Temp data bufffer used in filtering |
HFilter = vp9_bilinear_filters[xoffset]; |
VFilter = vp9_bilinear_filters[yoffset]; |
@@ -146,16 +155,16 @@ |
} |
-unsigned int vp9_sub_pixel_variance8x8_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_variance8x8_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
- unsigned short FData3[9 * 8]; // Temp data bufffer used in filtering |
- unsigned char temp2[20 * 16]; |
- const short *HFilter, *VFilter; |
+ uint16_t FData3[9 * 8]; // Temp data bufffer used in filtering |
+ uint8_t temp2[20 * 16]; |
+ const int16_t *HFilter, *VFilter; |
HFilter = vp9_bilinear_filters[xoffset]; |
VFilter = vp9_bilinear_filters[yoffset]; |
@@ -166,16 +175,16 @@ |
return vp9_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); |
} |
-unsigned int vp9_sub_pixel_variance16x16_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_variance16x16_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
- unsigned short FData3[17 * 16]; // Temp data bufffer used in filtering |
- unsigned char temp2[20 * 16]; |
- const short *HFilter, *VFilter; |
+ uint16_t FData3[17 * 16]; // Temp data bufffer used in filtering |
+ uint8_t temp2[20 * 16]; |
+ const int16_t *HFilter, *VFilter; |
HFilter = vp9_bilinear_filters[xoffset]; |
VFilter = vp9_bilinear_filters[yoffset]; |
@@ -186,94 +195,133 @@ |
return vp9_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); |
} |
-#if CONFIG_SUPERBLOCKS |
-unsigned int vp9_sub_pixel_variance32x32_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_variance64x64_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
- unsigned short FData3[33 * 32]; // Temp data bufffer used in filtering |
- unsigned char temp2[36 * 32]; |
- const short *HFilter, *VFilter; |
+ uint16_t FData3[65 * 64]; // Temp data bufffer used in filtering |
+ uint8_t temp2[68 * 64]; |
+ const int16_t *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, 65, 64, HFilter); |
+ var_filter_block2d_bil_second_pass(FData3, temp2, 64, 64, 64, 64, VFilter); |
+ |
+ return vp9_variance64x64_c(temp2, 64, dst_ptr, dst_pixels_per_line, sse); |
+} |
+ |
+unsigned int vp9_sub_pixel_variance32x32_c(const uint8_t *src_ptr, |
+ int src_pixels_per_line, |
+ int xoffset, |
+ int yoffset, |
+ const uint8_t *dst_ptr, |
+ int dst_pixels_per_line, |
+ unsigned int *sse) { |
+ uint16_t FData3[33 * 32]; // Temp data bufffer used in filtering |
+ uint8_t temp2[36 * 32]; |
+ const int16_t *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, 32, HFilter); |
var_filter_block2d_bil_second_pass(FData3, temp2, 32, 32, 32, 32, VFilter); |
return vp9_variance32x32_c(temp2, 32, dst_ptr, dst_pixels_per_line, sse); |
} |
-#endif |
-unsigned int vp9_variance_halfpixvar16x16_h_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar16x16_h_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 0, |
ref_ptr, recon_stride, sse); |
} |
-#if CONFIG_SUPERBLOCKS |
-unsigned int vp9_variance_halfpixvar32x32_h_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar32x32_h_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 0, |
ref_ptr, recon_stride, sse); |
} |
-#endif |
+unsigned int vp9_variance_halfpixvar64x64_h_c(const uint8_t *src_ptr, |
+ int source_stride, |
+ const uint8_t *ref_ptr, |
+ int recon_stride, |
+ unsigned int *sse) { |
+ return vp9_sub_pixel_variance64x64_c(src_ptr, source_stride, 8, 0, |
+ ref_ptr, recon_stride, sse); |
+} |
-unsigned int vp9_variance_halfpixvar16x16_v_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar16x16_v_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 0, 8, |
ref_ptr, recon_stride, sse); |
} |
-#if CONFIG_SUPERBLOCKS |
-unsigned int vp9_variance_halfpixvar32x32_v_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar32x32_v_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 0, 8, |
ref_ptr, recon_stride, sse); |
} |
-#endif |
-unsigned int vp9_variance_halfpixvar16x16_hv_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar64x64_v_c(const uint8_t *src_ptr, |
+ int source_stride, |
+ const uint8_t *ref_ptr, |
+ int recon_stride, |
+ unsigned int *sse) { |
+ return vp9_sub_pixel_variance64x64_c(src_ptr, source_stride, 0, 8, |
+ ref_ptr, recon_stride, sse); |
+} |
+ |
+unsigned int vp9_variance_halfpixvar16x16_hv_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 8, |
ref_ptr, recon_stride, sse); |
} |
-#if CONFIG_SUPERBLOCKS |
-unsigned int vp9_variance_halfpixvar32x32_hv_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar32x32_hv_c(const uint8_t *src_ptr, |
int source_stride, |
- const unsigned char *ref_ptr, |
+ const uint8_t *ref_ptr, |
int recon_stride, |
unsigned int *sse) { |
return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 8, |
ref_ptr, recon_stride, sse); |
} |
-#endif |
-unsigned int vp9_sub_pixel_mse16x16_c(const unsigned char *src_ptr, |
+unsigned int vp9_variance_halfpixvar64x64_hv_c(const uint8_t *src_ptr, |
+ int source_stride, |
+ const uint8_t *ref_ptr, |
+ int recon_stride, |
+ unsigned int *sse) { |
+ return vp9_sub_pixel_variance64x64_c(src_ptr, source_stride, 8, 8, |
+ ref_ptr, recon_stride, sse); |
+} |
+ |
+unsigned int vp9_sub_pixel_mse16x16_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
vp9_sub_pixel_variance16x16_c(src_ptr, src_pixels_per_line, |
@@ -282,12 +330,11 @@ |
return *sse; |
} |
-#if CONFIG_SUPERBLOCKS |
-unsigned int vp9_sub_pixel_mse32x32_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_mse32x32_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
vp9_sub_pixel_variance32x32_c(src_ptr, src_pixels_per_line, |
@@ -295,18 +342,30 @@ |
dst_pixels_per_line, sse); |
return *sse; |
} |
-#endif |
-unsigned int vp9_sub_pixel_variance16x8_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_mse64x64_c(const uint8_t *src_ptr, |
+ int src_pixels_per_line, |
+ int xoffset, |
+ int yoffset, |
+ const uint8_t *dst_ptr, |
+ int dst_pixels_per_line, |
+ unsigned int *sse) { |
+ vp9_sub_pixel_variance64x64_c(src_ptr, src_pixels_per_line, |
+ xoffset, yoffset, dst_ptr, |
+ dst_pixels_per_line, sse); |
+ return *sse; |
+} |
+ |
+unsigned int vp9_sub_pixel_variance16x8_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
- unsigned short FData3[16 * 9]; // Temp data bufffer used in filtering |
- unsigned char temp2[20 * 16]; |
- const short *HFilter, *VFilter; |
+ uint16_t FData3[16 * 9]; // Temp data bufffer used in filtering |
+ uint8_t temp2[20 * 16]; |
+ const int16_t *HFilter, *VFilter; |
HFilter = vp9_bilinear_filters[xoffset]; |
VFilter = vp9_bilinear_filters[yoffset]; |
@@ -317,16 +376,16 @@ |
return vp9_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); |
} |
-unsigned int vp9_sub_pixel_variance8x16_c(const unsigned char *src_ptr, |
+unsigned int vp9_sub_pixel_variance8x16_c(const uint8_t *src_ptr, |
int src_pixels_per_line, |
int xoffset, |
int yoffset, |
- const unsigned char *dst_ptr, |
+ const uint8_t *dst_ptr, |
int dst_pixels_per_line, |
unsigned int *sse) { |
- unsigned short FData3[9 * 16]; // Temp data bufffer used in filtering |
- unsigned char temp2[20 * 16]; |
- const short *HFilter, *VFilter; |
+ uint16_t FData3[9 * 16]; // Temp data bufffer used in filtering |
+ uint8_t temp2[20 * 16]; |
+ const int16_t *HFilter, *VFilter; |
HFilter = vp9_bilinear_filters[xoffset]; |
VFilter = vp9_bilinear_filters[yoffset]; |