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++) {
117 uint8_t run_first_buffer[16];
118 uint8_t level_first_buffer[16];
129 k_level = start_level;
132 memset(ent, 0,
sizeof(*ent));
136 for (
int i = 0;
i <= 1;
i++) {
167 k_level = start_level;
170 memset(ent, 0,
sizeof(*ent));
171 init_get_bits8(&gbc, level_first_buffer,
sizeof(level_first_buffer));
174 for (
int i = 0;
i <= 1;
i++) {
214 int k_dc =
state->prev_k_dc;
216 uint32_t next_bits, lut_bits;
222 int dc_coeff, abs_diff, sign;
229 dc_coeff =
state->prev_dc - abs_diff;
231 dc_coeff =
state->prev_dc + abs_diff;
233 dc_coeff =
state->prev_dc;
240 "Out-of-range DC coefficient value: %d.\n",
247 state->prev_dc = dc_coeff;
264 k_level =
state->prev_k_level;
271 if (ent->count == 0) {
273 uint32_t
bits, low_bits;
274 unsigned int leading_zeroes, low_bit_count, low_bit_shift;
278 bits = next_bits & 0xffff;
281 if (leading_zeroes >= 6) {
284 "Out-of-range run value: %d leading zeroes.\n",
289 low_bit_count = leading_zeroes;
290 low_bit_shift = 16 - (1 + 2 * leading_zeroes);
291 low_bits = (
bits >> low_bit_shift) & ((1 << low_bit_count) - 1);
293 run = 2 + ((1 << leading_zeroes) - 1) + low_bits;
295 skip_bits(gbc, 2 + leading_zeroes + 1 + low_bit_count);
307 scan_pos = ent->run[0] + 1;
308 if (scan_pos >= 64) {
312 if (ent->count > 1) {
315 state->prev_k_level = ent->k_level_0;
316 if (scan_pos >= 64) {
321 if (ent->count > 2) {
322 scan_pos += ent->run[1];
323 if (scan_pos >= 64) {
328 if (ent->count > 3) {
331 if (scan_pos >= 64) {
338 k_level = ent->k_level_1;
341 else if (ent->count & 1)
354 if (ent->count == 0) {
357 unsigned int leading_zeroes;
358 int level, abs_level, sign;
361 bits = next_bits & 0xffff;
368 abs_level = (2 << k_level) +
369 ((1 << leading_zeroes) - 1) * (1 << k_level) +
370 get_bits(gbc, leading_zeroes + k_level) + 1;
383 "Out-of-range AC coefficient value at %d: %d.\n",
389 k_level =
FFMIN(abs_level >> 2, 4);
390 state->prev_k_level = k_level;
400 state->prev_k_level = ent->k_level_0;
401 if (scan_pos >= 64) {
405 if (ent->count > 1) {
406 scan_pos += ent->run[0];
407 if (scan_pos >= 64) {
412 if (ent->count > 2) {
415 if (scan_pos >= 64) {
420 if (ent->count > 3) {
421 scan_pos += ent->run[1];
422 if (scan_pos >= 64) {
429 k_level = ent->k_level_1;
443 if (ent->count == 0) {
445 uint32_t
bits, low_bits;
446 unsigned int leading_zeroes, low_bit_count, low_bit_shift;
450 bits = next_bits & 0xffff;
453 if (leading_zeroes >= 6) {
456 "Out-of-range run value: %d leading zeroes.\n",
461 low_bit_count = leading_zeroes + k_run;
462 low_bit_shift = 16 - (1 + 2 * leading_zeroes + k_run);
463 low_bits = (
bits >> low_bit_shift) & ((1 << low_bit_count) - 1);
466 ((1 << leading_zeroes) - 1) * (1 << k_run) +
469 skip_bits(gbc, 2 + leading_zeroes + 1 + low_bit_count);
480 scan_pos += ent->run[0];
481 if (scan_pos >= 64) {
485 if (ent->count > 1) {
488 if (scan_pos >= 64) {
493 if (ent->count > 2) {
494 scan_pos += ent->run[1];
495 if (scan_pos >= 64) {
500 if (ent->count > 3) {
503 if (scan_pos >= 64) {
510 k_level = ent->k_level_1;
524 if (ent->count == 0) {
527 unsigned int leading_zeroes;
528 int level, abs_level, sign;
531 bits = next_bits & 0xffff;
538 abs_level = (2 << k_level) +
539 ((1 << leading_zeroes) - 1) * (1 << k_level) +
540 get_bits(gbc, leading_zeroes + k_level) + 1;
553 "Out-of-range AC coefficient value at %d: %d.\n",
559 k_level =
FFMIN(abs_level >> 2, 4);
569 if (scan_pos >= 64) {
573 if (ent->count > 1) {
574 scan_pos += ent->run[0];
575 if (scan_pos >= 64) {
580 if (ent->count > 2) {
583 if (scan_pos >= 64) {
588 if (ent->count > 3) {
589 scan_pos += ent->run[1];
590 if (scan_pos >= 64) {
597 k_level = ent->k_level_1;
608 "Block decode reached invalid scan position %d.\n",