Refactor inter txb coeff writing Abstract the inter block transform coefficient writing unit. Change-Id: I8e7a83d2d92941258f7250fee4c96f5ddfc4572e
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index e592654..bf552a4 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -1769,6 +1769,49 @@ } } +static void write_inter_txb_coeff(AV1_COMMON *const cm, MACROBLOCK *const x, + MB_MODE_INFO *const mbmi, aom_writer *w, + const TOKENEXTRA **tok, + const TOKENEXTRA *const tok_end, + TOKEN_STATS *token_stats, const int row, + const int col, int *block, const int plane) { + MACROBLOCKD *const xd = &x->e_mbd; + const struct macroblockd_plane *const pd = &xd->plane[plane]; + + const BLOCK_SIZE plane_bsize = + AOMMAX(BLOCK_4X4, get_plane_block_size(mbmi->sb_type, pd)); + + const TX_SIZE max_tx_size = get_vartx_max_txsize( + mbmi, plane_bsize, pd->subsampling_x || pd->subsampling_y); + const int step = + tx_size_wide_unit[max_tx_size] * tx_size_high_unit[max_tx_size]; + const int bkw = tx_size_wide_unit[max_tx_size]; + const int bkh = tx_size_high_unit[max_tx_size]; + + const BLOCK_SIZE max_unit_bsize = get_plane_block_size(BLOCK_64X64, pd); + int mu_blocks_wide = block_size_wide[max_unit_bsize] >> tx_size_wide_log2[0]; + int mu_blocks_high = block_size_high[max_unit_bsize] >> tx_size_high_log2[0]; + + int blk_row, blk_col; + + const int num_4x4_w = block_size_wide[plane_bsize] >> tx_size_wide_log2[0]; + const int num_4x4_h = block_size_high[plane_bsize] >> tx_size_wide_log2[0]; + + const int unit_height = AOMMIN(mu_blocks_high + row, num_4x4_h); + const int unit_width = AOMMIN(mu_blocks_wide + col, num_4x4_w); + for (blk_row = row; blk_row < unit_height; blk_row += bkh) { + for (blk_col = col; blk_col < unit_width; blk_col += bkw) { + pack_txb_tokens(w, +#if CONFIG_LV_MAP + cm, x, +#endif + tok, tok_end, xd, mbmi, plane, plane_bsize, cm->bit_depth, + *block, blk_row, blk_col, max_tx_size, token_stats); + *block += step; + } + } +} + static void write_tokens_b(AV1_COMP *cpi, const TileInfo *const tile, aom_writer *w, const TOKENEXTRA **tok, const TOKENEXTRA *const tok_end, int mi_row, @@ -1780,8 +1823,8 @@ MB_MODE_INFO *const mbmi = &m->mbmi; int plane; int bh, bw; -#if CONFIG_LV_MAP MACROBLOCK *const x = &cpi->td.mb; +#if CONFIG_LV_MAP (void)tok; (void)tok_end; #endif @@ -1859,32 +1902,11 @@ mu_blocks_high = AOMMIN(num_4x4_h, mu_blocks_high); if (is_inter_block(mbmi)) { - const TX_SIZE max_tx_size = get_vartx_max_txsize( - mbmi, plane_bsize, pd->subsampling_x || pd->subsampling_y); int block = 0; - const int step = - tx_size_wide_unit[max_tx_size] * tx_size_high_unit[max_tx_size]; - const int bkw = tx_size_wide_unit[max_tx_size]; - const int bkh = tx_size_high_unit[max_tx_size]; - assert(bkw <= mu_blocks_wide); - assert(bkh <= mu_blocks_high); for (row = 0; row < num_4x4_h; row += mu_blocks_high) { - const int unit_height = AOMMIN(mu_blocks_high + row, num_4x4_h); for (col = 0; col < num_4x4_w; col += mu_blocks_wide) { - int blk_row, blk_col; - const int unit_width = AOMMIN(mu_blocks_wide + col, num_4x4_w); - for (blk_row = row; blk_row < unit_height; blk_row += bkh) { - for (blk_col = col; blk_col < unit_width; blk_col += bkw) { - pack_txb_tokens(w, -#if CONFIG_LV_MAP - cm, x, -#endif - tok, tok_end, xd, mbmi, plane, plane_bsize, - cm->bit_depth, block, blk_row, blk_col, - max_tx_size, &token_stats); - block += step; - } - } + write_inter_txb_coeff(cm, x, mbmi, w, tok, tok_end, &token_stats, + row, col, &block, plane); } } #if CONFIG_RD_DEBUG