Go to the documentation of this file.
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;
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])
static int test_apv_entropy_decode_block(void)
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static int get_bits_count(const GetBitContext *s)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static int test_apv_read_vlc(void)
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int apv_entropy_decode_block(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
static APVVLCLUT decode_lut
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
static int random_coeff(AVLFG *lfg)
static void binary(char *buf, uint32_t value, int bits)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static av_always_inline unsigned int apv_read_vlc(GetBitContext *restrict gbc, int k_param, const APVVLCLUT *restrict lut)
static unsigned int get_bits1(GetBitContext *s)
void ff_apv_entropy_build_decode_lut(APVVLCLUT *decode_lut)
Build the decoder VLC look-up tables.
static int random_run(AVLFG *lfg)
Context structure for the Lagged Fibonacci PRNG.
#define AV_LOG_INFO
Standard information.
#define i(width, name, range_min, range_max)
static int put_bits_count(PutBitContext *s)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
const uint8_t ff_zigzag_direct[64]
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
static unsigned int apv_read_vlc_spec(GetBitContext *gbc, int k_param)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
The exact code depends on how similar the blocks are and how related they are to the block
static const double coeff[2][5]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
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 void apv_write_vlc_spec(PutBitContext *pbc, unsigned int symbol_val, int k_param)