| Index: source/libvpx/vp9/encoder/vp9_variance.h
|
| diff --git a/source/libvpx/vp9/encoder/vp9_variance.h b/source/libvpx/vp9/encoder/vp9_variance.h
|
| index 53148f23c567488a2d10cf6e929a5bf499ecc7a7..8fc47a85057391d668e82678ebd058a5a035d439 100644
|
| --- a/source/libvpx/vp9/encoder/vp9_variance.h
|
| +++ b/source/libvpx/vp9/encoder/vp9_variance.h
|
| @@ -12,31 +12,64 @@
|
| #define VP9_ENCODER_VP9_VARIANCE_H_
|
|
|
| #include "vpx/vpx_integer.h"
|
| +#include "vpx_ports/mem.h"
|
|
|
| #ifdef __cplusplus
|
| extern "C" {
|
| #endif
|
|
|
| -void variance(const uint8_t *a, int a_stride,
|
| - const uint8_t *b, int b_stride,
|
| - int w, int h,
|
| - unsigned int *sse, int *sum);
|
| +// TODO(johannkoenig): All functions which depend on
|
| +// [highbd_][8|10|12_]variance should be refactored or moved to vpx_dsp.
|
| +static void variance(const uint8_t *a, int a_stride,
|
| + const uint8_t *b, int b_stride,
|
| + int w, int h, unsigned int *sse, int *sum) {
|
| + int i, j;
|
| +
|
| + *sum = 0;
|
| + *sse = 0;
|
| +
|
| + for (i = 0; i < h; i++) {
|
| + for (j = 0; j < w; j++) {
|
| + const int diff = a[j] - b[j];
|
| + *sum += diff;
|
| + *sse += diff * diff;
|
| + }
|
| +
|
| + a += a_stride;
|
| + b += b_stride;
|
| + }
|
| +}
|
|
|
| #if CONFIG_VP9_HIGHBITDEPTH
|
| -void highbd_variance(const uint8_t *a8, int a_stride,
|
| - const uint8_t *b8, int b_stride,
|
| - int w, int h,
|
| - unsigned int *sse, int *sum);
|
| -
|
| -void highbd_10_variance(const uint8_t *a8, int a_stride,
|
| - const uint8_t *b8, int b_stride,
|
| - int w, int h,
|
| - unsigned int *sse, int *sum);
|
| -
|
| -void highbd_12_variance(const uint8_t *a8, int a_stride,
|
| - const uint8_t *b8, int b_stride,
|
| - int w, int h,
|
| - unsigned int *sse, int *sum);
|
| +static void highbd_variance64(const uint8_t *a8, int a_stride,
|
| + const uint8_t *b8, int b_stride,
|
| + int w, int h, uint64_t *sse, uint64_t *sum) {
|
| + int i, j;
|
| +
|
| + uint16_t *a = CONVERT_TO_SHORTPTR(a8);
|
| + uint16_t *b = CONVERT_TO_SHORTPTR(b8);
|
| + *sum = 0;
|
| + *sse = 0;
|
| +
|
| + for (i = 0; i < h; i++) {
|
| + for (j = 0; j < w; j++) {
|
| + const int diff = a[j] - b[j];
|
| + *sum += diff;
|
| + *sse += diff * diff;
|
| + }
|
| + a += a_stride;
|
| + b += b_stride;
|
| + }
|
| +}
|
| +static void highbd_8_variance(const uint8_t *a8, int a_stride,
|
| + const uint8_t *b8, int b_stride,
|
| + int w, int h, unsigned int *sse, int *sum) {
|
| + uint64_t sse_long = 0;
|
| + uint64_t sum_long = 0;
|
| + highbd_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long);
|
| + *sse = (unsigned int)sse_long;
|
| + *sum = (int)sum_long;
|
| +}
|
| #endif
|
|
|
| typedef unsigned int(*vp9_sad_fn_t)(const uint8_t *src_ptr,
|
| @@ -95,15 +128,6 @@ typedef struct vp9_variance_vtable {
|
| vp9_sad_multi_d_fn_t sdx4df;
|
| } vp9_variance_fn_ptr_t;
|
|
|
| -void vp9_comp_avg_pred(uint8_t *comp_pred, const uint8_t *pred, int width,
|
| - int height, const uint8_t *ref, int ref_stride);
|
| -
|
| -#if CONFIG_VP9_HIGHBITDEPTH
|
| -void vp9_highbd_comp_avg_pred(uint16_t *comp_pred, const uint8_t *pred,
|
| - int width, int height,
|
| - const uint8_t *ref, int ref_stride);
|
| -#endif
|
| -
|
| #ifdef __cplusplus
|
| } // extern "C"
|
| #endif
|
|
|