diff --git a/vp8/common/reconintra.c b/vp8/common/reconintra.c index 62af368d1f8eea69db69996684f6239811567351..4b13777c895ee26f843d9716158fab47344969b8 100644 --- a/vp8/common/reconintra.c +++ b/vp8/common/reconintra.c @@ -136,21 +136,21 @@ void vp8_build_intra_predictors_mby_c(MACROBLOCKD *x) } } -void vp8_build_intra_predictors_mby_s_c(MACROBLOCKD *x) +void vp8_build_intra_predictors_mby_s(MACROBLOCKD *x, + unsigned char * yabove_row, + unsigned char * yleft, + int left_stride, + unsigned char * ypred_ptr) { - - unsigned char *yabove_row = x->dst.y_buffer - x->dst.y_stride; unsigned char yleft_col[16]; unsigned char ytop_left = yabove_row[-1]; - unsigned char *ypred_ptr = x->predictor; int r, c, i; int y_stride = x->dst.y_stride; - ypred_ptr = x->dst.y_buffer; /*x->predictor;*/ for (i = 0; i < 16; i++) { - yleft_col[i] = x->dst.y_buffer [i* x->dst.y_stride -1]; + yleft_col[i] = yleft[i* left_stride]; } /* for Y */ @@ -400,24 +400,27 @@ void vp8_build_intra_predictors_mbuv_c(MACROBLOCKD *x) } } -void vp8_build_intra_predictors_mbuv_s_c(MACROBLOCKD *x) +void vp8_build_intra_predictors_mbuv_s_c(MACROBLOCKD *x, + unsigned char * uabove_row, + unsigned char * vabove_row, + unsigned char * uleft, + unsigned char * vleft, + int left_stride, + unsigned char * upred_ptr, + unsigned char * vpred_ptr) { - unsigned char *uabove_row = x->dst.u_buffer - x->dst.uv_stride; - unsigned char uleft_col[16]; + unsigned char uleft_col[8]; unsigned char utop_left = uabove_row[-1]; - unsigned char *vabove_row = x->dst.v_buffer - x->dst.uv_stride; - unsigned char vleft_col[20]; + unsigned char vleft_col[8]; unsigned char vtop_left = vabove_row[-1]; - unsigned char *upred_ptr = x->dst.u_buffer; /*&x->predictor[256];*/ - unsigned char *vpred_ptr = x->dst.v_buffer; /*&x->predictor[320];*/ int uv_stride = x->dst.uv_stride; int i, j; for (i = 0; i < 8; i++) { - uleft_col[i] = x->dst.u_buffer [i* x->dst.uv_stride -1]; - vleft_col[i] = x->dst.v_buffer [i* x->dst.uv_stride -1]; + uleft_col[i] = uleft [i* left_stride]; + vleft_col[i] = vleft [i* left_stride]; } switch (x->mode_info_context->mbmi.uv_mode) diff --git a/vp8/common/reconintra4x4.c b/vp8/common/reconintra4x4.c index f4424ffdda2bcd2db40046cc3c6d636f95c7389a..dcc35ec15fe0bcb21f952b1867bf67b80c3f7d5c 100644 --- a/vp8/common/reconintra4x4.c +++ b/vp8/common/reconintra4x4.c @@ -13,20 +13,19 @@ #include "vpx_rtcd.h" #include "blockd.h" -void vp8_intra4x4_predict_c(unsigned char *src, int src_stride, - int b_mode, - unsigned char *dst, int dst_stride) +void vp8_intra4x4_predict_d_c(unsigned char *Above, + unsigned char *yleft, int left_stride, + int b_mode, + unsigned char *dst, int dst_stride, + unsigned char top_left) { int i, r, c; - unsigned char *Above = src - src_stride; unsigned char Left[4]; - unsigned char top_left = Above[-1]; - - Left[0] = src[-1]; - Left[1] = src[-1 + src_stride]; - Left[2] = src[-1 + 2 * src_stride]; - Left[3] = src[-1 + 3 * src_stride]; + Left[0] = yleft[0]; + Left[1] = yleft[left_stride]; + Left[2] = yleft[2 * left_stride]; + Left[3] = yleft[3 * left_stride]; switch (b_mode) { @@ -295,24 +294,15 @@ void vp8_intra4x4_predict_c(unsigned char *src, int src_stride, } } - - - - -/* copy 4 bytes from the above right down so that the 4x4 prediction modes using pixels above and - * to the right prediction have filled in pixels to use. - */ -void vp8_intra_prediction_down_copy(MACROBLOCKD *x) +void vp8_intra4x4_predict_c(unsigned char *src, int src_stride, + int b_mode, + unsigned char *dst, int dst_stride) { - int dst_stride = x->dst.y_stride; - unsigned char *above_right = x->dst.y_buffer - dst_stride + 16; - - unsigned int *src_ptr = (unsigned int *)above_right; - unsigned int *dst_ptr0 = (unsigned int *)(above_right + 4 * dst_stride); - unsigned int *dst_ptr1 = (unsigned int *)(above_right + 8 * dst_stride); - unsigned int *dst_ptr2 = (unsigned int *)(above_right + 12 * dst_stride); + unsigned char *Above = src - src_stride; - *dst_ptr0 = *src_ptr; - *dst_ptr1 = *src_ptr; - *dst_ptr2 = *src_ptr; + vp8_intra4x4_predict_d_c(Above, + src - 1, src_stride, + b_mode, + dst, dst_stride, + Above[-1]); } diff --git a/vp8/common/reconintra4x4.h b/vp8/common/reconintra4x4.h index b528df6d59bc017e748e15dab3f7030ee62379fe..d2b0d43461ebe24adc0197960a75347212940c00 100644 --- a/vp8/common/reconintra4x4.h +++ b/vp8/common/reconintra4x4.h @@ -11,9 +11,22 @@ #ifndef __INC_RECONINTRA4x4_H #define __INC_RECONINTRA4x4_H +#include "vp8/common/blockd.h" -struct macroblockd; +static void intra_prediction_down_copy(MACROBLOCKD *xd, + unsigned char *above_right_src) +{ + int dst_stride = xd->dst.y_stride; + unsigned char *above_right_dst = xd->dst.y_buffer - dst_stride + 16; -extern void vp8_intra_prediction_down_copy(struct macroblockd *x); + unsigned int *src_ptr = (unsigned int *)above_right_src; + unsigned int *dst_ptr0 = (unsigned int *)(above_right_dst + 4 * dst_stride); + unsigned int *dst_ptr1 = (unsigned int *)(above_right_dst + 8 * dst_stride); + unsigned int *dst_ptr2 = (unsigned int *)(above_right_dst + 12 * dst_stride); + + *dst_ptr0 = *src_ptr; + *dst_ptr1 = *src_ptr; + *dst_ptr2 = *src_ptr; +} #endif diff --git a/vp8/common/rtcd_defs.sh b/vp8/common/rtcd_defs.sh index 32d83d7aec09a6336a1e56f82ad57002d0671868..ff8e30c3f9ae42ee915796f576823bb60ec63a08 100644 --- a/vp8/common/rtcd_defs.sh +++ b/vp8/common/rtcd_defs.sh @@ -125,14 +125,14 @@ vp8_copy_mem8x4_media=vp8_copy_mem8x4_v6 prototype void vp8_build_intra_predictors_mby "struct macroblockd *x" specialize vp8_build_intra_predictors_mby sse2 ssse3 neon -prototype void vp8_build_intra_predictors_mby_s "struct macroblockd *x" -specialize vp8_build_intra_predictors_mby_s sse2 ssse3 neon +prototype void vp8_build_intra_predictors_mby_s "struct macroblockd *x, unsigned char * yabove_row, unsigned char * yleft, int left_stride, unsigned char * ypred_ptr" +#TODO: fix assembly --- specialize vp8_build_intra_predictors_mby_s sse2 ssse3 neon prototype void vp8_build_intra_predictors_mbuv "struct macroblockd *x" specialize vp8_build_intra_predictors_mbuv sse2 ssse3 -prototype void vp8_build_intra_predictors_mbuv_s "struct macroblockd *x" -specialize vp8_build_intra_predictors_mbuv_s sse2 ssse3 +prototype void vp8_build_intra_predictors_mbuv_s "struct macroblockd *x, unsigned char * uabove_row, unsigned char * vabove_row, unsigned char *uleft, unsigned char *vleft, int left_stride, unsigned char * upred_ptr, unsigned char * vpred_ptr" +#TODO: fix assembly --- specialize vp8_build_intra_predictors_mbuv_s sse2 ssse3 prototype void vp8_intra4x4_predict "unsigned char *src, int src_stride, int b_mode, unsigned char *dst, int dst_stride" specialize vp8_intra4x4_predict media diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c index 1ac868ff603c39523e9bc4b0d116cf519973fa6e..c368a4c9d0e85ae1afd634315c894f669412f44f 100644 --- a/vp8/decoder/decodframe.c +++ b/vp8/decoder/decodframe.c @@ -156,11 +156,21 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, /* do prediction */ if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) { - vp8_build_intra_predictors_mbuv_s(xd); + 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->dst.u_buffer, xd->dst.v_buffer); if (mode != B_PRED) { - vp8_build_intra_predictors_mby_s(xd); + 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->dst.y_buffer); } else { @@ -172,16 +182,28 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, if(xd->mode_info_context->mbmi.mb_skip_coeff) vpx_memset(xd->eobs, 0, 25); - vp8_intra_prediction_down_copy(xd); + intra_prediction_down_copy(xd, xd->dst.y_buffer - dst_stride + 16); for (i = 0; i < 16; i++) { BLOCKD *b = &xd->block[i]; int b_mode = xd->mode_info_context->bmi[i].as_mode; - - - vp8_intra4x4_predict (base_dst + b->offset, dst_stride, b_mode, - base_dst + b->offset, dst_stride ); + unsigned char *yabove; + unsigned char *yleft; + int left_stride; + unsigned char top_left; + + yabove = base_dst + b->offset - dst_stride; + yleft = base_dst + b->offset - 1; + left_stride = dst_stride; + top_left = yabove[-1]; + + // vp8_intra4x4_predict (base_dst + b->offset, dst_stride, b_mode, + // base_dst + b->offset, dst_stride ); + vp8_intra4x4_predict_d_c(yabove, yleft, left_stride, + b_mode, + base_dst + b->offset, dst_stride, + top_left); if (xd->eobs[i]) { diff --git a/vp8/decoder/reconintra_mt.c b/vp8/decoder/reconintra_mt.c deleted file mode 100644 index a8fedf48bb4434166a769623cef84bebb4e05156..0000000000000000000000000000000000000000 --- a/vp8/decoder/reconintra_mt.c +++ /dev/null @@ -1,943 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - - -#include "vpx_config.h" -#include "vpx_rtcd.h" -#include "vpx_mem/vpx_mem.h" -#include "onyxd_int.h" - -/* For skip_recon_mb(), add vp8_build_intra_predictors_mby_s(MACROBLOCKD *x) and - * vp8_build_intra_predictors_mbuv_s(MACROBLOCKD *x). - */ - -void vp8mt_build_intra_predictors_mby(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col) -{ - unsigned char *yabove_row; /* = x->dst.y_buffer - x->dst.y_stride; */ - unsigned char *yleft_col; - unsigned char yleft_buf[16]; - unsigned char ytop_left; /* = yabove_row[-1]; */ - unsigned char *ypred_ptr = x->predictor; - int r, c, i; - - if (pbi->common.filter_level) - { - yabove_row = pbi->mt_yabove_row[mb_row] + mb_col*16 +32; - yleft_col = pbi->mt_yleft_col[mb_row]; - } else - { - yabove_row = x->dst.y_buffer - x->dst.y_stride; - - for (i = 0; i < 16; i++) - yleft_buf[i] = x->dst.y_buffer [i* x->dst.y_stride -1]; - yleft_col = yleft_buf; - } - - ytop_left = yabove_row[-1]; - - /* for Y */ - switch (x->mode_info_context->mbmi.mode) - { - case DC_PRED: - { - int expected_dc; - int i; - int shift; - int average = 0; - - - if (x->up_available || x->left_available) - { - if (x->up_available) - { - for (i = 0; i < 16; i++) - { - average += yabove_row[i]; - } - } - - if (x->left_available) - { - - for (i = 0; i < 16; i++) - { - average += yleft_col[i]; - } - - } - - - - shift = 3 + x->up_available + x->left_available; - expected_dc = (average + (1 << (shift - 1))) >> shift; - } - else - { - expected_dc = 128; - } - - vpx_memset(ypred_ptr, expected_dc, 256); - } - break; - case V_PRED: - { - - for (r = 0; r < 16; r++) - { - - ((int *)ypred_ptr)[0] = ((int *)yabove_row)[0]; - ((int *)ypred_ptr)[1] = ((int *)yabove_row)[1]; - ((int *)ypred_ptr)[2] = ((int *)yabove_row)[2]; - ((int *)ypred_ptr)[3] = ((int *)yabove_row)[3]; - ypred_ptr += 16; - } - } - break; - case H_PRED: - { - - for (r = 0; r < 16; r++) - { - - vpx_memset(ypred_ptr, yleft_col[r], 16); - ypred_ptr += 16; - } - - } - break; - case TM_PRED: - { - - for (r = 0; r < 16; r++) - { - for (c = 0; c < 16; c++) - { - int pred = yleft_col[r] + yabove_row[ c] - ytop_left; - - if (pred < 0) - pred = 0; - - if (pred > 255) - pred = 255; - - ypred_ptr[c] = pred; - } - - ypred_ptr += 16; - } - - } - break; - case B_PRED: - case NEARESTMV: - case NEARMV: - case ZEROMV: - case NEWMV: - case SPLITMV: - case MB_MODE_COUNT: - break; - } -} - -void vp8mt_build_intra_predictors_mby_s(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col) -{ - unsigned char *yabove_row; /* = x->dst.y_buffer - x->dst.y_stride; */ - unsigned char *yleft_col; - unsigned char yleft_buf[16]; - unsigned char ytop_left; /* = yabove_row[-1]; */ - unsigned char *ypred_ptr = x->predictor; - int r, c, i; - - int y_stride = x->dst.y_stride; - ypred_ptr = x->dst.y_buffer; /*x->predictor;*/ - - if (pbi->common.filter_level) - { - yabove_row = pbi->mt_yabove_row[mb_row] + mb_col*16 +32; - yleft_col = pbi->mt_yleft_col[mb_row]; - } else - { - yabove_row = x->dst.y_buffer - x->dst.y_stride; - - for (i = 0; i < 16; i++) - yleft_buf[i] = x->dst.y_buffer [i* x->dst.y_stride -1]; - yleft_col = yleft_buf; - } - - ytop_left = yabove_row[-1]; - - /* for Y */ - switch (x->mode_info_context->mbmi.mode) - { - case DC_PRED: - { - int expected_dc; - int i; - int shift; - int average = 0; - - - if (x->up_available || x->left_available) - { - if (x->up_available) - { - for (i = 0; i < 16; i++) - { - average += yabove_row[i]; - } - } - - if (x->left_available) - { - - for (i = 0; i < 16; i++) - { - average += yleft_col[i]; - } - - } - - - - shift = 3 + x->up_available + x->left_available; - expected_dc = (average + (1 << (shift - 1))) >> shift; - } - else - { - expected_dc = 128; - } - - /*vpx_memset(ypred_ptr, expected_dc, 256);*/ - for (r = 0; r < 16; r++) - { - vpx_memset(ypred_ptr, expected_dc, 16); - ypred_ptr += y_stride; /*16;*/ - } - } - break; - case V_PRED: - { - - for (r = 0; r < 16; r++) - { - - ((int *)ypred_ptr)[0] = ((int *)yabove_row)[0]; - ((int *)ypred_ptr)[1] = ((int *)yabove_row)[1]; - ((int *)ypred_ptr)[2] = ((int *)yabove_row)[2]; - ((int *)ypred_ptr)[3] = ((int *)yabove_row)[3]; - ypred_ptr += y_stride; /*16;*/ - } - } - break; - case H_PRED: - { - - for (r = 0; r < 16; r++) - { - - vpx_memset(ypred_ptr, yleft_col[r], 16); - ypred_ptr += y_stride; /*16;*/ - } - - } - break; - case TM_PRED: - { - - for (r = 0; r < 16; r++) - { - for (c = 0; c < 16; c++) - { - int pred = yleft_col[r] + yabove_row[ c] - ytop_left; - - if (pred < 0) - pred = 0; - - if (pred > 255) - pred = 255; - - ypred_ptr[c] = pred; - } - - ypred_ptr += y_stride; /*16;*/ - } - - } - break; - case B_PRED: - case NEARESTMV: - case NEARMV: - case ZEROMV: - case NEWMV: - case SPLITMV: - case MB_MODE_COUNT: - break; - } -} - -void vp8mt_build_intra_predictors_mbuv(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col) -{ - unsigned char *uabove_row; /* = x->dst.u_buffer - x->dst.uv_stride; */ - unsigned char *uleft_col; /*[16];*/ - unsigned char uleft_buf[8]; - unsigned char utop_left; /* = uabove_row[-1]; */ - unsigned char *vabove_row; /* = x->dst.v_buffer - x->dst.uv_stride; */ - unsigned char *vleft_col; /*[20];*/ - unsigned char vleft_buf[8]; - unsigned char vtop_left; /* = vabove_row[-1]; */ - unsigned char *upred_ptr = &x->predictor[256]; - unsigned char *vpred_ptr = &x->predictor[320]; - int i, j; - - if (pbi->common.filter_level) - { - uabove_row = pbi->mt_uabove_row[mb_row] + mb_col*8 +16; - vabove_row = pbi->mt_vabove_row[mb_row] + mb_col*8 +16; - uleft_col = pbi->mt_uleft_col[mb_row]; - vleft_col = pbi->mt_vleft_col[mb_row]; - } else - { - uabove_row = x->dst.u_buffer - x->dst.uv_stride; - vabove_row = x->dst.v_buffer - x->dst.uv_stride; - - for (i = 0; i < 8; i++) - { - uleft_buf[i] = x->dst.u_buffer [i* x->dst.uv_stride -1]; - vleft_buf[i] = x->dst.v_buffer [i* x->dst.uv_stride -1]; - } - uleft_col = uleft_buf; - vleft_col = vleft_buf; - } - utop_left = uabove_row[-1]; - vtop_left = vabove_row[-1]; - - switch (x->mode_info_context->mbmi.uv_mode) - { - case DC_PRED: - { - int expected_udc; - int expected_vdc; - int i; - int shift; - int Uaverage = 0; - int Vaverage = 0; - - if (x->up_available) - { - for (i = 0; i < 8; i++) - { - Uaverage += uabove_row[i]; - Vaverage += vabove_row[i]; - } - } - - if (x->left_available) - { - for (i = 0; i < 8; i++) - { - Uaverage += uleft_col[i]; - Vaverage += vleft_col[i]; - } - } - - if (!x->up_available && !x->left_available) - { - expected_udc = 128; - expected_vdc = 128; - } - else - { - shift = 2 + x->up_available + x->left_available; - expected_udc = (Uaverage + (1 << (shift - 1))) >> shift; - expected_vdc = (Vaverage + (1 << (shift - 1))) >> shift; - } - - - vpx_memset(upred_ptr, expected_udc, 64); - vpx_memset(vpred_ptr, expected_vdc, 64); - - - } - break; - case V_PRED: - { - int i; - - for (i = 0; i < 8; i++) - { - vpx_memcpy(upred_ptr, uabove_row, 8); - vpx_memcpy(vpred_ptr, vabove_row, 8); - upred_ptr += 8; - vpred_ptr += 8; - } - - } - break; - case H_PRED: - { - int i; - - for (i = 0; i < 8; i++) - { - vpx_memset(upred_ptr, uleft_col[i], 8); - vpx_memset(vpred_ptr, vleft_col[i], 8); - upred_ptr += 8; - vpred_ptr += 8; - } - } - - break; - case TM_PRED: - { - int i; - - for (i = 0; i < 8; i++) - { - for (j = 0; j < 8; j++) - { - int predu = uleft_col[i] + uabove_row[j] - utop_left; - int predv = vleft_col[i] + vabove_row[j] - vtop_left; - - if (predu < 0) - predu = 0; - - if (predu > 255) - predu = 255; - - if (predv < 0) - predv = 0; - - if (predv > 255) - predv = 255; - - upred_ptr[j] = predu; - vpred_ptr[j] = predv; - } - - upred_ptr += 8; - vpred_ptr += 8; - } - - } - break; - case B_PRED: - case NEARESTMV: - case NEARMV: - case ZEROMV: - case NEWMV: - case SPLITMV: - case MB_MODE_COUNT: - break; - } -} - -void vp8mt_build_intra_predictors_mbuv_s(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col) -{ - unsigned char *uabove_row; /* = x->dst.u_buffer - x->dst.uv_stride; */ - unsigned char *uleft_col; /*[16];*/ - unsigned char uleft_buf[8]; - unsigned char utop_left; /* = uabove_row[-1]; */ - unsigned char *vabove_row; /* = x->dst.v_buffer - x->dst.uv_stride; */ - unsigned char *vleft_col; /*[20];*/ - unsigned char vleft_buf[8]; - unsigned char vtop_left; /* = vabove_row[-1]; */ - unsigned char *upred_ptr = x->dst.u_buffer; /*&x->predictor[256];*/ - unsigned char *vpred_ptr = x->dst.v_buffer; /*&x->predictor[320];*/ - int uv_stride = x->dst.uv_stride; - int i, j; - - if (pbi->common.filter_level) - { - uabove_row = pbi->mt_uabove_row[mb_row] + mb_col*8 +16; - vabove_row = pbi->mt_vabove_row[mb_row] + mb_col*8 +16; - uleft_col = pbi->mt_uleft_col[mb_row]; - vleft_col = pbi->mt_vleft_col[mb_row]; - } else - { - uabove_row = x->dst.u_buffer - x->dst.uv_stride; - vabove_row = x->dst.v_buffer - x->dst.uv_stride; - - for (i = 0; i < 8; i++) - { - uleft_buf[i] = x->dst.u_buffer [i* x->dst.uv_stride -1]; - vleft_buf[i] = x->dst.v_buffer [i* x->dst.uv_stride -1]; - } - uleft_col = uleft_buf; - vleft_col = vleft_buf; - } - utop_left = uabove_row[-1]; - vtop_left = vabove_row[-1]; - - switch (x->mode_info_context->mbmi.uv_mode) - { - case DC_PRED: - { - int expected_udc; - int expected_vdc; - int i; - int shift; - int Uaverage = 0; - int Vaverage = 0; - - if (x->up_available) - { - for (i = 0; i < 8; i++) - { - Uaverage += uabove_row[i]; - Vaverage += vabove_row[i]; - } - } - - if (x->left_available) - { - for (i = 0; i < 8; i++) - { - Uaverage += uleft_col[i]; - Vaverage += vleft_col[i]; - } - } - - if (!x->up_available && !x->left_available) - { - expected_udc = 128; - expected_vdc = 128; - } - else - { - shift = 2 + x->up_available + x->left_available; - expected_udc = (Uaverage + (1 << (shift - 1))) >> shift; - expected_vdc = (Vaverage + (1 << (shift - 1))) >> shift; - } - - - /*vpx_memset(upred_ptr,expected_udc,64); - vpx_memset(vpred_ptr,expected_vdc,64);*/ - for (i = 0; i < 8; i++) - { - vpx_memset(upred_ptr, expected_udc, 8); - vpx_memset(vpred_ptr, expected_vdc, 8); - upred_ptr += uv_stride; /*8;*/ - vpred_ptr += uv_stride; /*8;*/ - } - } - break; - case V_PRED: - { - int i; - - for (i = 0; i < 8; i++) - { - vpx_memcpy(upred_ptr, uabove_row, 8); - vpx_memcpy(vpred_ptr, vabove_row, 8); - upred_ptr += uv_stride; /*8;*/ - vpred_ptr += uv_stride; /*8;*/ - } - - } - break; - case H_PRED: - { - int i; - - for (i = 0; i < 8; i++) - { - vpx_memset(upred_ptr, uleft_col[i], 8); - vpx_memset(vpred_ptr, vleft_col[i], 8); - upred_ptr += uv_stride; /*8;*/ - vpred_ptr += uv_stride; /*8;*/ - } - } - - break; - case TM_PRED: - { - int i; - - for (i = 0; i < 8; i++) - { - for (j = 0; j < 8; j++) - { - int predu = uleft_col[i] + uabove_row[j] - utop_left; - int predv = vleft_col[i] + vabove_row[j] - vtop_left; - - if (predu < 0) - predu = 0; - - if (predu > 255) - predu = 255; - - if (predv < 0) - predv = 0; - - if (predv > 255) - predv = 255; - - upred_ptr[j] = predu; - vpred_ptr[j] = predv; - } - - upred_ptr += uv_stride; /*8;*/ - vpred_ptr += uv_stride; /*8;*/ - } - - } - break; - case B_PRED: - case NEARESTMV: - case NEARMV: - case ZEROMV: - case NEWMV: - case SPLITMV: - case MB_MODE_COUNT: - break; - } -} - - -void vp8mt_predict_intra4x4(VP8D_COMP *pbi, - MACROBLOCKD *xd, - int b_mode, - unsigned char *predictor, - int stride, - int mb_row, - int mb_col, - int num) -{ - int i, r, c; - - unsigned char *Above; /* = *(x->base_dst) + x->dst - x->dst_stride; */ - unsigned char Left[4]; - unsigned char top_left; /* = Above[-1]; */ - - BLOCKD *x = &xd->block[num]; - int dst_stride = xd->dst.y_stride; - unsigned char *base_dst = xd->dst.y_buffer; - - - /*Caution: For some b_mode, it needs 8 pixels (4 above + 4 above-right).*/ - if (num < 4 && pbi->common.filter_level) - Above = pbi->mt_yabove_row[mb_row] + mb_col*16 + num*4 + 32; - else - Above = base_dst + x->offset - dst_stride; - - if (num%4==0 && pbi->common.filter_level) - { - for (i=0; i<4; i++) - Left[i] = pbi->mt_yleft_col[mb_row][num + i]; - }else - { - Left[0] = (base_dst)[x->offset - 1]; - Left[1] = (base_dst)[x->offset - 1 + dst_stride]; - Left[2] = (base_dst)[x->offset - 1 + 2 * dst_stride]; - Left[3] = (base_dst)[x->offset - 1 + 3 * dst_stride]; - } - - if ((num==4 || num==8 || num==12) && pbi->common.filter_level) - top_left = pbi->mt_yleft_col[mb_row][num-1]; - else - top_left = Above[-1]; - - switch (b_mode) - { - case B_DC_PRED: - { - int expected_dc = 0; - - for (i = 0; i < 4; i++) - { - expected_dc += Above[i]; - expected_dc += Left[i]; - } - - expected_dc = (expected_dc + 4) >> 3; - - for (r = 0; r < 4; r++) - { - for (c = 0; c < 4; c++) - { - predictor[c] = expected_dc; - } - - predictor += stride; - } - } - break; - case B_TM_PRED: - { - /* prediction similar to true_motion prediction */ - for (r = 0; r < 4; r++) - { - for (c = 0; c < 4; c++) - { - int pred = Above[c] - top_left + Left[r]; - - if (pred < 0) - pred = 0; - - if (pred > 255) - pred = 255; - - predictor[c] = pred; - } - - predictor += stride; - } - } - break; - - case B_VE_PRED: - { - - unsigned int ap[4]; - ap[0] = (top_left + 2 * Above[0] + Above[1] + 2) >> 2; - ap[1] = (Above[0] + 2 * Above[1] + Above[2] + 2) >> 2; - ap[2] = (Above[1] + 2 * Above[2] + Above[3] + 2) >> 2; - ap[3] = (Above[2] + 2 * Above[3] + Above[4] + 2) >> 2; - - for (r = 0; r < 4; r++) - { - for (c = 0; c < 4; c++) - { - - predictor[c] = ap[c]; - } - - predictor += stride; - } - - } - break; - - - case B_HE_PRED: - { - - unsigned int lp[4]; - lp[0] = (top_left + 2 * Left[0] + Left[1] + 2) >> 2; - lp[1] = (Left[0] + 2 * Left[1] + Left[2] + 2) >> 2; - lp[2] = (Left[1] + 2 * Left[2] + Left[3] + 2) >> 2; - lp[3] = (Left[2] + 2 * Left[3] + Left[3] + 2) >> 2; - - for (r = 0; r < 4; r++) - { - for (c = 0; c < 4; c++) - { - predictor[c] = lp[r]; - } - - predictor += stride; - } - } - break; - case B_LD_PRED: - { - unsigned char *ptr = Above; - predictor[0 * stride + 0] = (ptr[0] + ptr[1] * 2 + ptr[2] + 2) >> 2; - predictor[0 * stride + 1] = - predictor[1 * stride + 0] = (ptr[1] + ptr[2] * 2 + ptr[3] + 2) >> 2; - predictor[0 * stride + 2] = - predictor[1 * stride + 1] = - predictor[2 * stride + 0] = (ptr[2] + ptr[3] * 2 + ptr[4] + 2) >> 2; - predictor[0 * stride + 3] = - predictor[1 * stride + 2] = - predictor[2 * stride + 1] = - predictor[3 * stride + 0] = (ptr[3] + ptr[4] * 2 + ptr[5] + 2) >> 2; - predictor[1 * stride + 3] = - predictor[2 * stride + 2] = - predictor[3 * stride + 1] = (ptr[4] + ptr[5] * 2 + ptr[6] + 2) >> 2; - predictor[2 * stride + 3] = - predictor[3 * stride + 2] = (ptr[5] + ptr[6] * 2 + ptr[7] + 2) >> 2; - predictor[3 * stride + 3] = (ptr[6] + ptr[7] * 2 + ptr[7] + 2) >> 2; - - } - break; - case B_RD_PRED: - { - - unsigned char pp[9]; - - pp[0] = Left[3]; - pp[1] = Left[2]; - pp[2] = Left[1]; - pp[3] = Left[0]; - pp[4] = top_left; - pp[5] = Above[0]; - pp[6] = Above[1]; - pp[7] = Above[2]; - pp[8] = Above[3]; - - predictor[3 * stride + 0] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; - predictor[3 * stride + 1] = - predictor[2 * stride + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; - predictor[3 * stride + 2] = - predictor[2 * stride + 1] = - predictor[1 * stride + 0] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; - predictor[3 * stride + 3] = - predictor[2 * stride + 2] = - predictor[1 * stride + 1] = - predictor[0 * stride + 0] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; - predictor[2 * stride + 3] = - predictor[1 * stride + 2] = - predictor[0 * stride + 1] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; - predictor[1 * stride + 3] = - predictor[0 * stride + 2] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; - predictor[0 * stride + 3] = (pp[6] + pp[7] * 2 + pp[8] + 2) >> 2; - - } - break; - case B_VR_PRED: - { - - unsigned char pp[9]; - - pp[0] = Left[3]; - pp[1] = Left[2]; - pp[2] = Left[1]; - pp[3] = Left[0]; - pp[4] = top_left; - pp[5] = Above[0]; - pp[6] = Above[1]; - pp[7] = Above[2]; - pp[8] = Above[3]; - - - predictor[3 * stride + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; - predictor[2 * stride + 0] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; - predictor[3 * stride + 1] = - predictor[1 * stride + 0] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; - predictor[2 * stride + 1] = - predictor[0 * stride + 0] = (pp[4] + pp[5] + 1) >> 1; - predictor[3 * stride + 2] = - predictor[1 * stride + 1] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; - predictor[2 * stride + 2] = - predictor[0 * stride + 1] = (pp[5] + pp[6] + 1) >> 1; - predictor[3 * stride + 3] = - predictor[1 * stride + 2] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; - predictor[2 * stride + 3] = - predictor[0 * stride + 2] = (pp[6] + pp[7] + 1) >> 1; - predictor[1 * stride + 3] = (pp[6] + pp[7] * 2 + pp[8] + 2) >> 2; - predictor[0 * stride + 3] = (pp[7] + pp[8] + 1) >> 1; - - } - break; - case B_VL_PRED: - { - - unsigned char *pp = Above; - - predictor[0 * stride + 0] = (pp[0] + pp[1] + 1) >> 1; - predictor[1 * stride + 0] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; - predictor[2 * stride + 0] = - predictor[0 * stride + 1] = (pp[1] + pp[2] + 1) >> 1; - predictor[1 * stride + 1] = - predictor[3 * stride + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; - predictor[2 * stride + 1] = - predictor[0 * stride + 2] = (pp[2] + pp[3] + 1) >> 1; - predictor[3 * stride + 1] = - predictor[1 * stride + 2] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; - predictor[0 * stride + 3] = - predictor[2 * stride + 2] = (pp[3] + pp[4] + 1) >> 1; - predictor[1 * stride + 3] = - predictor[3 * stride + 2] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; - predictor[2 * stride + 3] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; - predictor[3 * stride + 3] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; - } - break; - - case B_HD_PRED: - { - unsigned char pp[9]; - pp[0] = Left[3]; - pp[1] = Left[2]; - pp[2] = Left[1]; - pp[3] = Left[0]; - pp[4] = top_left; - pp[5] = Above[0]; - pp[6] = Above[1]; - pp[7] = Above[2]; - pp[8] = Above[3]; - - - predictor[3 * stride + 0] = (pp[0] + pp[1] + 1) >> 1; - predictor[3 * stride + 1] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; - predictor[2 * stride + 0] = - predictor[3 * stride + 2] = (pp[1] + pp[2] + 1) >> 1; - predictor[2 * stride + 1] = - predictor[3 * stride + 3] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; - predictor[2 * stride + 2] = - predictor[1 * stride + 0] = (pp[2] + pp[3] + 1) >> 1; - predictor[2 * stride + 3] = - predictor[1 * stride + 1] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; - predictor[1 * stride + 2] = - predictor[0 * stride + 0] = (pp[3] + pp[4] + 1) >> 1; - predictor[1 * stride + 3] = - predictor[0 * stride + 1] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; - predictor[0 * stride + 2] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; - predictor[0 * stride + 3] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; - } - break; - - - case B_HU_PRED: - { - unsigned char *pp = Left; - predictor[0 * stride + 0] = (pp[0] + pp[1] + 1) >> 1; - predictor[0 * stride + 1] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; - predictor[0 * stride + 2] = - predictor[1 * stride + 0] = (pp[1] + pp[2] + 1) >> 1; - predictor[0 * stride + 3] = - predictor[1 * stride + 1] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; - predictor[1 * stride + 2] = - predictor[2 * stride + 0] = (pp[2] + pp[3] + 1) >> 1; - predictor[1 * stride + 3] = - predictor[2 * stride + 1] = (pp[2] + pp[3] * 2 + pp[3] + 2) >> 2; - predictor[2 * stride + 2] = - predictor[2 * stride + 3] = - predictor[3 * stride + 0] = - predictor[3 * stride + 1] = - predictor[3 * stride + 2] = - predictor[3 * stride + 3] = pp[3]; - } - break; - - - } -} - -/* copy 4 bytes from the above right down so that the 4x4 prediction modes using pixels above and - * to the right prediction have filled in pixels to use. - */ -void vp8mt_intra_prediction_down_copy(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col) -{ - unsigned char *above_right; /* = *(x->block[0].base_dst) + x->block[0].dst - x->block[0].dst_stride + 16; */ - unsigned int *src_ptr; - unsigned int *dst_ptr0; - unsigned int *dst_ptr1; - unsigned int *dst_ptr2; - int dst_stride = x->dst.y_stride; - unsigned char *base_dst = x->dst.y_buffer; - - - if (pbi->common.filter_level) - above_right = pbi->mt_yabove_row[mb_row] + mb_col*16 + 32 +16; - else - above_right = base_dst + x->block[0].offset - dst_stride + 16; - - src_ptr = (unsigned int *)above_right; - /*dst_ptr0 = (unsigned int *)(above_right + 4 * x->block[0].dst_stride); - dst_ptr1 = (unsigned int *)(above_right + 8 * x->block[0].dst_stride); - dst_ptr2 = (unsigned int *)(above_right + 12 * x->block[0].dst_stride);*/ - dst_ptr0 = (unsigned int *)(base_dst + x->block[0].offset + 16 + 3 * dst_stride); - dst_ptr1 = (unsigned int *)(base_dst + x->block[0].offset + 16 + 7 * dst_stride); - dst_ptr2 = (unsigned int *)(base_dst + x->block[0].offset + 16 + 11 * dst_stride); - *dst_ptr0 = *src_ptr; - *dst_ptr1 = *src_ptr; - *dst_ptr2 = *src_ptr; -} diff --git a/vp8/decoder/reconintra_mt.h b/vp8/decoder/reconintra_mt.h deleted file mode 100644 index 4576a8064946cf0384df78ddc5489ba3e94f1150..0000000000000000000000000000000000000000 --- a/vp8/decoder/reconintra_mt.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - - -#ifndef __INC_RECONINTRA_MT_H -#define __INC_RECONINTRA_MT_H - -/* reconintra functions used in multi-threaded decoder */ -#if CONFIG_MULTITHREAD -extern void vp8mt_build_intra_predictors_mby(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col); -extern void vp8mt_build_intra_predictors_mby_s(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col); -extern void vp8mt_build_intra_predictors_mbuv(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col); -extern void vp8mt_build_intra_predictors_mbuv_s(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col); - -extern void vp8mt_predict_intra4x4(VP8D_COMP *pbi, MACROBLOCKD *x, int b_mode, unsigned char *predictor, int stride, int mb_row, int mb_col, int num); -extern void vp8mt_intra_prediction_down_copy(VP8D_COMP *pbi, MACROBLOCKD *x, int mb_row, int mb_col); -#endif - -#endif diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c index 18609108d407485e1ba24d5b38694c01bb97efff..36db8fb307bd44f039b1ad967fec64d7c3197f71 100644 --- a/vp8/decoder/threading.c +++ b/vp8/decoder/threading.c @@ -22,8 +22,8 @@ #include "vp8/common/extend.h" #include "vpx_ports/vpx_timer.h" #include "detokenize.h" +#include "vp8/common/reconintra4x4.h" #include "vp8/common/reconinter.h" -#include "reconintra_mt.h" #if CONFIG_ERROR_CONCEALMENT #include "error_concealment.h" #endif @@ -85,7 +85,6 @@ static void setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_D static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int mb_col) { - int eobtotal = 0; int throw_residual = 0; int i; @@ -95,31 +94,11 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int m } else if (!vp8dx_bool_error(xd->current_bc)) { + int eobtotal; eobtotal = vp8_decode_mb_tokens(pbi, xd); - } - - eobtotal |= (xd->mode_info_context->mbmi.mode == B_PRED || - xd->mode_info_context->mbmi.mode == SPLITMV); - if (!eobtotal && !vp8dx_bool_error(xd->current_bc)) - { - /* Special case: Force the loopfilter to skip when eobtotal and - * mb_skip_coeff are zero. - * */ - xd->mode_info_context->mbmi.mb_skip_coeff = 1; - /*mt_skip_recon_mb(pbi, xd, mb_row, mb_col);*/ - if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) - { - vp8mt_build_intra_predictors_mbuv_s(pbi, xd, mb_row, mb_col); - vp8mt_build_intra_predictors_mby_s(pbi, xd, mb_row, mb_col); - } - else - { - vp8_build_inter16x16_predictors_mb(xd, xd->dst.y_buffer, - xd->dst.u_buffer, xd->dst.v_buffer, - xd->dst.y_stride, xd->dst.uv_stride); - } - return; + /* Special case: Force the loopfilter to skip when eobtotal is zero */ + xd->mode_info_context->mbmi.mb_skip_coeff = (eobtotal==0); } if (xd->segmentation_enabled) @@ -128,14 +107,58 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int m /* do prediction */ if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) { - vp8mt_build_intra_predictors_mbuv_s(pbi, xd, mb_row, mb_col); + if (pbi->common.filter_level) + { + unsigned char *uabove_row; + unsigned char *vabove_row; + unsigned char * uleft_col; + unsigned char * vleft_col; + uabove_row = pbi->mt_uabove_row[mb_row] + mb_col*8 +16; + vabove_row = pbi->mt_vabove_row[mb_row] + mb_col*8 +16; + uleft_col = pbi->mt_uleft_col[mb_row]; + vleft_col = pbi->mt_vleft_col[mb_row]; + vp8_build_intra_predictors_mbuv_s(xd, uabove_row, + vabove_row, + uleft_col, + vleft_col, + 1, + xd->dst.u_buffer, xd->dst.v_buffer); + + if (xd->mode_info_context->mbmi.mode != B_PRED) + { + unsigned char *yabove_row; + unsigned char *yleft_col; + + yabove_row = pbi->mt_yabove_row[mb_row] + mb_col*16 +32; + yleft_col = pbi->mt_yleft_col[mb_row]; - if (xd->mode_info_context->mbmi.mode != B_PRED) + vp8_build_intra_predictors_mby_s(xd, + yabove_row, + yleft_col, + 1, + xd->dst.y_buffer); + } + } + else { - vp8mt_build_intra_predictors_mby_s(pbi, xd, mb_row, mb_col); - } else { - vp8mt_intra_prediction_down_copy(pbi, xd, mb_row, mb_col); + 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->dst.u_buffer, xd->dst.v_buffer); + + if (xd->mode_info_context->mbmi.mode != B_PRED) + { + 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->dst.y_buffer); + } } + } else { @@ -170,14 +193,51 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int m short *DQC = xd->dequant_y1; int dst_stride = xd->dst.y_stride; unsigned char *base_dst = xd->dst.y_buffer; + unsigned char *above_right_src; + + if (pbi->common.filter_level) + above_right_src = pbi->mt_yabove_row[mb_row] + mb_col*16 + 32 +16; + else + above_right_src = xd->dst.y_buffer - dst_stride + 16; + + intra_prediction_down_copy(xd, above_right_src); + for (i = 0; i < 16; i++) { BLOCKD *b = &xd->block[i]; int b_mode = xd->mode_info_context->bmi[i].as_mode; + unsigned char *yabove; + unsigned char *yleft; + int left_stride; + unsigned char top_left; + + /*Caution: For some b_mode, it needs 8 pixels (4 above + 4 above-right).*/ + if (i < 4 && pbi->common.filter_level) + yabove = pbi->mt_yabove_row[mb_row] + mb_col*16 + i*4 + 32; + else + yabove = base_dst + b->offset - dst_stride; + + if (i%4==0 && pbi->common.filter_level) + { + yleft = pbi->mt_yleft_col[mb_row] + i; + left_stride = 1; + } + else + { + yleft = base_dst + b->offset - 1; + left_stride = dst_stride; + } + + if ((i==4 || i==8 || i==12) && pbi->common.filter_level) + top_left = pbi->mt_yleft_col[mb_row][i-1]; + else + top_left = yabove[-1]; - vp8mt_predict_intra4x4(pbi, xd, b_mode, base_dst + b->offset, - dst_stride, mb_row, mb_col, i); + vp8_intra4x4_predict_d_c(yabove, yleft, left_stride, + b_mode, + base_dst + b->offset, dst_stride, + top_left); if (xd->eobs[i] ) { diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c index d481c99d30dab3168bb2ce2b58f4ed049f35b4c9..f73bcc59d634923f7a39bf05c483441f8a6bd2c6 100644 --- a/vp8/encoder/encodeintra.c +++ b/vp8/encoder/encodeintra.c @@ -82,8 +82,8 @@ void vp8_encode_intra4x4mby(MACROBLOCK *mb) { int i; - MACROBLOCKD *x = &mb->e_mbd; - vp8_intra_prediction_down_copy(x); + MACROBLOCKD *xd = &mb->e_mbd; + intra_prediction_down_copy(xd, xd->dst.y_buffer - xd->dst.y_stride + 16); for (i = 0; i < 16; i++) vp8_encode_intra4x4block(mb, i); @@ -95,7 +95,11 @@ void vp8_encode_intra16x16mby(MACROBLOCK *x) BLOCK *b = &x->block[0]; MACROBLOCKD *xd = &x->e_mbd; - vp8_build_intra_predictors_mby_s(&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->dst.y_buffer); vp8_subtract_mby(x->src_diff, *(b->base_src), b->src_stride, xd->dst.y_buffer, xd->dst.y_stride); @@ -112,7 +116,12 @@ void vp8_encode_intra16x16mbuv(MACROBLOCK *x) { MACROBLOCKD *xd = &x->e_mbd; - vp8_build_intra_predictors_mbuv_s(&x->e_mbd); + 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->dst.u_buffer, xd->dst.v_buffer); 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 0fc72d7eba79ec9b806a80c8ef98a542e0b4db7f..236cb2326e76a58f1b15ea3b123778b1f8c03e86 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c @@ -184,7 +184,7 @@ static int pick_intra4x4mby_modes int distortion = 0; unsigned int *bmode_costs; - vp8_intra_prediction_down_copy(xd); + intra_prediction_down_copy(xd, xd->dst.y_buffer - xd->dst.y_stride + 16); bmode_costs = mb->inter_bmode_costs; diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 24d9a4618fa21176e45a73646cebba6edc4344f2..80e0f4ea88ab7c906936194ac891049a8d7e2a83 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -701,7 +701,7 @@ static int rd_pick_intra4x4mby_modes(VP8_COMP *cpi, MACROBLOCK *mb, int *Rate, ta = (ENTROPY_CONTEXT *)&t_above; tl = (ENTROPY_CONTEXT *)&t_left; - vp8_intra_prediction_down_copy(xd); + intra_prediction_down_copy(xd, xd->dst.y_buffer - xd->dst.y_stride + 16); bmode_costs = mb->inter_bmode_costs; diff --git a/vp8/vp8dx.mk b/vp8/vp8dx.mk index ce307b6d0f84c3a1b5c89d62b6d4b6be8505cd72..2cfd280cba97be89d058a2ec5a4910460f506354 100644 --- a/vp8/vp8dx.mk +++ b/vp8/vp8dx.mk @@ -60,7 +60,5 @@ VP8_DX_SRCS-yes += decoder/onyxd_int.h VP8_DX_SRCS-yes += decoder/treereader.h VP8_DX_SRCS-yes += decoder/onyxd_if.c VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/threading.c -VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/reconintra_mt.h -VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/reconintra_mt.c VP8_DX_SRCS-yes := $(filter-out $(VP8_DX_SRCS_REMOVE-yes),$(VP8_DX_SRCS-yes))