void vp8_encode_intra4x4block(MACROBLOCK *x, int ib)
{
    BLOCKD *b = &x->e_mbd.block[ib];
    BLOCK *be = &x->block[ib];

    vp8_intra4x4_predict
                (*(b->base_dst) + b->dst, b->dst_stride,
                 b->bmi.as_mode, b->predictor_base + b->predictor_offset, 16);

    vp8_subtract_b(be, b, 16);

    x->short_fdct4x4(be->src_diff, be->coeff, 32);

    x->quantize_b(be, b);

    if (*b->eob > 1)
    {
        vp8_short_idct4x4llm(b->dqcoeff_base + b->dqcoeff_offset,
            b->predictor_base + b->predictor_offset, 16, *(b->base_dst) + b->dst, b->dst_stride);
    }
    else
    {
        vp8_dc_only_idct_add
            (b->dqcoeff_base[b->dqcoeff_offset], b->predictor_base + b->predictor_offset, 16, *(b->base_dst) + b->dst,
                b->dst_stride);
    }
}
void vp8_encode_intra4x4block(MACROBLOCK *x, int ib)
{
    BLOCKD *b = &x->e_mbd.block[ib];
    BLOCK *be = &x->block[ib];
    int dst_stride = x->e_mbd.dst.y_stride;
    unsigned char *dst = x->e_mbd.dst.y_buffer + b->offset;
    unsigned char *Above = dst - dst_stride;
    unsigned char *yleft = dst - 1;
    unsigned char top_left = Above[-1];

    vp8_intra4x4_predict(Above, yleft, dst_stride, b->bmi.as_mode,
                         b->predictor, 16, top_left);

    vp8_subtract_b(be, b, 16);

    x->short_fdct4x4(be->src_diff, be->coeff, 32);

    x->quantize_b(be, b);

    if (*b->eob > 1)
    {
      vp8_short_idct4x4llm(b->dqcoeff, b->predictor, 16, dst, dst_stride);
    }
    else
    {
      vp8_dc_only_idct_add(b->dqcoeff[0], b->predictor, 16, dst, dst_stride);
    }
}