29 unsigned int next_bits;
33 ent = &lut->single_lut[k_param][next_bits];
36 unsigned int leading_zeroes;
41 leading_zeroes = 15 -
av_log2(next_bits);
43 if (leading_zeroes == 0) {
53 return (2 << k_param) +
54 ((1 << leading_zeroes) - 1) * (1 << k_param) +
55 get_bits(gbc, leading_zeroes + k_param);
68 for (
int k = 0; k <= 5; k++) {
71 unsigned int first_bit =
code & (1 << code_len - 1);
79 unsigned int second_bit =
code & (1 << code_len - 2);
85 unsigned int last_bits = first_set - 1 + k;
89 ent->
consume = 2 + first_set + last_bits;
91 (((1 << first_set - 1) - 1) << k) +
92 ((
code >>
bits_left - first_set - last_bits) & (1 << last_bits) - 1));
109 for (
int start_run = 0; start_run <= 2; start_run++) {
110 for (
int start_level = 0; start_level <= 4; start_level++) {
115 int k_run, k_level, adv, nb_levels;
126 k_level = start_level;
129 memset(ent, 0,
sizeof(*ent));
138 for (
int sym =
type; sym <
type + 4; sym++) {
171 for (
int i = nb_levels;
i < 2;
i++)
198 uint32_t next_bits,
int k_run,
201 uint32_t
bits, low_bits;
202 unsigned int leading_zeroes, low_bit_count, low_bit_shift;
205 bits = next_bits & 0xffff;
208 if (leading_zeroes >= 6) {
211 "Out-of-range run value: %d leading zeroes.\n",
216 low_bit_count = leading_zeroes + k_run;
217 low_bit_shift = 16 - (1 + 2 * leading_zeroes + k_run);
220 skip_bits(gbc, 2 + leading_zeroes + 1 + low_bit_count);
222 return (2 << k_run) +
223 ((1 << leading_zeroes) - 1) * (1 << k_run) +
233 uint32_t next_bits,
int k_level,
234 int *abs_level_out,
int scan_pos,
238 unsigned int leading_zeroes;
239 int level, abs_level, sign;
242 bits = next_bits & 0xffff;
249 abs_level = (2 << k_level) +
250 ((1 << leading_zeroes) - 1) * (1 << k_level) +
251 get_bits(gbc, leading_zeroes + k_level) + 1;
264 "Out-of-range AC coefficient value at %d: %d.\n",
268 *abs_level_out = abs_level;
282 int *scan_pos_ptr,
int type)
284 int scan_pos = *scan_pos_ptr;
305 for (
i = 0;
i < ent->
count - 1;
i++) {
306 if (scan_pos + end[
i] >= 64)
310 *scan_pos_ptr = scan_pos + end[
i];
329 int scan_pos,
type, table_index;
330 int k_dc =
state->prev_k_dc;
332 uint32_t next_bits, lut_bits;
338 int dc_coeff, abs_diff, sign;
345 dc_coeff =
state->prev_dc - abs_diff;
347 dc_coeff =
state->prev_dc + abs_diff;
349 dc_coeff =
state->prev_dc;
356 "Out-of-range DC coefficient value: %d.\n",
363 state->prev_dc = dc_coeff;
381 k_level =
state->prev_k_level;
388 if (ent->count == 0) {
399 if (ent->count > 1 && scan_pos + ent->level_pos[0] < 64)
400 state->prev_k_level = ent->k_level_0;
405 k_level = ent->k_level_1;
406 if (ent->count > 1) {
420 if (ent->count == 0) {
421 int level, abs_level;
423 &abs_level, scan_pos,
state);
428 k_level =
FFMIN(abs_level >> 2, 4);
429 state->prev_k_level = k_level;
434 state->prev_k_level = ent->k_level_0;
439 k_level = ent->k_level_1;
454 if (ent->count == 0) {
457 k_run = table_index / 5 % 3;
458 k_level = table_index % 5;
469 int level, abs_level;
471 &abs_level, scan_pos,
state);
476 k_level =
FFMIN(abs_level >> 2, 4);
486 table_index = ent->next;
493 "Block decode reached invalid scan position %d.\n",
510 gbc->index = gb.
index;
#define APV_TABLE_INDEX(type, k_run, k_level)
@ APV_ENTROPY_LEVEL_FIRST
static av_always_inline int apv_entropy_decode_block_internal(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
static av_always_inline unsigned int apv_read_vlc(GetBitContext *restrict gbc, int k_param, const APVVLCLUT *restrict lut)
static av_always_inline int apv_apply_multi_entry(int16_t *restrict coeff, GetBitContext *restrict gbc, const APVMultiVLCLUTEntry *ent, const uint8_t *zigzag, int *scan_pos_ptr, int type)
static av_always_inline int apv_decode_long_run(GetBitContext *restrict gbc, uint32_t next_bits, int k_run, APVEntropyState *restrict state)
int ff_apv_entropy_decode_block(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
Entropy decode a single 8x8 block to coefficients.
static av_always_inline int apv_decode_long_level(GetBitContext *restrict gbc, uint32_t next_bits, int k_level, int *abs_level_out, int scan_pos, APVEntropyState *restrict state)
void ff_apv_entropy_build_decode_lut(APVVLCLUT *decode_lut)
Build the decoder VLC look-up tables.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define i(width, name, range_min, range_max)
static const uint8_t bits[8]
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
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.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#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
const uint8_t ff_zigzag_direct[64]
static const uint8_t zigzag[]
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
#define FF_ARRAY_ELEMS(a)
APVMultiVLCLUTEntry multi_lut[2][3][5][APV_VLC_LUT_SIZE]
APVSingleVLCLUTEntry single_lut[6][APV_VLC_LUT_SIZE]
static struct @232240247175332074307271266321204261331170211232 state
static const uint8_t *const tables[]
static int remaining_bits(WmallDecodeCtx *s, GetBitContext *gb)
Calculate remaining input buffer length.