Support rectangular tx_size in recursive txfm syntax coding
Change-Id: I40aa342ffa5b6effe8b124b94783e5f0bd2f2a81
This commit is contained in:
@@ -849,21 +849,21 @@ static void pack_txb_tokens(aom_writer *w, const TOKENEXTRA **tp,
|
|||||||
if (tx_size == plane_tx_size) {
|
if (tx_size == plane_tx_size) {
|
||||||
pack_mb_tokens(w, tp, tok_end, bit_depth, tx_size);
|
pack_mb_tokens(w, tp, tok_end, bit_depth, tx_size);
|
||||||
} else {
|
} else {
|
||||||
int bsl = b_width_log2_lookup[bsize];
|
const int bsl = block_size_wide[bsize] >> (tx_size_wide_log2[0] + 1);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
assert(bsl > 0);
|
assert(bsl > 0);
|
||||||
--bsl;
|
|
||||||
|
|
||||||
for (i = 0; i < 4; ++i) {
|
for (i = 0; i < 4; ++i) {
|
||||||
const int offsetr = blk_row + ((i >> 1) << bsl);
|
const int offsetr = blk_row + (i >> 1) * bsl;
|
||||||
const int offsetc = blk_col + ((i & 0x01) << bsl);
|
const int offsetc = blk_col + (i & 0x01) * bsl;
|
||||||
int step = num_4x4_blocks_txsize_lookup[tx_size - 1];
|
const TX_SIZE sub_txs = tx_size - 1;
|
||||||
|
const int step = tx_size_wide_unit[sub_txs] * tx_size_high_unit[sub_txs];
|
||||||
|
|
||||||
if (offsetr >= max_blocks_high || offsetc >= max_blocks_wide) continue;
|
if (offsetr >= max_blocks_high || offsetc >= max_blocks_wide) continue;
|
||||||
|
|
||||||
pack_txb_tokens(w, tp, tok_end, xd, mbmi, plane, plane_bsize, bit_depth,
|
pack_txb_tokens(w, tp, tok_end, xd, mbmi, plane, plane_bsize, bit_depth,
|
||||||
block + i * step, offsetr, offsetc, tx_size - 1);
|
block + i * step, offsetr, offsetc, sub_txs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1834,8 +1834,10 @@ static void write_modes_b(AV1_COMP *cpi, const TileInfo *const tile,
|
|||||||
const BLOCK_SIZE plane_bsize =
|
const BLOCK_SIZE plane_bsize =
|
||||||
get_plane_block_size(AOMMAX(bsize, BLOCK_8X8), pd);
|
get_plane_block_size(AOMMAX(bsize, BLOCK_8X8), pd);
|
||||||
|
|
||||||
const int num_4x4_w = num_4x4_blocks_wide_lookup[plane_bsize];
|
const int num_4x4_w =
|
||||||
const int num_4x4_h = num_4x4_blocks_high_lookup[plane_bsize];
|
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];
|
||||||
int row, col;
|
int row, col;
|
||||||
#if CONFIG_EXT_TX && CONFIG_RECT_TX
|
#if CONFIG_EXT_TX && CONFIG_RECT_TX
|
||||||
TX_SIZE tx_size =
|
TX_SIZE tx_size =
|
||||||
@@ -1846,12 +1848,13 @@ static void write_modes_b(AV1_COMP *cpi, const TileInfo *const tile,
|
|||||||
if (is_inter_block(mbmi)) {
|
if (is_inter_block(mbmi)) {
|
||||||
#endif
|
#endif
|
||||||
const TX_SIZE max_tx_size = max_txsize_lookup[plane_bsize];
|
const TX_SIZE max_tx_size = max_txsize_lookup[plane_bsize];
|
||||||
const BLOCK_SIZE txb_size = txsize_to_bsize[max_tx_size];
|
|
||||||
int block = 0;
|
int block = 0;
|
||||||
const int step = num_4x4_blocks_txsize_lookup[max_tx_size];
|
const int step =
|
||||||
bw = num_4x4_blocks_wide_lookup[txb_size];
|
tx_size_wide_unit[max_tx_size] * tx_size_high_unit[max_tx_size];
|
||||||
for (row = 0; row < num_4x4_h; row += bw) {
|
const int bkw = tx_size_wide_unit[max_tx_size];
|
||||||
for (col = 0; col < num_4x4_w; col += bw) {
|
const int bkh = tx_size_high_unit[max_tx_size];
|
||||||
|
for (row = 0; row < num_4x4_h; row += bkh) {
|
||||||
|
for (col = 0; col < num_4x4_w; col += bkw) {
|
||||||
pack_txb_tokens(w, tok, tok_end, xd, mbmi, plane, plane_bsize,
|
pack_txb_tokens(w, tok, tok_end, xd, mbmi, plane, plane_bsize,
|
||||||
cm->bit_depth, block, row, col, max_tx_size);
|
cm->bit_depth, block, row, col, max_tx_size);
|
||||||
block += step;
|
block += step;
|
||||||
@@ -1860,12 +1863,11 @@ static void write_modes_b(AV1_COMP *cpi, const TileInfo *const tile,
|
|||||||
} else {
|
} else {
|
||||||
TX_SIZE tx = plane ? get_uv_tx_size(&m->mbmi, &xd->plane[plane])
|
TX_SIZE tx = plane ? get_uv_tx_size(&m->mbmi, &xd->plane[plane])
|
||||||
: m->mbmi.tx_size;
|
: m->mbmi.tx_size;
|
||||||
BLOCK_SIZE txb_size = txsize_to_bsize[tx];
|
const int bkw = tx_size_wide_unit[tx];
|
||||||
bw = num_4x4_blocks_wide_lookup[txb_size];
|
const int bkh = tx_size_high_unit[tx];
|
||||||
bh = num_4x4_blocks_high_lookup[txb_size];
|
|
||||||
|
|
||||||
for (row = 0; row < num_4x4_h; row += bh)
|
for (row = 0; row < num_4x4_h; row += bkh)
|
||||||
for (col = 0; col < num_4x4_w; col += bw)
|
for (col = 0; col < num_4x4_w; col += bkw)
|
||||||
pack_mb_tokens(w, tok, tok_end, cm->bit_depth, tx);
|
pack_mb_tokens(w, tok, tok_end, cm->bit_depth, tx);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user