Make var-tx work with the re-designed cb4x4

Resolve tokenization and bit-stream packing issues in var-tx
when the re-designed cb4x4 is enabled.

Change-Id: I651f776104679eb7d4d0681f428490f668dc806a
This commit is contained in:
Jingning Han 2017-04-05 11:53:32 -07:00
Родитель 8bb2c4a2bf
Коммит 29a4120691
2 изменённых файлов: 24 добавлений и 0 удалений

Просмотреть файл

@ -2333,7 +2333,12 @@ static void write_tokens_b(AV1_COMP *cpi, const TileInfo *const tile,
const struct macroblockd_plane *const pd = &xd->plane[plane]; const struct macroblockd_plane *const pd = &xd->plane[plane];
BLOCK_SIZE bsize = mbmi->sb_type; BLOCK_SIZE bsize = mbmi->sb_type;
#if CONFIG_CB4X4 #if CONFIG_CB4X4
#if CONFIG_CHROMA_2X2
const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd); const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd);
#else
const BLOCK_SIZE plane_bsize =
AOMMAX(BLOCK_4X4, get_plane_block_size(bsize, pd));
#endif
#else #else
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);
@ -2374,6 +2379,9 @@ static void write_tokens_b(AV1_COMP *cpi, const TileInfo *const tile,
#endif // CONFIG_RD_DEBUG #endif // CONFIG_RD_DEBUG
} else { } else {
TX_SIZE tx = get_tx_size(plane, xd); TX_SIZE tx = get_tx_size(plane, xd);
#if CONFIG_CB4X4 && !CONFIG_CHROMA_2X2
tx = AOMMAX(TX_4X4, tx);
#endif
const int bkw = tx_size_wide_unit[tx]; const int bkw = tx_size_wide_unit[tx];
const int bkh = tx_size_high_unit[tx]; const int bkh = tx_size_high_unit[tx];
for (row = 0; row < num_4x4_h; row += bkh) { for (row = 0; row < num_4x4_h; row += bkh) {

Просмотреть файл

@ -710,8 +710,24 @@ void av1_tokenize_sb_vartx(const AV1_COMP *cpi, ThreadData *td, TOKENEXTRA **t,
*t = t_backup; *t = t_backup;
for (plane = 0; plane < MAX_MB_PLANE; ++plane) { for (plane = 0; plane < MAX_MB_PLANE; ++plane) {
#if CONFIG_CB4X4
if (bsize < BLOCK_8X8 && plane && !is_chroma_reference(mi_row, mi_col)) {
#if !CONFIG_PVQ
if (!dry_run) {
(*t)->token = EOSB_TOKEN;
(*t)++;
}
#endif
continue;
}
#endif
const struct macroblockd_plane *const pd = &xd->plane[plane]; const struct macroblockd_plane *const pd = &xd->plane[plane];
#if CONFIG_CB4X4 && !CONFIG_CHROMA_2X2
const BLOCK_SIZE plane_bsize =
AOMMAX(BLOCK_4X4, get_plane_block_size(bsize, pd));
#else
const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd); const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd);
#endif
const int mi_width = block_size_wide[plane_bsize] >> tx_size_wide_log2[0]; const int mi_width = block_size_wide[plane_bsize] >> tx_size_wide_log2[0];
const int mi_height = block_size_high[plane_bsize] >> tx_size_wide_log2[0]; const int mi_height = block_size_high[plane_bsize] >> tx_size_wide_log2[0];
const TX_SIZE max_tx_size = max_txsize_rect_lookup[plane_bsize]; const TX_SIZE max_tx_size = max_txsize_rect_lookup[plane_bsize];