Commit c2d38715 authored by Sarah Parker's avatar Sarah Parker

Make global_motion work with ext_inter

Change-Id: I2a490e144099d7692296992528192c1f11d2c06f
parent c6733fb7
......@@ -24,9 +24,6 @@
#if CONFIG_MOTION_VAR
#include "av1/common/onyxc_int.h"
#endif // CONFIG_MOTION_VAR
#if CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
#include "av1/common/warped_motion.h"
#endif // CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
#if CONFIG_EXT_INTER
......@@ -605,9 +602,13 @@ void av1_make_masked_inter_predictor(const uint8_t *pre, int pre_stride,
#if CONFIG_SUPERTX
int wedge_offset_x, int wedge_offset_y,
#endif // CONFIG_SUPERTX
#if CONFIG_COMPOUND_SEGMENT
#if CONFIG_COMPOUND_SEGMENT || CONFIG_GLOBAL_MOTION
int plane,
#endif // CONFIG_COMPOUND_SEGMENT
#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_GLOBAL_MOTION
#if CONFIG_GLOBAL_MOTION
int is_global, int p_col, int p_row,
int ref,
#endif // CONFIG_GLOBAL_MOTION
MACROBLOCKD *xd) {
MODE_INFO *mi = xd->mi[0];
INTERINTER_COMPOUND_DATA *comp_data = &mi->mbmi.interinter_compound_data;
......@@ -627,8 +628,11 @@ void av1_make_masked_inter_predictor(const uint8_t *pre, int pre_stride,
? CONVERT_TO_BYTEPTR(tmp_dst_)
: tmp_dst_;
av1_make_inter_predictor(pre, pre_stride, tmp_dst, MAX_SB_SIZE, subpel_x,
subpel_y, sf, w, h, &conv_params, tmp_ipf, xs, ys,
xd);
subpel_y, sf, w, h, &conv_params, tmp_ipf,
#if CONFIG_GLOBAL_MOTION
is_global, p_col, p_row, plane, ref,
#endif // CONFIG_GLOBAL_MOTION
xs, ys, xd);
#if CONFIG_SUPERTX
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_masked_compound_wedge_extend_highbd(
......@@ -664,8 +668,11 @@ void av1_make_masked_inter_predictor(const uint8_t *pre, int pre_stride,
#else // CONFIG_AOM_HIGHBITDEPTH
DECLARE_ALIGNED(16, uint8_t, tmp_dst[MAX_SB_SQUARE]);
av1_make_inter_predictor(pre, pre_stride, tmp_dst, MAX_SB_SIZE, subpel_x,
subpel_y, sf, w, h, &conv_params, tmp_ipf, xs, ys,
xd);
subpel_y, sf, w, h, &conv_params, tmp_ipf,
#if CONFIG_GLOBAL_MOTION
is_global, p_col, p_row, plane, ref,
#endif // CONFIG_GLOBAL_MOTION
xs, ys, xd);
#if CONFIG_SUPERTX
build_masked_compound_wedge_extend(dst, dst_stride, dst, dst_stride, tmp_dst,
MAX_SB_SIZE, comp_data->wedge_index,
......@@ -765,24 +772,18 @@ void build_inter_predictors(MACROBLOCKD *xd, int plane,
const int is_compound = has_second_ref(&mi->mbmi);
int ref;
#if CONFIG_GLOBAL_MOTION
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]];
WarpedMotionParams *const wm = &xd->global_motion[mi->mbmi.ref_frame[ref]];
is_global[ref] =
(get_y_mode(mi, block) == ZEROMV && gm[ref]->wmtype > TRANSLATION);
(get_y_mode(mi, block) == ZEROMV && wm->wmtype > TRANSLATION);
}
// TODO(sarahparker) remove these once gm works with all experiments
(void)gm;
(void)is_global;
#endif // CONFIG_GLOBAL_MOTION
#if CONFIG_CB4X4
(void)block;
#endif
// TODO(sarahparker) enable the use of DUAL_FILTER in warped motion functions
// in order to allow GLOBAL_MOTION and DUAL_FILTER to work together
#if CONFIG_SUB8X8_MC
#if CONFIG_MOTION_VAR
if (mi->mbmi.sb_type < BLOCK_8X8 && plane > 0 && !build_for_obmc) {
......@@ -859,13 +860,21 @@ void build_inter_predictors(MACROBLOCKD *xd, int plane,
#if CONFIG_COMPOUND_SEGMENT
plane,
#endif // CONFIG_COMPOUND_SEGMENT
xd);
#if CONFIG_GLOBAL_MOTION
is_global[ref], (mi_x >> pd->subsampling_x) + x,
(mi_y >> pd->subsampling_y) + y, ref
#endif // CONFIG_GLOBAL_MOTION
xd);
else
#endif // CONFIG_EXT_INTER
av1_make_inter_predictor(pre, pre_buf->stride, dst, dst_buf->stride,
subpel_x, subpel_y, sf, x_step, y_step,
&conv_params, mi->mbmi.interp_filter, xs,
ys, xd);
av1_make_inter_predictor(
pre, pre_buf->stride, dst, dst_buf->stride, subpel_x, subpel_y,
sf, x_step, y_step, &conv_params, mi->mbmi.interp_filter,
#if CONFIG_GLOBAL_MOTION
is_global[ref], (mi_x >> pd->subsampling_x) + x,
(mi_y >> pd->subsampling_y) + y, plane, ref,
#endif // CONFIG_GLOBAL_MOTION
xs, ys, xd);
}
}
}
......@@ -950,31 +959,25 @@ void build_inter_predictors(MACROBLOCKD *xd, int plane,
#if CONFIG_SUPERTX
wedge_offset_x, wedge_offset_y,
#endif // CONFIG_SUPERTX
#if CONFIG_COMPOUND_SEGMENT
#if CONFIG_COMPOUND_SEGMENT || CONFIG_GLOBAL_MOTION
plane,
#endif // CONFIG_COMPOUND_SEGMENT
#if CONFIG_GLOBAL_MOTION || CONFIG_GLOBAL_MOTION
is_global[ref], (mi_x >> pd->subsampling_x) + x,
(mi_y >> pd->subsampling_y) + y, ref,
#endif // CONFIG_GLOBAL_MOTION
xd);
else
#else // CONFIG_EXT_INTER
#if CONFIG_GLOBAL_MOTION
if (is_global[ref])
av1_warp_plane(gm[ref],
#if CONFIG_AOM_HIGHBITDEPTH
xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH, xd->bd,
#endif // CONFIG_AOM_HIGHBITDEPTH
pre_buf->buf0, pre_buf->width, pre_buf->height,
pre_buf->stride, dst, (mi_x >> pd->subsampling_x) + x,
(mi_y >> pd->subsampling_y) + y, w, h, dst_buf->stride,
pd->subsampling_x, pd->subsampling_y,
subpel_params[ref].xs, subpel_params[ref].ys, ref);
else
#endif // CONFIG_GLOBAL_MOTION
#endif // CONFIG_EXT_INTER
av1_make_inter_predictor(
pre[ref], pre_buf->stride, dst, dst_buf->stride,
subpel_params[ref].subpel_x, subpel_params[ref].subpel_y, sf, w, h,
&conv_params, mi->mbmi.interp_filter, subpel_params[ref].xs,
subpel_params[ref].ys, xd);
&conv_params, mi->mbmi.interp_filter,
#if CONFIG_GLOBAL_MOTION
is_global[ref], (mi_x >> pd->subsampling_x) + x,
(mi_y >> pd->subsampling_y) + y, plane, ref,
#endif // CONFIG_GLOBAL_MOTION
subpel_params[ref].xs, subpel_params[ref].ys, xd);
}
#if CONVOLVE_POST_ROUNDING
......@@ -2728,6 +2731,11 @@ static void build_inter_predictors_single_buf(MACROBLOCKD *xd, int plane,
int xs, ys, subpel_x, subpel_y;
const int is_scaled = av1_is_scaled(sf);
ConvolveParams conv_params = get_conv_params(0);
#if CONFIG_GLOBAL_MOTION
WarpedMotionParams *const wm = &xd->global_motion[mi->mbmi.ref_frame[ref]];
const int is_global =
(get_y_mode(mi, block) == ZEROMV && wm->wmtype > TRANSLATION);
#endif // CONFIG_GLOBAL_MOTION
if (is_scaled) {
pre = pre_buf->buf + scaled_buffer_offset(x, y, pre_buf->stride, sf);
......@@ -2748,7 +2756,12 @@ static void build_inter_predictors_single_buf(MACROBLOCKD *xd, int plane,
av1_make_inter_predictor(pre, pre_buf->stride, dst, ext_dst_stride, subpel_x,
subpel_y, sf, w, h, &conv_params,
mi->mbmi.interp_filter, xs, ys, xd);
mi->mbmi.interp_filter,
#if CONFIG_GLOBAL_MOTION
is_global, (mi_x >> pd->subsampling_x) + x,
(mi_y >> pd->subsampling_y) + y, plane, ref,
#endif // CONFIG_GLOBAL_MOTION
xs, ys, xd);
}
void av1_build_inter_predictors_for_planes_single_buf(
......
......@@ -15,6 +15,9 @@
#include "av1/common/filter.h"
#include "av1/common/onyxc_int.h"
#include "av1/common/convolve.h"
#if CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
#include "av1/common/warped_motion.h"
#endif // CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
#include "aom/aom_integer.h"
#ifdef __cplusplus
......@@ -224,17 +227,38 @@ static INLINE void av1_make_inter_predictor(
#else
const InterpFilter interp_filter,
#endif
#if CONFIG_GLOBAL_MOTION
int is_global, int p_col, int p_row, int plane, int ref,
#endif // CONFIG_GLOBAL_MOTION
int xs, int ys, const MACROBLOCKD *xd) {
(void)xd;
#if CONFIG_GLOBAL_MOTION
if (is_global) {
const MODE_INFO *mi = xd->mi[0];
const struct macroblockd_plane *const pd = &xd->plane[plane];
const struct buf_2d *const pre_buf = &pd->pre[ref];
WarpedMotionParams *gm = &xd->global_motion[mi->mbmi.ref_frame[ref]];
av1_warp_plane(gm,
#if CONFIG_AOM_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH, xd->bd,
#endif // CONFIG_AOM_HIGHBITDEPTH
pre_buf->buf0, pre_buf->width, pre_buf->height,
pre_buf->stride, dst, p_col, p_row, w, h, dst_stride,
pd->subsampling_x, pd->subsampling_y, xs, ys, ref);
return;
}
#endif // CONFIG_GLOBAL_MOTION
#if CONFIG_AOM_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
highbd_inter_predictor(src, src_stride, dst, dst_stride, subpel_x, subpel_y,
sf, w, h, conv_params->ref, interp_filter, xs, ys,
xd->bd);
else
return;
}
#endif // CONFIG_AOM_HIGHBITDEPTH
inter_predictor(src, src_stride, dst, dst_stride, subpel_x, subpel_y, sf, w,
h, conv_params, interp_filter, xs, ys);
inter_predictor(src, src_stride, dst, dst_stride, subpel_x, subpel_y, sf, w,
h, conv_params, interp_filter, xs, ys);
}
#if CONFIG_EXT_INTER
......@@ -252,9 +276,13 @@ void av1_make_masked_inter_predictor(const uint8_t *pre, int pre_stride,
#if CONFIG_SUPERTX
int wedge_offset_x, int wedge_offset_y,
#endif // CONFIG_SUPERTX
#if CONFIG_COMPOUND_SEGMENT
#if CONFIG_COMPOUND_SEGMENT || CONFIG_GLOBAL_MOTION
int plane,
#endif // CONFIG_COMPOUND_SEGMENT
#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_GLOBAL_MOTION
#if CONFIG_GLOBAL_MOTION
int is_global, int p_col, int p_row,
int ref,
#endif // CONFIG_GLOBAL_MOTION
MACROBLOCKD *xd);
#endif // CONFIG_EXT_INTER
......
......@@ -1458,8 +1458,17 @@ static INLINE int assign_mv(AV1_COMMON *cm, MACROBLOCKD *xd,
}
case ZERO_ZEROMV: {
assert(is_compound);
#if CONFIG_GLOBAL_MOTION
mv[0].as_int = gm_get_motion_vector(&cm->global_motion[ref_frame[0]],
cm->allow_high_precision_mv)
.as_int;
mv[1].as_int = gm_get_motion_vector(&cm->global_motion[ref_frame[1]],
cm->allow_high_precision_mv)
.as_int;
#else
mv[0].as_int = 0;
mv[1].as_int = 0;
#endif // CONFIG_GLOBAL_MOTION
break;
}
#endif // CONFIG_EXT_INTER
......
......@@ -1007,16 +1007,19 @@ static void update_filter_type_count(FRAME_COUNTS *counts,
#if CONFIG_GLOBAL_MOTION
static void update_global_motion_used(PREDICTION_MODE mode, BLOCK_SIZE bsize,
const MB_MODE_INFO *mbmi, AV1_COMP *cpi) {
if (mode == ZEROMV) {
if (mode == ZEROMV
#if CONFIG_EXT_INTER
|| mode == ZERO_ZEROMV
#endif
) {
const int num_4x4s = bsize >= BLOCK_8X8
? num_4x4_blocks_wide_lookup[bsize] *
num_4x4_blocks_high_lookup[bsize]
: 1;
++cpi->global_motion_used[mbmi->ref_frame[0]][0];
cpi->global_motion_used[mbmi->ref_frame[0]][1] += num_4x4s;
if (has_second_ref(mbmi)) {
++cpi->global_motion_used[mbmi->ref_frame[1]][0];
cpi->global_motion_used[mbmi->ref_frame[1]][1] += num_4x4s;
int ref;
for (ref = 0; ref < 1 + has_second_ref(mbmi); ++ref) {
++cpi->global_motion_used[mbmi->ref_frame[ref]][0];
cpi->global_motion_used[mbmi->ref_frame[ref]][1] += num_4x4s;
}
}
}
......
......@@ -4990,25 +4990,22 @@ static int set_and_cost_bmi_mvs(const AV1_COMP *const cpi, MACROBLOCK *x,
if (is_compound)
this_mv[1].as_int = frame_mv[mode][mbmi->ref_frame[1]].as_int;
break;
case ZEROMV:
case ZEROMV: {
int ref;
for (ref = 0; ref < 1 + is_compound; ++ref) {
#if CONFIG_GLOBAL_MOTION
this_mv[0].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[0]],
cpi->common.allow_high_precision_mv)
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[0]);
if (is_compound) {
this_mv[1].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[1]],
cpi->common.allow_high_precision_mv)
this_mv[ref].as_int =
gm_get_motion_vector(
&cpi->common.global_motion[mbmi->ref_frame[ref]],
cpi->common.allow_high_precision_mv)
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[1]);
}
#else // CONFIG_GLOBAL_MOTION
this_mv[0].as_int = 0;
if (is_compound) this_mv[1].as_int = 0;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[ref]);
#else
this_mv[ref].as_int = 0;
#endif // CONFIG_GLOBAL_MOTION
}
break;
}
#if CONFIG_EXT_INTER
case NEW_NEWMV:
if (compound_seg_newmvs[0].as_int == INVALID_MV ||
......@@ -5054,8 +5051,21 @@ static int set_and_cost_bmi_mvs(const AV1_COMP *const cpi, MACROBLOCK *x,
this_mv[1].as_int = frame_mv[mode][mbmi->ref_frame[1]].as_int;
break;
case ZERO_ZEROMV:
#if CONFIG_GLOBAL_MOTION
this_mv[0].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[0]],
cpi->common.allow_high_precision_mv)
.as_int;
this_mv[1].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[1]],
cpi->common.allow_high_precision_mv)
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[0]) +
GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[1]);
#else
this_mv[0].as_int = 0;
this_mv[1].as_int = 0;
#endif // CONFIG_GLOBAL_MOTION
break;
#endif // CONFIG_EXT_INTER
default: break;
......@@ -5303,15 +5313,31 @@ static int check_best_zero_mv(
#endif // CONFIG_REF_MV && CONFIG_EXT_INTER
int_mv frame_mv[MB_MODE_COUNT][TOTAL_REFS_PER_FRAME], int this_mode,
const MV_REFERENCE_FRAME ref_frames[2], const BLOCK_SIZE bsize, int block) {
int_mv zeromv[2];
int comp_pred_mode = ref_frames[1] > INTRA_FRAME;
int cur_frm;
for (cur_frm = 0; cur_frm < 1 + comp_pred_mode; cur_frm++) {
#if CONFIG_GLOBAL_MOTION
if (this_mode == ZEROMV
#if CONFIG_EXT_INTER
|| this_mode == ZERO_ZEROMV
#endif // CONFIG_EXT_INTER
)
zeromv[cur_frm].as_int =
gm_get_motion_vector(&cpi->common.global_motion[ref_frames[cur_frm]],
cpi->common.allow_high_precision_mv)
.as_int;
else
#endif // CONFIG_GLOBAL_MOTION
zeromv[cur_frm].as_int = 0;
}
#if !CONFIG_EXT_INTER
assert(ref_frames[1] != INTRA_FRAME); // Just sanity check
#endif
if ((this_mode == NEARMV || this_mode == NEARESTMV || this_mode == ZEROMV) &&
frame_mv[this_mode][ref_frames[0]].as_int == 0 &&
frame_mv[this_mode][ref_frames[0]].as_int == zeromv[0].as_int &&
(ref_frames[1] <= INTRA_FRAME ||
frame_mv[this_mode][ref_frames[1]].as_int == 0)) {
frame_mv[this_mode][ref_frames[1]].as_int == zeromv[1].as_int)) {
#if CONFIG_REF_MV
int16_t rfc =
av1_mode_context_analyzer(mode_context, ref_frames, bsize, block);
......@@ -5356,8 +5382,8 @@ static int check_best_zero_mv(
else if ((this_mode == NEAREST_NEARESTMV || this_mode == NEAREST_NEARMV ||
this_mode == NEAR_NEARESTMV || this_mode == NEAR_NEARMV ||
this_mode == ZERO_ZEROMV) &&
frame_mv[this_mode][ref_frames[0]].as_int == 0 &&
frame_mv[this_mode][ref_frames[1]].as_int == 0) {
frame_mv[this_mode][ref_frames[0]].as_int == zeromv[0].as_int &&
frame_mv[this_mode][ref_frames[1]].as_int == zeromv[1].as_int) {
#if CONFIG_REF_MV
int16_t rfc = compound_mode_context[ref_frames[0]];
int c1 = cost_mv_ref(cpi, NEAREST_NEARMV, 1, rfc);
......@@ -5788,7 +5814,14 @@ static int64_t rd_pick_inter_best_sub8x8_mode(
&ref_mvs_sub8x8[0][ref], &ref_mvs_sub8x8[1][ref]);
if (has_second_rf) {
#if CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][frame].as_int =
gm_get_motion_vector(&cm->global_motion[frame],
cm->allow_high_precision_mv)
.as_int;
#else
frame_mv[ZERO_ZEROMV][frame].as_int = 0;
#endif // CONFIG_GLOBAL_MOTION
frame_mv[NEAREST_NEARESTMV][frame].as_int =
frame_mv[NEARESTMV][frame].as_int;
......@@ -8848,7 +8881,11 @@ static int64_t handle_inter_mode(
single_skippable[this_mode][refs[0]] = rd_stats->skip;
#endif // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
#if CONFIG_GLOBAL_MOTION
if (this_mode == ZEROMV) {
if (this_mode == ZEROMV
#if CONFIG_EXT_INTER
|| this_mode == ZERO_ZEROMV
#endif // CONFIG_EXT_INTER
) {
rd_stats->rate += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[0]);
if (is_comp_pred)
rd_stats->rate += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[1]);
......@@ -9496,7 +9533,14 @@ void av1_rd_pick_inter_mode_sb(const AV1_COMP *cpi, TileDataEnc *tile_data,
#if CONFIG_EXT_INTER
frame_mv[NEWFROMNEARMV][ref_frame].as_int = INVALID_MV;
frame_mv[NEW_NEWMV][ref_frame].as_int = INVALID_MV;
#if CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][ref_frame].as_int =
gm_get_motion_vector(&cm->global_motion[ref_frame],
cm->allow_high_precision_mv)
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][ref_frame].as_int = 0;
#endif // CONFIG_GLOBAL_MOTION
#endif // CONFIG_EXT_INTER
}
......@@ -10841,7 +10885,8 @@ PALETTE_EXIT:
else if (nearmv[0].as_int == best_mbmode.mv[0].as_int &&
nearmv[1].as_int == best_mbmode.mv[1].as_int)
best_mbmode.mode = NEAR_NEARMV;
else if (best_mbmode.mv[0].as_int == 0 && best_mbmode.mv[1].as_int == 0)
else if (best_mbmode.mv[0].as_int == zeromv[0].as_int &&
best_mbmode.mv[1].as_int == zeromv[1].as_int)
best_mbmode.mode = ZERO_ZEROMV;
#else
best_mbmode.mode = NEARESTMV;
......@@ -10872,6 +10917,22 @@ PALETTE_EXIT:
best_mbmode.mode = ZEROMV;
#if CONFIG_EXT_INTER
} else {
const MV_REFERENCE_FRAME refs[2] = { best_mbmode.ref_frame[0],
best_mbmode.ref_frame[1] };
int_mv zeromv[2];
#if CONFIG_GLOBAL_MOTION
zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
cm->allow_high_precision_mv)
.as_int;
zeromv[1].as_int = comp_pred_mode
? gm_get_motion_vector(&cm->global_motion[refs[1]],
cm->allow_high_precision_mv)
.as_int
: 0;
#else
zeromv[0].as_int = 0;
zeromv[1].as_int = 0;
#endif // CONFIG_GLOBAL_MOTION
if (frame_mv[NEAREST_NEARESTMV][refs[0]].as_int ==
best_mbmode.mv[0].as_int &&
frame_mv[NEAREST_NEARESTMV][refs[1]].as_int ==
......@@ -10892,7 +10953,8 @@ PALETTE_EXIT:
frame_mv[NEAR_NEARMV][refs[1]].as_int ==
best_mbmode.mv[1].as_int)
best_mbmode.mode = NEAR_NEARMV;
else if (best_mbmode.mv[0].as_int == 0 && best_mbmode.mv[1].as_int == 0)
else if (best_mbmode.mv[0].as_int == zeromv[0].as_int &&
best_mbmode.mv[1].as_int == zeromv[1].as_int)
best_mbmode.mode = ZERO_ZEROMV;
}
#endif // CONFIG_EXT_INTER
......
......@@ -485,11 +485,6 @@ post_process_cmdline() {
log_echo "disabling reference_buffer"
disable_feature reference_buffer
fi
if enabled global_motion && (enabled ext_inter || enabled dual_filter); then
log_echo "global_motion currently not compatible with ext_inter"
log_echo "and dual_filter. Disabling global_motion."
disable_feature global_motion
fi
}
......
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