Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 1 | /* |
Yaowu Xu | 2ab7ff0 | 2016-09-02 12:04:54 -0700 | [diff] [blame] | 2 | * Copyright (c) 2016, Alliance for Open Media. All rights reserved |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 3 | * |
Yaowu Xu | 2ab7ff0 | 2016-09-02 12:04:54 -0700 | [diff] [blame] | 4 | * This source code is subject to the terms of the BSD 2 Clause License and |
| 5 | * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License |
| 6 | * was not distributed with this source code in the LICENSE file, you can |
| 7 | * obtain it at www.aomedia.org/license/software. If the Alliance for Open |
| 8 | * Media Patent License 1.0 was not distributed with this source code in the |
| 9 | * PATENTS file, you can obtain it at www.aomedia.org/license/patent. |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 10 | */ |
| 11 | |
James Zern | e1cbb13 | 2018-08-22 14:10:36 -0700 | [diff] [blame] | 12 | #ifndef AOM_AV1_COMMON_ENTROPYMODE_H_ |
| 13 | #define AOM_AV1_COMMON_ENTROPYMODE_H_ |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 14 | |
| 15 | #include "av1/common/entropy.h" |
| 16 | #include "av1/common/entropymv.h" |
| 17 | #include "av1/common/filter.h" |
| 18 | #include "av1/common/seg_common.h" |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 19 | |
| 20 | #ifdef __cplusplus |
| 21 | extern "C" { |
| 22 | #endif |
| 23 | |
| 24 | #define BLOCK_SIZE_GROUPS 4 |
| 25 | |
Jingning Han | 0238457 | 2018-02-21 11:28:59 -0800 | [diff] [blame] | 26 | #define TX_SIZE_CONTEXTS 3 |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 27 | |
| 28 | #define INTER_OFFSET(mode) ((mode)-NEARESTMV) |
Jingning Han | 673b5dd | 2018-03-12 11:10:51 -0700 | [diff] [blame] | 29 | #define INTER_COMPOUND_OFFSET(mode) (uint8_t)((mode)-NEAREST_NEARESTMV) |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 30 | |
Urvang Joshi | 23a6111 | 2017-01-30 14:59:27 -0800 | [diff] [blame] | 31 | // Number of possible contexts for a color index. |
| 32 | // As can be seen from av1_get_palette_color_index_context(), the possible |
| 33 | // contexts are (2,0,0), (2,2,1), (3,2,0), (4,1,0), (5,0,0). These are mapped to |
Wan-Teh Chang | e49f983 | 2022-11-25 15:09:32 -0800 | [diff] [blame] | 34 | // a value from 0 to 4 using 'av1_palette_color_index_context_lookup' table. |
Urvang Joshi | 23a6111 | 2017-01-30 14:59:27 -0800 | [diff] [blame] | 35 | #define PALETTE_COLOR_INDEX_CONTEXTS 5 |
| 36 | |
Urvang Joshi | 23a6111 | 2017-01-30 14:59:27 -0800 | [diff] [blame] | 37 | // Palette Y mode context for a block is determined by number of neighboring |
| 38 | // blocks (top and/or left) using a palette for Y plane. So, possible Y mode' |
| 39 | // context values are: |
| 40 | // 0 if neither left nor top block uses palette for Y plane, |
| 41 | // 1 if exactly one of left or top block uses palette for Y plane, and |
| 42 | // 2 if both left and top blocks use palette for Y plane. |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 43 | #define PALETTE_Y_MODE_CONTEXTS 3 |
Urvang Joshi | 23a6111 | 2017-01-30 14:59:27 -0800 | [diff] [blame] | 44 | |
| 45 | // Palette UV mode context for a block is determined by whether this block uses |
| 46 | // palette for the Y plane. So, possible values are: |
| 47 | // 0 if this block doesn't use palette for Y plane. |
| 48 | // 1 if this block uses palette for Y plane (i.e. Y palette size > 0). |
| 49 | #define PALETTE_UV_MODE_CONTEXTS 2 |
| 50 | |
Hui Su | 8b618f6 | 2017-12-20 12:03:35 -0800 | [diff] [blame] | 51 | // Map the number of pixels in a block size to a context |
Hui Su | 476f0b5 | 2018-04-16 15:51:44 -0700 | [diff] [blame] | 52 | // 64(BLOCK_8X8, BLOCK_4x16, BLOCK_16X4) -> 0 |
| 53 | // 128(BLOCK_8X16, BLOCK_16x8) -> 1 |
Hui Su | 8b618f6 | 2017-12-20 12:03:35 -0800 | [diff] [blame] | 54 | // ... |
Hui Su | 476f0b5 | 2018-04-16 15:51:44 -0700 | [diff] [blame] | 55 | // 4096(BLOCK_64X64) -> 6 |
| 56 | #define PALATTE_BSIZE_CTXS 7 |
Hui Su | 8b618f6 | 2017-12-20 12:03:35 -0800 | [diff] [blame] | 57 | |
chiyotsai | 8adab75 | 2022-11-17 14:33:16 -0800 | [diff] [blame] | 58 | #define MAX_COLOR_CONTEXT_HASH 8 |
| 59 | |
| 60 | #define NUM_PALETTE_NEIGHBORS 3 // left, top-left and top. |
| 61 | |
Jingning Han | a45d842 | 2017-10-05 09:57:38 -0700 | [diff] [blame] | 62 | #define KF_MODE_CONTEXTS 5 |
Jingning Han | a45d842 | 2017-10-05 09:57:38 -0700 | [diff] [blame] | 63 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 64 | struct AV1Common; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 65 | |
Angie Chiang | 37fb8ed | 2016-10-20 09:50:32 -0700 | [diff] [blame] | 66 | typedef struct { |
| 67 | const int16_t *scan; |
| 68 | const int16_t *iscan; |
Angie Chiang | 37fb8ed | 2016-10-20 09:50:32 -0700 | [diff] [blame] | 69 | } SCAN_ORDER; |
| 70 | |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 71 | typedef struct frame_contexts { |
Jingning Han | fdaa55e | 2017-08-18 16:21:36 -0700 | [diff] [blame] | 72 | aom_cdf_prob txb_skip_cdf[TX_SIZES][TXB_SKIP_CONTEXTS][CDF_SIZE(2)]; |
Angie Chiang | 7ab884e | 2017-10-18 15:57:12 -0700 | [diff] [blame] | 73 | aom_cdf_prob eob_extra_cdf[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS] |
| 74 | [CDF_SIZE(2)]; |
Jingning Han | fdaa55e | 2017-08-18 16:21:36 -0700 | [diff] [blame] | 75 | aom_cdf_prob dc_sign_cdf[PLANE_TYPES][DC_SIGN_CONTEXTS][CDF_SIZE(2)]; |
Dake He | 0db7d0e | 2017-12-21 15:23:20 -0800 | [diff] [blame] | 76 | aom_cdf_prob eob_flag_cdf16[PLANE_TYPES][2][CDF_SIZE(5)]; |
| 77 | aom_cdf_prob eob_flag_cdf32[PLANE_TYPES][2][CDF_SIZE(6)]; |
| 78 | aom_cdf_prob eob_flag_cdf64[PLANE_TYPES][2][CDF_SIZE(7)]; |
| 79 | aom_cdf_prob eob_flag_cdf128[PLANE_TYPES][2][CDF_SIZE(8)]; |
| 80 | aom_cdf_prob eob_flag_cdf256[PLANE_TYPES][2][CDF_SIZE(9)]; |
| 81 | aom_cdf_prob eob_flag_cdf512[PLANE_TYPES][2][CDF_SIZE(10)]; |
| 82 | aom_cdf_prob eob_flag_cdf1024[PLANE_TYPES][2][CDF_SIZE(11)]; |
Dake He | 3fe369c | 2017-11-16 17:56:44 -0800 | [diff] [blame] | 83 | aom_cdf_prob coeff_base_eob_cdf[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS_EOB] |
| 84 | [CDF_SIZE(3)]; |
Ola Hugosson | e72a209 | 2017-11-12 09:11:53 +0100 | [diff] [blame] | 85 | aom_cdf_prob coeff_base_cdf[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS] |
| 86 | [CDF_SIZE(4)]; |
| 87 | aom_cdf_prob coeff_br_cdf[TX_SIZES][PLANE_TYPES][LEVEL_CONTEXTS] |
| 88 | [CDF_SIZE(BR_CDF_SIZE)]; |
Angie Chiang | bd57fc5 | 2017-02-24 11:29:27 -0800 | [diff] [blame] | 89 | |
Thomas Davies | 149eda5 | 2017-06-12 18:11:55 +0100 | [diff] [blame] | 90 | aom_cdf_prob newmv_cdf[NEWMV_MODE_CONTEXTS][CDF_SIZE(2)]; |
Sarah Parker | 2b9ec2e | 2017-10-30 17:34:08 -0700 | [diff] [blame] | 91 | aom_cdf_prob zeromv_cdf[GLOBALMV_MODE_CONTEXTS][CDF_SIZE(2)]; |
Thomas Davies | 149eda5 | 2017-06-12 18:11:55 +0100 | [diff] [blame] | 92 | aom_cdf_prob refmv_cdf[REFMV_MODE_CONTEXTS][CDF_SIZE(2)]; |
| 93 | aom_cdf_prob drl_cdf[DRL_MODE_CONTEXTS][CDF_SIZE(2)]; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 94 | |
Thomas Davies | 8c08a33 | 2017-06-26 17:30:34 +0100 | [diff] [blame] | 95 | aom_cdf_prob inter_compound_mode_cdf[INTER_MODE_CONTEXTS] |
| 96 | [CDF_SIZE(INTER_COMPOUND_MODES)]; |
Debargha Mukherjee | 54eabb5 | 2019-02-01 16:54:33 -0800 | [diff] [blame] | 97 | aom_cdf_prob compound_type_cdf[BLOCK_SIZES_ALL] |
| 98 | [CDF_SIZE(MASKED_COMPOUND_TYPES)]; |
Yue Chen | 73335fa | 2017-12-20 23:33:41 -0800 | [diff] [blame] | 99 | aom_cdf_prob wedge_idx_cdf[BLOCK_SIZES_ALL][CDF_SIZE(16)]; |
Thomas Davies | cff9171 | 2017-07-07 11:49:55 +0100 | [diff] [blame] | 100 | aom_cdf_prob interintra_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(2)]; |
Rupert Swarbrick | 93c39e9 | 2017-07-12 11:11:02 +0100 | [diff] [blame] | 101 | aom_cdf_prob wedge_interintra_cdf[BLOCK_SIZES_ALL][CDF_SIZE(2)]; |
Thomas Davies | 299ff04 | 2017-06-27 13:41:59 +0100 | [diff] [blame] | 102 | aom_cdf_prob interintra_mode_cdf[BLOCK_SIZE_GROUPS] |
| 103 | [CDF_SIZE(INTERINTRA_MODES)]; |
Rupert Swarbrick | 93c39e9 | 2017-07-12 11:11:02 +0100 | [diff] [blame] | 104 | aom_cdf_prob motion_mode_cdf[BLOCK_SIZES_ALL][CDF_SIZE(MOTION_MODES)]; |
Rupert Swarbrick | 93c39e9 | 2017-07-12 11:11:02 +0100 | [diff] [blame] | 105 | aom_cdf_prob obmc_cdf[BLOCK_SIZES_ALL][CDF_SIZE(2)]; |
Hui Su | c1f411b | 2017-12-19 15:58:28 -0800 | [diff] [blame] | 106 | aom_cdf_prob palette_y_size_cdf[PALATTE_BSIZE_CTXS][CDF_SIZE(PALETTE_SIZES)]; |
| 107 | aom_cdf_prob palette_uv_size_cdf[PALATTE_BSIZE_CTXS][CDF_SIZE(PALETTE_SIZES)]; |
Thomas Davies | ce7272d | 2017-07-04 16:11:08 +0100 | [diff] [blame] | 108 | aom_cdf_prob palette_y_color_index_cdf[PALETTE_SIZES] |
| 109 | [PALETTE_COLOR_INDEX_CONTEXTS] |
| 110 | [CDF_SIZE(PALETTE_COLORS)]; |
| 111 | aom_cdf_prob palette_uv_color_index_cdf[PALETTE_SIZES] |
| 112 | [PALETTE_COLOR_INDEX_CONTEXTS] |
| 113 | [CDF_SIZE(PALETTE_COLORS)]; |
Hui Su | c1f411b | 2017-12-19 15:58:28 -0800 | [diff] [blame] | 114 | aom_cdf_prob palette_y_mode_cdf[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS] |
Thomas Davies | 59f9231 | 2017-08-23 00:33:12 +0100 | [diff] [blame] | 115 | [CDF_SIZE(2)]; |
| 116 | aom_cdf_prob palette_uv_mode_cdf[PALETTE_UV_MODE_CONTEXTS][CDF_SIZE(2)]; |
Thomas Davies | 860def6 | 2017-06-14 10:00:03 +0100 | [diff] [blame] | 117 | aom_cdf_prob comp_inter_cdf[COMP_INTER_CONTEXTS][CDF_SIZE(2)]; |
Thomas Davies | 315f578 | 2017-06-14 15:14:55 +0100 | [diff] [blame] | 118 | aom_cdf_prob single_ref_cdf[REF_CONTEXTS][SINGLE_REFS - 1][CDF_SIZE(2)]; |
Zoe Liu | fcf5fa2 | 2017-06-26 16:00:38 -0700 | [diff] [blame] | 119 | aom_cdf_prob comp_ref_type_cdf[COMP_REF_TYPE_CONTEXTS][CDF_SIZE(2)]; |
| 120 | aom_cdf_prob uni_comp_ref_cdf[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1] |
| 121 | [CDF_SIZE(2)]; |
Zoe Liu | 3b35347 | 2018-02-12 13:58:22 -0800 | [diff] [blame] | 122 | aom_cdf_prob comp_ref_cdf[REF_CONTEXTS][FWD_REFS - 1][CDF_SIZE(2)]; |
| 123 | aom_cdf_prob comp_bwdref_cdf[REF_CONTEXTS][BWD_REFS - 1][CDF_SIZE(2)]; |
Thomas Davies | 985bfc3 | 2017-06-27 16:51:26 +0100 | [diff] [blame] | 124 | aom_cdf_prob txfm_partition_cdf[TXFM_PARTITION_CONTEXTS][CDF_SIZE(2)]; |
Cheng Chen | 4697061 | 2017-10-24 14:53:36 -0700 | [diff] [blame] | 125 | aom_cdf_prob compound_index_cdf[COMP_INDEX_CONTEXTS][CDF_SIZE(2)]; |
Cheng Chen | 33a13d9 | 2017-11-28 16:49:59 -0800 | [diff] [blame] | 126 | aom_cdf_prob comp_group_idx_cdf[COMP_GROUP_IDX_CONTEXTS][CDF_SIZE(2)]; |
chiyotsai | 8c004e1 | 2020-04-17 15:52:08 -0700 | [diff] [blame] | 127 | aom_cdf_prob skip_mode_cdfs[SKIP_MODE_CONTEXTS][CDF_SIZE(2)]; |
| 128 | aom_cdf_prob skip_txfm_cdfs[SKIP_CONTEXTS][CDF_SIZE(2)]; |
Thomas Davies | f6ad935 | 2017-04-19 11:38:06 +0100 | [diff] [blame] | 129 | aom_cdf_prob intra_inter_cdf[INTRA_INTER_CONTEXTS][CDF_SIZE(2)]; |
Jingning Han | f050fc1 | 2018-03-09 14:53:33 -0800 | [diff] [blame] | 130 | nmv_context nmvc; |
Alex Converse | 2874430 | 2017-04-13 14:46:22 -0700 | [diff] [blame] | 131 | nmv_context ndvc; |
Hui Su | 6c8584f | 2017-09-14 15:37:02 -0700 | [diff] [blame] | 132 | aom_cdf_prob intrabc_cdf[CDF_SIZE(2)]; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 133 | struct segmentation_probs seg; |
Yue Chen | 45dfb79 | 2018-03-01 13:02:40 -0800 | [diff] [blame] | 134 | aom_cdf_prob filter_intra_cdfs[BLOCK_SIZES_ALL][CDF_SIZE(2)]; |
Yue Chen | 994dba2 | 2017-12-19 15:27:26 -0800 | [diff] [blame] | 135 | aom_cdf_prob filter_intra_mode_cdf[CDF_SIZE(FILTER_INTRA_MODES)]; |
Debargha Mukherjee | bc732ef | 2017-10-12 12:40:25 -0700 | [diff] [blame] | 136 | aom_cdf_prob switchable_restore_cdf[CDF_SIZE(RESTORE_SWITCHABLE_TYPES)]; |
Debargha Mukherjee | bc732ef | 2017-10-12 12:40:25 -0700 | [diff] [blame] | 137 | aom_cdf_prob wiener_restore_cdf[CDF_SIZE(2)]; |
| 138 | aom_cdf_prob sgrproj_restore_cdf[CDF_SIZE(2)]; |
Thomas Davies | f3eb840 | 2017-02-20 18:20:20 +0000 | [diff] [blame] | 139 | aom_cdf_prob y_mode_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(INTRA_MODES)]; |
David Michael Barr | cb3a8ef | 2018-01-06 15:48:49 +0900 | [diff] [blame] | 140 | aom_cdf_prob uv_mode_cdf[CFL_ALLOWED_TYPES][INTRA_MODES] |
| 141 | [CDF_SIZE(UV_INTRA_MODES)]; |
Alex Converse | 57795a4 | 2017-03-14 12:18:25 -0700 | [diff] [blame] | 142 | aom_cdf_prob partition_cdf[PARTITION_CONTEXTS][CDF_SIZE(EXT_PARTITION_TYPES)]; |
Nathan E. Egge | 00b3331 | 2016-11-16 09:44:26 -0500 | [diff] [blame] | 143 | aom_cdf_prob switchable_interp_cdf[SWITCHABLE_FILTER_CONTEXTS] |
Thomas Davies | f3eb840 | 2017-02-20 18:20:20 +0000 | [diff] [blame] | 144 | [CDF_SIZE(SWITCHABLE_FILTERS)]; |
Hui Su | 717ce09 | 2018-01-29 11:32:44 -0800 | [diff] [blame] | 145 | /* kf_y_cdf is discarded after use, so does not require persistent storage. |
| 146 | However, we keep it with the other CDFs in this struct since it needs to |
| 147 | be copied to each tile to support parallelism just like the others. |
| 148 | */ |
Jingning Han | a45d842 | 2017-10-05 09:57:38 -0700 | [diff] [blame] | 149 | aom_cdf_prob kf_y_cdf[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS] |
| 150 | [CDF_SIZE(INTRA_MODES)]; |
Joe Young | 3ca43bf | 2017-10-06 15:12:46 -0700 | [diff] [blame] | 151 | |
Joe Young | 3ca43bf | 2017-10-06 15:12:46 -0700 | [diff] [blame] | 152 | aom_cdf_prob angle_delta_cdf[DIRECTIONAL_MODES] |
| 153 | [CDF_SIZE(2 * MAX_ANGLE_DELTA + 1)]; |
Joe Young | 3ca43bf | 2017-10-06 15:12:46 -0700 | [diff] [blame] | 154 | |
Debargha Mukherjee | 6147b1b | 2017-11-08 08:31:09 -0800 | [diff] [blame] | 155 | aom_cdf_prob tx_size_cdf[MAX_TX_CATS][TX_SIZE_CONTEXTS] |
Thomas Davies | f3eb840 | 2017-02-20 18:20:20 +0000 | [diff] [blame] | 156 | [CDF_SIZE(MAX_TX_DEPTH + 1)]; |
Thomas Davies | d6ee8a8 | 2017-03-02 14:42:50 +0000 | [diff] [blame] | 157 | aom_cdf_prob delta_q_cdf[CDF_SIZE(DELTA_Q_PROBS + 1)]; |
Cheng Chen | 880166a | 2017-10-02 17:48:48 -0700 | [diff] [blame] | 158 | aom_cdf_prob delta_lf_multi_cdf[FRAME_LF_COUNT][CDF_SIZE(DELTA_LF_PROBS + 1)]; |
Cheng Chen | 880166a | 2017-10-02 17:48:48 -0700 | [diff] [blame] | 159 | aom_cdf_prob delta_lf_cdf[CDF_SIZE(DELTA_LF_PROBS + 1)]; |
Thomas Davies | b1bedf5 | 2017-03-17 14:03:28 +0000 | [diff] [blame] | 160 | aom_cdf_prob intra_ext_tx_cdf[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES] |
| 161 | [CDF_SIZE(TX_TYPES)]; |
| 162 | aom_cdf_prob inter_ext_tx_cdf[EXT_TX_SETS_INTER][EXT_TX_SIZES] |
| 163 | [CDF_SIZE(TX_TYPES)]; |
David Michael Barr | f6eaa15 | 2017-07-19 19:42:28 +0900 | [diff] [blame] | 164 | aom_cdf_prob cfl_sign_cdf[CDF_SIZE(CFL_JOINT_SIGNS)]; |
| 165 | aom_cdf_prob cfl_alpha_cdf[CFL_ALPHA_CONTEXTS][CDF_SIZE(CFL_ALPHABET_SIZE)]; |
Hui Su | dc54be6 | 2018-03-14 19:14:28 -0700 | [diff] [blame] | 166 | int initialized; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 167 | } FRAME_CONTEXT; |
| 168 | |
Hui Su | 0d9888b | 2017-10-03 10:17:20 -0700 | [diff] [blame] | 169 | static const int av1_ext_tx_ind[EXT_TX_SET_TYPES][TX_TYPES] = { |
Johann | 6b41d4d | 2018-02-08 14:32:53 -0800 | [diff] [blame] | 170 | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 171 | { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 172 | { 1, 3, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 173 | { 1, 5, 6, 4, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0 }, |
Johann | 6b41d4d | 2018-02-08 14:32:53 -0800 | [diff] [blame] | 174 | { 3, 4, 5, 8, 6, 7, 9, 10, 11, 0, 1, 2, 0, 0, 0, 0 }, |
| 175 | { 7, 8, 9, 12, 10, 11, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6 }, |
Hui Su | 0d9888b | 2017-10-03 10:17:20 -0700 | [diff] [blame] | 176 | }; |
| 177 | |
| 178 | static const int av1_ext_tx_inv[EXT_TX_SET_TYPES][TX_TYPES] = { |
Johann | 6b41d4d | 2018-02-08 14:32:53 -0800 | [diff] [blame] | 179 | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 180 | { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 181 | { 9, 0, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 182 | { 9, 0, 10, 11, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
Johann | 6b41d4d | 2018-02-08 14:32:53 -0800 | [diff] [blame] | 183 | { 9, 10, 11, 0, 1, 2, 4, 5, 3, 6, 7, 8, 0, 0, 0, 0 }, |
| 184 | { 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 4, 5, 3, 6, 7, 8 }, |
Hui Su | 0d9888b | 2017-10-03 10:17:20 -0700 | [diff] [blame] | 185 | }; |
Thomas Davies | b1bedf5 | 2017-03-17 14:03:28 +0000 | [diff] [blame] | 186 | |
Cheng Chen | 7d089ae | 2018-03-15 19:11:03 -0700 | [diff] [blame] | 187 | void av1_set_default_ref_deltas(int8_t *ref_deltas); |
| 188 | void av1_set_default_mode_deltas(int8_t *mode_deltas); |
Hui Su | 3694c83 | 2017-11-10 14:15:58 -0800 | [diff] [blame] | 189 | void av1_setup_frame_contexts(struct AV1Common *cm); |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 190 | void av1_setup_past_independence(struct AV1Common *cm); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 191 | |
Wan-Teh Chang | fdeefec | 2018-07-31 17:23:38 -0700 | [diff] [blame] | 192 | // Returns (int)ceil(log2(n)). |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 193 | static INLINE int av1_ceil_log2(int n) { |
Hui Su | ff3b2fb | 2018-03-16 13:00:30 -0700 | [diff] [blame] | 194 | if (n < 2) return 0; |
Harish Mahendrakar | 8a657a6 | 2023-10-07 03:18:46 +0000 | [diff] [blame] | 195 | int i = 1; |
| 196 | unsigned int p = 2; |
| 197 | while (p < (unsigned int)n) { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 198 | i++; |
| 199 | p = p << 1; |
| 200 | } |
| 201 | return i; |
| 202 | } |
| 203 | |
Urvang Joshi | 56ba91b | 2017-01-10 13:22:09 -0800 | [diff] [blame] | 204 | // Returns the context for palette color index at row 'r' and column 'c', |
| 205 | // along with the 'color_order' of neighbors and the 'color_idx'. |
Urvang Joshi | 199a2f4 | 2017-01-23 15:02:07 -0800 | [diff] [blame] | 206 | // The 'color_map' is a 2D array with the given 'stride'. |
Urvang Joshi | 23a6111 | 2017-01-30 14:59:27 -0800 | [diff] [blame] | 207 | int av1_get_palette_color_index_context(const uint8_t *color_map, int stride, |
| 208 | int r, int c, int palette_size, |
| 209 | uint8_t *color_order, int *color_idx); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 210 | |
Wan-Teh Chang | e49f983 | 2022-11-25 15:09:32 -0800 | [diff] [blame] | 211 | extern const int |
| 212 | av1_palette_color_index_context_lookup[MAX_COLOR_CONTEXT_HASH + 1]; |
chiyotsai | b0d2408 | 2020-04-16 17:51:27 -0700 | [diff] [blame] | 213 | |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 214 | #ifdef __cplusplus |
| 215 | } // extern "C" |
| 216 | #endif |
| 217 | |
James Zern | e1cbb13 | 2018-08-22 14:10:36 -0700 | [diff] [blame] | 218 | #endif // AOM_AV1_COMMON_ENTROPYMODE_H_ |