Add av1_predict_intra_block_facade A simpler interface for intra block prediction Change-Id: I97e3f385746928d87999e6862b1d71a197df0302
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c index 7cd48b6..c08e9fb 100644 --- a/av1/common/reconintra.c +++ b/av1/common/reconintra.c
@@ -2249,6 +2249,21 @@ plane); } +void av1_predict_intra_block_facade(MACROBLOCKD *xd, int plane, + int block_raster_idx, int blk_col, + int blk_row, TX_SIZE tx_size) { + struct macroblockd_plane *const pd = &xd->plane[plane]; + const int dst_stride = pd->dst.stride; + uint8_t *dst = + &pd->dst.buf[(blk_row * dst_stride + blk_col) << tx_size_wide_log2[0]]; + MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; + PREDICTION_MODE mode = + (plane == 0) ? get_y_mode(xd->mi[0], block_raster_idx) : mbmi->uv_mode; + av1_predict_intra_block(xd, pd->width, pd->height, txsize_to_bsize[tx_size], + mode, dst, dst_stride, dst, dst_stride, blk_col, + blk_row, plane); +} + void av1_predict_intra_block(const MACROBLOCKD *xd, int wpx, int hpx, BLOCK_SIZE bsize, PREDICTION_MODE mode, const uint8_t *ref, int ref_stride, uint8_t *dst,
diff --git a/av1/common/reconintra.h b/av1/common/reconintra.h index e1ef27d..4d3ab6b 100644 --- a/av1/common/reconintra.h +++ b/av1/common/reconintra.h
@@ -20,7 +20,9 @@ #endif void av1_init_intra_predictors(void); - +void av1_predict_intra_block_facade(MACROBLOCKD *xd, int plane, + int block_raster_idx, int blk_col, + int blk_row, TX_SIZE tx_size); void av1_predict_intra_block(const MACROBLOCKD *xd, int bw, int bh, BLOCK_SIZE bsize, PREDICTION_MODE mode, const uint8_t *ref, int ref_stride, uint8_t *dst,
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index c2f4f11..12dd9f9 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -538,27 +538,17 @@ static void predict_and_reconstruct_intra_block( AV1_COMMON *cm, MACROBLOCKD *const xd, aom_reader *const r, MB_MODE_INFO *const mbmi, int plane, int row, int col, TX_SIZE tx_size) { - struct macroblockd_plane *const pd = &xd->plane[plane]; - PREDICTION_MODE mode = (plane == 0) ? mbmi->mode : mbmi->uv_mode; PLANE_TYPE plane_type = get_plane_type(plane); - uint8_t *dst; const int block_idx = (row << 1) + col; #if CONFIG_PVQ (void)r; #endif - dst = &pd->dst.buf[(row * pd->dst.stride + col) << tx_size_wide_log2[0]]; - -#if !CONFIG_CB4X4 - if (mbmi->sb_type < BLOCK_8X8) - if (plane == 0) mode = xd->mi[0]->bmi[block_idx].as_mode; -#endif - av1_predict_intra_block(xd, pd->width, pd->height, txsize_to_bsize[tx_size], - mode, dst, pd->dst.stride, dst, pd->dst.stride, col, - row, plane); + av1_predict_intra_block_facade(xd, plane, block_idx, col, row, tx_size); if (!mbmi->skip) { TX_TYPE tx_type = get_tx_type(plane_type, xd, block_idx, tx_size); #if !CONFIG_PVQ + struct macroblockd_plane *const pd = &xd->plane[plane]; #if CONFIG_LV_MAP int16_t max_scan_line = 0; int eob; @@ -571,9 +561,12 @@ av1_decode_block_tokens(cm, xd, plane, scan_order, col, row, tx_size, tx_type, &max_scan_line, r, mbmi->segment_id); #endif // CONFIG_LV_MAP - if (eob) + if (eob) { + uint8_t *dst = + &pd->dst.buf[(row * pd->dst.stride + col) << tx_size_wide_log2[0]]; inverse_transform_block(xd, plane, tx_type, tx_size, dst, pd->dst.stride, max_scan_line, eob); + } #else av1_pvq_decode_helper2(cm, xd, mbmi, plane, row, col, tx_size, tx_type); #endif
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c index b378674..d5859d4 100644 --- a/av1/encoder/encodemb.c +++ b/av1/encoder/encodemb.c
@@ -1082,7 +1082,6 @@ const int block_raster_idx = av1_block_index_to_raster_order(tx_size, block); const TX_TYPE tx_type = get_tx_type(plane_type, xd, block_raster_idx, tx_size); - PREDICTION_MODE mode; const int diff_stride = block_size_wide[plane_bsize]; uint8_t *src, *dst; int16_t *src_diff; @@ -1098,15 +1097,13 @@ int i, j; #endif + av1_predict_intra_block_facade(xd, plane, block_raster_idx, blk_col, blk_row, + tx_size); + dst = &pd->dst.buf[(blk_row * dst_stride + blk_col) << tx_size_wide_log2[0]]; src = &p->src.buf[(blk_row * src_stride + blk_col) << tx_size_wide_log2[0]]; src_diff = &p->src_diff[(blk_row * diff_stride + blk_col) << tx_size_wide_log2[0]]; - mode = (plane == 0) ? get_y_mode(xd->mi[0], block_raster_idx) : mbmi->uv_mode; - av1_predict_intra_block(xd, pd->width, pd->height, txsize_to_bsize[tx_size], - mode, dst, dst_stride, dst, dst_stride, blk_col, - blk_row, plane); - subtract_block(xd, tx1d_height, tx1d_width, src_diff, diff_stride, src, src_stride, dst, dst_stride);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 76857af..72575c3 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -2401,14 +2401,15 @@ const int max_blocks_high = max_block_high(xd, bsize, 0); mbmi->tx_size = tx_size; // Prediction. + const int step = stepr * stepc; + int block = 0; for (row = 0; row < max_blocks_high; row += stepr) { for (col = 0; col < max_blocks_wide; col += stepc) { - struct macroblockd_plane *const pd = &xd->plane[0]; - uint8_t *dst = - &pd->dst.buf[(row * pd->dst.stride + col) << tx_size_wide_log2[0]]; - av1_predict_intra_block(xd, pd->width, pd->height, - txsize_to_bsize[tx_size], mbmi->mode, dst, - pd->dst.stride, dst, pd->dst.stride, col, row, 0); + const int block_raster_idx = + av1_block_index_to_raster_order(tx_size, block); + av1_predict_intra_block_facade(xd, 0, block_raster_idx, col, row, + tx_size); + block += step; } } // RD estimation.