Index: source/libvpx/vp9/encoder/vp9_variance.c |
=================================================================== |
--- source/libvpx/vp9/encoder/vp9_variance.c (revision 263011) |
+++ source/libvpx/vp9/encoder/vp9_variance.c (working copy) |
@@ -216,7 +216,7 @@ |
var_filter_block2d_bil_first_pass(src_ptr, fdata3, src_pixels_per_line, |
1, 33, 64, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 64, 64, 32, 64, vfilter); |
- comp_avg_pred(temp3, second_pred, 64, 32, temp2, 64); |
+ vp9_comp_avg_pred(temp3, second_pred, 64, 32, temp2, 64); |
return vp9_variance64x32(temp3, 64, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -273,7 +273,7 @@ |
var_filter_block2d_bil_first_pass(src_ptr, fdata3, src_pixels_per_line, |
1, 65, 32, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 32, 32, 64, 32, vfilter); |
- comp_avg_pred(temp3, second_pred, 32, 64, temp2, 32); |
+ vp9_comp_avg_pred(temp3, second_pred, 32, 64, temp2, 32); |
return vp9_variance32x64(temp3, 32, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -330,7 +330,7 @@ |
var_filter_block2d_bil_first_pass(src_ptr, fdata3, src_pixels_per_line, |
1, 17, 32, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 32, 32, 16, 32, vfilter); |
- comp_avg_pred(temp3, second_pred, 32, 16, temp2, 32); |
+ vp9_comp_avg_pred(temp3, second_pred, 32, 16, temp2, 32); |
return vp9_variance32x16(temp3, 32, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -387,7 +387,7 @@ |
var_filter_block2d_bil_first_pass(src_ptr, fdata3, src_pixels_per_line, |
1, 33, 16, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 16, 16, 32, 16, vfilter); |
- comp_avg_pred(temp3, second_pred, 16, 32, temp2, 16); |
+ vp9_comp_avg_pred(temp3, second_pred, 16, 32, temp2, 16); |
return vp9_variance16x32(temp3, 16, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -417,6 +417,12 @@ |
return (var - (((int64_t)avg * avg) >> 10)); |
} |
+void vp9_get_sse_sum_16x16_c(const uint8_t *src_ptr, int source_stride, |
+ const uint8_t *ref_ptr, int ref_stride, |
+ unsigned int *sse, int *sum) { |
+ variance(src_ptr, source_stride, ref_ptr, ref_stride, 16, 16, sse, sum); |
+} |
+ |
unsigned int vp9_variance16x16_c(const uint8_t *src_ptr, |
int source_stride, |
const uint8_t *ref_ptr, |
@@ -614,7 +620,7 @@ |
// Now filter Verticaly |
var_filter_block2d_bil_second_pass(fdata3, temp2, 4, 4, 4, 4, vfilter); |
- comp_avg_pred(temp3, second_pred, 4, 4, temp2, 4); |
+ vp9_comp_avg_pred(temp3, second_pred, 4, 4, temp2, 4); |
return vp9_variance4x4(temp3, 4, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -658,7 +664,7 @@ |
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); |
- comp_avg_pred(temp3, second_pred, 8, 8, temp2, 8); |
+ vp9_comp_avg_pred(temp3, second_pred, 8, 8, temp2, 8); |
return vp9_variance8x8(temp3, 8, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -703,7 +709,7 @@ |
1, 17, 16, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 16, 16, 16, 16, vfilter); |
- comp_avg_pred(temp3, second_pred, 16, 16, temp2, 16); |
+ vp9_comp_avg_pred(temp3, second_pred, 16, 16, temp2, 16); |
return vp9_variance16x16(temp3, 16, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -747,7 +753,7 @@ |
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); |
- comp_avg_pred(temp3, second_pred, 64, 64, temp2, 64); |
+ vp9_comp_avg_pred(temp3, second_pred, 64, 64, temp2, 64); |
return vp9_variance64x64(temp3, 64, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -791,7 +797,7 @@ |
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); |
- comp_avg_pred(temp3, second_pred, 32, 32, temp2, 32); |
+ vp9_comp_avg_pred(temp3, second_pred, 32, 32, temp2, 32); |
return vp9_variance32x32(temp3, 32, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -955,7 +961,7 @@ |
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); |
- comp_avg_pred(temp3, second_pred, 16, 8, temp2, 16); |
+ vp9_comp_avg_pred(temp3, second_pred, 16, 8, temp2, 16); |
return vp9_variance16x8(temp3, 16, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -999,7 +1005,7 @@ |
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); |
- comp_avg_pred(temp3, second_pred, 8, 16, temp2, 8); |
+ vp9_comp_avg_pred(temp3, second_pred, 8, 16, temp2, 8); |
return vp9_variance8x16(temp3, 8, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -1043,7 +1049,7 @@ |
var_filter_block2d_bil_first_pass(src_ptr, fdata3, src_pixels_per_line, |
1, 5, 8, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 8, 8, 4, 8, vfilter); |
- comp_avg_pred(temp3, second_pred, 8, 4, temp2, 8); |
+ vp9_comp_avg_pred(temp3, second_pred, 8, 4, temp2, 8); |
return vp9_variance8x4(temp3, 8, dst_ptr, dst_pixels_per_line, sse); |
} |
@@ -1089,6 +1095,23 @@ |
var_filter_block2d_bil_first_pass(src_ptr, fdata3, src_pixels_per_line, |
1, 9, 4, hfilter); |
var_filter_block2d_bil_second_pass(fdata3, temp2, 4, 4, 8, 4, vfilter); |
- comp_avg_pred(temp3, second_pred, 4, 8, temp2, 4); |
+ vp9_comp_avg_pred(temp3, second_pred, 4, 8, temp2, 4); |
return vp9_variance4x8(temp3, 4, dst_ptr, dst_pixels_per_line, sse); |
} |
+ |
+ |
+void vp9_comp_avg_pred(uint8_t *comp_pred, const uint8_t *pred, int width, |
+ int height, const uint8_t *ref, int ref_stride) { |
+ int i, j; |
+ |
+ for (i = 0; i < height; i++) { |
+ for (j = 0; j < width; j++) { |
+ int tmp; |
+ tmp = pred[j] + ref[j]; |
+ comp_pred[j] = (tmp + 1) >> 1; |
+ } |
+ comp_pred += width; |
+ pred += width; |
+ ref += ref_stride; |
+ } |
+} |