Change PVQ's skip_dir symbols to use dyadic and ec_adapt adaptation

Change-Id: Idfe23c1aef5d080567094af6e87d65bda3835ae5
This commit is contained in:
Yushin Cho 2017-02-21 14:59:46 -08:00
Родитель b9802238ea
Коммит ac4535c80c
5 изменённых файлов: 8 добавлений и 11 удалений

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

@ -208,8 +208,7 @@ void od_adapt_pvq_ctx_reset(od_pvq_adapt_ctx *state, int is_keyframe) {
}
state->pvq_gaintheta_increment = 128;
OD_CDFS_INIT(state->pvq_gaintheta_cdf, state->pvq_gaintheta_increment >> 2);
state->pvq_skip_dir_increment = 128;
OD_CDFS_INIT(state->pvq_skip_dir_cdf, state->pvq_skip_dir_increment >> 2);
OD_CDFS_INIT_Q15(state->pvq_skip_dir_cdf);
OD_CDFS_INIT(ctx->pvq_split_cdf, 0);
}

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

@ -133,8 +133,7 @@ struct od_pvq_adapt_ctx {
int pvq_exg[OD_NPLANES_MAX][OD_TXSIZES][PVQ_MAX_PARTITIONS];
int pvq_gaintheta_increment;
uint16_t pvq_gaintheta_cdf[2*OD_TXSIZES*PVQ_MAX_PARTITIONS][16];
int pvq_skip_dir_increment;
uint16_t pvq_skip_dir_cdf[2*(OD_TXSIZES-1)][7];
uint16_t pvq_skip_dir_cdf[2*(OD_TXSIZES-1)][CDF_SIZE(7)];
};
typedef struct od_qm_entry {

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

@ -370,9 +370,9 @@ void od_pvq_decode(daala_dec_ctx *dec,
if (i == 0 && !skip_rest[0] && bs > 0) {
int skip_dir;
int j;
skip_dir = aom_decode_cdf_adapt(dec->r,
skip_dir = aom_read_symbol(dec->r,
&dec->state.adapt.pvq.pvq_skip_dir_cdf[(pli != 0) + 2*(bs - 1)][0], 7,
dec->state.adapt.pvq.pvq_skip_dir_increment, "pvq:skiprest");
"pvq:skiprest");
for (j = 0; j < 3; j++) skip_rest[j] = !!(skip_dir & (1 << j));
}
}

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

@ -1076,11 +1076,11 @@ static void pack_pvq_tokens(aom_writer *w, MACROBLOCK *const x,
encode_flip, flip);
}
if (i == 0 && !pvq->skip_rest && pvq->bs > 0) {
aom_encode_cdf_adapt(
aom_write_symbol(
w, pvq->skip_dir,
&adapt->pvq
.pvq_skip_dir_cdf[(plane != 0) + 2 * (pvq->bs - 1)][0],
7, adapt->pvq.pvq_skip_dir_increment);
7);
}
}
}

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

@ -932,9 +932,8 @@ PVQ_SKIP_TYPE od_pvq_encode(daala_enc_ctx *enc,
skip_rest, encode_flip, flip);
}
if (i == 0 && !skip_rest && bs > 0) {
aom_encode_cdf_adapt(&enc->w, skip_dir,
&enc->state.adapt.pvq.pvq_skip_dir_cdf[(pli != 0) + 2*(bs - 1)][0], 7,
enc->state.adapt.pvq.pvq_skip_dir_increment);
aom_write_symbol(&enc->w, skip_dir,
&enc->state.adapt.pvq.pvq_skip_dir_cdf[(pli != 0) + 2*(bs - 1)][0], 7);
}
if (encode_flip) cfl_encoded = 1;
}