diff options
author | Clément Bœsch <u@pkh.me> | 2023-12-11 01:32:58 +0100 |
---|---|---|
committer | Clément Bœsch <u@pkh.me> | 2024-01-10 14:08:00 +0100 |
commit | 1832bd7838f7062201eacdbdda53821789d59c72 (patch) | |
tree | 697cddef43dc2e37ee6bcc9694c15be59b4b6d3d /libavcodec | |
parent | 3885d2493d283b9e368fa7d4fdd3e626874a7a61 (diff) | |
download | ffmpeg-1832bd7838f7062201eacdbdda53821789d59c72.tar.gz |
avcodec/proresenc_anatoliy: shuffle encode_codeword() code to match Kostya encoder
Code is functionally identical, it's just rename of variables, cosmetics
and branch logic shuffling.
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/proresenc_anatoliy.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c index f40e455e65..04f3ce8eff 100644 --- a/libavcodec/proresenc_anatoliy.c +++ b/libavcodec/proresenc_anatoliy.c @@ -226,31 +226,32 @@ static int int_from_list_or_default(void *ctx, const char *val_name, int val, return default_value; } -static void encode_codeword(PutBitContext *pb, int val, int codebook) +static void encode_codeword(PutBitContext *pb, int val, unsigned codebook) { - unsigned int rice_order, exp_order, switch_bits, first_exp, exp, zeros; - - /* number of bits to switch between rice and exp golomb */ - switch_bits = codebook & 3; - rice_order = codebook >> 5; - exp_order = (codebook >> 2) & 7; - - first_exp = ((switch_bits + 1) << rice_order); - - if (val >= first_exp) { /* exp golomb */ - val -= first_exp; - val += (1 << exp_order); - exp = av_log2(val); - zeros = exp - exp_order + switch_bits + 1; - put_bits(pb, zeros, 0); - put_bits(pb, exp + 1, val); - } else if (rice_order) { - put_bits(pb, (val >> rice_order), 0); - put_bits(pb, 1, 1); - put_sbits(pb, rice_order, val); + unsigned int rice_order, exp_order, switch_bits, switch_val; + int exponent; + + /* number of prefix bits to switch between Rice and expGolomb */ + switch_bits = (codebook & 3) + 1; + rice_order = codebook >> 5; /* rice code order */ + exp_order = (codebook >> 2) & 7; /* exp golomb code order */ + + switch_val = switch_bits << rice_order; + + if (val >= switch_val) { + val -= switch_val - (1 << exp_order); + exponent = av_log2(val); + + put_bits(pb, exponent - exp_order + switch_bits, 0); + put_bits(pb, exponent + 1, val); } else { - put_bits(pb, val, 0); + exponent = val >> rice_order; + + if (exponent) + put_bits(pb, exponent, 0); put_bits(pb, 1, 1); + if (rice_order) + put_sbits(pb, rice_order, val); } } |