Commit 604d846a authored by Debargha Mukherjee's avatar Debargha Mukherjee

Do not warp for warped-motion neighbors with obmc

Adds an option to disable warp when obmc is used with a
warped motion neighbor.
This change will reduce the line buffer requirement for
mode/mv information since the warping parameters no longer
need to be stored.

Results: 0.05% increase in BDRATE on lowres

Change-Id: I98bd2dcdbbcd47e44f199803ed8996b0f3fd1756
parent d3a6443d
......@@ -1877,7 +1877,8 @@ void av1_build_prediction_by_above_preds(const AV1_COMMON *cm, MACROBLOCKD *xd,
4);
#if CONFIG_WARPED_MOTION
if (above_mbmi->motion_mode == WARPED_CAUSAL) {
if (above_mbmi->motion_mode == WARPED_CAUSAL &&
WARP_NEIGHBORS_WITH_OBMC) {
assert_motion_mode_valid(WARPED_CAUSAL,
#if CONFIG_GLOBAL_MOTION && SEPARATE_GLOBAL_MOTION
0, cm->global_motion,
......@@ -1981,7 +1982,7 @@ void av1_build_prediction_by_left_preds(const AV1_COMMON *cm, MACROBLOCKD *xd,
bh = (mi_step << MI_SIZE_LOG2) >> pd->subsampling_y;
#if CONFIG_WARPED_MOTION
if (left_mbmi->motion_mode == WARPED_CAUSAL) {
if (left_mbmi->motion_mode == WARPED_CAUSAL && WARP_NEIGHBORS_WITH_OBMC) {
assert_motion_mode_valid(WARPED_CAUSAL,
#if CONFIG_GLOBAL_MOTION && SEPARATE_GLOBAL_MOTION
0, cm->global_motion,
......@@ -2156,7 +2157,7 @@ void av1_build_prediction_by_bottom_preds(const AV1_COMMON *cm, MACROBLOCKD *xd,
}
} else {
#if CONFIG_WARPED_MOTION
if (mbmi->motion_mode == WARPED_CAUSAL) {
if (mbmi->motion_mode == WARPED_CAUSAL && WARP_NEIGHBORS_WITH_OBMC) {
assert_motion_mode_valid(WARPED_CAUSAL,
#if CONFIG_GLOBAL_MOTION && SEPARATE_GLOBAL_MOTION
0, cm->global_motion,
......@@ -2287,7 +2288,7 @@ void av1_build_prediction_by_right_preds(const AV1_COMMON *cm, MACROBLOCKD *xd,
}
} else {
#if CONFIG_WARPED_MOTION
if (mbmi->motion_mode == WARPED_CAUSAL) {
if (mbmi->motion_mode == WARPED_CAUSAL && WARP_NEIGHBORS_WITH_OBMC) {
assert_motion_mode_valid(WARPED_CAUSAL,
#if CONFIG_GLOBAL_MOTION && SEPARATE_GLOBAL_MOTION
0, cm->global_motion,
......
......@@ -20,6 +20,10 @@
#endif // CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
#include "aom/aom_integer.h"
#if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
#define WARP_NEIGHBORS_WITH_OBMC 0
#endif // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
#ifdef __cplusplus
extern "C" {
#endif
......
......@@ -3717,7 +3717,10 @@ static void fix_interp_filter(AV1_COMMON *cm, FRAME_COUNTS *counts) {
// Only one filter is used. So set the filter at frame level
for (i = 0; i < SWITCHABLE_FILTERS; ++i) {
if (count[i]) {
cm->interp_filter = i;
#if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
if (i == EIGHTTAP_REGULAR || WARP_NEIGHBORS_WITH_OBMC)
#endif // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
cm->interp_filter = i;
break;
}
}
......
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