| Index: source/libvpx/vp9/encoder/vp9_encodeframe.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_encodeframe.c (revision 284462)
|
| +++ source/libvpx/vp9/encoder/vp9_encodeframe.c (working copy)
|
| @@ -1333,6 +1333,13 @@
|
| set_offsets(cpi, tile, mi_row, mi_col, bsize);
|
| update_state_rt(cpi, ctx, mi_row, mi_col, bsize);
|
|
|
| +#if CONFIG_DENOISING
|
| + if (cpi->oxcf.noise_sensitivity > 0 && output_enabled) {
|
| + vp9_denoiser_denoise(&cpi->denoiser, &cpi->mb, mi_row, mi_col,
|
| + MAX(BLOCK_8X8, bsize), ctx);
|
| + }
|
| +#endif
|
| +
|
| encode_superblock(cpi, tp, output_enabled, mi_row, mi_col, bsize, ctx);
|
| update_stats(cpi);
|
|
|
| @@ -2395,7 +2402,7 @@
|
| static void nonrd_pick_sb_modes(VP9_COMP *cpi, const TileInfo *const tile,
|
| int mi_row, int mi_col,
|
| int *rate, int64_t *dist,
|
| - BLOCK_SIZE bsize) {
|
| + BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx) {
|
| VP9_COMMON *const cm = &cpi->common;
|
| MACROBLOCK *const x = &cpi->mb;
|
| MACROBLOCKD *const xd = &x->e_mbd;
|
| @@ -2411,7 +2418,7 @@
|
| if (vp9_segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP))
|
| set_mode_info_seg_skip(x, cm->tx_mode, rate, dist, bsize);
|
| else
|
| - vp9_pick_inter_mode(cpi, x, tile, mi_row, mi_col, rate, dist, bsize);
|
| + vp9_pick_inter_mode(cpi, x, tile, mi_row, mi_col, rate, dist, bsize, ctx);
|
|
|
| duplicate_mode_info_in_sb(cm, xd, mi_row, mi_col, bsize);
|
| }
|
| @@ -2528,7 +2535,7 @@
|
| // PARTITION_NONE
|
| if (partition_none_allowed) {
|
| nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col,
|
| - &this_rate, &this_dist, bsize);
|
| + &this_rate, &this_dist, bsize, ctx);
|
| ctx->mic.mbmi = xd->mi[0]->mbmi;
|
| ctx->skip_txfm = x->skip_txfm;
|
| ctx->skip = x->skip;
|
| @@ -2611,7 +2618,8 @@
|
| load_pred_mv(x, ctx);
|
|
|
| nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col,
|
| - &this_rate, &this_dist, subsize);
|
| + &this_rate, &this_dist, subsize,
|
| + &pc_tree->horizontal[0]);
|
|
|
| pc_tree->horizontal[0].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->horizontal[0].skip_txfm = x->skip_txfm;
|
| @@ -2622,7 +2630,8 @@
|
| if (sum_rd < best_rd && mi_row + ms < cm->mi_rows) {
|
| load_pred_mv(x, ctx);
|
| nonrd_pick_sb_modes(cpi, tile, mi_row + ms, mi_col,
|
| - &this_rate, &this_dist, subsize);
|
| + &this_rate, &this_dist, subsize,
|
| + &pc_tree->horizontal[1]);
|
|
|
| pc_tree->horizontal[1].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->horizontal[1].skip_txfm = x->skip_txfm;
|
| @@ -2654,7 +2663,8 @@
|
| load_pred_mv(x, ctx);
|
|
|
| nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col,
|
| - &this_rate, &this_dist, subsize);
|
| + &this_rate, &this_dist, subsize,
|
| + &pc_tree->vertical[0]);
|
| pc_tree->vertical[0].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->vertical[0].skip_txfm = x->skip_txfm;
|
| pc_tree->vertical[0].skip = x->skip;
|
| @@ -2662,7 +2672,8 @@
|
| if (sum_rd < best_rd && mi_col + ms < cm->mi_cols) {
|
| load_pred_mv(x, ctx);
|
| nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col + ms,
|
| - &this_rate, &this_dist, subsize);
|
| + &this_rate, &this_dist, subsize,
|
| + &pc_tree->vertical[1]);
|
| pc_tree->vertical[1].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->vertical[1].skip_txfm = x->skip_txfm;
|
| pc_tree->vertical[1].skip = x->skip;
|
| @@ -2752,19 +2763,21 @@
|
|
|
| switch (partition) {
|
| case PARTITION_NONE:
|
| - nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col, totrate, totdist, subsize);
|
| + nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col, totrate, totdist,
|
| + subsize, &pc_tree->none);
|
| pc_tree->none.mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->none.skip_txfm = x->skip_txfm;
|
| pc_tree->none.skip = x->skip;
|
| break;
|
| case PARTITION_VERT:
|
| - nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col, totrate, totdist, subsize);
|
| + nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col, totrate, totdist,
|
| + subsize, &pc_tree->vertical[0]);
|
| pc_tree->vertical[0].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->vertical[0].skip_txfm = x->skip_txfm;
|
| pc_tree->vertical[0].skip = x->skip;
|
| if (mi_col + hbs < cm->mi_cols) {
|
| nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col + hbs,
|
| - &rate, &dist, subsize);
|
| + &rate, &dist, subsize, &pc_tree->vertical[1]);
|
| pc_tree->vertical[1].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->vertical[1].skip_txfm = x->skip_txfm;
|
| pc_tree->vertical[1].skip = x->skip;
|
| @@ -2776,13 +2789,14 @@
|
| }
|
| break;
|
| case PARTITION_HORZ:
|
| - nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col, totrate, totdist, subsize);
|
| + nonrd_pick_sb_modes(cpi, tile, mi_row, mi_col, totrate, totdist,
|
| + subsize, &pc_tree->horizontal[0]);
|
| pc_tree->horizontal[0].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->horizontal[0].skip_txfm = x->skip_txfm;
|
| pc_tree->horizontal[0].skip = x->skip;
|
| if (mi_row + hbs < cm->mi_rows) {
|
| nonrd_pick_sb_modes(cpi, tile, mi_row + hbs, mi_col,
|
| - &rate, &dist, subsize);
|
| + &rate, &dist, subsize, &pc_tree->horizontal[0]);
|
| pc_tree->horizontal[1].mic.mbmi = xd->mi[0]->mbmi;
|
| pc_tree->horizontal[1].skip_txfm = x->skip_txfm;
|
| pc_tree->horizontal[1].skip = x->skip;
|
| @@ -3034,6 +3048,21 @@
|
| }
|
| }
|
|
|
| +#if CONFIG_FP_MB_STATS
|
| +static int input_fpmb_stats(FIRSTPASS_MB_STATS *firstpass_mb_stats,
|
| + VP9_COMMON *cm, uint8_t **this_frame_mb_stats) {
|
| + uint8_t *mb_stats_in = firstpass_mb_stats->mb_stats_start +
|
| + cm->current_video_frame * cm->MBs * sizeof(uint8_t);
|
| +
|
| + if (mb_stats_in > firstpass_mb_stats->mb_stats_end)
|
| + return EOF;
|
| +
|
| + *this_frame_mb_stats = mb_stats_in;
|
| +
|
| + return 1;
|
| +}
|
| +#endif
|
| +
|
| static void encode_frame_internal(VP9_COMP *cpi) {
|
| SPEED_FEATURES *const sf = &cpi->sf;
|
| RD_OPT *const rd_opt = &cpi->rd;
|
| @@ -3101,6 +3130,13 @@
|
| struct vpx_usec_timer emr_timer;
|
| vpx_usec_timer_start(&emr_timer);
|
|
|
| +#if CONFIG_FP_MB_STATS
|
| + if (cpi->use_fp_mb_stats) {
|
| + input_fpmb_stats(&cpi->twopass.firstpass_mb_stats, cm,
|
| + &cpi->twopass.this_frame_mb_stats);
|
| + }
|
| +#endif
|
| +
|
| encode_tiles(cpi);
|
|
|
| vpx_usec_timer_mark(&emr_timer);
|
|
|