1
0
Fork 0

Merging upstream version 1.2.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-17 19:17:21 +01:00
parent 9147dd9be8
commit 27d31fb65e
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
17 changed files with 197 additions and 125 deletions

View file

@ -393,7 +393,10 @@ static inline void Lee_update_prices( struct Len_encoder * const len_encoder,
pps[len] = tmp + price0( len_encoder->choice2 ) +
price_symbol( len_encoder->bm_mid[pos_state], len - len_low_symbols, len_mid_bits );
for( ; len < len_encoder->len_symbols; ++len )
pps[len] = tmp + price1( len_encoder->choice2 ) +
/* using 4 slots per value makes "Lee_price" faster */
len_encoder->prices[3][len] = len_encoder->prices[2][len] =
len_encoder->prices[1][len] = len_encoder->prices[0][len] =
tmp + price1( len_encoder->choice2 ) +
price_symbol( len_encoder->bm_high, len - len_low_symbols - len_mid_symbols, len_high_bits );
len_encoder->counters[pos_state] = len_encoder->len_symbols;
}
@ -430,7 +433,7 @@ struct Literal_encoder
Bit_model bm_literal[1<<literal_context_bits][0x300];
};
static inline int Lie_state( const int prev_byte )
static inline int Lie_state( const uint8_t prev_byte )
{ return ( prev_byte >> ( 8 - literal_context_bits ) ); }
static inline void Lie_init( struct Literal_encoder * const literal_encoder )
@ -558,22 +561,24 @@ static inline int LZe_price_rep( struct LZ_encoder * const encoder, const int re
return price;
}
static inline int LZe_price_dis( struct LZ_encoder * const encoder,
const int dis, const int dis_state )
{
if( dis < modeled_distances )
return encoder->dis_prices[dis_state][dis];
else
return encoder->dis_slot_prices[dis_state][get_slot( dis )] +
encoder->align_prices[dis & (dis_align_size - 1)];
}
static inline int LZe_price_pair( struct LZ_encoder * const encoder,
const int dis, const int len,
const int pos_state )
{
const int dis_state = get_dis_state( len );
int price;
if( len <= min_match_len && dis >= modeled_distances )
return infinite_price;
price = Lee_price( &encoder->len_encoder, len, pos_state );
if( dis < modeled_distances )
price += encoder->dis_prices[dis_state][dis];
else
price += encoder->dis_slot_prices[dis_state][get_slot( dis )] +
encoder->align_prices[dis & (dis_align_size - 1)];
return price;
return Lee_price( &encoder->len_encoder, len, pos_state ) +
LZe_price_dis( encoder, dis, get_dis_state( len ) );
}
static inline void LZe_encode_pair( struct LZ_encoder * const encoder,