Palette code: add comments and rename some variables.
- Added comments for some tables and #defines for clarity.
- Renamed some variables to ensure we use "color_index" instead of
"color" for palette color index related variables.
Change-Id: Ica95a26e0f171a41a3259c8e6b3b891b8cd10151
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 108e43d..688fc72 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -776,6 +776,9 @@
};
#if CONFIG_PALETTE
+
+// Tree to code palette size (number of colors in a palette) and the
+// corresponding probabilities for Y and UV planes.
const aom_tree_index av1_palette_size_tree[TREE_SIZE(PALETTE_SIZES)] = {
-TWO_COLORS, 2, -THREE_COLORS, 4, -FOUR_COLORS, 6,
-FIVE_COLORS, 8, -SIX_COLORS, 10, -SEVEN_COLORS, -EIGHT_COLORS,
@@ -808,6 +811,9 @@
#endif // CONFIG_EXT_PARTITION
};
+// When palette mode is enabled, following probability tables indicate the
+// probabilities to code the "is_palette" bit (i.e. the bit that indicates
+// if this block uses palette mode or DC_PRED mode).
const aom_prob
av1_default_palette_y_mode_prob[PALETTE_BLOCK_SIZES]
[PALETTE_Y_MODE_CONTEXTS] = {
@@ -822,10 +828,15 @@
#endif // CONFIG_EXT_PARTITION
};
-const aom_prob av1_default_palette_uv_mode_prob[2] = { 253, 229 };
+const aom_prob av1_default_palette_uv_mode_prob[PALETTE_UV_MODE_CONTEXTS] = {
+ 253, 229
+};
+// Trees to code palette color indices (for various palette sizes), and the
+// corresponding probability tables for Y and UV planes.
const aom_tree_index
- av1_palette_color_tree[PALETTE_MAX_SIZE - 1][TREE_SIZE(PALETTE_COLORS)] = {
+ av1_palette_color_index_tree[PALETTE_MAX_SIZE -
+ 1][TREE_SIZE(PALETTE_COLORS)] = {
{ // 2 colors
-PALETTE_COLOR_ONE, -PALETTE_COLOR_TWO },
{ // 3 colors
@@ -852,8 +863,8 @@
// Note: Has to be non-zero to avoid any asserts triggering.
#define UNUSED_PROB 128
-const aom_prob av1_default_palette_y_color_prob
- [PALETTE_MAX_SIZE - 1][PALETTE_COLOR_CONTEXTS][PALETTE_COLORS - 1] = {
+const aom_prob av1_default_palette_y_color_index_prob
+ [PALETTE_MAX_SIZE - 1][PALETTE_COLOR_INDEX_CONTEXTS][PALETTE_COLORS - 1] = {
{
// 2 colors
{ 231, UNUSED_PROB, UNUSED_PROB, UNUSED_PROB, UNUSED_PROB,
@@ -922,8 +933,8 @@
},
};
-const aom_prob av1_default_palette_uv_color_prob
- [PALETTE_MAX_SIZE - 1][PALETTE_COLOR_CONTEXTS][PALETTE_COLORS - 1] = {
+const aom_prob av1_default_palette_uv_color_index_prob
+ [PALETTE_MAX_SIZE - 1][PALETTE_COLOR_INDEX_CONTEXTS][PALETTE_COLORS - 1] = {
{
// 2 colors
{ 233, UNUSED_PROB, UNUSED_PROB, UNUSED_PROB, UNUSED_PROB,
@@ -996,9 +1007,9 @@
#define MAX_COLOR_CONTEXT_HASH 8
// Negative values are invalid
-static const int palette_color_context_lookup[MAX_COLOR_CONTEXT_HASH + 1] = {
- -1, -1, 0, -1, -1, 4, 3, 2, 1
-};
+static const int palette_color_index_context_lookup[MAX_COLOR_CONTEXT_HASH +
+ 1] = { -1, -1, 0, -1, -1,
+ 4, 3, 2, 1 };
#endif // CONFIG_PALETTE
@@ -1064,10 +1075,10 @@
#endif // CONFIG_LOOP_RESTORATION
#if CONFIG_PALETTE
-#define NUM_PALETTE_NEIGHBORS 3
-int av1_get_palette_color_context(const uint8_t *color_map, int stride, int r,
- int c, int palette_size, uint8_t *color_order,
- int *color_idx) {
+#define NUM_PALETTE_NEIGHBORS 3 // left, top-left and top.
+int av1_get_palette_color_index_context(const uint8_t *color_map, int stride,
+ int r, int c, int palette_size,
+ uint8_t *color_order, int *color_idx) {
int i;
// The +10 below should not be needed. But we get a warning "array subscript
// is above array bounds [-Werror=array-bounds]" without it, possibly due to
@@ -1075,8 +1086,8 @@
int scores[PALETTE_MAX_SIZE + 10];
const int weights[NUM_PALETTE_NEIGHBORS] = { 2, 1, 2 };
const int hash_multipliers[NUM_PALETTE_NEIGHBORS] = { 1, 2, 2 };
- int color_ctx_hash;
- int color_ctx;
+ int color_index_ctx_hash;
+ int color_index_ctx;
int color_neighbors[NUM_PALETTE_NEIGHBORS];
int inverse_color_order[PALETTE_MAX_SIZE];
assert(palette_size <= PALETTE_MAX_SIZE);
@@ -1128,22 +1139,22 @@
}
// Get hash value of context.
- color_ctx_hash = 0;
+ color_index_ctx_hash = 0;
for (i = 0; i < NUM_PALETTE_NEIGHBORS; ++i) {
- color_ctx_hash += scores[i] * hash_multipliers[i];
+ color_index_ctx_hash += scores[i] * hash_multipliers[i];
}
- assert(color_ctx_hash > 0);
- assert(color_ctx_hash <= MAX_COLOR_CONTEXT_HASH);
+ assert(color_index_ctx_hash > 0);
+ assert(color_index_ctx_hash <= MAX_COLOR_CONTEXT_HASH);
// Lookup context from hash.
- color_ctx = palette_color_context_lookup[color_ctx_hash];
- assert(color_ctx >= 0);
- assert(color_ctx < PALETTE_COLOR_CONTEXTS);
+ color_index_ctx = palette_color_index_context_lookup[color_index_ctx_hash];
+ assert(color_index_ctx >= 0);
+ assert(color_index_ctx < PALETTE_COLOR_INDEX_CONTEXTS);
if (color_idx != NULL) {
*color_idx = inverse_color_order[color_map[r * stride + c]];
}
- return color_ctx;
+ return color_index_ctx;
}
#undef NUM_PALETTE_NEIGHBORS
#undef MAX_COLOR_CONTEXT_HASH
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 625eddd..ca84256 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -32,10 +32,32 @@
#endif // CONFIG_EXT_INTER
#if CONFIG_PALETTE
-#define PALETTE_COLOR_CONTEXTS 5
+// Number of possible contexts for a color index.
+// As can be seen from av1_get_palette_color_index_context(), the possible
+// contexts are (2,0,0), (2,2,1), (3,2,0), (4,1,0), (5,0,0). These are mapped to
+// a value from 0 to 4 using 'palette_color_index_context_lookup' table.
+#define PALETTE_COLOR_INDEX_CONTEXTS 5
+
+// Maximum number of colors in a palette.
#define PALETTE_MAX_SIZE 8
+
+// Palette mode is available for block sizes >= 8x8.
#define PALETTE_BLOCK_SIZES (BLOCK_LARGEST - BLOCK_8X8 + 1)
+
+// Palette Y mode context for a block is determined by number of neighboring
+// blocks (top and/or left) using a palette for Y plane. So, possible Y mode'
+// context values are:
+// 0 if neither left nor top block uses palette for Y plane,
+// 1 if exactly one of left or top block uses palette for Y plane, and
+// 2 if both left and top blocks use palette for Y plane.
#define PALETTE_Y_MODE_CONTEXTS 3
+
+// Palette UV mode context for a block is determined by whether this block uses
+// palette for the Y plane. So, possible values are:
+// 0 if this block doesn't use palette for Y plane.
+// 1 if this block uses palette for Y plane (i.e. Y palette size > 0).
+#define PALETTE_UV_MODE_CONTEXTS 2
+
#define PALETTE_MAX_BLOCK_SIZE (64 * 64)
#endif // CONFIG_PALETTE
@@ -344,17 +366,20 @@
#if CONFIG_PALETTE
extern const aom_prob av1_default_palette_y_mode_prob[PALETTE_BLOCK_SIZES]
[PALETTE_Y_MODE_CONTEXTS];
-extern const aom_prob av1_default_palette_uv_mode_prob[2];
+extern const aom_prob
+ av1_default_palette_uv_mode_prob[PALETTE_UV_MODE_CONTEXTS];
extern const aom_prob av1_default_palette_y_size_prob[PALETTE_BLOCK_SIZES]
[PALETTE_SIZES - 1];
extern const aom_prob av1_default_palette_uv_size_prob[PALETTE_BLOCK_SIZES]
[PALETTE_SIZES - 1];
-extern const aom_prob av1_default_palette_y_color_prob[PALETTE_MAX_SIZE - 1]
- [PALETTE_COLOR_CONTEXTS]
- [PALETTE_COLORS - 1];
-extern const aom_prob av1_default_palette_uv_color_prob[PALETTE_MAX_SIZE - 1]
- [PALETTE_COLOR_CONTEXTS]
- [PALETTE_COLORS - 1];
+extern const aom_prob
+ av1_default_palette_y_color_index_prob[PALETTE_MAX_SIZE - 1]
+ [PALETTE_COLOR_INDEX_CONTEXTS]
+ [PALETTE_COLORS - 1];
+extern const aom_prob
+ av1_default_palette_uv_color_index_prob[PALETTE_MAX_SIZE - 1]
+ [PALETTE_COLOR_INDEX_CONTEXTS]
+ [PALETTE_COLORS - 1];
#endif // CONFIG_PALETTE
extern const aom_tree_index av1_intra_mode_tree[TREE_SIZE(INTRA_MODES)];
@@ -381,8 +406,9 @@
av1_switchable_interp_tree[TREE_SIZE(SWITCHABLE_FILTERS)];
#if CONFIG_PALETTE
extern const aom_tree_index av1_palette_size_tree[TREE_SIZE(PALETTE_SIZES)];
-extern const aom_tree_index av1_palette_color_tree[PALETTE_MAX_SIZE - 1]
- [TREE_SIZE(PALETTE_COLORS)];
+extern const aom_tree_index
+ av1_palette_color_index_tree[PALETTE_MAX_SIZE - 1]
+ [TREE_SIZE(PALETTE_COLORS)];
#endif // CONFIG_PALETTE
extern const aom_tree_index av1_tx_size_tree[MAX_TX_DEPTH][TREE_SIZE(TX_SIZES)];
#if CONFIG_EXT_INTRA
@@ -439,9 +465,9 @@
// Returns the context for palette color index at row 'r' and column 'c',
// along with the 'color_order' of neighbors and the 'color_idx'.
// The 'color_map' is a 2D array with the given 'stride'.
-int av1_get_palette_color_context(const uint8_t *color_map, int stride, int r,
- int c, int palette_size, uint8_t *color_order,
- int *color_idx);
+int av1_get_palette_color_index_context(const uint8_t *color_map, int stride,
+ int r, int c, int palette_size,
+ uint8_t *color_order, int *color_idx);
#endif // CONFIG_PALETTE
#ifdef __cplusplus
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index f5dd86f..6751434 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -574,17 +574,20 @@
const MODE_INFO *const above_mi = xd->above_mi;
const MODE_INFO *const left_mi = xd->left_mi;
const BLOCK_SIZE bsize = mbmi->sb_type;
- int i, n, palette_ctx = 0;
+ int i, n;
PALETTE_MODE_INFO *const pmi = &mbmi->palette_mode_info;
if (mbmi->mode == DC_PRED) {
+ int palette_y_mode_ctx = 0;
if (above_mi)
- palette_ctx += (above_mi->mbmi.palette_mode_info.palette_size[0] > 0);
+ palette_y_mode_ctx +=
+ (above_mi->mbmi.palette_mode_info.palette_size[0] > 0);
if (left_mi)
- palette_ctx += (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
- if (aom_read(
- r, av1_default_palette_y_mode_prob[bsize - BLOCK_8X8][palette_ctx],
- ACCT_STR)) {
+ palette_y_mode_ctx +=
+ (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
+ if (aom_read(r, av1_default_palette_y_mode_prob[bsize - BLOCK_8X8]
+ [palette_y_mode_ctx],
+ ACCT_STR)) {
pmi->palette_size[0] =
aom_read_tree(r, av1_palette_size_tree,
av1_default_palette_y_size_prob[bsize - BLOCK_8X8],
@@ -600,7 +603,8 @@
}
if (mbmi->uv_mode == DC_PRED) {
- if (aom_read(r, av1_default_palette_uv_mode_prob[pmi->palette_size[0] > 0],
+ const int palette_uv_mode_ctx = (pmi->palette_size[0] > 0);
+ if (aom_read(r, av1_default_palette_uv_mode_prob[palette_uv_mode_ctx],
ACCT_STR)) {
pmi->palette_size[1] =
aom_read_tree(r, av1_palette_size_tree,
diff --git a/av1/decoder/detokenize.c b/av1/decoder/detokenize.c
index dd1964b..0003c86 100644
--- a/av1/decoder/detokenize.c
+++ b/av1/decoder/detokenize.c
@@ -318,9 +318,10 @@
const int n = mbmi->palette_mode_info.palette_size[plane];
int i, j;
uint8_t *const color_map = xd->plane[plane].color_index_map;
- const aom_prob(*const prob)[PALETTE_COLOR_CONTEXTS][PALETTE_COLORS - 1] =
- plane ? av1_default_palette_uv_color_prob
- : av1_default_palette_y_color_prob;
+ const aom_prob(*const prob)[PALETTE_COLOR_INDEX_CONTEXTS]
+ [PALETTE_COLORS - 1] =
+ plane ? av1_default_palette_uv_color_index_prob
+ : av1_default_palette_y_color_index_prob;
int plane_block_width, plane_block_height, rows, cols;
av1_get_block_dimensions(mbmi->sb_type, plane, xd, &plane_block_width,
&plane_block_height, &rows, &cols);
@@ -328,10 +329,11 @@
for (i = 0; i < rows; ++i) {
for (j = (i == 0 ? 1 : 0); j < cols; ++j) {
- const int color_ctx = av1_get_palette_color_context(
+ const int color_ctx = av1_get_palette_color_index_context(
color_map, plane_block_width, i, j, n, color_order, NULL);
- const int color_idx = aom_read_tree(r, av1_palette_color_tree[n - 2],
- prob[n - 2][color_ctx], ACCT_STR);
+ const int color_idx =
+ aom_read_tree(r, av1_palette_color_index_tree[n - 2],
+ prob[n - 2][color_ctx], ACCT_STR);
assert(color_idx >= 0 && color_idx < n);
color_map[i * plane_block_width + j] = color_order[color_idx];
}
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 7275ef3..b4545fb 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -77,8 +77,8 @@
#endif // CONFIG_EXT_INTER
#if CONFIG_PALETTE
static struct av1_token palette_size_encodings[PALETTE_MAX_SIZE - 1];
-static struct av1_token palette_color_encodings[PALETTE_MAX_SIZE - 1]
- [PALETTE_MAX_SIZE];
+static struct av1_token palette_color_index_encodings[PALETTE_MAX_SIZE - 1]
+ [PALETTE_MAX_SIZE];
#endif // CONFIG_PALETTE
static const struct av1_token tx_size_encodings[MAX_TX_DEPTH][TX_SIZES] = {
{ { 0, 1 }, { 1, 1 } }, // Max tx_size is 8X8
@@ -160,7 +160,8 @@
#if CONFIG_PALETTE
av1_tokens_from_tree(palette_size_encodings, av1_palette_size_tree);
for (s = 0; s < PALETTE_MAX_SIZE - 1; ++s) {
- av1_tokens_from_tree(palette_color_encodings[s], av1_palette_color_tree[s]);
+ av1_tokens_from_tree(palette_color_index_encodings[s],
+ av1_palette_color_index_tree[s]);
}
#endif // CONFIG_PALETTE
@@ -726,8 +727,8 @@
const TOKENEXTRA *p = *tp;
for (i = 0; i < num; ++i) {
- av1_write_token(w, av1_palette_color_tree[n - 2], p->context_tree,
- &palette_color_encodings[n - 2][p->token]);
+ av1_write_token(w, av1_palette_color_index_tree[n - 2], p->context_tree,
+ &palette_color_index_encodings[n - 2][p->token]);
++p;
}
@@ -1137,17 +1138,19 @@
const MODE_INFO *const left_mi = xd->left_mi;
const BLOCK_SIZE bsize = mbmi->sb_type;
const PALETTE_MODE_INFO *const pmi = &mbmi->palette_mode_info;
- int palette_ctx = 0;
- int n, i;
+ int i;
if (mbmi->mode == DC_PRED) {
- n = pmi->palette_size[0];
+ const int n = pmi->palette_size[0];
+ int palette_y_mode_ctx = 0;
if (above_mi)
- palette_ctx += (above_mi->mbmi.palette_mode_info.palette_size[0] > 0);
+ palette_y_mode_ctx +=
+ (above_mi->mbmi.palette_mode_info.palette_size[0] > 0);
if (left_mi)
- palette_ctx += (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
- aom_write(w, n > 0,
- av1_default_palette_y_mode_prob[bsize - BLOCK_8X8][palette_ctx]);
+ palette_y_mode_ctx +=
+ (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
+ aom_write(w, n > 0, av1_default_palette_y_mode_prob[bsize - BLOCK_8X8]
+ [palette_y_mode_ctx]);
if (n > 0) {
av1_write_token(w, av1_palette_size_tree,
av1_default_palette_y_size_prob[bsize - BLOCK_8X8],
@@ -1159,9 +1162,9 @@
}
if (mbmi->uv_mode == DC_PRED) {
- n = pmi->palette_size[1];
- aom_write(w, n > 0,
- av1_default_palette_uv_mode_prob[pmi->palette_size[0] > 0]);
+ const int n = pmi->palette_size[1];
+ const int palette_uv_mode_ctx = (pmi->palette_size[0] > 0);
+ aom_write(w, n > 0, av1_default_palette_uv_mode_prob[palette_uv_mode_ctx]);
if (n > 0) {
av1_write_token(w, av1_palette_size_tree,
av1_default_palette_uv_size_prob[bsize - BLOCK_8X8],
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 81eba9f..1bcb7b8 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -568,9 +568,9 @@
#if CONFIG_PALETTE
int palette_y_size_cost[PALETTE_BLOCK_SIZES][PALETTE_SIZES];
int palette_uv_size_cost[PALETTE_BLOCK_SIZES][PALETTE_SIZES];
- int palette_y_color_cost[PALETTE_MAX_SIZE - 1][PALETTE_COLOR_CONTEXTS]
+ int palette_y_color_cost[PALETTE_MAX_SIZE - 1][PALETTE_COLOR_INDEX_CONTEXTS]
[PALETTE_COLORS];
- int palette_uv_color_cost[PALETTE_MAX_SIZE - 1][PALETTE_COLOR_CONTEXTS]
+ int palette_uv_color_cost[PALETTE_MAX_SIZE - 1][PALETTE_COLOR_INDEX_CONTEXTS]
[PALETTE_COLORS];
#endif // CONFIG_PALETTE
int tx_size_cost[TX_SIZES - 1][TX_SIZE_CONTEXTS][TX_SIZES];
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index e13f009..724912a 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -102,13 +102,13 @@
}
for (i = 0; i < PALETTE_MAX_SIZE - 1; ++i) {
- for (j = 0; j < PALETTE_COLOR_CONTEXTS; ++j) {
+ for (j = 0; j < PALETTE_COLOR_INDEX_CONTEXTS; ++j) {
av1_cost_tokens(cpi->palette_y_color_cost[i][j],
- av1_default_palette_y_color_prob[i][j],
- av1_palette_color_tree[i]);
+ av1_default_palette_y_color_index_prob[i][j],
+ av1_palette_color_index_tree[i]);
av1_cost_tokens(cpi->palette_uv_color_cost[i][j],
- av1_default_palette_uv_color_prob[i][j],
- av1_palette_color_tree[i]);
+ av1_default_palette_uv_color_index_prob[i][j],
+ av1_palette_color_index_tree[i]);
}
}
#endif // CONFIG_PALETTE
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 13230e0..1574422 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2428,7 +2428,7 @@
for (i = 0; i < rows; ++i) {
for (j = (i == 0 ? 1 : 0); j < cols; ++j) {
int color_idx;
- const int color_ctx = av1_get_palette_color_context(
+ const int color_ctx = av1_get_palette_color_index_context(
color_map, block_width, i, j, k, color_order, &color_idx);
assert(color_idx >= 0 && color_idx < k);
palette_mode_cost +=
@@ -3511,7 +3511,7 @@
cpi->common.allow_screen_content_tools
? x->palette_buffer->best_palette_color_map
: NULL;
- int palette_ctx = 0;
+ int palette_y_mode_ctx = 0;
#endif // CONFIG_PALETTE
const MODE_INFO *above_mi = xd->above_mi;
const MODE_INFO *left_mi = xd->left_mi;
@@ -3544,9 +3544,10 @@
#if CONFIG_PALETTE
pmi->palette_size[0] = 0;
if (above_mi)
- palette_ctx += (above_mi->mbmi.palette_mode_info.palette_size[0] > 0);
+ palette_y_mode_ctx +=
+ (above_mi->mbmi.palette_mode_info.palette_size[0] > 0);
if (left_mi)
- palette_ctx += (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
+ palette_y_mode_ctx += (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
#endif // CONFIG_PALETTE
if (cpi->sf.tx_type_search.fast_intra_tx_type_search)
@@ -3608,8 +3609,10 @@
}
#if CONFIG_PALETTE
if (cpi->common.allow_screen_content_tools && mbmi->mode == DC_PRED)
- this_rate += av1_cost_bit(
- av1_default_palette_y_mode_prob[bsize - BLOCK_8X8][palette_ctx], 0);
+ this_rate +=
+ av1_cost_bit(av1_default_palette_y_mode_prob[bsize - BLOCK_8X8]
+ [palette_y_mode_ctx],
+ 0);
#endif // CONFIG_PALETTE
#if CONFIG_FILTER_INTRA
if (mbmi->mode == DC_PRED)
@@ -3658,10 +3661,10 @@
#if CONFIG_PALETTE
if (cpi->common.allow_screen_content_tools) {
- rd_pick_palette_intra_sby(cpi, x, bsize, palette_ctx, bmode_costs[DC_PRED],
- &best_mbmi, best_palette_color_map, &best_rd,
- &best_model_rd, rate, rate_tokenonly, distortion,
- skippable);
+ rd_pick_palette_intra_sby(cpi, x, bsize, palette_y_mode_ctx,
+ bmode_costs[DC_PRED], &best_mbmi,
+ best_palette_color_map, &best_rd, &best_model_rd,
+ rate, rate_tokenonly, distortion, skippable);
}
#endif // CONFIG_PALETTE
@@ -4510,7 +4513,7 @@
for (i = 0; i < rows; ++i) {
for (j = (i == 0 ? 1 : 0); j < cols; ++j) {
int color_idx;
- const int color_ctx = av1_get_palette_color_context(
+ const int color_ctx = av1_get_palette_color_index_context(
color_map, plane_block_width, i, j, n, color_order, &color_idx);
assert(color_idx >= 0 && color_idx < n);
this_rate += cpi->palette_uv_color_cost[n - 2][color_ctx][color_idx];
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index b7ac41d..9823f84 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -397,9 +397,11 @@
int i, j;
int this_rate = 0;
uint8_t color_order[PALETTE_MAX_SIZE];
- const aom_prob(*const probs)[PALETTE_COLOR_CONTEXTS][PALETTE_COLORS - 1] =
- plane == 0 ? av1_default_palette_y_color_prob
- : av1_default_palette_uv_color_prob;
+ const aom_prob(*const probs)[PALETTE_COLOR_INDEX_CONTEXTS]
+ [PALETTE_COLORS - 1] =
+ plane == 0
+ ? av1_default_palette_y_color_index_prob
+ : av1_default_palette_uv_color_index_prob;
int plane_block_width, rows, cols;
av1_get_block_dimensions(bsize, plane, xd, &plane_block_width, NULL, &rows,
&cols);
@@ -408,7 +410,7 @@
for (i = 0; i < rows; ++i) {
for (j = (i == 0 ? 1 : 0); j < cols; ++j) {
int color_new_idx;
- const int color_ctx = av1_get_palette_color_context(
+ const int color_ctx = av1_get_palette_color_index_context(
color_map, plane_block_width, i, j, n, color_order, &color_new_idx);
assert(color_new_idx >= 0 && color_new_idx < n);
if (dry_run == DRY_RUN_COSTCOEFFS)