38 unsigned int symbol_value = 0;
39 int parse_exp_golomb = 1;
47 symbol_value += (1 << k);
50 symbol_value += (2 << k);
54 if (parse_exp_golomb) {
60 if (++read_limit == 16)
62 symbol_value += (1 << k);
76 unsigned int symbol_val,
int k_param)
78 int prefix_vlc_table[3][2] = {{1, 0}, {0, 0}, {0, 1}};
80 unsigned int symbol_value = symbol_val;
81 int val_prefix_vlc =
av_clip(symbol_val >> k_param, 0, 2);
85 while (symbol_value >= (1 << k)) {
86 symbol_value -= (1 << k);
88 put_bits(pbc, 1, prefix_vlc_table[val_prefix_vlc][bit_count]);
97 put_bits(pbc, 1, prefix_vlc_table[val_prefix_vlc][bit_count]);
115 int abs_dc_coeff_diff;
116 int sign_dc_coeff_diff;
121 if (abs_dc_coeff_diff > 0)
124 sign_dc_coeff_diff = 0;
126 if (sign_dc_coeff_diff)
127 dc_coeff =
state->prev_dc - abs_dc_coeff_diff;
129 dc_coeff =
state->prev_dc + abs_dc_coeff_diff;
134 "Out-of-range DC coefficient value: %d "
135 "(from prev_dc %d abs_dc_coeff_diff %d sign_dc_coeff_diff %d)\n",
136 dc_coeff,
state->prev_dc, abs_dc_coeff_diff, sign_dc_coeff_diff);
142 state->prev_dc = dc_coeff;
143 state->prev_k_dc =
FFMIN(abs_dc_coeff_diff >> 1, 5);
151 int k_level =
state->prev_k_level;
160 "Out-of-range zero-run value: %d (at scan pos %d)\n",
161 coeff_zero_run, scan_pos);
165 for (
int i = 0;
i < coeff_zero_run;
i++) {
169 k_run =
FFMIN(coeff_zero_run >> 2, 2);
172 int abs_ac_coeff_minus1;
174 int abs_level,
level;
179 abs_level = abs_ac_coeff_minus1 + 1;
188 "Out-of-range AC coefficient value: %d "
189 "(from k_param %d abs_ac_coeff_minus1 %d sign_ac_coeff %d)\n",
190 level, k_level, abs_ac_coeff_minus1, sign_ac_coeff);
195 k_level =
FFMIN(abs_level >> 2, 4);
197 state->prev_k_level = k_level;
213 buf[
i] = (
value >> (
bits -
i - 1) & 1) ?
'1' :
'0';
228 for (
int k = 0; k <= 5; k++) {
229 for (uint32_t
b = 0;
b < (1 << 20);
b++) {
238 unsigned int res_test, res_spec;
239 int con_test, con_spec;
250 if (res_test != res_spec ||
251 con_test != con_spec) {
255 "Mismatch reading %s (%d) with k=%d:\n", str,
b, k);
257 "Test function result %d consumed %d bits.\n",
260 "Spec function result %d consumed %d bits.\n",
277 int length = (
av_lfg_get(lfg) / (UINT_MAX / 14 + 1));
279 int value = (1 << length) + (random & (1 << length) - 1);
280 if (random & (1 << length))
290 for (
int len = 0;;
len++) {
291 if (random & (1 <<
len))
312 for (
int t = 0; t < 100; t++) {
315 int16_t block_test1[64];
316 int16_t block_test2[64];
322 int k_dc, k_run, k_level;
330 state.decode_lut = &decode_lut;
336 k_dc =
state.prev_k_dc;
338 k_level =
state.prev_k_level;
368 for (
int i = 0;
i < 64;
i++)
369 block_test1[
i] = -9999;
384 for (
int i = 0;
i < 64;
i++) {
385 if (
block[
i] != block_test1[
i])
396 memset(block_test2, 0, 64 *
sizeof(int16_t));
410 for (
int i = 0;
i < 64;
i++) {
411 if (
block[
i] != block_test2[
i])
int ff_apv_entropy_decode_block(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
Entropy decode a single 8x8 block to coefficients.
void ff_apv_entropy_build_decode_lut(APVVLCLUT *decode_lut)
Build the decoder VLC look-up tables.
static av_always_inline unsigned int apv_read_vlc(GetBitContext *restrict gbc, int k_param, const APVVLCLUT *restrict lut)
#define i(width, name, range_min, range_max)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static struct @346255127015250356166251341105367306144006377143 state
static const uint8_t bits[8]
static unsigned int get_bits1(GetBitContext *s)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
static int test_apv_read_vlc(void)
static void binary(char *buf, uint32_t value, int bits)
static int apv_entropy_decode_block(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
static int test_apv_entropy_decode_block(void)
static int random_run(AVLFG *lfg)
static unsigned int apv_read_vlc_spec(GetBitContext *gbc, int k_param)
static int random_coeff(AVLFG *lfg)
static void apv_write_vlc_spec(PutBitContext *pbc, unsigned int symbol_val, int k_param)
const uint8_t ff_zigzag_direct[64]
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static int put_bits_count(PutBitContext *s)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Context structure for the Lagged Fibonacci PRNG.
static const double coeff[2][5]