lv_map_opt: remove extra ctx buffer Change-Id: I632a1f42eff2e41206d6023505c3c26dfc4698c2
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c index 37c5265..48ff8e4 100644 --- a/av1/encoder/encodetxb.c +++ b/av1/encoder/encodetxb.c
@@ -443,7 +443,7 @@ } } -static void gen_nz_ctx_arr(int (*nz_ctx_arr)[2], int(*nz_count_arr), +static void gen_nz_ctx_arr(int *nz_ctx_arr, int *nz_count_arr, const tran_low_t *qcoeff, int bwl, int eob, const SCAN_ORDER *scan_order) { const int16_t *scan = scan_order->scan; @@ -451,12 +451,12 @@ for (int c = 0; c < eob; ++c) { const int coeff_idx = scan[c]; // raster order const int count = nz_count_arr[coeff_idx]; - nz_ctx_arr[coeff_idx][0] = + nz_ctx_arr[coeff_idx] = get_nz_map_ctx_from_count(count, qcoeff, coeff_idx, bwl, iscan); } } -static void gen_base_ctx_arr(int (*base_ctx_arr)[MAX_TX_SQUARE][2], +static void gen_base_ctx_arr(int (*base_ctx_arr)[MAX_TX_SQUARE], int (*base_count_arr)[MAX_TX_SQUARE], int (*base_mag_arr)[2], const tran_low_t *qcoeff, int stride, int eob, const int16_t *scan) { @@ -470,7 +470,7 @@ const int count = base_count_arr[i][coeff_idx]; const int *mag = base_mag_arr[coeff_idx]; const int level = i + 1; - base_ctx_arr[i][coeff_idx][0] = + base_ctx_arr[i][coeff_idx] = get_base_ctx_from_count_mag(row, col, count, mag[0], level); } } @@ -497,7 +497,7 @@ } } -static void gen_br_ctx_arr(int (*br_ctx_arr)[2], const int *br_count_arr, +static void gen_br_ctx_arr(int *br_ctx_arr, const int *br_count_arr, int (*br_mag_arr)[2], const tran_low_t *qcoeff, int stride, int eob, const int16_t *scan) { (void)qcoeff; @@ -508,8 +508,7 @@ const int col = coeff_idx % stride; const int count = br_count_arr[coeff_idx]; const int *mag = br_mag_arr[coeff_idx]; - br_ctx_arr[coeff_idx][0] = - get_br_ctx_from_count_mag(row, col, count, mag[0]); + br_ctx_arr[coeff_idx] = get_br_ctx_from_count_mag(row, col, count, mag[0]); } } @@ -568,15 +567,15 @@ const TxbCache *txb_cache, const LV_MAP_COEFF_COST *txb_costs) { if (level == 0) { - const int ctx = txb_cache->nz_ctx_arr[coeff_idx][0]; + const int ctx = txb_cache->nz_ctx_arr[coeff_idx]; return txb_costs->nz_map_cost[ctx]; } else if (level >= 1 && level < 1 + NUM_BASE_LEVELS) { const int idx = level - 1; - const int ctx = txb_cache->base_ctx_arr[idx][coeff_idx][0]; + const int ctx = txb_cache->base_ctx_arr[idx][coeff_idx]; return txb_costs->base_cost[idx][ctx]; } else if (level >= 1 + NUM_BASE_LEVELS && level < 1 + NUM_BASE_LEVELS + COEFF_BASE_RANGE) { - const int ctx = txb_cache->br_ctx_arr[coeff_idx][0]; + const int ctx = txb_cache->br_ctx_arr[coeff_idx]; return txb_costs->lps_cost[ctx]; } else if (level >= 1 + NUM_BASE_LEVELS + COEFF_BASE_RANGE) { printf("get_level_prob does not support golomb\n"); @@ -671,7 +670,7 @@ if (update) { const int row = coeff_idx >> txb_info->bwl; const int col = coeff_idx - (row << txb_info->bwl); - const int ctx = txb_cache->br_ctx_arr[coeff_idx][0]; + const int ctx = txb_cache->br_ctx_arr[coeff_idx]; const int org_cost = get_br_cost(abs_qc, ctx, txb_costs->lps_cost[ctx]); const int new_ctx = get_br_ctx_from_count_mag(row, col, new_count, new_mag); @@ -709,7 +708,7 @@ if (update) { const int row = coeff_idx >> txb_info->bwl; const int col = coeff_idx - (row << txb_info->bwl); - const int ctx = txb_cache->base_ctx_arr[base_idx][coeff_idx][0]; + const int ctx = txb_cache->base_ctx_arr[base_idx][coeff_idx]; const int org_cost = get_base_cost( abs_qc, ctx, txb_costs->base_cost[base_idx][ctx], base_idx); @@ -744,7 +743,7 @@ const int new_ctx = get_nz_map_ctx_from_count( count - 1, txb_info->qcoeff, coeff_idx, txb_info->bwl, iscan); txb_info->qcoeff[nb_coeff_idx] = nb_coeff; - const int ctx = txb_cache->nz_ctx_arr[coeff_idx][0]; + const int ctx = txb_cache->nz_ctx_arr[coeff_idx]; const int is_nz = abs_qc > 0; const int org_cost = txb_costs->nz_map_cost[ctx][is_nz]; const int new_cost = txb_costs->nz_map_cost[new_ctx][is_nz]; @@ -936,7 +935,7 @@ if (qc != 0) { const int base_idx = 0; - const int ctx = txb_cache->base_ctx_arr[base_idx][coeff_idx][0]; + const int ctx = txb_cache->base_ctx_arr[base_idx][coeff_idx]; cost += get_base_cost(abs_qc, ctx, txb_costs->base_cost[base_idx][ctx], base_idx); if (scan_idx < txb_info->seg_eob) { @@ -1047,13 +1046,13 @@ assert(txb_cache->nz_count_arr[nb_coeff_idx] >= 0); } const int count = txb_cache->nz_count_arr[nb_coeff_idx]; - txb_cache->nz_ctx_arr[nb_coeff_idx][0] = get_nz_map_ctx_from_count( + txb_cache->nz_ctx_arr[nb_coeff_idx] = get_nz_map_ctx_from_count( count, txb_info->qcoeff, nb_coeff_idx, txb_info->bwl, iscan); // int ref_ctx = get_nz_map_ctx(txb_info->qcoeff, nb_coeff_idx, // txb_info->bwl, iscan); - // if (ref_ctx != txb_cache->nz_ctx_arr[nb_coeff_idx][0]) + // if (ref_ctx != txb_cache->nz_ctx_arr[nb_coeff_idx]) // printf("nz ctx %d ref_ctx %d\n", - // txb_cache->nz_ctx_arr[nb_coeff_idx][0], ref_ctx); + // txb_cache->nz_ctx_arr[nb_coeff_idx], ref_ctx); } } } @@ -1083,13 +1082,13 @@ assert(txb_cache->base_count_arr[base_idx][nb_coeff_idx] >= 0); } const int count = txb_cache->base_count_arr[base_idx][nb_coeff_idx]; - txb_cache->base_ctx_arr[base_idx][nb_coeff_idx][0] = + txb_cache->base_ctx_arr[base_idx][nb_coeff_idx] = get_base_ctx_from_count_mag(nb_row, nb_col, count, mag, level); // int ref_ctx = get_base_ctx(txb_info->qcoeff, nb_coeff_idx, // txb_info->bwl, level); - // if (ref_ctx != txb_cache->base_ctx_arr[base_idx][nb_coeff_idx][0]) { + // if (ref_ctx != txb_cache->base_ctx_arr[base_idx][nb_coeff_idx]) { // printf("base ctx %d ref_ctx %d\n", - // txb_cache->base_ctx_arr[base_idx][nb_coeff_idx][0], ref_ctx); + // txb_cache->base_ctx_arr[base_idx][nb_coeff_idx], ref_ctx); // } } } @@ -1117,13 +1116,13 @@ update_mag_arr(txb_cache->br_mag_arr[nb_coeff_idx], abs_qc); const int count = txb_cache->br_count_arr[nb_coeff_idx]; const int mag = get_mag_from_mag_arr(txb_cache->br_mag_arr[nb_coeff_idx]); - txb_cache->br_ctx_arr[nb_coeff_idx][0] = + txb_cache->br_ctx_arr[nb_coeff_idx] = get_br_ctx_from_count_mag(nb_row, nb_col, count, mag); // int ref_ctx = get_level_ctx(txb_info->qcoeff, nb_coeff_idx, // txb_info->bwl); - // if (ref_ctx != txb_cache->br_ctx_arr[nb_coeff_idx][0]) { + // if (ref_ctx != txb_cache->br_ctx_arr[nb_coeff_idx]) { // printf("base ctx %d ref_ctx %d\n", - // txb_cache->br_ctx_arr[nb_coeff_idx][0], ref_ctx); + // txb_cache->br_ctx_arr[nb_coeff_idx], ref_ctx); // } } }
diff --git a/av1/encoder/encodetxb.h b/av1/encoder/encodetxb.h index cbafe59..d49b1d8 100644 --- a/av1/encoder/encodetxb.h +++ b/av1/encoder/encodetxb.h
@@ -43,16 +43,16 @@ typedef struct TxbCache { int nz_count_arr[MAX_TX_SQUARE]; - int nz_ctx_arr[MAX_TX_SQUARE][2]; + int nz_ctx_arr[MAX_TX_SQUARE]; int base_count_arr[NUM_BASE_LEVELS][MAX_TX_SQUARE]; int base_mag_arr[MAX_TX_SQUARE] [2]; // [0]: max magnitude [1]: num of max magnitude - int base_ctx_arr[NUM_BASE_LEVELS][MAX_TX_SQUARE][2]; // [1]: not used + int base_ctx_arr[NUM_BASE_LEVELS][MAX_TX_SQUARE]; int br_count_arr[MAX_TX_SQUARE]; int br_mag_arr[MAX_TX_SQUARE] [2]; // [0]: max magnitude [1]: num of max magnitude - int br_ctx_arr[MAX_TX_SQUARE][2]; // [1]: not used + int br_ctx_arr[MAX_TX_SQUARE]; } TxbCache; typedef struct TxbProbs {