diff options
Diffstat (limited to 'vp8/encoder')
-rw-r--r-- | vp8/encoder/encodeintra.c | 6 | ||||
-rw-r--r-- | vp8/encoder/pickinter.c | 29 | ||||
-rw-r--r-- | vp8/encoder/rdopt.c | 48 |
3 files changed, 57 insertions, 26 deletions
diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c index f73bcc59d..1f445b7ec 100644 --- a/vp8/encoder/encodeintra.c +++ b/vp8/encoder/encodeintra.c @@ -99,7 +99,8 @@ void vp8_encode_intra16x16mby(MACROBLOCK *x) xd->dst.y_buffer - xd->dst.y_stride, xd->dst.y_buffer - 1, xd->dst.y_stride, - xd->dst.y_buffer); + xd->dst.y_buffer, + xd->dst.y_stride); vp8_subtract_mby(x->src_diff, *(b->base_src), b->src_stride, xd->dst.y_buffer, xd->dst.y_stride); @@ -121,7 +122,8 @@ void vp8_encode_intra16x16mbuv(MACROBLOCK *x) xd->dst.u_buffer - 1, xd->dst.v_buffer - 1, xd->dst.uv_stride, - xd->dst.u_buffer, xd->dst.v_buffer); + xd->dst.u_buffer, xd->dst.v_buffer, + xd->dst.uv_stride); vp8_subtract_mbuv(x->src_diff, x->src.u_buffer, x->src.v_buffer, x->src.uv_stride, xd->dst.u_buffer, diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index 24e041f8d..dafb64527 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c @@ -735,8 +735,12 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, case V_PRED: case H_PRED: case TM_PRED: - vp8_build_intra_predictors_mby - (&x->e_mbd); + vp8_build_intra_predictors_mby_s(xd, + xd->dst.y_buffer - xd->dst.y_stride, + xd->dst.y_buffer - 1, + xd->dst.y_stride, + xd->predictor, + 16); distortion2 = vp8_variance16x16 (*(b->base_src), b->src_stride, x->e_mbd.predictor, 16, &sse); @@ -1130,19 +1134,24 @@ void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_) int this_rd; unsigned int sse; BLOCK *b = &x->block[0]; + MACROBLOCKD *xd = &x->e_mbd; - x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; + xd->mode_info_context->mbmi.ref_frame = INTRA_FRAME; pick_intra_mbuv_mode(x); for (mode = DC_PRED; mode <= TM_PRED; mode ++) { - x->e_mbd.mode_info_context->mbmi.mode = mode; - vp8_build_intra_predictors_mby - (&x->e_mbd); + xd->mode_info_context->mbmi.mode = mode; + vp8_build_intra_predictors_mby_s(xd, + xd->dst.y_buffer - xd->dst.y_stride, + xd->dst.y_buffer - 1, + xd->dst.y_stride, + xd->predictor, + 16); distortion = vp8_variance16x16 - (*(b->base_src), b->src_stride, x->e_mbd.predictor, 16, &sse); - rate = x->mbmode_cost[x->e_mbd.frame_type][mode]; + (*(b->base_src), b->src_stride, xd->predictor, 16, &sse); + rate = x->mbmode_cost[xd->frame_type][mode]; this_rd = RDCOST(x->rdmult, x->rddiv, rate, distortion); if (error16x16 > this_rd) @@ -1153,13 +1162,13 @@ void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_) best_rate = rate; } } - x->e_mbd.mode_info_context->mbmi.mode = best_mode; + xd->mode_info_context->mbmi.mode = best_mode; error4x4 = pick_intra4x4mby_modes(x, &rate, &best_sse); if (error4x4 < error16x16) { - x->e_mbd.mode_info_context->mbmi.mode = B_PRED; + xd->mode_info_context->mbmi.mode = B_PRED; best_rate = rate; } diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 8f575e498..2b706ba9e 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -782,18 +782,23 @@ static int rd_pick_intra16x16mby_mode(VP8_COMP *cpi, int distortion; int best_rd = INT_MAX; int this_rd; + MACROBLOCKD *xd = &x->e_mbd; //Y Search for 16x16 intra prediction mode for (mode = DC_PRED; mode <= TM_PRED; mode++) { - x->e_mbd.mode_info_context->mbmi.mode = mode; + xd->mode_info_context->mbmi.mode = mode; - vp8_build_intra_predictors_mby - (&x->e_mbd); + vp8_build_intra_predictors_mby_s(xd, + xd->dst.y_buffer - xd->dst.y_stride, + xd->dst.y_buffer - 1, + xd->dst.y_stride, + xd->predictor, + 16); macro_block_yrd(x, &ratey, &distortion); - rate = ratey + x->mbmode_cost[x->e_mbd.frame_type] - [x->e_mbd.mode_info_context->mbmi.mode]; + rate = ratey + x->mbmode_cost[xd->frame_type] + [xd->mode_info_context->mbmi.mode]; this_rd = RDCOST(x->rdmult, x->rddiv, rate, distortion); @@ -807,7 +812,7 @@ static int rd_pick_intra16x16mby_mode(VP8_COMP *cpi, } } - x->e_mbd.mode_info_context->mbmi.mode = mode_selected; + xd->mode_info_context->mbmi.mode = mode_selected; return best_rd; } @@ -875,6 +880,7 @@ static void rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int int best_rd = INT_MAX; int UNINITIALIZED_IS_SAFE(d), UNINITIALIZED_IS_SAFE(r); int rate_to; + MACROBLOCKD *xd = &x->e_mbd; for (mode = DC_PRED; mode <= TM_PRED; mode++) { @@ -882,17 +888,26 @@ static void rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int int distortion; int this_rd; - x->e_mbd.mode_info_context->mbmi.uv_mode = mode; - vp8_build_intra_predictors_mbuv - (&x->e_mbd); + xd->mode_info_context->mbmi.uv_mode = mode; + + vp8_build_intra_predictors_mbuv_s(xd, + xd->dst.u_buffer - xd->dst.uv_stride, + xd->dst.v_buffer - xd->dst.uv_stride, + xd->dst.u_buffer - 1, + xd->dst.v_buffer - 1, + xd->dst.uv_stride, + &xd->predictor[256], &xd->predictor[320], + 8); + + vp8_subtract_mbuv(x->src_diff, x->src.u_buffer, x->src.v_buffer, x->src.uv_stride, - &x->e_mbd.predictor[256], &x->e_mbd.predictor[320], 8); + &xd->predictor[256], &xd->predictor[320], 8); vp8_transform_mbuv(x); vp8_quantize_mbuv(x); rate_to = rd_cost_mbuv(x); - rate = rate_to + x->intra_uv_mode_cost[x->e_mbd.frame_type][x->e_mbd.mode_info_context->mbmi.uv_mode]; + rate = rate_to + x->intra_uv_mode_cost[xd->frame_type][xd->mode_info_context->mbmi.uv_mode]; distortion = vp8_mbuverror(x) / 4; @@ -911,7 +926,7 @@ static void rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *rate = r; *distortion = d; - x->e_mbd.mode_info_context->mbmi.uv_mode = mode_selected; + xd->mode_info_context->mbmi.uv_mode = mode_selected; } int vp8_cost_mv_ref(MB_PREDICTION_MODE m, const int near_mv_ref_ct[4]) @@ -2157,8 +2172,13 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, { int distortion; x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; - vp8_build_intra_predictors_mby - (&x->e_mbd); + + vp8_build_intra_predictors_mby_s(xd, + xd->dst.y_buffer - xd->dst.y_stride, + xd->dst.y_buffer - 1, + xd->dst.y_stride, + xd->predictor, + 16); macro_block_yrd(x, &rd.rate_y, &distortion) ; rd.rate2 += rd.rate_y; rd.distortion2 += distortion; |