Merge changes I13eed9cb,I3b213790,I7232f9ae into nextgenv2
* changes:
Remove VP10 style bitreader and bitwriter wrappers
Rename av1_ans_test to match aom/master.
Migrate bitreader to the interface from aom/master
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 4a0466f..94eb089 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -146,7 +146,7 @@
PREDICTION_MODE as_mode;
int_mv as_mv[2]; // first, second inter predictor motion vectors
#if CONFIG_REF_MV
- int_mv pred_mv_s8[2];
+ int_mv pred_mv[2];
#endif
#if CONFIG_EXT_INTER
int_mv ref_mv[2];
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index 24b075b..96646d0 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -282,7 +282,7 @@
return block_idx >= 0 && candidate->mbmi.sb_type < BLOCK_8X8
? candidate
->bmi[idx_n_column_to_subblock[block_idx][search_col == 0]]
- .pred_mv_s8[which_mv]
+ .pred_mv[which_mv]
: candidate->mbmi.pred_mv[which_mv];
}
#endif
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index e166fef..d97e280 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -951,7 +951,7 @@
MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
BLOCK_SIZE bsize = mbmi->sb_type;
int_mv *pred_mv =
- (bsize >= BLOCK_8X8) ? mbmi->pred_mv : xd->mi[0]->bmi[block].pred_mv_s8;
+ (bsize >= BLOCK_8X8) ? mbmi->pred_mv : xd->mi[0]->bmi[block].pred_mv;
#endif
(void)ref_frame;
@@ -1462,8 +1462,8 @@
}
#if CONFIG_REF_MV
- mbmi->pred_mv[0].as_int = mi->bmi[3].pred_mv_s8[0].as_int;
- mbmi->pred_mv[1].as_int = mi->bmi[3].pred_mv_s8[1].as_int;
+ mbmi->pred_mv[0].as_int = mi->bmi[3].pred_mv[0].as_int;
+ mbmi->pred_mv[1].as_int = mi->bmi[3].pred_mv[1].as_int;
#endif
mi->mbmi.mode = b_mode;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index c104f35..7636151 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1269,7 +1269,7 @@
#endif
#else
#if CONFIG_REF_MV
- &mi->bmi[j].pred_mv_s8[ref].as_mv, is_compound,
+ &mi->bmi[j].pred_mv[ref].as_mv, is_compound,
#else
&mbmi_ext->ref_mvs[mbmi->ref_frame[ref]][0].as_mv,
#endif // CONFIG_REF_MV
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c
index 6e1b87a..ee627bd 100644
--- a/av1/encoder/encodemv.c
+++ b/av1/encoder/encodemv.c
@@ -430,7 +430,7 @@
if (mi->bmi[i].as_mode == NEWMV)
inc_mvs(mbmi, mbmi_ext, mi->bmi[i].as_mv,
#if CONFIG_REF_MV
- mi->bmi[i].pred_mv_s8, td->counts->mv);
+ mi->bmi[i].pred_mv, td->counts->mv);
#else
&td->counts->mv);
#endif
diff --git a/av1/encoder/ransac.c b/av1/encoder/ransac.c
index 86177a0..0a26396 100644
--- a/av1/encoder/ransac.c
+++ b/av1/encoder/ransac.c
@@ -325,6 +325,68 @@
typedef void (*DenormalizeFunc)(double *params, double *T1, double *T2);
typedef int (*FindTransformationFunc)(int points, double *points1,
double *points2, double *params);
+typedef void (*ProjectPointsDoubleFunc)(double *mat, double *points,
+ double *proj, const int n,
+ const int stride_points,
+ const int stride_proj);
+
+static void project_points_double_translation(double *mat, double *points,
+ double *proj, const int n,
+ const int stride_points,
+ const int stride_proj) {
+ int i;
+ for (i = 0; i < n; ++i) {
+ const double x = *(points++), y = *(points++);
+ *(proj++) = x + mat[1];
+ *(proj++) = y + mat[0];
+ points += stride_points - 2;
+ proj += stride_proj - 2;
+ }
+}
+
+static void project_points_double_rotzoom(double *mat, double *points,
+ double *proj, const int n,
+ const int stride_points,
+ const int stride_proj) {
+ int i;
+ for (i = 0; i < n; ++i) {
+ const double x = *(points++), y = *(points++);
+ *(proj++) = mat[3] * x + mat[2] * y + mat[1];
+ *(proj++) = -mat[2] * x + mat[3] * y + mat[0];
+ points += stride_points - 2;
+ proj += stride_proj - 2;
+ }
+}
+
+static void project_points_double_affine(double *mat, double *points,
+ double *proj, const int n,
+ const int stride_points,
+ const int stride_proj) {
+ int i;
+ for (i = 0; i < n; ++i) {
+ const double x = *(points++), y = *(points++);
+ *(proj++) = mat[3] * x + mat[2] * y + mat[1];
+ *(proj++) = mat[4] * x + mat[5] * y + mat[0];
+ points += stride_points - 2;
+ proj += stride_proj - 2;
+ }
+}
+
+static void project_points_double_homography(double *mat, double *points,
+ double *proj, const int n,
+ const int stride_points,
+ const int stride_proj) {
+ int i;
+ double x, y, Z;
+ for (i = 0; i < n; ++i) {
+ x = *(points++), y = *(points++);
+ Z = 1. / (mat[7] * x + mat[6] * y + 1);
+ *(proj++) = (mat[1] * x + mat[0] * y + mat[3]) * Z;
+ *(proj++) = (mat[2] * x + mat[4] * y + mat[4]) * Z;
+ points += stride_points - 2;
+ proj += stride_proj - 2;
+ }
+}
static int get_rand_indices(int npoints, int minpts, int *indices) {
int i, j;
@@ -353,7 +415,7 @@
const int paramdim, IsDegenerateFunc is_degenerate,
NormalizeFunc normalize, DenormalizeFunc denormalize,
FindTransformationFunc find_transformation,
- ProjectPointsFunc projectpoints, TransformationType type) {
+ ProjectPointsDoubleFunc projectpoints) {
static const double INLIER_THRESHOLD_NORMALIZED = 0.1;
static const double INLIER_THRESHOLD_UNNORMALIZED = 1.0;
static const double PROBABILITY_REQUIRED = 0.9;
@@ -380,9 +442,8 @@
double *inlier_set1;
double *inlier_set2;
double *corners1;
- int *corners1_int;
double *corners2;
- int *image1_coord;
+ double *image1_coord;
int *inlier_mask;
double *cnp1, *cnp2;
@@ -406,13 +467,12 @@
inlier_set1 = (double *)aom_malloc(sizeof(*inlier_set1) * npoints * 2);
inlier_set2 = (double *)aom_malloc(sizeof(*inlier_set2) * npoints * 2);
corners1 = (double *)aom_malloc(sizeof(*corners1) * npoints * 2);
- corners1_int = (int *)aom_malloc(sizeof(*corners1_int) * npoints * 2);
corners2 = (double *)aom_malloc(sizeof(*corners2) * npoints * 2);
- image1_coord = (int *)aom_malloc(sizeof(*image1_coord) * npoints * 2);
+ image1_coord = (double *)aom_malloc(sizeof(*image1_coord) * npoints * 2);
inlier_mask = (int *)aom_malloc(sizeof(*inlier_mask) * npoints);
if (!(best_inlier_set1 && best_inlier_set2 && inlier_set1 && inlier_set2 &&
- corners1 && corners1_int && corners2 && image1_coord && inlier_mask)) {
+ corners1 && corners2 && image1_coord && inlier_mask)) {
ret_val = 1;
goto finish_ransac;
}
@@ -465,20 +525,11 @@
continue;
}
- for (i = 0; i < npoints; ++i) {
- corners1_int[2 * i] = (int)corners1[i * 2];
- corners1_int[2 * i + 1] = (int)corners1[i * 2 + 1];
- }
-
- av1_integerize_model(params, type, &wm);
- projectpoints((int16_t *)wm.wmmat, corners1_int, image1_coord, npoints, 2,
- 2, 0, 0);
+ projectpoints(params, corners1, image1_coord, npoints, 2, 2);
for (i = 0; i < npoints; ++i) {
- double dx =
- (image1_coord[i * 2] >> WARPEDPIXEL_PREC_BITS) - corners2[i * 2];
- double dy = (image1_coord[i * 2 + 1] >> WARPEDPIXEL_PREC_BITS) -
- corners2[i * 2 + 1];
+ double dx = image1_coord[i * 2] - corners2[i * 2];
+ double dy = image1_coord[i * 2 + 1] - corners2[i * 2 + 1];
double distance = sqrt(dx * dx + dy * dy);
inlier_mask[i] = distance < inlier_threshold;
@@ -860,7 +911,7 @@
best_params, 3, 2, is_degenerate_translation,
NULL, // normalize_homography,
NULL, // denormalize_rotzoom,
- find_translation, project_points_translation, TRANSLATION);
+ find_translation, project_points_double_translation);
}
int ransac_rotzoom(double *matched_points, int npoints, int *number_of_inliers,
@@ -869,7 +920,7 @@
best_params, 3, 4, is_degenerate_affine,
NULL, // normalize_homography,
NULL, // denormalize_rotzoom,
- find_rotzoom, project_points_rotzoom, ROTZOOM);
+ find_rotzoom, project_points_double_rotzoom);
}
int ransac_affine(double *matched_points, int npoints, int *number_of_inliers,
@@ -878,7 +929,7 @@
best_params, 3, 6, is_degenerate_affine,
NULL, // normalize_homography,
NULL, // denormalize_affine,
- find_affine, project_points_affine, AFFINE);
+ find_affine, project_points_double_affine);
}
int ransac_homography(double *matched_points, int npoints,
@@ -889,7 +940,7 @@
best_params, 4, 8, is_degenerate_homography,
NULL, // normalize_homography,
NULL, // denormalize_homography,
- find_homography, project_points_homography, HOMOGRAPHY);
+ find_homography, project_points_double_homography);
if (!result) {
// normalize so that H33 = 1
int i;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 95b74a2..9721abe 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -4264,11 +4264,11 @@
#if CONFIG_REF_MV
if (mode == NEWMV) {
- mic->bmi[i].pred_mv_s8[0].as_int = best_ref_mv[0]->as_int;
- if (is_compound) mic->bmi[i].pred_mv_s8[1].as_int = best_ref_mv[1]->as_int;
+ mic->bmi[i].pred_mv[0].as_int = best_ref_mv[0]->as_int;
+ if (is_compound) mic->bmi[i].pred_mv[1].as_int = best_ref_mv[1]->as_int;
} else {
- mic->bmi[i].pred_mv_s8[0].as_int = this_mv[0].as_int;
- if (is_compound) mic->bmi[i].pred_mv_s8[1].as_int = this_mv[1].as_int;
+ mic->bmi[i].pred_mv[0].as_int = this_mv[0].as_int;
+ if (is_compound) mic->bmi[i].pred_mv[1].as_int = this_mv[1].as_int;
}
#endif
@@ -5325,13 +5325,13 @@
mode_mv[this_mode][ref].as_int;
#if CONFIG_REF_MV
bsi->rdstat[i][mode_idx].pred_mv[ref].as_int =
- mi->bmi[i].pred_mv_s8[ref].as_int;
+ mi->bmi[i].pred_mv[ref].as_int;
if (num_4x4_blocks_wide > 1)
bsi->rdstat[i + 1][mode_idx].pred_mv[ref].as_int =
- mi->bmi[i].pred_mv_s8[ref].as_int;
+ mi->bmi[i].pred_mv[ref].as_int;
if (num_4x4_blocks_high > 1)
bsi->rdstat[i + 2][mode_idx].pred_mv[ref].as_int =
- mi->bmi[i].pred_mv_s8[ref].as_int;
+ mi->bmi[i].pred_mv[ref].as_int;
#endif
#if CONFIG_EXT_INTER
bsi->rdstat[i][mode_idx].ref_mv[ref].as_int =
@@ -5556,9 +5556,9 @@
if (has_second_ref(mbmi))
mi->bmi[idx].as_mv[1].as_int = bsi->rdstat[idx][mode_idx].mvs[1].as_int;
#if CONFIG_REF_MV
- mi->bmi[idx].pred_mv_s8[0] = bsi->rdstat[idx][mode_idx].pred_mv[0];
+ mi->bmi[idx].pred_mv[0] = bsi->rdstat[idx][mode_idx].pred_mv[0];
if (has_second_ref(mbmi))
- mi->bmi[idx].pred_mv_s8[1] = bsi->rdstat[idx][mode_idx].pred_mv[1];
+ mi->bmi[idx].pred_mv[1] = bsi->rdstat[idx][mode_idx].pred_mv[1];
#endif
#if CONFIG_EXT_INTER
mi->bmi[idx].ref_mv[0].as_int = bsi->rdstat[idx][mode_idx].ref_mv[0].as_int;
@@ -10682,8 +10682,8 @@
mbmi->mv[0].as_int = xd->mi[0]->bmi[3].as_mv[0].as_int;
mbmi->mv[1].as_int = xd->mi[0]->bmi[3].as_mv[1].as_int;
#if CONFIG_REF_MV
- mbmi->pred_mv[0].as_int = xd->mi[0]->bmi[3].pred_mv_s8[0].as_int;
- mbmi->pred_mv[1].as_int = xd->mi[0]->bmi[3].pred_mv_s8[1].as_int;
+ mbmi->pred_mv[0].as_int = xd->mi[0]->bmi[3].pred_mv[0].as_int;
+ mbmi->pred_mv[1].as_int = xd->mi[0]->bmi[3].pred_mv[1].as_int;
#endif
}