aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/proresenc_anatoliy.c
diff options
context:
space:
mode:
authorClément Bœsch <u@pkh.me>2023-12-11 01:32:58 +0100
committerClément Bœsch <u@pkh.me>2024-01-10 14:08:00 +0100
commit1832bd7838f7062201eacdbdda53821789d59c72 (patch)
tree697cddef43dc2e37ee6bcc9694c15be59b4b6d3d /libavcodec/proresenc_anatoliy.c
parent3885d2493d283b9e368fa7d4fdd3e626874a7a61 (diff)
downloadffmpeg-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/proresenc_anatoliy.c')
-rw-r--r--libavcodec/proresenc_anatoliy.c45
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);
}
}