| /* |
| * Copyright (c) 2012 The WebM project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "block.h" |
| #include "variance.h" |
| |
| #if CONFIG_ROTATION |
| |
| int vp8_find_best_rotation(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *bestmv, |
| int_mv *ref_mv, int *bri, int error_per_bit, |
| const vp8_variance_fn_ptr_t *vfp, int *mvcost[2], |
| int *distortion, unsigned int *sse1) |
| { |
| unsigned char *z = (*(b->base_src) + b->src); |
| |
| int ri; |
| |
| int y_stride; |
| |
| unsigned int besterr; |
| int br = bestmv->as_mv.row; |
| int bc = bestmv->as_mv.col; |
| unsigned char *y = *(d->base_pre) + d->pre + br * d->pre_stride + bc; |
| y_stride = d->pre_stride; |
| |
| // calculate central point error |
| besterr = vfp->vf(y, y_stride, z, b->src_stride, sse1); |
| *distortion = besterr; |
| |
| // find the best matching rotation |
| *bri = 5; |
| for (ri = 0; ri < ROTATIONS; ri++) |
| { |
| unsigned int this_err; |
| unsigned char pb[256]; |
| predict_rotated_16x16(ri, y, y_stride, pb, 16); |
| this_err = vfp->vf(pb, 16, z, b->src_stride, sse1); |
| |
| if (this_err < besterr) |
| { |
| *bri = ri; |
| besterr = this_err; |
| } |
| } |
| *sse1 = besterr; |
| *distortion = besterr; |
| |
| return 0; |
| } |
| |
| #endif |