89 for (
int i = 0;
i < 2048; ++
i)
143 for (
int i = 0;
i < 2048; ++
i)
207 for (
int i = 5;
i < 33; ++
i)
244 melp->buf_size = buffer_size;
245 melp->remaining_bits = 8;
258 melp->remaining_bits--;
259 if (
melp->remaining_bits == 0)
262 OJPH_ERROR(0x00020001,
"mel encoder's buffer is full");
265 melp->remaining_bits = (
melp->tmp == 0xFF ? 7 : 8);
275 static const int mel_exp[13] = {0,0,0,1,1,1,2,2,2,3,3,4,5};
318 vlcp->buf = data + buffer_size - 1;
320 vlcp->buf_size = buffer_size;
325 vlcp->last_greater_than_8F =
true;
335 OJPH_ERROR(0x00020002,
"vlc encoder's buffer is full");
337 int avail_bits = 8 -
vlcp->last_greater_than_8F -
vlcp->used_bits;
340 vlcp->used_bits +=
t;
346 if (
vlcp->last_greater_than_8F &&
vlcp->tmp != 0x7F)
348 vlcp->last_greater_than_8F =
false;
353 vlcp->last_greater_than_8F =
vlcp->tmp > 0x8F;
376 OJPH_ERROR(0x00020003,
"mel encoder's buffer is full");
387 OJPH_ERROR(0x00020004,
"vlc encoder's buffer is full");
414 msp->buf_size = buffer_size;
426 if (
msp->pos >=
msp->buf_size)
427 OJPH_ERROR(0x00020005,
"magnitude sign encoder's buffer is full");
429 msp->tmp |= (
cwd & ((1U <<
t) - 1)) <<
msp->used_bits;
433 if (
msp->used_bits >=
msp->max_bits)
436 msp->max_bits = (
msp->tmp == 0xFF) ? 7 : 8;
449 int t =
msp->max_bits -
msp->used_bits;
450 msp->tmp |= (0xFF & ((1U <<
t) - 1)) <<
msp->used_bits;
452 if (
msp->tmp != 0xFF)
454 if (
msp->pos >=
msp->buf_size)
455 OJPH_ERROR(0x00020006,
"magnitude sign encoder's buffer is full");
459 else if (
msp->max_bits == 7)
478 const int ms_size = (16384*16+14)/15;
494 ui32 p = 30 - missing_msbs;
511 int e_qmax[2] = {0,0},
e_q[8] = {0,0,0,0,0,0,0,0};
514 ui32 s[8] = {0,0,0,0,0,0,0,0}, val,
t;
517 for (
ui32 x = 0; x < width; x += 4)
529 s[0] = --val + (
t >> 31);
532 t = height > 1 ?
sp[stride] : 0;
542 s[1] = --val + (
t >> 31);
556 s[2] = --val + (
t >> 31);
559 t = height > 1 ?
sp[stride] : 0;
569 s[3] = --val + (
t >> 31);
615 s[4] = --val + (
t >> 31);
618 t = height > 1 ?
sp[stride] : 0;
628 s[5] = --val + (
t >> 31);
642 s[6] = --val + (
t >> 31);
645 t = height > 1 ?
sp[stride] : 0;
655 s[7] = --val + (
t >> 31);
717 s[0] =
s[1] =
s[2] =
s[3] =
s[4] =
s[5] =
s[6] =
s[7] = 0;
724 for (y = 2; y < height; y += 2)
733 sp = buf + y * stride;
734 for (
ui32 x = 0; x < width; x += 4)
746 s[0] = --val + (
t >> 31);
749 t = y + 1 < height ?
sp[stride] : 0;
759 s[1] = --val + (
t >> 31);
773 s[2] = --val + (
t >> 31);
776 t = y + 1 < height ?
sp[stride] : 0;
786 s[3] = --val + (
t >> 31);
834 s[4] = --val + (
t >> 31);
837 t = y + 1 < height ?
sp[stride] : 0;
847 s[5] = --val + (
t >> 31);
861 s[6] = --val + (
t >> 31);
864 t = y + 1 < height ?
sp[stride] : 0;
874 s[7] = --val + (
t >> 31);
879 c_q1 |= ((
rho[0] & 4) >> 1) | ((
rho[0] & 8) >> 2);
919 c_q0 |= ((
rho[1] & 4) >> 1) | ((
rho[1] & 8) >> 2);
920 s[0] =
s[1] =
s[2] =
s[3] =
s[4] =
s[5] =
s[6] =
s[7] = 0;
void get_buffer(ui32 needed_bytes, coded_lists *&p)
static bool uvlc_tables_initialized
Initializes UVLC tables uvlc_tbl0 and uvlc_tbl1.
static bool uvlc_init_tables()
Initializes uvlc_tbl0 and uvlc_tbl1 tables.
static bool vlc_tables_initialized
Initializes VLC tables vlc_tbl0 and vlc_tbl1.
static bool vlc_init_tables()
Initializes vlc_tbl0 and vlc_tbl1 tables, from table0.h and table1.h.
ui16 vlc_tbl0[1024]
vlc_tbl0 contains decoding information for initial row of quads
ui16 vlc_tbl1[1024]
vlc_tbl1 contains decoding information for non-initial row of quads
static void ms_terminate(ms_struct *msp)
static int ulvc_cwd_suf[33]
static int ulvc_cwd_suf_len[33]
static void vlc_encode(vlc_struct *vlcp, int cwd, int cwd_len)
static void terminate_mel_vlc(mel_struct *melp, vlc_struct *vlcp)
static void mel_init(dec_mel_st *melp, ui8 *bbuf, int lcup, int scup)
Initiates a dec_mel_st structure for MEL decoding and reads some bytes in order to get the read addre...
static void ms_init(ms_struct *msp, ui32 buffer_size, ui8 *data)
static void ms_encode(ms_struct *msp, ui32 cwd, int cwd_len)
static int ulvc_cwd_pre_len[33]
static int ulvc_cwd_pre[33]
static void mel_encode(mel_struct *melp, bool bit)
static void mel_emit_bit(mel_struct *melp, int v)
void ojph_encode_codeblock(ui32 *buf, ui32 missing_msbs, ui32 num_passes, ui32 width, ui32 height, ui32 stride, ui32 *lengths, ojph::mem_elastic_allocator *elastic, ojph::coded_lists *&coded)
static void vlc_init(vlc_struct *vlcp, ui32 buffer_size, ui8 *data)
static ui32 population_count(ui32 val)
static ui32 count_leading_zeros(ui32 val)
#define OJPH_ERROR(t,...)
bool last_greater_than_8F