alternative way to write state/prob update

This commit is contained in:
2022-09-19 18:33:02 +02:00
parent 5c7aee046a
commit cc41feb5cd
3 changed files with 48 additions and 10 deletions

View File

@@ -32,17 +32,14 @@ int upkr_decode_bit(int context_index) {
int prob = upkr_probs[context_index];
int bit = (upkr_state & 255) < prob ? 1 : 0;
int tmp = prob;
if(!bit) {
tmp = 256 - tmp;
if(bit) {
upkr_state = prob * (upkr_state >> 8) + (upkr_state & 255);
prob += (256 - prob + 8) >> 4;
} else {
upkr_state = (256 - prob) * (upkr_state >> 8) + (upkr_state & 255) - prob;
prob -= (prob + 8) >> 4;
}
upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255);
tmp += (256 - tmp + 8) >> 4;
if(!bit) {
upkr_state -= prob;
tmp = 256 - tmp;
}
upkr_probs[context_index] = tmp;
upkr_probs[context_index] = prob;
return bit;
}