| Index: source/libvpx/vp8/encoder/encodeintra.c
|
| ===================================================================
|
| --- source/libvpx/vp8/encoder/encodeintra.c (revision 96967)
|
| +++ source/libvpx/vp8/encoder/encodeintra.c (working copy)
|
| @@ -21,19 +21,51 @@
|
| #include "vp8/common/g_common.h"
|
| #include "encodeintra.h"
|
|
|
| -#define intra4x4ibias_rate 128
|
| -#define intra4x4pbias_rate 256
|
|
|
| -
|
| #if CONFIG_RUNTIME_CPU_DETECT
|
| #define IF_RTCD(x) (x)
|
| #else
|
| #define IF_RTCD(x) NULL
|
| #endif
|
| -void vp8_encode_intra4x4block(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x, BLOCK *be, BLOCKD *b, int best_mode)
|
| +
|
| +int vp8_encode_intra(VP8_COMP *cpi, MACROBLOCK *x, int use_dc_pred)
|
| {
|
| - vp8_predict_intra4x4(b, best_mode, b->predictor);
|
|
|
| + int i;
|
| + int intra_pred_var = 0;
|
| + (void) cpi;
|
| +
|
| + if (use_dc_pred)
|
| + {
|
| + x->e_mbd.mode_info_context->mbmi.mode = DC_PRED;
|
| + x->e_mbd.mode_info_context->mbmi.uv_mode = DC_PRED;
|
| + x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME;
|
| +
|
| + vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x);
|
| + }
|
| + else
|
| + {
|
| + for (i = 0; i < 16; i++)
|
| + {
|
| + x->e_mbd.block[i].bmi.as_mode = B_DC_PRED;
|
| + vp8_encode_intra4x4block(IF_RTCD(&cpi->rtcd), x, i);
|
| + }
|
| + }
|
| +
|
| + intra_pred_var = VARIANCE_INVOKE(&cpi->rtcd.variance, getmbss)(x->src_diff);
|
| +
|
| + return intra_pred_var;
|
| +}
|
| +
|
| +void vp8_encode_intra4x4block(const VP8_ENCODER_RTCD *rtcd,
|
| + MACROBLOCK *x, int ib)
|
| +{
|
| + BLOCKD *b = &x->e_mbd.block[ib];
|
| + BLOCK *be = &x->block[ib];
|
| +
|
| + RECON_INVOKE(&rtcd->common->recon, intra4x4_predict)
|
| + (b, b->bmi.as_mode, b->predictor);
|
| +
|
| ENCODEMB_INVOKE(&rtcd->encodemb, subb)(be, b, 16);
|
|
|
| x->vp8_short_fdct4x4(be->src_diff, be->coeff, 32);
|
| @@ -53,72 +85,35 @@
|
| vp8_intra_prediction_down_copy(x);
|
|
|
| for (i = 0; i < 16; i++)
|
| - {
|
| - BLOCK *be = &mb->block[i];
|
| - BLOCKD *b = &x->block[i];
|
| -
|
| - vp8_encode_intra4x4block(rtcd, mb, be, b, b->bmi.mode);
|
| - }
|
| -
|
| + vp8_encode_intra4x4block(rtcd, mb, i);
|
| return;
|
| }
|
|
|
| void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
|
| {
|
| - int b;
|
| + BLOCK *b = &x->block[0];
|
|
|
| RECON_INVOKE(&rtcd->common->recon, build_intra_predictors_mby)(&x->e_mbd);
|
|
|
| - ENCODEMB_INVOKE(&rtcd->encodemb, submby)(x->src_diff, x->src.y_buffer, x->e_mbd.predictor, x->src.y_stride);
|
| + ENCODEMB_INVOKE(&rtcd->encodemb, submby)(x->src_diff, *(b->base_src), x->e_mbd.predictor, b->src_stride);
|
|
|
| vp8_transform_intra_mby(x);
|
|
|
| vp8_quantize_mby(x);
|
|
|
| -#if !(CONFIG_REALTIME_ONLY)
|
| -#if 1
|
| if (x->optimize)
|
| vp8_optimize_mby(x, rtcd);
|
|
|
| -#endif
|
| -#endif
|
| -
|
| vp8_inverse_transform_mby(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
|
|
|
| RECON_INVOKE(&rtcd->common->recon, recon_mby)
|
| (IF_RTCD(&rtcd->common->recon), &x->e_mbd);
|
|
|
| - // make sure block modes are set the way we want them for context updates
|
| - for (b = 0; b < 16; b++)
|
| - {
|
| - BLOCKD *d = &x->e_mbd.block[b];
|
| -
|
| - switch (x->e_mbd.mode_info_context->mbmi.mode)
|
| - {
|
| -
|
| - case DC_PRED:
|
| - d->bmi.mode = B_DC_PRED;
|
| - break;
|
| - case V_PRED:
|
| - d->bmi.mode = B_VE_PRED;
|
| - break;
|
| - case H_PRED:
|
| - d->bmi.mode = B_HE_PRED;
|
| - break;
|
| - case TM_PRED:
|
| - d->bmi.mode = B_TM_PRED;
|
| - break;
|
| - default:
|
| - d->bmi.mode = B_DC_PRED;
|
| - break;
|
| -
|
| - }
|
| - }
|
| }
|
|
|
| void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
|
| {
|
| - vp8_build_intra_predictors_mbuv(&x->e_mbd);
|
| + RECON_INVOKE(&rtcd->common->recon, build_intra_predictors_mbuv)(&x->e_mbd);
|
|
|
| ENCODEMB_INVOKE(&rtcd->encodemb, submbuv)(x->src_diff, x->src.u_buffer, x->src.v_buffer, x->e_mbd.predictor, x->src.uv_stride);
|
|
|
| @@ -126,17 +121,10 @@
|
|
|
| vp8_quantize_mbuv(x);
|
|
|
| -#if !(CONFIG_REALTIME_ONLY)
|
| -#if 1
|
| -
|
| - if (x->optimize==2 ||(x->optimize && x->rddiv > 1))
|
| + if (x->optimize)
|
| vp8_optimize_mbuv(x, rtcd);
|
|
|
| -#endif
|
| -#endif
|
| -
|
| vp8_inverse_transform_mbuv(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
|
|
|
| vp8_recon_intra_mbuv(IF_RTCD(&rtcd->common->recon), &x->e_mbd);
|
| }
|
| -
|
|
|