77 struct vlc_src_table {
int c_q, rho, u_off, e_k, e_1, cwd, cwd_len; };
78 vlc_src_table tbl0[] = {
81 size_t tbl0_size =
sizeof(tbl0) /
sizeof(vlc_src_table);
83 si32 pattern_popcnt[16];
84 for (
ui32 i = 0; i < 16; ++i)
87 vlc_src_table* src_tbl = tbl0;
89 size_t tbl_size = tbl0_size;
90 for (
int i = 0; i < 2048; ++i)
92 int c_q = i >> 8, rho = (i >> 4) & 0xF, emb = i & 0xF;
93 if (((emb & rho) != emb) || (rho == 0 && c_q == 0))
97 vlc_src_table *best_entry = NULL;
101 for (
size_t j = 0; j < tbl_size; ++j)
103 if (src_tbl[j].c_q == c_q && src_tbl[j].rho == rho)
104 if (src_tbl[j].u_off == 1)
105 if ((emb & src_tbl[j].e_k) == src_tbl[j].e_1)
109 int ones_count = pattern_popcnt[src_tbl[j].e_k];
110 if (ones_count >= best_e_k)
112 best_entry = src_tbl + j;
113 best_e_k = ones_count;
120 for (
size_t j = 0; j < tbl_size; ++j)
122 if (src_tbl[j].c_q == c_q && src_tbl[j].rho == rho)
123 if (src_tbl[j].u_off == 0)
125 best_entry = src_tbl + j;
131 tgt_tbl[i] = (
ui16)((best_entry->cwd<<8) + (best_entry->cwd_len<<4)
136 vlc_src_table tbl1[] = {
139 size_t tbl1_size =
sizeof(tbl1) /
sizeof(vlc_src_table);
143 tbl_size = tbl1_size;
144 for (
int i = 0; i < 2048; ++i)
146 int c_q = i >> 8, rho = (i >> 4) & 0xF, emb = i & 0xF;
147 if (((emb & rho) != emb) || (rho == 0 && c_q == 0))
151 vlc_src_table *best_entry = NULL;
155 for (
size_t j = 0; j < tbl_size; ++j)
157 if (src_tbl[j].c_q == c_q && src_tbl[j].rho == rho)
158 if (src_tbl[j].u_off == 1)
159 if ((emb & src_tbl[j].e_k) == src_tbl[j].e_1)
163 int ones_count = pattern_popcnt[src_tbl[j].e_k];
164 if (ones_count >= best_e_k)
166 best_entry = src_tbl + j;
167 best_e_k = ones_count;
174 for (
size_t j = 0; j < tbl_size; ++j)
176 if (src_tbl[j].c_q == c_q && src_tbl[j].rho == rho)
177 if (src_tbl[j].u_off == 0)
179 best_entry = src_tbl + j;
185 tgt_tbl[i] = (
ui16)((best_entry->cwd<<8) + (best_entry->cwd_len<<4)
233 for (
int i = 5; i < 33; ++i)
305 assert(v == 0 || v == 1);
306 melp->
tmp = (melp->
tmp << 1) + v;
311 OJPH_ERROR(0x00020001,
"mel encoder's buffer is full");
324 static const int mel_exp[13] = {0,0,0,1,1,1,2,2,2,3,3,4,5};
340 int t = mel_exp[melp->
k];
367 vlcp->
buf = data + buffer_size - 1;
384 OJPH_ERROR(0x00020002,
"vlc encoder's buffer is full");
387 int t =
ojph_min(avail_bits, cwd_len);
420 int vlc_mask = 0xFF >> (8 - vlcp->
used_bits);
421 if ((mel_mask | vlc_mask) == 0)
425 OJPH_ERROR(0x00020003,
"mel encoder's buffer is full");
426 int fuse = melp->
tmp | vlcp->
tmp;
427 if ( ( ((fuse ^ melp->
tmp) & mel_mask)
428 | ((fuse ^ vlcp->
tmp) & vlc_mask) ) == 0
429 && (fuse != 0xFF) && vlcp->
pos > 1)
436 OJPH_ERROR(0x00020004,
"vlc encoder's buffer is full");
476 OJPH_ERROR(0x00020005,
"magnitude sign encoder's buffer is full");
499 OJPH_ERROR(0x00020005,
"magnitude sign encoder's buffer is full");
524 if (msp->
tmp != 0xFF)
527 OJPH_ERROR(0x00020006,
"magnitude sign encoder's buffer is full");
548 assert(num_passes == 1);
550 const int ms_size = (16384*16+14)/15;
552 const int mel_vlc_size = 3072;
553 ui8 mel_vlc_buf[mel_vlc_size];
554 const int mel_size = 192;
555 ui8 *mel_buf = mel_vlc_buf;
556 const int vlc_size = mel_vlc_size - mel_size;
557 ui8 *vlc_buf = mel_vlc_buf + mel_size;
566 ui32 p = 30 - missing_msbs;
579 ui8* lep = e_val; lep[0] = 0;
580 ui8* lcxp = cx_val; lcxp[0] = 0;
583 int e_qmax[2] = {0,0}, e_q[8] = {0,0,0,0,0,0,0,0};
586 ui32 s[8] = {0,0,0,0,0,0,0,0}, val, t;
589 for (
ui32 x = 0; x < width; x += 4)
601 s[0] = --val + (t >> 31);
604 t = height > 1 ? sp[stride] : 0;
613 e_qmax[0] =
ojph_max(e_qmax[0], e_q[1]);
614 s[1] = --val + (t >> 31);
627 e_qmax[0] =
ojph_max(e_qmax[0], e_q[2]);
628 s[2] = --val + (t >> 31);
631 t = height > 1 ? sp[stride] : 0;
640 e_qmax[0] =
ojph_max(e_qmax[0], e_q[3]);
641 s[3] = --val + (t >> 31);
646 int u_q0 = Uq0 - 1, u_q1 = 0;
651 eps0 |= (e_q[0] == e_qmax[0]);
652 eps0 |= (e_q[1] == e_qmax[0]) << 1;
653 eps0 |= (e_q[2] == e_qmax[0]) << 2;
654 eps0 |= (e_q[3] == e_qmax[0]) << 3;
657 lep[0] = (
ui8)e_q[3];
658 lcxp[0] = (
ui8)(lcxp[0] | (
ui8)((rho[0] & 2) >> 1)); lcxp++;
659 lcxp[0] = (
ui8)((rho[0] & 8) >> 3);
661 ui16 tuple0 =
vlc_tbl0[(c_q0 << 8) + (rho[0] << 4) + eps0];
662 vlc_encode(&vlc, tuple0 >> 8, (tuple0 >> 4) & 7);
667 int m = (rho[0] & 1) ? Uq0 - (tuple0 & 1) : 0;
669 m = (rho[0] & 2) ? Uq0 - ((tuple0 & 2) >> 1) : 0;
671 m = (rho[0] & 4) ? Uq0 - ((tuple0 & 4) >> 2) : 0;
673 m = (rho[0] & 8) ? Uq0 - ((tuple0 & 8) >> 3) : 0;
687 s[4] = --val + (t >> 31);
690 t = height > 1 ? sp[stride] : 0;
699 e_qmax[1] =
ojph_max(e_qmax[1], e_q[5]);
700 s[5] = --val + (t >> 31);
713 e_qmax[1] =
ojph_max(e_qmax[1], e_q[6]);
714 s[6] = --val + (t >> 31);
717 t = height > 1 ? sp[stride] : 0;
726 e_qmax[1] =
ojph_max(e_qmax[1], e_q[7]);
727 s[7] = --val + (t >> 31);
731 int c_q1 = (rho[0] >> 1) | (rho[0] & 1);
738 eps1 |= (e_q[4] == e_qmax[1]);
739 eps1 |= (e_q[5] == e_qmax[1]) << 1;
740 eps1 |= (e_q[6] == e_qmax[1]) << 2;
741 eps1 |= (e_q[7] == e_qmax[1]) << 3;
744 lep[0] = (
ui8)e_q[7];
745 lcxp[0] |= (
ui8)(lcxp[0] | (
ui8)((rho[1] & 2) >> 1)); lcxp++;
746 lcxp[0] = (
ui8)((rho[1] & 8) >> 3);
747 ui16 tuple1 =
vlc_tbl0[(c_q1 << 8) + (rho[1] << 4) + eps1];
748 vlc_encode(&vlc, tuple1 >> 8, (tuple1 >> 4) & 7);
753 int m = (rho[1] & 1) ? Uq1 - (tuple1 & 1) : 0;
755 m = (rho[1] & 2) ? Uq1 - ((tuple1 & 2) >> 1) : 0;
757 m = (rho[1] & 4) ? Uq1 - ((tuple1 & 4) >> 2) : 0;
759 m = (rho[1] & 8) ? Uq1 - ((tuple1 & 8) >> 3) : 0;
763 if (u_q0 > 0 && u_q1 > 0)
766 if (u_q0 > 2 && u_q1 > 2)
773 else if (u_q0 > 2 && u_q1 > 0)
788 c_q0 = (rho[1] >> 1) | (rho[1] & 1);
789 s[0] = s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = 0;
790 e_q[0]=e_q[1]=e_q[2]=e_q[3]=e_q[4]=e_q[5]=e_q[6]=e_q[7]=0;
791 rho[0] = rho[1] = 0; e_qmax[0] = e_qmax[1] = 0;
796 for (y = 2; y < height; y += 2)
799 int max_e =
ojph_max(lep[0], lep[1]) - 1;
802 c_q0 = lcxp[0] + (lcxp[1] << 2);
805 sp = buf + y * stride;
806 for (
ui32 x = 0; x < width; x += 4)
818 s[0] = --val + (t >> 31);
821 t = y + 1 < height ? sp[stride] : 0;
830 e_qmax[0] =
ojph_max(e_qmax[0], e_q[1]);
831 s[1] = --val + (t >> 31);
844 e_qmax[0] =
ojph_max(e_qmax[0], e_q[2]);
845 s[2] = --val + (t >> 31);
848 t = y + 1 < height ? sp[stride] : 0;
857 e_qmax[0] =
ojph_max(e_qmax[0], e_q[3]);
858 s[3] = --val + (t >> 31);
862 int kappa = (rho[0] & (rho[0]-1)) ?
ojph_max(1,max_e) : 1;
863 int Uq0 =
ojph_max(e_qmax[0], kappa);
864 int u_q0 = Uq0 - kappa, u_q1 = 0;
869 eps0 |= (e_q[0] == e_qmax[0]);
870 eps0 |= (e_q[1] == e_qmax[0]) << 1;
871 eps0 |= (e_q[2] == e_qmax[0]) << 2;
872 eps0 |= (e_q[3] == e_qmax[0]) << 3;
875 max_e =
ojph_max(lep[0], lep[1]) - 1;
876 lep[0] = (
ui8)e_q[3];
877 lcxp[0] = (
ui8)(lcxp[0] | (
ui8)((rho[0] & 2) >> 1)); lcxp++;
878 int c_q1 = lcxp[0] + (lcxp[1] << 2);
879 lcxp[0] = (
ui8)((rho[0] & 8) >> 3);
880 ui16 tuple0 =
vlc_tbl1[(c_q0 << 8) + (rho[0] << 4) + eps0];
881 vlc_encode(&vlc, tuple0 >> 8, (tuple0 >> 4) & 7);
886 int m = (rho[0] & 1) ? Uq0 - (tuple0 & 1) : 0;
888 m = (rho[0] & 2) ? Uq0 - ((tuple0 & 2) >> 1) : 0;
890 m = (rho[0] & 4) ? Uq0 - ((tuple0 & 4) >> 2) : 0;
892 m = (rho[0] & 8) ? Uq0 - ((tuple0 & 8) >> 3) : 0;
906 s[4] = --val + (t >> 31);
909 t = y + 1 < height ? sp[stride] : 0;
918 e_qmax[1] =
ojph_max(e_qmax[1], e_q[5]);
919 s[5] = --val + (t >> 31);
932 e_qmax[1] =
ojph_max(e_qmax[1], e_q[6]);
933 s[6] = --val + (t >> 31);
936 t = y + 1 < height ? sp[stride] : 0;
945 e_qmax[1] =
ojph_max(e_qmax[1], e_q[7]);
946 s[7] = --val + (t >> 31);
950 kappa = (rho[1] & (rho[1]-1)) ?
ojph_max(1,max_e) : 1;
951 c_q1 |= ((rho[0] & 4) >> 1) | ((rho[0] & 8) >> 2);
952 int Uq1 =
ojph_max(e_qmax[1], kappa);
958 eps1 |= (e_q[4] == e_qmax[1]);
959 eps1 |= (e_q[5] == e_qmax[1]) << 1;
960 eps1 |= (e_q[6] == e_qmax[1]) << 2;
961 eps1 |= (e_q[7] == e_qmax[1]) << 3;
964 max_e =
ojph_max(lep[0], lep[1]) - 1;
965 lep[0] = (
ui8)e_q[7];
966 lcxp[0] = (
ui8)(lcxp[0] | (
ui8)((rho[1] & 2) >> 1)); lcxp++;
967 c_q0 = lcxp[0] + (lcxp[1] << 2);
968 lcxp[0] = (
ui8)((rho[1] & 8) >> 3);
969 ui16 tuple1 =
vlc_tbl1[(c_q1 << 8) + (rho[1] << 4) + eps1];
970 vlc_encode(&vlc, tuple1 >> 8, (tuple1 >> 4) & 7);
975 int m = (rho[1] & 1) ? Uq1 - (tuple1 & 1) : 0;
977 m = (rho[1] & 2) ? Uq1 - ((tuple1 & 2) >> 1) : 0;
979 m = (rho[1] & 4) ? Uq1 - ((tuple1 & 4) >> 2) : 0;
981 m = (rho[1] & 8) ? Uq1 - ((tuple1 & 8) >> 3) : 0;
991 c_q0 |= ((rho[1] & 4) >> 1) | ((rho[1] & 8) >> 2);
992 s[0] = s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = 0;
993 e_q[0]=e_q[1]=e_q[2]=e_q[3]=e_q[4]=e_q[5]=e_q[6]=e_q[7]=0;
994 rho[0] = rho[1] = 0; e_qmax[0] = e_qmax[1] = 0;
1003 lengths[0] = mel.
pos + vlc.
pos + ms.
pos;
1011 coded->
buf[lengths[0]-1] = (
ui8)(num_bytes >> 4);
1012 coded->
buf[lengths[0]-2] = coded->
buf[lengths[0]-2] & 0xF0;
1013 coded->
buf[lengths[0]-2] =
1014 (
ui8)(coded->
buf[lengths[0]-2] | (num_bytes & 0xF));
1032 assert(num_passes == 1);
1040 const int ms_size = (22528 * 16 + 14) / 15;
1041 ui8 ms_buf[ms_size];
1049 const int mel_vlc_size = 3072;
1050 ui8 mel_vlc_buf[mel_vlc_size];
1051 const int mel_size = 192;
1052 ui8 *mel_buf = mel_vlc_buf;
1053 const int vlc_size = mel_vlc_size - mel_size;
1054 ui8 *vlc_buf = mel_vlc_buf + mel_size;
1061 ms_init(&ms, ms_size, ms_buf);
1063 ui32 p = 62 - missing_msbs;
1076 ui8* lep = e_val; lep[0] = 0;
1077 ui8* lcxp = cx_val; lcxp[0] = 0;
1080 int e_qmax[2] = {0,0}, e_q[8] = {0,0,0,0,0,0,0,0};
1083 ui64 s[8] = {0,0,0,0,0,0,0,0}, val, t;
1086 for (
ui32 x = 0; x < width; x += 4)
1098 s[0] = --val + (t >> 63);
1101 t = height > 1 ? sp[stride] : 0;
1110 e_qmax[0] =
ojph_max(e_qmax[0], e_q[1]);
1111 s[1] = --val + (t >> 63);
1124 e_qmax[0] =
ojph_max(e_qmax[0], e_q[2]);
1125 s[2] = --val + (t >> 63);
1128 t = height > 1 ? sp[stride] : 0;
1137 e_qmax[0] =
ojph_max(e_qmax[0], e_q[3]);
1138 s[3] = --val + (t >> 63);
1143 int u_q0 = Uq0 - 1, u_q1 = 0;
1148 eps0 |= (e_q[0] == e_qmax[0]);
1149 eps0 |= (e_q[1] == e_qmax[0]) << 1;
1150 eps0 |= (e_q[2] == e_qmax[0]) << 2;
1151 eps0 |= (e_q[3] == e_qmax[0]) << 3;
1154 lep[0] = (
ui8)e_q[3];
1155 lcxp[0] = (
ui8)(lcxp[0] | (
ui8)((rho[0] & 2) >> 1)); lcxp++;
1156 lcxp[0] = (
ui8)((rho[0] & 8) >> 3);
1158 ui16 tuple0 =
vlc_tbl0[(c_q0 << 8) + (rho[0] << 4) + eps0];
1159 vlc_encode(&vlc, tuple0 >> 8, (tuple0 >> 4) & 7);
1164 int m = (rho[0] & 1) ? Uq0 - (tuple0 & 1) : 0;
1166 m = (rho[0] & 2) ? Uq0 - ((tuple0 & 2) >> 1) : 0;
1168 m = (rho[0] & 4) ? Uq0 - ((tuple0 & 4) >> 2) : 0;
1170 m = (rho[0] & 8) ? Uq0 - ((tuple0 & 8) >> 3) : 0;
1184 s[4] = --val + (t >> 63);
1187 t = height > 1 ? sp[stride] : 0;
1196 e_qmax[1] =
ojph_max(e_qmax[1], e_q[5]);
1197 s[5] = --val + (t >> 63);
1210 e_qmax[1] =
ojph_max(e_qmax[1], e_q[6]);
1211 s[6] = --val + (t >> 63);
1214 t = height > 1 ? sp[stride] : 0;
1223 e_qmax[1] =
ojph_max(e_qmax[1], e_q[7]);
1224 s[7] = --val + (t >> 63);
1228 int c_q1 = (rho[0] >> 1) | (rho[0] & 1);
1235 eps1 |= (e_q[4] == e_qmax[1]);
1236 eps1 |= (e_q[5] == e_qmax[1]) << 1;
1237 eps1 |= (e_q[6] == e_qmax[1]) << 2;
1238 eps1 |= (e_q[7] == e_qmax[1]) << 3;
1241 lep[0] = (
ui8)e_q[7];
1242 lcxp[0] |= (
ui8)(lcxp[0] | (
ui8)((rho[1] & 2) >> 1)); lcxp++;
1243 lcxp[0] = (
ui8)((rho[1] & 8) >> 3);
1244 ui16 tuple1 =
vlc_tbl0[(c_q1 << 8) + (rho[1] << 4) + eps1];
1245 vlc_encode(&vlc, tuple1 >> 8, (tuple1 >> 4) & 7);
1250 int m = (rho[1] & 1) ? Uq1 - (tuple1 & 1) : 0;
1252 m = (rho[1] & 2) ? Uq1 - ((tuple1 & 2) >> 1) : 0;
1254 m = (rho[1] & 4) ? Uq1 - ((tuple1 & 4) >> 2) : 0;
1256 m = (rho[1] & 8) ? Uq1 - ((tuple1 & 8) >> 3) : 0;
1260 if (u_q0 > 0 && u_q1 > 0)
1263 if (u_q0 > 2 && u_q1 > 2)
1272 else if (u_q0 > 2 && u_q1 > 0)
1290 c_q0 = (rho[1] >> 1) | (rho[1] & 1);
1291 s[0] = s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = 0;
1292 e_q[0]=e_q[1]=e_q[2]=e_q[3]=e_q[4]=e_q[5]=e_q[6]=e_q[7]=0;
1293 rho[0] = rho[1] = 0; e_qmax[0] = e_qmax[1] = 0;
1298 for (y = 2; y < height; y += 2)
1301 int max_e =
ojph_max(lep[0], lep[1]) - 1;
1304 c_q0 = lcxp[0] + (lcxp[1] << 2);
1307 sp = buf + y * stride;
1308 for (
ui32 x = 0; x < width; x += 4)
1320 s[0] = --val + (t >> 63);
1323 t = y + 1 < height ? sp[stride] : 0;
1332 e_qmax[0] =
ojph_max(e_qmax[0], e_q[1]);
1333 s[1] = --val + (t >> 63);
1346 e_qmax[0] =
ojph_max(e_qmax[0], e_q[2]);
1347 s[2] = --val + (t >> 63);
1350 t = y + 1 < height ? sp[stride] : 0;
1359 e_qmax[0] =
ojph_max(e_qmax[0], e_q[3]);
1360 s[3] = --val + (t >> 63);
1364 int kappa = (rho[0] & (rho[0]-1)) ?
ojph_max(1,max_e) : 1;
1365 int Uq0 =
ojph_max(e_qmax[0], kappa);
1366 int u_q0 = Uq0 - kappa, u_q1 = 0;
1371 eps0 |= (e_q[0] == e_qmax[0]);
1372 eps0 |= (e_q[1] == e_qmax[0]) << 1;
1373 eps0 |= (e_q[2] == e_qmax[0]) << 2;
1374 eps0 |= (e_q[3] == e_qmax[0]) << 3;
1377 max_e =
ojph_max(lep[0], lep[1]) - 1;
1378 lep[0] = (
ui8)e_q[3];
1379 lcxp[0] = (
ui8)(lcxp[0] | (
ui8)((rho[0] & 2) >> 1)); lcxp++;
1380 int c_q1 = lcxp[0] + (lcxp[1] << 2);
1381 lcxp[0] = (
ui8)((rho[0] & 8) >> 3);
1382 ui16 tuple0 =
vlc_tbl1[(c_q0 << 8) + (rho[0] << 4) + eps0];
1383 vlc_encode(&vlc, tuple0 >> 8, (tuple0 >> 4) & 7);
1388 int m = (rho[0] & 1) ? Uq0 - (tuple0 & 1) : 0;
1390 m = (rho[0] & 2) ? Uq0 - ((tuple0 & 2) >> 1) : 0;
1392 m = (rho[0] & 4) ? Uq0 - ((tuple0 & 4) >> 2) : 0;
1394 m = (rho[0] & 8) ? Uq0 - ((tuple0 & 8) >> 3) : 0;
1408 s[4] = --val + (t >> 63);
1411 t = y + 1 < height ? sp[stride] : 0;
1420 e_qmax[1] =
ojph_max(e_qmax[1], e_q[5]);
1421 s[5] = --val + (t >> 63);
1434 e_qmax[1] =
ojph_max(e_qmax[1], e_q[6]);
1435 s[6] = --val + (t >> 63);
1438 t = y + 1 < height ? sp[stride] : 0;
1447 e_qmax[1] =
ojph_max(e_qmax[1], e_q[7]);
1448 s[7] = --val + (t >> 63);
1452 kappa = (rho[1] & (rho[1]-1)) ?
ojph_max(1,max_e) : 1;
1453 c_q1 |= ((rho[0] & 4) >> 1) | ((rho[0] & 8) >> 2);
1454 int Uq1 =
ojph_max(e_qmax[1], kappa);
1460 eps1 |= (e_q[4] == e_qmax[1]);
1461 eps1 |= (e_q[5] == e_qmax[1]) << 1;
1462 eps1 |= (e_q[6] == e_qmax[1]) << 2;
1463 eps1 |= (e_q[7] == e_qmax[1]) << 3;
1466 max_e =
ojph_max(lep[0], lep[1]) - 1;
1467 lep[0] = (
ui8)e_q[7];
1468 lcxp[0] = (
ui8)(lcxp[0] | (
ui8)((rho[1] & 2) >> 1)); lcxp++;
1469 c_q0 = lcxp[0] + (lcxp[1] << 2);
1470 lcxp[0] = (
ui8)((rho[1] & 8) >> 3);
1471 ui16 tuple1 =
vlc_tbl1[(c_q1 << 8) + (rho[1] << 4) + eps1];
1472 vlc_encode(&vlc, tuple1 >> 8, (tuple1 >> 4) & 7);
1477 int m = (rho[1] & 1) ? Uq1 - (tuple1 & 1) : 0;
1479 m = (rho[1] & 2) ? Uq1 - ((tuple1 & 2) >> 1) : 0;
1481 m = (rho[1] & 4) ? Uq1 - ((tuple1 & 4) >> 2) : 0;
1483 m = (rho[1] & 8) ? Uq1 - ((tuple1 & 8) >> 3) : 0;
1495 c_q0 |= ((rho[1] & 4) >> 1) | ((rho[1] & 8) >> 2);
1496 s[0] = s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = 0;
1497 e_q[0]=e_q[1]=e_q[2]=e_q[3]=e_q[4]=e_q[5]=e_q[6]=e_q[7]=0;
1498 rho[0] = rho[1] = 0; e_qmax[0] = e_qmax[1] = 0;
1507 lengths[0] = mel.
pos + vlc.
pos + ms.
pos;
1515 coded->
buf[lengths[0]-1] = (
ui8)(num_bytes >> 4);
1516 coded->
buf[lengths[0]-2] = coded->
buf[lengths[0]-2] & 0xF0;
1517 coded->
buf[lengths[0]-2] =
1518 (
ui8)(coded->
buf[lengths[0]-2] | (num_bytes & 0xF));
void get_buffer(ui32 needed_bytes, coded_lists *&p)
static bool uvlc_init_tables()
Initializes uvlc_tbl0 and uvlc_tbl1 tables.
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 void ms_encode64(ms_struct *msp, ui64 cwd, int cwd_len)
static void vlc_encode(vlc_struct *vlcp, int cwd, int cwd_len)
void ojph_encode_codeblock32(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)
void ojph_encode_codeblock64(ui64 *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 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 void mel_encode(mel_struct *melp, bool bit)
static void mel_emit_bit(mel_struct *melp, int v)
bool initialize_block_encoder_tables()
static bool tables_initialized
static void vlc_init(vlc_struct *vlcp, ui32 buffer_size, ui8 *data)
static uvlc_tbl_struct uvlc_tbl[num_uvlc_entries]
const int num_uvlc_entries
static ui32 population_count(ui32 val)
static ui32 count_leading_zeros(ui32 val)
#define OJPH_ERROR(t,...)
bool last_greater_than_8F