Commit cf3d0b00 authored by David Barker's avatar David Barker Committed by Debargha Mukherjee

Remove Global_Motion_Params and GLOBAL_MOTION_TYPE

After https://aomedia-review.googlesource.com/#/c/5589/ ,
the Global_Motion_Params and GLOBAL_MOTION_TYPE types
are redundant, and can be removed in favour of
WarpedMotionParams and TransformationType respectively.

Change-Id: I33f3796e5c469e595fd012ccdb65a672dd1bb86c
parent 9cd9700d
......@@ -471,7 +471,7 @@ typedef struct macroblockd {
struct aom_internal_error_info *error_info;
#if CONFIG_GLOBAL_MOTION
Global_Motion_Params *global_motion;
WarpedMotionParams *global_motion;
#endif // CONFIG_GLOBAL_MOTION
#if CONFIG_DELTA_Q
int prev_qindex;
......
......@@ -159,7 +159,7 @@ typedef struct frame_contexts {
aom_prob filter_intra_probs[PLANE_TYPES];
#endif // CONFIG_FILTER_INTRA
#if CONFIG_GLOBAL_MOTION
aom_prob global_motion_types_prob[GLOBAL_MOTION_TYPES - 1];
aom_prob global_motion_types_prob[GLOBAL_TRANS_TYPES - 1];
#endif // CONFIG_GLOBAL_MOTION
#if CONFIG_LOOP_RESTORATION
aom_prob switchable_restore_prob[RESTORE_SWITCHABLE_TYPES - 1];
......
......@@ -128,13 +128,21 @@ static const uint8_t log_in_base_2[] = {
};
#if CONFIG_GLOBAL_MOTION
const aom_tree_index
av1_global_motion_types_tree[TREE_SIZE(GLOBAL_MOTION_TYPES)] = {
-GLOBAL_ZERO, 2, -GLOBAL_TRANSLATION, 4, -GLOBAL_ROTZOOM, -GLOBAL_AFFINE
};
#if GLOBAL_TRANS_TYPES == 4
const aom_tree_index av1_global_motion_types_tree[TREE_SIZE(
GLOBAL_TRANS_TYPES)] = { -IDENTITY, 2, -TRANSLATION, 4, -ROTZOOM, -AFFINE };
static const aom_prob default_global_motion_types_prob[GLOBAL_MOTION_TYPES -
1] = { 224, 128, 128 };
static const aom_prob default_global_motion_types_prob[GLOBAL_TRANS_TYPES - 1] =
{ 224, 128, 240 };
#elif GLOBAL_TRANS_TYPES == 3
const aom_tree_index av1_global_motion_types_tree[TREE_SIZE(
GLOBAL_TRANS_TYPES)] = { -IDENTITY, 2, -TRANSLATION, -ROTZOOM };
static const aom_prob default_global_motion_types_prob[GLOBAL_TRANS_TYPES - 1] =
{ 224, 128 };
#endif // GLOBAL_TRANS_TYPES
#endif // CONFIG_GLOBAL_MOTION
static INLINE int mv_class_base(MV_CLASS_TYPE c) {
......
......@@ -136,7 +136,7 @@ typedef struct {
void av1_inc_mv(const MV *mv, nmv_context_counts *mvctx, const int usehp);
#if CONFIG_GLOBAL_MOTION
extern const aom_tree_index
av1_global_motion_types_tree[TREE_SIZE(GLOBAL_MOTION_TYPES)];
av1_global_motion_types_tree[TREE_SIZE(GLOBAL_TRANS_TYPES)];
#endif // CONFIG_GLOBAL_MOTION
#if CONFIG_EC_MULTISYMBOL
void av1_set_mv_cdfs(nmv_context *ctx);
......
......@@ -51,27 +51,31 @@ typedef struct mv32 {
#define WARPEDDIFF_PREC_BITS (WARPEDMODEL_PREC_BITS - WARPEDPIXEL_PREC_BITS)
/* clang-format off */
typedef enum {
UNKNOWN_TRANSFORM = -1,
HOMOGRAPHY, // homography, 8-parameter
AFFINE, // affine, 6-parameter
ROTZOOM, // simplified affine with rotation and zoom only, 4-parameter
TRANSLATION, // translational motion 2-parameter
IDENTITY, // identity transformation, 0-parameter
TRANS_TYPES
IDENTITY = 0, // identity transformation, 0-parameter
TRANSLATION = 1, // translational motion 2-parameter
ROTZOOM = 2, // simplified affine with rotation and zoom only, 4-parameter
AFFINE = 3, // affine, 6-parameter
HOMOGRAPHY = 4, // homography, 8-parameter
TRANS_TYPES = 5,
} TransformationType;
/* clang-format on */
// Number of types used for global motion (must be <= TRANS_TYPES)
#define GLOBAL_TRANS_TYPES 3
// number of parameters used by each transformation in TransformationTypes
static const int n_trans_model_params[TRANS_TYPES] = { 8, 6, 4, 2, 0 };
static const int n_trans_model_params[TRANS_TYPES] = { 0, 2, 4, 6, 8 };
// The order of values in the wmmat matrix below is best described
// by the homography:
// [x' (m2 m3 m0 [x
// y' = m4 m5 m1 = y
// y' = m4 m5 m1 * y
// 1] m6 m7 1) 1]
typedef struct {
TransformationType wmtype;
int32_t wmmat[8]; // For homography wmmat[9] is assumed to be 1
int32_t wmmat[8];
} WarpedMotionParams;
#endif // CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
......@@ -125,71 +129,35 @@ typedef struct {
#define GM_ALPHA_MIN -GM_ALPHA_MAX
#define GM_ROW3HOMO_MIN -GM_ROW3HOMO_MAX
typedef enum {
GLOBAL_ZERO = 0,
GLOBAL_TRANSLATION = 1,
GLOBAL_ROTZOOM = 2,
GLOBAL_AFFINE = 3,
// GLOBAL_HOMOGRAPHY = 4,
GLOBAL_MOTION_TYPES
} GLOBAL_MOTION_TYPE;
typedef struct {
GLOBAL_MOTION_TYPE gmtype;
WarpedMotionParams motion_params;
} Global_Motion_Params;
// Convert a global motion translation vector (which may have more bits than a
// regular motion vector) into a motion vector
static INLINE int_mv gm_get_motion_vector(const Global_Motion_Params *gm) {
static INLINE int_mv gm_get_motion_vector(const WarpedMotionParams *gm) {
int_mv res;
res.as_mv.row = (int16_t)ROUND_POWER_OF_TWO_SIGNED(gm->motion_params.wmmat[1],
res.as_mv.row = (int16_t)ROUND_POWER_OF_TWO_SIGNED(gm->wmmat[1],
WARPEDMODEL_PREC_BITS - 3);
res.as_mv.col = (int16_t)ROUND_POWER_OF_TWO_SIGNED(gm->motion_params.wmmat[0],
res.as_mv.col = (int16_t)ROUND_POWER_OF_TWO_SIGNED(gm->wmmat[0],
WARPEDMODEL_PREC_BITS - 3);
return res;
}
static INLINE TransformationType gm_to_trans_type(GLOBAL_MOTION_TYPE gmtype) {
switch (gmtype) {
case GLOBAL_ZERO: return IDENTITY; break;
case GLOBAL_TRANSLATION: return TRANSLATION; break;
case GLOBAL_ROTZOOM: return ROTZOOM; break;
case GLOBAL_AFFINE:
return AFFINE;
break;
// case GLOBAL_HOMOGRAPHY: return HOMOGRAPHY; break;
default: assert(0);
}
return UNKNOWN_TRANSFORM;
}
static INLINE GLOBAL_MOTION_TYPE get_gmtype(const Global_Motion_Params *gm) {
// if (gm->motion_params.wmmat[6] != 0 || gm->motion_params.wmmat[7] != 0)
// return GLOBAL_HOMOGRAPHY;
if (gm->motion_params.wmmat[5] == (1 << WARPEDMODEL_PREC_BITS) &&
!gm->motion_params.wmmat[4] &&
gm->motion_params.wmmat[2] == (1 << WARPEDMODEL_PREC_BITS) &&
!gm->motion_params.wmmat[3]) {
return ((!gm->motion_params.wmmat[1] && !gm->motion_params.wmmat[0])
? GLOBAL_ZERO
: GLOBAL_TRANSLATION);
static INLINE TransformationType get_gmtype(const WarpedMotionParams *gm) {
// if (gm->wmmat[6] != 0 || gm->wmmat[7] != 0) return HOMOGRAPHY;
if (gm->wmmat[5] == (1 << WARPEDMODEL_PREC_BITS) && !gm->wmmat[4] &&
gm->wmmat[2] == (1 << WARPEDMODEL_PREC_BITS) && !gm->wmmat[3]) {
return ((!gm->wmmat[1] && !gm->wmmat[0]) ? IDENTITY : TRANSLATION);
}
if (gm->motion_params.wmmat[2] == gm->motion_params.wmmat[5] &&
gm->motion_params.wmmat[3] == -gm->motion_params.wmmat[4])
return GLOBAL_ROTZOOM;
if (gm->wmmat[2] == gm->wmmat[5] && gm->wmmat[3] == -gm->wmmat[4])
return ROTZOOM;
else
return GLOBAL_AFFINE;
return AFFINE;
}
static INLINE void set_default_gmparams(Global_Motion_Params *gm) {
static INLINE void set_default_gmparams(WarpedMotionParams *gm) {
static const int32_t default_gm_params[8] = {
0, 0, (1 << WARPEDMODEL_PREC_BITS), 0, 0, (1 << WARPEDMODEL_PREC_BITS), 0, 0
};
memcpy(gm->motion_params.wmmat, default_gm_params,
sizeof(gm->motion_params.wmmat));
gm->gmtype = GLOBAL_ZERO;
gm->motion_params.wmtype = IDENTITY;
memcpy(gm->wmmat, default_gm_params, sizeof(gm->wmmat));
gm->wmtype = IDENTITY;
}
#endif // CONFIG_GLOBAL_MOTION
......
......@@ -393,7 +393,7 @@ typedef struct AV1Common {
aom_cdf_prob kf_y_cdf[INTRA_MODES][INTRA_MODES][INTRA_MODES];
#endif
#if CONFIG_GLOBAL_MOTION
Global_Motion_Params global_motion[TOTAL_REFS_PER_FRAME];
WarpedMotionParams global_motion[TOTAL_REFS_PER_FRAME];
#endif
BLOCK_SIZE sb_size; // Size of the superblock used for this frame
......
......@@ -553,12 +553,12 @@ void build_inter_predictors(MACROBLOCKD *xd, int plane,
const int is_compound = has_second_ref(&mi->mbmi);
int ref;
#if CONFIG_GLOBAL_MOTION
Global_Motion_Params *gm[2];
WarpedMotionParams *gm[2];
int is_global[2];
for (ref = 0; ref < 1 + is_compound; ++ref) {
gm[ref] = &xd->global_motion[mi->mbmi.ref_frame[ref]];
is_global[ref] =
(get_y_mode(mi, block) == ZEROMV && gm[ref]->gmtype > GLOBAL_ZERO);
(get_y_mode(mi, block) == ZEROMV && gm[ref]->wmtype != IDENTITY);
}
// TODO(sarahparker) remove these once gm works with all experiments
(void)gm;
......@@ -710,7 +710,7 @@ void build_inter_predictors(MACROBLOCKD *xd, int plane,
#else // CONFIG_EXT_INTER
#if CONFIG_GLOBAL_MOTION
if (is_global[ref])
av1_warp_plane(&(gm[ref]->motion_params),
av1_warp_plane(gm[ref],
#if CONFIG_AOM_HIGHBITDEPTH
xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH, xd->bd,
#endif // CONFIG_AOM_HIGHBITDEPTH
......
......@@ -4020,44 +4020,37 @@ static void read_supertx_probs(FRAME_CONTEXT *fc, aom_reader *r) {
#endif // CONFIG_SUPERTX
#if CONFIG_GLOBAL_MOTION
static void read_global_motion_params(Global_Motion_Params *params,
static void read_global_motion_params(WarpedMotionParams *params,
aom_prob *probs, aom_reader *r) {
GLOBAL_MOTION_TYPE gmtype =
TransformationType type =
aom_read_tree(r, av1_global_motion_types_tree, probs, ACCT_STR);
set_default_gmparams(params);
params->gmtype = gmtype;
params->motion_params.wmtype = gm_to_trans_type(gmtype);
switch (gmtype) {
case GLOBAL_ZERO: break;
case GLOBAL_AFFINE:
case GLOBAL_ROTZOOM:
params->motion_params.wmmat[2] =
(aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR) +
(1 << WARPEDMODEL_PREC_BITS);
params->motion_params.wmmat[3] =
aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR;
if (gmtype == GLOBAL_AFFINE) {
params->motion_params.wmmat[4] =
(aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR);
params->motion_params.wmmat[5] =
aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR +
(1 << WARPEDMODEL_PREC_BITS);
params->wmtype = type;
switch (type) {
case IDENTITY: break;
case AFFINE:
case ROTZOOM:
params->wmmat[2] = (aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR) +
(1 << WARPEDMODEL_PREC_BITS);
params->wmmat[3] = aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR;
if (type == AFFINE) {
params->wmmat[4] = (aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR);
params->wmmat[5] = aom_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR +
(1 << WARPEDMODEL_PREC_BITS);
} else {
params->motion_params.wmmat[4] = -params->motion_params.wmmat[3];
params->motion_params.wmmat[5] = params->motion_params.wmmat[2];
params->wmmat[4] = -params->wmmat[3];
params->wmmat[5] = params->wmmat[2];
}
// fallthrough intended
case GLOBAL_TRANSLATION:
params->motion_params.wmmat[0] =
aom_read_primitive_symmetric(r, GM_ABS_TRANS_BITS) *
GM_TRANS_DECODE_FACTOR;
params->motion_params.wmmat[1] =
aom_read_primitive_symmetric(r, GM_ABS_TRANS_BITS) *
GM_TRANS_DECODE_FACTOR;
case TRANSLATION:
params->wmmat[0] = aom_read_primitive_symmetric(r, GM_ABS_TRANS_BITS) *
GM_TRANS_DECODE_FACTOR;
params->wmmat[1] = aom_read_primitive_symmetric(r, GM_ABS_TRANS_BITS) *
GM_TRANS_DECODE_FACTOR;
break;
default: assert(0);
}
......@@ -4071,10 +4064,10 @@ static void read_global_motion(AV1_COMMON *cm, aom_reader *r) {
/*
printf("Dec Ref %d [%d/%d]: %d %d %d %d\n",
frame, cm->current_video_frame, cm->show_frame,
cm->global_motion[frame].motion_params.wmmat[0],
cm->global_motion[frame].motion_params.wmmat[1],
cm->global_motion[frame].motion_params.wmmat[2],
cm->global_motion[frame].motion_params.wmmat[3]);
cm->global_motion[frame].wmmat[0],
cm->global_motion[frame].wmmat[1],
cm->global_motion[frame].wmmat[2],
cm->global_motion[frame].wmmat[3]);
*/
}
}
......
......@@ -104,7 +104,7 @@ static struct av1_token ext_tx_intra_encodings[EXT_TX_SETS_INTRA][TX_TYPES];
static struct av1_token ext_tx_encodings[TX_TYPES];
#endif // CONFIG_EXT_TX
#if CONFIG_GLOBAL_MOTION
static struct av1_token global_motion_types_encodings[GLOBAL_MOTION_TYPES];
static struct av1_token global_motion_types_encodings[GLOBAL_TRANS_TYPES];
#endif // CONFIG_GLOBAL_MOTION
#if CONFIG_EXT_INTRA
static struct av1_token intra_filter_encodings[INTRA_FILTERS];
......@@ -3952,39 +3952,35 @@ static void write_uncompressed_header(AV1_COMP *cpi,
}
#if CONFIG_GLOBAL_MOTION
static void write_global_motion_params(Global_Motion_Params *params,
static void write_global_motion_params(WarpedMotionParams *params,
aom_prob *probs, aom_writer *w) {
GLOBAL_MOTION_TYPE gmtype = params->gmtype;
TransformationType type = params->wmtype;
av1_write_token(w, av1_global_motion_types_tree, probs,
&global_motion_types_encodings[gmtype]);
switch (gmtype) {
case GLOBAL_ZERO: break;
case GLOBAL_AFFINE:
case GLOBAL_ROTZOOM:
&global_motion_types_encodings[type]);
switch (type) {
case IDENTITY: break;
case AFFINE:
case ROTZOOM:
aom_write_primitive_symmetric(
w, (params->motion_params.wmmat[2] >> GM_ALPHA_PREC_DIFF) -
(1 << GM_ALPHA_PREC_BITS),
w,
(params->wmmat[2] >> GM_ALPHA_PREC_DIFF) - (1 << GM_ALPHA_PREC_BITS),
GM_ABS_ALPHA_BITS);
aom_write_primitive_symmetric(
w, (params->motion_params.wmmat[3] >> GM_ALPHA_PREC_DIFF),
GM_ABS_ALPHA_BITS);
if (gmtype == GLOBAL_AFFINE) {
aom_write_primitive_symmetric(
w, (params->motion_params.wmmat[4] >> GM_ALPHA_PREC_DIFF),
GM_ABS_ALPHA_BITS);
aom_write_primitive_symmetric(w, (params->wmmat[3] >> GM_ALPHA_PREC_DIFF),
GM_ABS_ALPHA_BITS);
if (type == AFFINE) {
aom_write_primitive_symmetric(
w, (params->motion_params.wmmat[5] >> GM_ALPHA_PREC_DIFF) -
(1 << GM_ALPHA_PREC_BITS),
GM_ABS_ALPHA_BITS);
w, (params->wmmat[4] >> GM_ALPHA_PREC_DIFF), GM_ABS_ALPHA_BITS);
aom_write_primitive_symmetric(w,
(params->wmmat[5] >> GM_ALPHA_PREC_DIFF) -
(1 << GM_ALPHA_PREC_BITS),
GM_ABS_ALPHA_BITS);
}
// fallthrough intended
case GLOBAL_TRANSLATION:
aom_write_primitive_symmetric(
w, (params->motion_params.wmmat[0] >> GM_TRANS_PREC_DIFF),
GM_ABS_TRANS_BITS);
aom_write_primitive_symmetric(
w, (params->motion_params.wmmat[1] >> GM_TRANS_PREC_DIFF),
GM_ABS_TRANS_BITS);
case TRANSLATION:
aom_write_primitive_symmetric(w, (params->wmmat[0] >> GM_TRANS_PREC_DIFF),
GM_ABS_TRANS_BITS);
aom_write_primitive_symmetric(w, (params->wmmat[1] >> GM_TRANS_PREC_DIFF),
GM_ABS_TRANS_BITS);
break;
default: assert(0);
}
......@@ -4003,10 +3999,10 @@ static void write_global_motion(AV1_COMP *cpi, aom_writer *w) {
printf("Enc Ref %d [%d/%d] (used %d): %d %d %d %d\n",
frame, cm->current_video_frame, cm->show_frame,
cpi->global_motion_used[frame],
cm->global_motion[frame].motion_params.wmmat[0],
cm->global_motion[frame].motion_params.wmmat[1],
cm->global_motion[frame].motion_params.wmmat[2],
cm->global_motion[frame].motion_params.wmmat[3]);
cm->global_motion[frame].wmmat[0],
cm->global_motion[frame].wmmat[1],
cm->global_motion[frame].wmmat[2],
cm->global_motion[frame].wmmat[3]);
*/
}
}
......
......@@ -4757,10 +4757,9 @@ static void convert_to_params(const double *params, int32_t *model) {
}
static void convert_model_to_params(const double *params,
Global_Motion_Params *model) {
convert_to_params(params, model->motion_params.wmmat);
model->gmtype = get_gmtype(model);
model->motion_params.wmtype = gm_to_trans_type(model->gmtype);
WarpedMotionParams *model) {
convert_to_params(params, model->wmmat);
model->wmtype = get_gmtype(model);
}
#endif // CONFIG_GLOBAL_MOTION
......@@ -4802,9 +4801,9 @@ static void encode_frame_internal(AV1_COMP *cpi) {
if (compute_global_motion_feature_based(GLOBAL_MOTION_MODEL,
cpi->Source, ref_buf, params)) {
convert_model_to_params(params, &cm->global_motion[frame]);
if (cm->global_motion[frame].gmtype > GLOBAL_ZERO) {
if (cm->global_motion[frame].wmtype != IDENTITY) {
refine_integerized_param(
&cm->global_motion[frame].motion_params,
&cm->global_motion[frame],
#if CONFIG_AOM_HIGHBITDEPTH
xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH, xd->bd,
#endif // CONFIG_AOM_HIGHBITDEPTH
......@@ -4813,7 +4812,7 @@ static void encode_frame_internal(AV1_COMP *cpi) {
cpi->Source->y_height, cpi->Source->y_stride, 3);
// compute the advantage of using gm parameters over 0 motion
erroradvantage = av1_warp_erroradv(
&cm->global_motion[frame].motion_params,
&cm->global_motion[frame],
#if CONFIG_AOM_HIGHBITDEPTH
xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH, xd->bd,
#endif // CONFIG_AOM_HIGHBITDEPTH
......
......@@ -4312,23 +4312,23 @@ static int cost_mv_ref(const AV1_COMP *const cpi, PREDICTION_MODE mode,
}
#if CONFIG_GLOBAL_MOTION
static int get_gmbitcost(const Global_Motion_Params *gm,
const aom_prob *probs) {
int gmtype_cost[GLOBAL_MOTION_TYPES];
static int get_gmbitcost(const WarpedMotionParams *gm, const aom_prob *probs) {
int gmtype_cost[TRANS_TYPES];
int bits;
TransformationType type = gm->wmtype;
av1_cost_tokens(gmtype_cost, probs, av1_global_motion_types_tree);
switch (gm->gmtype) {
case GLOBAL_AFFINE:
bits = (GM_ABS_TRANS_BITS + 1) * 2 + 4 * GM_ABS_ALPHA_BITS + 4;
switch (type) {
case AFFINE:
bits = (GM_ABS_TRANS_BITS + 1) * 2 + (GM_ABS_ALPHA_BITS + 1) * 4;
break;
case GLOBAL_ROTZOOM:
bits = (GM_ABS_TRANS_BITS + 1) * 2 + 2 * GM_ABS_ALPHA_BITS + 2;
case ROTZOOM:
bits = (GM_ABS_TRANS_BITS + 1) * 2 + (GM_ABS_ALPHA_BITS + 1) * 2;
break;
case GLOBAL_TRANSLATION: bits = (GM_ABS_TRANS_BITS + 1) * 2; break;
case GLOBAL_ZERO: bits = 0; break;
case TRANSLATION: bits = (GM_ABS_TRANS_BITS + 1) * 2; break;
case IDENTITY: bits = 0; break;
default: assert(0); return 0;
}
return bits ? (bits << AV1_PROB_COST_SHIFT) + gmtype_cost[gm->gmtype] : 0;
return bits ? (bits << AV1_PROB_COST_SHIFT) + gmtype_cost[type] : 0;
}
#define GLOBAL_MOTION_RATE(ref) \
......@@ -5337,9 +5337,9 @@ static int64_t rd_pick_best_sub8x8_mode(
#endif // CONFIG_REF_MV
#if CONFIG_GLOBAL_MOTION
if (cm->global_motion[mbmi->ref_frame[0]].gmtype == GLOBAL_ZERO &&
if (cm->global_motion[mbmi->ref_frame[0]].wmtype == IDENTITY &&
(!has_second_rf ||
cm->global_motion[mbmi->ref_frame[1]].gmtype == GLOBAL_ZERO))
cm->global_motion[mbmi->ref_frame[1]].wmtype == IDENTITY))
#endif // CONFIG_GLOBAL_MOTION
if (!check_best_zero_mv(cpi, mbmi_ext->mode_context,
......@@ -8857,9 +8857,9 @@ void av1_rd_pick_inter_mode_sb(const AV1_COMP *cpi, TileDataEnc *tile_data,
}
}
#if CONFIG_GLOBAL_MOTION
} else if (cm->global_motion[ref_frame].gmtype == GLOBAL_ZERO &&
} else if (cm->global_motion[ref_frame].wmtype == IDENTITY &&
(!comp_pred ||
cm->global_motion[second_ref_frame].gmtype == GLOBAL_ZERO)) {
cm->global_motion[second_ref_frame].wmtype == IDENTITY)) {
#else // CONFIG_GLOBAL_MOTION
} else {
#endif // CONFIG_GLOBAL_MOTION
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment