Lines Matching defs:cpi

170 static void model_rd_for_sb(VP9_COMP *cpi, BLOCK_SIZE bsize,
209 var = cpi->fn_ptr[unit_size].vf(src, p->src.stride,
229 if (cpi->oxcf.speed > 4) {
487 static void choose_largest_tx_size(VP9_COMP *cpi, MACROBLOCK *x,
493 VP9_COMMON *const cm = &cpi->common;
502 mbmi->tx_size, cpi->sf.use_fast_coef_costing);
505 static void choose_tx_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x,
514 VP9_COMMON *const cm = &cpi->common;
538 cpi->sf.use_fast_coef_costing);
558 if (cpi->sf.tx_size_search_breakout &&
594 static void super_block_yrd(VP9_COMP *cpi, MACROBLOCK *x, int *rate,
605 if (cpi->sf.tx_size_search_method == USE_LARGESTALL || xd->lossless) {
607 choose_largest_tx_size(cpi, x, rate, distortion, skip, ret_sse, ref_best_rd,
610 choose_tx_size_from_rd(cpi, x, rate, distortion, skip, ret_sse,
636 static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib,
675 if (!(cpi->sf.intra_y_mode_mask[TX_4X4] & (1 << mode)))
680 if (cpi->sf.mode_search_skip_flags & FLAG_SKIP_INTRA_DIRMISMATCH) {
710 cpi->sf.use_fast_coef_costing);
723 cpi->sf.use_fast_coef_costing);
763 static int64_t rd_pick_intra_sub_8x8_y_mode(VP9_COMP *cpi, MACROBLOCK *mb,
781 const int *bmode_costs = cpi->mbmode_cost;
793 if (cpi->common.frame_type == KEY_FRAME) {
797 bmode_costs = cpi->y_mode_costs[A][L];
800 this_rd = rd_pick_intra4x4block(cpi, mb, i, &best_mode, bmode_costs,
830 static int64_t rd_pick_intra_sby_mode(VP9_COMP *cpi, MACROBLOCK *x,
844 int *bmode_costs = cpi->mbmode_cost;
846 if (cpi->sf.tx_size_search_method == USE_FULL_RD)
856 if (cpi->common.frame_type == KEY_FRAME) {
860 bmode_costs = cpi->y_mode_costs[A][L];
864 super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion,
883 if (cpi->sf.tx_size_search_method == USE_FULL_RD && this_rd < INT64_MAX) {
886 local_tx_cache[cpi->common.tx_mode];
900 static void super_block_uvrd(const VP9_COMP *cpi, MACROBLOCK *x,
928 cpi->sf.use_fast_coef_costing);
946 static int64_t rd_pick_intra_sbuv_mode(VP9_COMP *cpi, MACROBLOCK *x,
959 if (!(cpi->sf.intra_uv_mode_mask[max_tx_size] & (1 << mode)))
964 super_block_uvrd(cpi, x, &this_rate_tokenonly,
969 cpi->intra_uv_mode_cost[cpi->common.frame_type][mode];
988 static int64_t rd_sbuv_dcpred(const VP9_COMP *cpi, MACROBLOCK *x,
992 const VP9_COMMON *cm = &cpi->common;
996 super_block_uvrd(cpi, x, rate_tokenonly, distortion,
998 *rate = *rate_tokenonly + cpi->intra_uv_mode_cost[cm->frame_type][DC_PRED];
1002 static void choose_intra_uv_mode(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
1007 MACROBLOCK *const x = &cpi->mb;
1011 if (cpi->sf.use_uv_intra_rd_estimate) {
1012 rd_sbuv_dcpred(cpi, x, rate_uv, rate_uv_tokenonly, dist_uv,
1017 rd_pick_intra_sbuv_mode(cpi, x, ctx,
1024 static int cost_mv_ref(const VP9_COMP *cpi, PREDICTION_MODE mode,
1027 return cpi->inter_mode_cost[mode_context][INTER_OFFSET(mode)];
1030 static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
1037 static int set_and_cost_bmi_mvs(VP9_COMP *cpi, MACROBLOCKD *xd, int i,
1088 return cost_mv_ref(cpi, mode, mbmi->mode_context[mbmi->ref_frame[0]]) +
1092 static int64_t encode_inter_mb_segment(VP9_COMP *cpi,
1154 cpi->sf.use_fast_coef_costing);
1233 const VP9_COMP *cpi, const uint8_t mode_context[MAX_REF_FRAMES],
1241 int c1 = cost_mv_ref(cpi, NEARMV, rfc);
1242 int c2 = cost_mv_ref(cpi, NEARESTMV, rfc);
1243 int c3 = cost_mv_ref(cpi, ZEROMV, rfc);
1267 static int64_t rd_pick_best_sub8x8_mode(VP9_COMP *cpi, MACROBLOCK *x,
1288 VP9_COMMON *cm = &cpi->common;
1301 const int inter_mode_mask = cpi->sf.inter_mode_mask[bsize];
1353 if (!check_best_zero_mv(cpi, mbmi->mode_context, frame_mv,
1379 if (cpi->oxcf.mode != BEST) {
1392 if (cpi->sf.mv.auto_mv_step_size && cm->show_frame) {
1397 cpi->mv_step_param) / 2;
1399 step_param = cpi->mv_step_param;
1405 if (cpi->sf.adaptive_motion_search) {
1417 cpi, x, bsize, &mvp_full, step_param, sadpb,
1418 cpi->sf.mv.subpel_search_method != SUBPEL_TREE ? sad_list : NULL,
1423 if (cpi->oxcf.mode == BEST) {
1428 thissme = cpi->full_search_sad(x, &mvp_full,
1429 sadpb, 16, &cpi->fn_ptr[bsize],
1445 cpi->find_fractional_mv_step(
1450 x->errorperbit, &cpi->fn_ptr[bsize],
1451 cpi->sf.mv.subpel_force_stop,
1452 cpi->sf.mv.subpel_iters_per_step,
1453 cond_sad_list(cpi, sad_list),
1463 if (cpi->sf.adaptive_motion_search)
1480 if (cpi->sf.comp_inter_joint_search_thresh <= bsize) {
1482 joint_motion_search(cpi, x, bsize, frame_mv[this_mode],
1495 set_and_cost_bmi_mvs(cpi, xd, i, this_mode, mode_mv[this_mode],
1555 encode_inter_mb_segment(cpi, x,
1593 set_and_cost_bmi_mvs(cpi, xd, i, mode_selected, mode_mv[mode_selected],
1733 static void setup_buffer_inter(VP9_COMP *cpi, MACROBLOCK *x,
1741 const VP9_COMMON *cm = &cpi->common;
1742 const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame);
1764 vp9_mv_pred(cpi, x, yv12_mb[ref_frame][0].buf, yv12->y_stride,
1768 static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
1773 const VP9_COMMON *cm = &cpi->common;
1789 const YV12_BUFFER_CONFIG *scaled_ref_frame = vp9_get_scaled_ref_frame(cpi,
1812 if (cpi->sf.mv.auto_mv_step_size && cm->show_frame) {
1817 cpi->mv_step_param) / 2;
1819 step_param = cpi->mv_step_param;
1822 if (cpi->sf.adaptive_motion_search && bsize < BLOCK_64X64) {
1828 if (cpi->sf.adaptive_motion_search) {
1858 bestsme = vp9_full_pixel_search(cpi, x, bsize, &mvp_full, step_param, sadpb,
1859 cond_sad_list(cpi, sad_list),
1869 cpi->find_fractional_mv_step(x, &tmp_mv->as_mv, &ref_mv,
1872 &cpi->fn_ptr[bsize],
1873 cpi->sf.mv.subpel_force_stop,
1874 cpi->sf.mv.subpel_iters_per_step,
1875 cond_sad_list(cpi, sad_list),
1882 if (cpi->sf.adaptive_motion_search)
1892 static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
1915 vp9_get_scaled_ref_frame(cpi, mbmi->ref_frame[0]),
1916 vp9_get_scaled_ref_frame(cpi, mbmi->ref_frame[1])
1979 &cpi->fn_ptr[bsize],
1983 second_pred, &cpi->fn_ptr[bsize], 1);
1993 bestsme = cpi->find_fractional_mv_step(
1996 cpi->common.allow_high_precision_mv,
1998 &cpi->fn_ptr[bsize],
1999 0, cpi->sf.mv.subpel_iters_per_step,
2045 static void rd_encode_breakout_test(VP9_COMP *cpi, MACROBLOCK *x,
2049 VP9_COMMON *cm = &cpi->common;
2059 var = cpi->fn_ptr[y_size].vf(x->plane[0].src.buf, x->plane[0].src.stride,
2066 const unsigned int max_thresh = (cpi->allow_encode_breakout ==
2092 var_u = cpi->fn_ptr[uv_size].vf(x->plane[1].src.buf,
2100 var_v = cpi->fn_ptr[uv_size].vf(x->plane[2].src.buf,
2125 static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
2140 VP9_COMMON *cm = &cpi->common;
2141 RD_OPT *rd_opt = &cpi->rd;
2165 int pred_filter_search = cpi->sf.cb_pred_filter_search ?
2185 if (cpi->sf.adaptive_mode_search) {
2199 if (cpi->sf.comp_inter_joint_search_thresh <= bsize) {
2200 joint_motion_search(cpi, x, bsize, frame_mv,
2213 single_motion_search(cpi, x, bsize, mi_row, mi_col,
2249 *rate2 += cost_mv_ref(cpi, this_mode, mbmi->mode_context[refs[0]]);
2268 if (x->source_variance < cpi->sf.disable_filter_search_var_thresh) {
2279 rs = vp9_get_switchable_rate(cpi);
2293 if (i > 0 && cpi->sf.adaptive_interp_filter_search &&
2294 (cpi->sf.interp_filter_search_mask & (1 << i))) {
2313 model_rd_for_sb(cpi, bsize, x, xd, &rate_sum, &dist_sum);
2329 if (i == 0 && cpi->sf.use_rd_breakout && ref_best_rd < INT64_MAX) {
2359 rs = cm->interp_filter == SWITCHABLE ? vp9_get_switchable_rate(cpi) : 0;
2377 model_rd_for_sb(cpi, bsize, x, xd, &tmp_rate, &tmp_dist);
2386 if (cpi->sf.adaptive_mode_search)
2392 if (cpi->sf.use_rd_breakout && ref_best_rd < INT64_MAX) {
2405 if (cpi->allow_encode_breakout)
2406 rd_encode_breakout_test(cpi, x, bsize, rate2, distortion, distortion_uv,
2420 super_block_yrd(cpi, x, rate_y, distortion_y, &skippable_y, psse,
2436 super_block_uvrd(cpi, x, rate_uv, distortion_uv, &skippable_uv, &sseuv,
2458 void vp9_rd_pick_intra_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
2462 VP9_COMMON *const cm = &cpi->common;
2474 if (rd_pick_intra_sby_mode(cpi, x, &rate_y, &rate_y_tokenonly,
2483 rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
2487 if (rd_pick_intra_sub_8x8_y_mode(cpi, x, &rate_y, &rate_y_tokenonly,
2495 rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
2508 if (cpi->sf.tx_size_search_method == USE_FULL_RD)
2525 static void update_rd_thresh_fact(VP9_COMP *cpi, int bsize,
2527 if (cpi->sf.adaptive_rd_thresh > 0) {
2531 int *const fact = &cpi->rd.thresh_freq_fact[bsize][mode];
2537 cpi->sf.adaptive_rd_thresh * RD_THRESH_MAX_FACT);
2543 int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
2551 VP9_COMMON *const cm = &cpi->common;
2552 RD_OPT *const rd_opt = &cpi->rd;
2592 int mode_skip_start = cpi->sf.mode_skip_start + 1;
2597 const int mode_search_skip_flags = cpi->sf.mode_search_skip_flags;
2600 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
2626 if (cpi->ref_frame_flags & flag_list[ref_frame]) {
2627 setup_buffer_inter(cpi, x, tile, ref_frame, bsize, mi_row, mi_col,
2635 if (!(cpi->ref_frame_flags & flag_list[ref_frame])) {
2641 } else if (cpi->sf.reference_masking) {
2667 if (cpi->rc.is_src_frame_alt_ref && (cpi->oxcf.arnr_max_frames == 0)) {
2678 if (cpi->rc.is_src_frame_alt_ref) {
2679 if (cpi->sf.alt_ref_search_fp) {
2686 if (bsize > cpi->sf.max_intra_bsize) {
2692 ~(cpi->sf.intra_y_mode_mask[max_txsize_lookup[bsize]]);
2697 midx = cpi->sf.schedule_mode_search ? mode_skip_start : 0;
2761 if (best_mode_skippable && cpi->sf.schedule_mode_search)
2767 if (cpi->sf.motion_field_mode_search) {
2822 if (!(cpi->ref_frame_flags & flag_list[second_ref_frame]))
2841 if (cpi->sf.adaptive_mode_search)
2868 if (!check_best_zero_mv(cpi, mbmi->mode_context, frame_mv,
2898 super_block_yrd(cpi, x, &rate_y, &distortion_y, &skippable,
2907 choose_intra_uv_mode(cpi, ctx, bsize, uv_tx,
2917 rate2 = rate_y + cpi->mbmode_cost[mbmi->mode] + rate_uv_intra[uv_tx];
2922 this_rd = handle_inter_mode(cpi, x, bsize,
3137 if (cpi->sf.use_uv_intra_rd_estimate) {
3143 rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv_intra[uv_tx_size],
3156 if (!cpi->rc.is_src_frame_alt_ref)
3157 update_rd_thresh_fact(cpi, bsize, best_mode_index);
3200 int64_t vp9_rd_pick_inter_mode_sb_seg_skip(VP9_COMP *cpi, MACROBLOCK *x,
3206 VP9_COMMON *const cm = &cpi->common;
3207 RD_OPT *const rd_opt = &cpi->rd;
3223 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
3253 x->source_variance >= cpi->sf.disable_filter_search_var_thresh) {
3258 rs = vp9_get_switchable_rate(cpi);
3269 rate2 += vp9_get_switchable_rate(cpi);
3291 update_rd_thresh_fact(cpi, bsize, THR_ZEROMV);
3305 int64_t vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
3313 VP9_COMMON *const cm = &cpi->common;
3314 RD_OPT *const rd_opt = &cpi->rd;
3348 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
3370 if (cpi->ref_frame_flags & flag_list[ref_frame]) {
3371 setup_buffer_inter(cpi, x, tile,
3401 if (ref_index > 2 && cpi->sf.mode_skip_start < MAX_MODES) {
3439 if (!(cpi->ref_frame_flags & flag_list[second_ref_frame]))
3446 if ((cpi->sf.mode_search_skip_flags & FLAG_SKIP_COMP_BESTINTRA) &&
3479 if (cpi->rc.is_src_frame_alt_ref && (cpi->oxcf.arnr_max_frames == 0))
3503 if (rd_pick_intra_sub_8x8_y_mode(cpi, x, &rate, &rate_y,
3511 choose_intra_uv_mode(cpi, ctx, bsize, TX_4X4,
3550 if (x->source_variance < cpi->sf.disable_filter_search_var_thresh) {
3552 } else if (cpi->sf.adaptive_pred_interp_filter == 1 &&
3555 } else if (cpi->sf.adaptive_pred_interp_filter == 2) {
3565 tmp_rd = rd_pick_best_sub8x8_mode(cpi, x, tile,
3576 rs = vp9_get_switchable_rate(cpi);
3608 cpi->sf.use_rd_breakout &&
3631 tmp_rd = rd_pick_best_sub8x8_mode(cpi, x, tile,
3654 rate2 += vp9_get_switchable_rate(cpi);
3671 super_block_uvrd(cpi, x, &rate_uv, &distortion_uv, &uv_skippable,
3758 if ((cpi->sf.mode_search_skip_flags & FLAG_EARLY_TERMINATE) &&
3833 if (cpi->sf.use_uv_intra_rd_estimate) {
3837 rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv_intra,
3855 update_rd_thresh_fact(cpi, bsize, best_ref_index);