diff options
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/vp9_blockd.h | 13 | ||||
-rw-r--r-- | vp9/common/vp9_common_data.c | 61 | ||||
-rw-r--r-- | vp9/common/vp9_common_data.h | 2 | ||||
-rw-r--r-- | vp9/common/vp9_enums.h | 6 |
4 files changed, 52 insertions, 30 deletions
diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h index aab47e472..a4295544f 100644 --- a/vp9/common/vp9_blockd.h +++ b/vp9/common/vp9_blockd.h @@ -433,6 +433,14 @@ static INLINE struct plane_block_idx plane_block_idx(int y_blocks, return res; } +static BLOCK_SIZE_TYPE get_plane_block_size(BLOCK_SIZE_TYPE bsize, + struct macroblockd_plane *pd) { + BLOCK_SIZE_TYPE bs = ss_size_lookup[bsize] + [pd->subsampling_x][pd->subsampling_y]; + assert(bs < BLOCK_SIZE_TYPES); + return bs; +} + static INLINE int plane_block_width(BLOCK_SIZE_TYPE bsize, const struct macroblockd_plane* plane) { return 4 << (b_width_log2(bsize) - plane->subsampling_x); @@ -695,10 +703,11 @@ static void set_contexts_on_border(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize, int eob, int aoff, int loff, ENTROPY_CONTEXT *A, ENTROPY_CONTEXT *L) { struct macroblockd_plane *pd = &xd->plane[plane]; + const BLOCK_SIZE_TYPE bs = get_plane_block_size(bsize, pd); + int mi_blocks_wide = num_4x4_blocks_wide_lookup[bs]; + int mi_blocks_high = num_4x4_blocks_high_lookup[bs]; int above_contexts = tx_size_in_blocks; int left_contexts = tx_size_in_blocks; - int mi_blocks_wide = 1 << plane_block_width_log2by4(bsize, pd); - int mi_blocks_high = 1 << plane_block_height_log2by4(bsize, pd); int pt; // xd->mb_to_right_edge is in units of pixels * 8. This converts diff --git a/vp9/common/vp9_common_data.c b/vp9/common/vp9_common_data.c index fdf37e46a..399391a9f 100644 --- a/vp9/common/vp9_common_data.c +++ b/vp9/common/vp9_common_data.c @@ -76,49 +76,60 @@ const PARTITION_TYPE partition_lookup[][BLOCK_SIZE_TYPES] = { const BLOCK_SIZE_TYPE subsize_lookup[PARTITION_TYPES][BLOCK_SIZE_TYPES] = { { // PARTITION_NONE - BLOCK_4X4, BLOCK_4X8, BLOCK_8X4, - BLOCK_8X8, BLOCK_8X16, BLOCK_16X8, + BLOCK_4X4, BLOCK_4X8, BLOCK_8X4, + BLOCK_8X8, BLOCK_8X16, BLOCK_16X8, BLOCK_16X16, BLOCK_16X32, BLOCK_32X16, BLOCK_32X32, BLOCK_32X64, BLOCK_64X32, BLOCK_64X64, }, { // PARTITION_HORZ - BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_8X4, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_16X8, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_32X16, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, + BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_8X4, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_16X8, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_32X16, BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32, }, { // PARTITION_VERT - BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_4X8, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_8X16, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_16X32, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, + BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_4X8, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_8X16, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_16X32, BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64, }, { // PARTITION_SPLIT - BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_4X4, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_8X8, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, - BLOCK_16X16, BLOCK_SIZE_TYPES, BLOCK_SIZE_TYPES, + BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_4X4, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_8X8, BLOCK_INVALID, BLOCK_INVALID, + BLOCK_16X16, BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32, } }; const TX_SIZE max_txsize_lookup[BLOCK_SIZE_TYPES] = { - TX_4X4, TX_4X4, TX_4X4, - TX_8X8, TX_8X8, TX_8X8, + TX_4X4, TX_4X4, TX_4X4, + TX_8X8, TX_8X8, TX_8X8, TX_16X16, TX_16X16, TX_16X16, TX_32X32, TX_32X32, TX_32X32, TX_32X32 }; const TX_SIZE max_uv_txsize_lookup[BLOCK_SIZE_TYPES] = { - TX_4X4, TX_4X4, TX_4X4, - TX_4X4, TX_4X4, TX_4X4, - TX_8X8, TX_8X8, TX_8X8, + TX_4X4, TX_4X4, TX_4X4, + TX_4X4, TX_4X4, TX_4X4, + TX_8X8, TX_8X8, TX_8X8, TX_16X16, TX_16X16, TX_16X16, TX_32X32 }; -const BLOCK_SIZE_TYPE bsize_from_dim_lookup[5][5] = { - { BLOCK_4X4, BLOCK_4X8, BLOCK_4X8, BLOCK_4X8, BLOCK_4X8 }, - { BLOCK_8X4, BLOCK_8X8, BLOCK_8X16, BLOCK_8X16, BLOCK_8X16 }, - { BLOCK_16X8, BLOCK_16X8, BLOCK_16X16, BLOCK_16X32, BLOCK_16X32 }, - { BLOCK_32X16, BLOCK_32X16, BLOCK_32X16, BLOCK_32X32, BLOCK_32X64 }, - { BLOCK_64X32, BLOCK_64X32, BLOCK_64X32, BLOCK_64X32, BLOCK_64X64 } +const BLOCK_SIZE_TYPE ss_size_lookup[BLOCK_SIZE_TYPES][2][2] = { +// ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1 +// ss_y == 0 ss_y == 1 ss_y == 0 ss_y == 1 + {{BLOCK_4X4, BLOCK_INVALID}, {BLOCK_INVALID, BLOCK_INVALID}}, + {{BLOCK_4X8, BLOCK_4X4}, {BLOCK_INVALID, BLOCK_INVALID}}, + {{BLOCK_8X4, BLOCK_INVALID}, {BLOCK_4X4, BLOCK_INVALID}}, + {{BLOCK_8X8, BLOCK_8X4}, {BLOCK_4X8, BLOCK_4X4}}, + {{BLOCK_8X16, BLOCK_8X8}, {BLOCK_INVALID, BLOCK_4X8}}, + {{BLOCK_16X8, BLOCK_INVALID}, {BLOCK_8X8, BLOCK_8X4}}, + {{BLOCK_16X16, BLOCK_16X8}, {BLOCK_8X16, BLOCK_8X8}}, + {{BLOCK_16X32, BLOCK_16X16}, {BLOCK_INVALID, BLOCK_8X16}}, + {{BLOCK_32X16, BLOCK_INVALID}, {BLOCK_16X16, BLOCK_16X8}}, + {{BLOCK_32X32, BLOCK_32X16}, {BLOCK_16X32, BLOCK_16X16}}, + {{BLOCK_32X64, BLOCK_32X32}, {BLOCK_INVALID, BLOCK_16X32}}, + {{BLOCK_64X32, BLOCK_INVALID}, {BLOCK_32X32, BLOCK_32X16}}, + {{BLOCK_64X64, BLOCK_64X32}, {BLOCK_32X64, BLOCK_32X32}}, }; + diff --git a/vp9/common/vp9_common_data.h b/vp9/common/vp9_common_data.h index bc8c01a77..cfa4cd5be 100644 --- a/vp9/common/vp9_common_data.h +++ b/vp9/common/vp9_common_data.h @@ -27,6 +27,6 @@ extern const PARTITION_TYPE partition_lookup[][BLOCK_SIZE_TYPES]; extern const BLOCK_SIZE_TYPE subsize_lookup[PARTITION_TYPES][BLOCK_SIZE_TYPES]; extern const TX_SIZE max_txsize_lookup[BLOCK_SIZE_TYPES]; extern const TX_SIZE max_uv_txsize_lookup[BLOCK_SIZE_TYPES]; -extern const BLOCK_SIZE_TYPE bsize_from_dim_lookup[5][5]; +extern const BLOCK_SIZE_TYPE ss_size_lookup[BLOCK_SIZE_TYPES][2][2]; #endif // VP9_COMMON_VP9_COMMON_DATA_H diff --git a/vp9/common/vp9_enums.h b/vp9/common/vp9_enums.h index 5af52c66e..9d0dfa56d 100644 --- a/vp9/common/vp9_enums.h +++ b/vp9/common/vp9_enums.h @@ -35,7 +35,8 @@ typedef enum BLOCK_SIZE_TYPE { BLOCK_32X64, BLOCK_64X32, BLOCK_64X64, - BLOCK_SIZE_TYPES + BLOCK_SIZE_TYPES, + BLOCK_INVALID = BLOCK_SIZE_TYPES } BLOCK_SIZE_TYPE; typedef enum PARTITION_TYPE { @@ -43,7 +44,8 @@ typedef enum PARTITION_TYPE { PARTITION_HORZ, PARTITION_VERT, PARTITION_SPLIT, - PARTITION_TYPES, PARTITION_INVALID = PARTITION_TYPES + PARTITION_TYPES, + PARTITION_INVALID = PARTITION_TYPES } PARTITION_TYPE; #define PARTITION_PLOFFSET 4 // number of probability models per block size |