Removing interp_kernel from MACROBLOCKD.
Now interp_kernel is obtained when it is really required (based on mbmi->interp_filter value). Change-Id: I4c7a93c179d1045eba16e7526c293d02c9b8b47e
This commit is contained in:
Родитель
8fe4f77a7a
Коммит
a9f324fa7f
|
@ -231,8 +231,6 @@ typedef struct macroblockd {
|
|||
/* Inverse transform function pointers. */
|
||||
void (*itxm_add)(const int16_t *input, uint8_t *dest, int stride, int eob);
|
||||
|
||||
const InterpKernel *interp_kernel;
|
||||
|
||||
int corrupted;
|
||||
|
||||
DECLARE_ALIGNED(16, int16_t, dqcoeff[MAX_MB_PLANE][64 * 64]);
|
||||
|
|
|
@ -146,6 +146,7 @@ static void build_inter_predictors(MACROBLOCKD *xd, int plane, int block,
|
|||
struct macroblockd_plane *const pd = &xd->plane[plane];
|
||||
const MODE_INFO *mi = xd->mi[0];
|
||||
const int is_compound = has_second_ref(&mi->mbmi);
|
||||
const InterpKernel *kernel = vp9_get_interp_kernel(mi->mbmi.interp_filter);
|
||||
int ref;
|
||||
|
||||
for (ref = 0; ref < 1 + is_compound; ++ref) {
|
||||
|
@ -193,8 +194,7 @@ static void build_inter_predictors(MACROBLOCKD *xd, int plane, int block,
|
|||
+ (scaled_mv.col >> SUBPEL_BITS);
|
||||
|
||||
inter_predictor(pre, pre_buf->stride, dst, dst_buf->stride,
|
||||
subpel_x, subpel_y, sf, w, h, ref, xd->interp_kernel,
|
||||
xs, ys);
|
||||
subpel_x, subpel_y, sf, w, h, ref, kernel, xs, ys);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -250,6 +250,7 @@ static void dec_build_inter_predictors(MACROBLOCKD *xd, int plane, int block,
|
|||
struct macroblockd_plane *const pd = &xd->plane[plane];
|
||||
const MODE_INFO *mi = xd->mi[0];
|
||||
const int is_compound = has_second_ref(&mi->mbmi);
|
||||
const InterpKernel *kernel = vp9_get_interp_kernel(mi->mbmi.interp_filter);
|
||||
int ref;
|
||||
|
||||
for (ref = 0; ref < 1 + is_compound; ++ref) {
|
||||
|
@ -377,7 +378,7 @@ static void dec_build_inter_predictors(MACROBLOCKD *xd, int plane, int block,
|
|||
}
|
||||
|
||||
inter_predictor(buf_ptr, buf_stride, dst, dst_buf->stride, subpel_x,
|
||||
subpel_y, sf, w, h, ref, xd->interp_kernel, xs, ys);
|
||||
subpel_y, sf, w, h, ref, kernel, xs, ys);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -360,8 +360,6 @@ static void decode_block(VP9_COMMON *const cm, MACROBLOCKD *const xd,
|
|||
if (has_second_ref(mbmi))
|
||||
set_ref(cm, xd, 1, mi_row, mi_col);
|
||||
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
|
||||
// Prediction
|
||||
vp9_dec_build_inter_predictors_sb(xd, mi_row, mi_col, bsize);
|
||||
|
||||
|
|
|
@ -3430,7 +3430,6 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
|
|||
}
|
||||
} else {
|
||||
set_ref_ptrs(cm, xd, mbmi->ref_frame[0], mbmi->ref_frame[1]);
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
|
||||
if (cpi->oxcf.tuning == VP8_TUNE_SSIM) {
|
||||
// Adjust the zbin based on this MB rate.
|
||||
|
|
|
@ -3198,8 +3198,6 @@ int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
|
|||
}
|
||||
|
||||
set_ref_ptrs(cm, xd, LAST_FRAME, LAST_FRAME);
|
||||
xd->interp_kernel = vp9_get_interp_kernel(
|
||||
DEFAULT_INTERP_FILTER == SWITCHABLE ? EIGHTTAP : DEFAULT_INTERP_FILTER);
|
||||
|
||||
if (cpi->oxcf.aq_mode == VARIANCE_AQ) {
|
||||
vp9_vaq_init();
|
||||
|
|
|
@ -253,7 +253,6 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
EIGHTTAP : cpi->common.interp_filter;
|
||||
mbmi->skip = 0;
|
||||
mbmi->segment_id = segment_id;
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
|
||||
for (ref_frame = LAST_FRAME; ref_frame <= LAST_FRAME ; ++ref_frame) {
|
||||
x->pred_mv_sad[ref_frame] = INT_MAX;
|
||||
|
|
|
@ -1559,6 +1559,8 @@ static int64_t encode_inter_mb_segment(VP9_COMP *cpi,
|
|||
int thisrate = 0, ref;
|
||||
const scan_order *so = &vp9_default_scan_orders[TX_4X4];
|
||||
const int is_compound = has_second_ref(&mi->mbmi);
|
||||
const InterpKernel *kernel = vp9_get_interp_kernel(mi->mbmi.interp_filter);
|
||||
|
||||
for (ref = 0; ref < 1 + is_compound; ++ref) {
|
||||
const uint8_t *pre = &pd->pre[ref].buf[raster_block_offset(BLOCK_8X8, i,
|
||||
pd->pre[ref].stride)];
|
||||
|
@ -1566,7 +1568,7 @@ static int64_t encode_inter_mb_segment(VP9_COMP *cpi,
|
|||
dst, pd->dst.stride,
|
||||
&mi->bmi[i].as_mv[ref].as_mv,
|
||||
&xd->block_refs[ref]->sf, width, height, ref,
|
||||
xd->interp_kernel, MV_PRECISION_Q3,
|
||||
kernel, MV_PRECISION_Q3,
|
||||
mi_col * MI_SIZE + 4 * (i % 2),
|
||||
mi_row * MI_SIZE + 4 * (i / 2));
|
||||
}
|
||||
|
@ -2544,6 +2546,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
int ite, ref;
|
||||
// Prediction buffer from second frame.
|
||||
uint8_t *second_pred = vpx_memalign(16, pw * ph * sizeof(uint8_t));
|
||||
const InterpKernel *kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
|
||||
// Do joint motion search in compound mode to get more accurate mv.
|
||||
struct buf_2d backup_yv12[2][MAX_MB_PLANE];
|
||||
|
@ -2597,7 +2600,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
&frame_mv[refs[!id]].as_mv,
|
||||
&xd->block_refs[!id]->sf,
|
||||
pw, ph, 0,
|
||||
xd->interp_kernel, MV_PRECISION_Q3,
|
||||
kernel, MV_PRECISION_Q3,
|
||||
mi_col * MI_SIZE, mi_row * MI_SIZE);
|
||||
|
||||
// Compound motion search on first ref frame.
|
||||
|
@ -2812,7 +2815,6 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
int j;
|
||||
int64_t rs_rd;
|
||||
mbmi->interp_filter = i;
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
rs = get_switchable_rate(x);
|
||||
rs_rd = RDCOST(x->rdmult, x->rddiv, rs, 0);
|
||||
|
||||
|
@ -2883,7 +2885,6 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
// Set the appropriate filter
|
||||
mbmi->interp_filter = cm->interp_filter != SWITCHABLE ?
|
||||
cm->interp_filter : *best_filter;
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
rs = cm->interp_filter == SWITCHABLE ? get_switchable_rate(x) : 0;
|
||||
|
||||
if (pred_exists) {
|
||||
|
@ -3394,7 +3395,6 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
: cm->interp_filter;
|
||||
x->skip = 0;
|
||||
set_ref_ptrs(cm, xd, ref_frame, second_ref_frame);
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
|
||||
// Select prediction reference frames.
|
||||
for (i = 0; i < MAX_MB_PLANE; i++) {
|
||||
|
@ -3938,7 +3938,6 @@ int64_t vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
// them for this frame.
|
||||
mbmi->interp_filter = cm->interp_filter == SWITCHABLE ? EIGHTTAP
|
||||
: cm->interp_filter;
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
|
||||
if (comp_pred) {
|
||||
if (!(cpi->ref_frame_flags & flag_list[second_ref_frame]))
|
||||
|
@ -4061,7 +4060,6 @@ int64_t vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
int newbest, rs;
|
||||
int64_t rs_rd;
|
||||
mbmi->interp_filter = switchable_filter_index;
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
tmp_rd = rd_pick_best_mbsegmentation(cpi, x, tile,
|
||||
&mbmi->ref_mvs[ref_frame][0],
|
||||
second_ref,
|
||||
|
@ -4126,7 +4124,6 @@ int64_t vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
|
|||
|
||||
mbmi->interp_filter = (cm->interp_filter == SWITCHABLE ?
|
||||
tmp_best_filter : cm->interp_filter);
|
||||
xd->interp_kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
||||
if (!pred_exists) {
|
||||
// Handles the special case when a filter that is not in the
|
||||
// switchable list (bilinear, 6-tap) is indicated at the frame level
|
||||
|
|
|
@ -41,7 +41,10 @@ static void temporal_filter_predictors_mb_c(MACROBLOCKD *xd,
|
|||
struct scale_factors *scale,
|
||||
int x, int y) {
|
||||
const int which_mv = 0;
|
||||
MV mv = { mv_row, mv_col };
|
||||
const MV mv = { mv_row, mv_col };
|
||||
const InterpKernel *const kernel =
|
||||
vp9_get_interp_kernel(xd->mi[0]->mbmi.interp_filter);
|
||||
|
||||
enum mv_precision mv_precision_uv;
|
||||
int uv_stride;
|
||||
if (uv_block_size == 8) {
|
||||
|
@ -58,7 +61,7 @@ static void temporal_filter_predictors_mb_c(MACROBLOCKD *xd,
|
|||
scale,
|
||||
16, 16,
|
||||
which_mv,
|
||||
xd->interp_kernel, MV_PRECISION_Q3, x, y);
|
||||
kernel, MV_PRECISION_Q3, x, y);
|
||||
|
||||
vp9_build_inter_predictor(u_mb_ptr, uv_stride,
|
||||
&pred[256], uv_block_size,
|
||||
|
@ -66,7 +69,7 @@ static void temporal_filter_predictors_mb_c(MACROBLOCKD *xd,
|
|||
scale,
|
||||
uv_block_size, uv_block_size,
|
||||
which_mv,
|
||||
xd->interp_kernel, mv_precision_uv, x, y);
|
||||
kernel, mv_precision_uv, x, y);
|
||||
|
||||
vp9_build_inter_predictor(v_mb_ptr, uv_stride,
|
||||
&pred[512], uv_block_size,
|
||||
|
@ -74,7 +77,7 @@ static void temporal_filter_predictors_mb_c(MACROBLOCKD *xd,
|
|||
scale,
|
||||
uv_block_size, uv_block_size,
|
||||
which_mv,
|
||||
xd->interp_kernel, mv_precision_uv, x, y);
|
||||
kernel, mv_precision_uv, x, y);
|
||||
}
|
||||
|
||||
void vp9_temporal_filter_apply_c(uint8_t *frame1,
|
||||
|
|
Загрузка…
Ссылка в новой задаче