Clean-up unused 3rd order least squares
Change-Id: Ia18f9f7034dafb9ac0108143d4f65f3f6b1a77d5
diff --git a/av1/common/warped_motion.c b/av1/common/warped_motion.c
index 0418fb1..fb28b04 100644
--- a/av1/common/warped_motion.c
+++ b/av1/common/warped_motion.c
@@ -1508,7 +1508,6 @@
#define LS_PRODUCT2(a, b) \
(((a) * (b)*4 + ((a) + (b)) * 2 * LS_STEP + LS_STEP * LS_STEP * 2) >> 2)
-#if LEAST_SQUARES_ORDER == 2
static int find_affine_int(int np, int *pts1, int *pts2, BLOCK_SIZE bsize,
int mvy, int mvx, WarpedMotionParams *wm, int mi_row,
int mi_col) {
@@ -1642,164 +1641,6 @@
return 0;
}
-#else
-
-static int find_affine_int(int np, int *pts1, int *pts2, BLOCK_SIZE bsize,
- int mvy, int mvx, WarpedMotionParams *wm, int mi_row,
- int mi_col) {
- int32_t A[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
- int32_t Bx[3] = { 0, 0, 0 };
- int32_t By[3] = { 0, 0, 0 };
- int i, n = 0, off;
-
- int64_t C00, C01, C02, C11, C12, C22;
- int64_t Px[3], Py[3];
- int64_t Det, v;
- const int bw = block_size_wide[bsize];
- const int bh = block_size_high[bsize];
- const int cy_offset = AOMMAX(bh, MI_SIZE) / 2 - 1;
- const int cx_offset = AOMMAX(bw, MI_SIZE) / 2 - 1;
-
- // Offsets to make the values in the arrays smaller
- const int ux = mi_col * MI_SIZE * 8, uy = mi_row * MI_SIZE * 8;
- // Let source points (xi, yi) map to destimation points (xi', yi'),
- // for i = 0, 1, 2, .... n-1
- // Then if P = [x0, y0, 1,
- // x1, y1, 1
- // x2, y2, 1,
- // ....
- // ]
- // q = [x0', x1', x2', ... ]'
- // r = [y0', y1', y2', ... ]'
- // the least squares problems that need to be solved are:
- // [h1, h2, dx]' = inv(P'P)P'q and
- // [h3, h4, dy]' = inv(P'P)P'r
- // where the affine transformation is given by:
- // x' = h1.x + h2.y + dx
- // y' = h3.x + h4.y + dy
- //
- // The loop below computes: A = P'P, Bx = P'q, By = P'r
- // We need to just compute inv(A).Bx and inv(A).By for the solutions.
- //
- int sx, sy, dx, dy;
- // Contribution from sample in current block
- sx = cx_offset * 8;
- sy = cy_offset * 8;
- dx = sx + mvx;
- dy = sy + mvy;
- if (abs(sx - dx) < LS_MV_MAX && abs(sy - dy) < LS_MV_MAX) {
- A[0][0] += LS_SQUARE(sx);
- A[0][1] += LS_PRODUCT1(sx, sy);
- A[0][2] += LS_SUM(sx);
- A[1][1] += LS_SQUARE(sy);
- A[1][2] += LS_SUM(sy);
- A[2][2] += 4;
- Bx[0] += LS_PRODUCT2(sx, dx);
- Bx[1] += LS_PRODUCT1(sy, dx);
- Bx[2] += LS_SUM(dx);
- By[0] += LS_PRODUCT1(sx, dy);
- By[1] += LS_PRODUCT2(sy, dy);
- By[2] += LS_SUM(dy);
- n++;
- }
- // Contribution from neighbor block
- for (i = 0; i < np && n < LEAST_SQUARES_SAMPLES_MAX; i++) {
- dx = pts2[i * 2] - ux;
- dy = pts2[i * 2 + 1] - uy;
- sx = pts1[i * 2] - ux;
- sy = pts1[i * 2 + 1] - uy;
- if (abs(sx - dx) < LS_MV_MAX && abs(sy - dy) < LS_MV_MAX) {
- A[0][0] += LS_SQUARE(sx);
- A[0][1] += LS_PRODUCT1(sx, sy);
- A[0][2] += LS_SUM(sx);
- A[1][1] += LS_SQUARE(sy);
- A[1][2] += LS_SUM(sy);
- A[2][2] += 4;
- Bx[0] += LS_PRODUCT2(sx, dx);
- Bx[1] += LS_PRODUCT1(sy, dx);
- Bx[2] += LS_SUM(dx);
- By[0] += LS_PRODUCT1(sx, dy);
- By[1] += LS_PRODUCT2(sy, dy);
- By[2] += LS_SUM(dy);
- n++;
- }
- }
- // Compute Cofactors of A
- C00 = (int64_t)A[1][1] * A[2][2] - (int64_t)A[1][2] * A[1][2];
- C01 = (int64_t)A[1][2] * A[0][2] - (int64_t)A[0][1] * A[2][2];
- C02 = (int64_t)A[0][1] * A[1][2] - (int64_t)A[0][2] * A[1][1];
- C11 = (int64_t)A[0][0] * A[2][2] - (int64_t)A[0][2] * A[0][2];
- C12 = (int64_t)A[0][1] * A[0][2] - (int64_t)A[0][0] * A[1][2];
- C22 = (int64_t)A[0][0] * A[1][1] - (int64_t)A[0][1] * A[0][1];
-
- // Scale by 1/64
- C00 = ROUND_POWER_OF_TWO_SIGNED(C00, 6);
- C01 = ROUND_POWER_OF_TWO_SIGNED(C01, 6);
- C02 = ROUND_POWER_OF_TWO_SIGNED(C02, 6);
- C11 = ROUND_POWER_OF_TWO_SIGNED(C11, 6);
- C12 = ROUND_POWER_OF_TWO_SIGNED(C12, 6);
- C22 = ROUND_POWER_OF_TWO_SIGNED(C22, 6);
-
- // Compute Determinant of A
- Det = C00 * A[0][0] + C01 * A[0][1] + C02 * A[0][2];
- if (Det == 0) return 1;
-
- // These divided by the Det, are the least squares solutions
- Px[0] = C00 * Bx[0] + C01 * Bx[1] + C02 * Bx[2];
- Px[1] = C01 * Bx[0] + C11 * Bx[1] + C12 * Bx[2];
- Px[2] = C02 * Bx[0] + C12 * Bx[1] + C22 * Bx[2];
- Py[0] = C00 * By[0] + C01 * By[1] + C02 * By[2];
- Py[1] = C01 * By[0] + C11 * By[1] + C12 * By[2];
- Py[2] = C02 * By[0] + C12 * By[1] + C22 * By[2];
-
- int16_t shift;
- int64_t iDet;
- iDet = resolve_divisor_64(llabs(Det), &shift) * (Det < 0 ? -1 : 1);
- shift -= WARPEDMODEL_PREC_BITS;
- if (shift < 0) {
- iDet <<= (-shift);
- shift = 0;
- }
-
- v = Px[0] * iDet;
- wm->wmmat[2] = ROUND_POWER_OF_TWO_SIGNED_64(v, shift);
- v = Px[1] * iDet;
- wm->wmmat[3] = ROUND_POWER_OF_TWO_SIGNED_64(v, shift);
- v = Px[2] * iDet;
- wm->wmmat[0] = ROUND_POWER_OF_TWO_SIGNED_64(v, shift + 3);
- // Adjust x displacement for the offset
- off = (ux << WARPEDMODEL_PREC_BITS) - ux * wm->wmmat[2] - uy * wm->wmmat[3];
- wm->wmmat[0] += ROUND_POWER_OF_TWO_SIGNED(off, 3);
-
- v = Py[0] * iDet;
- wm->wmmat[4] = ROUND_POWER_OF_TWO_SIGNED_64(v, shift);
- v = Py[1] * iDet;
- wm->wmmat[5] = ROUND_POWER_OF_TWO_SIGNED_64(v, shift);
- v = Py[2] * iDet;
- wm->wmmat[1] = ROUND_POWER_OF_TWO_SIGNED_64(v, shift + 3);
- // Adjust y displacement for the offset
- off = (uy << WARPEDMODEL_PREC_BITS) - ux * wm->wmmat[4] - uy * wm->wmmat[5];
- wm->wmmat[1] += ROUND_POWER_OF_TWO_SIGNED(off, 3);
- wm->wmmat[6] = wm->wmmat[7] = 0;
-
- // Clamp values
- wm->wmmat[0] = clamp(wm->wmmat[0], -WARPEDMODEL_TRANS_CLAMP,
- WARPEDMODEL_TRANS_CLAMP - 1);
- wm->wmmat[1] = clamp(wm->wmmat[1], -WARPEDMODEL_TRANS_CLAMP,
- WARPEDMODEL_TRANS_CLAMP - 1);
- wm->wmmat[2] = clamp(wm->wmmat[2], -WARPEDMODEL_DIAGAFFINE_CLAMP,
- WARPEDMODEL_DIAGAFFINE_CLAMP - 1);
- wm->wmmat[5] = clamp(wm->wmmat[5], -WARPEDMODEL_DIAGAFFINE_CLAMP,
- WARPEDMODEL_DIAGAFFINE_CLAMP - 1);
- wm->wmmat[3] = clamp(wm->wmmat[3], -WARPEDMODEL_NONDIAGAFFINE_CLAMP,
- WARPEDMODEL_NONDIAGAFFINE_CLAMP - 1);
- wm->wmmat[4] = clamp(wm->wmmat[4], -WARPEDMODEL_NONDIAGAFFINE_CLAMP,
- WARPEDMODEL_NONDIAGAFFINE_CLAMP - 1);
-
- return 0;
-}
-#endif // LEAST_SQUARES_ORDER == 2
-
int find_projection(int np, int *pts1, int *pts2, BLOCK_SIZE bsize, int mvy,
int mvx, WarpedMotionParams *wm_params, int mi_row,
int mi_col) {