213{
214 (void)gr;
215
216 int i, sfb, sfcIdx, btIdx, nrIdx;
217 int slen[4], nr[4];
218 int sfCompress, preFlag, intensityScale;
219
221 preFlag = 0;
222 intensityScale = 0;
223
224
225 if (! ((modeExt & 0x01) && (ch == 1)) ) {
226
227 if (sfCompress < 400) {
228
229 slen[0] = (sfCompress >> 4) / 5;
230 slen[1]= (sfCompress >> 4) % 5;
231 slen[2]= (sfCompress & 0x0f) >> 2;
232 slen[3]= (sfCompress & 0x03);
233 sfcIdx = 0;
234 } else if (sfCompress < 500) {
235
236 sfCompress -= 400;
237 slen[0] = (sfCompress >> 2) / 5;
238 slen[1]= (sfCompress >> 2) % 5;
239 slen[2]= (sfCompress & 0x03);
240 slen[3]= 0;
241 sfcIdx = 1;
242 } else {
243
244 sfCompress -= 500;
245 slen[0] = sfCompress / 3;
246 slen[1] = sfCompress % 3;
247 slen[2] = slen[3] = 0;
249
250 slen[2] = slen[1];
251 slen[1] = slen[0];
252 }
253 preFlag = 1;
254 sfcIdx = 2;
255 }
256 } else {
257
258 intensityScale = sfCompress & 0x01;
259 sfCompress >>= 1;
260 if (sfCompress < 180) {
261
262 slen[0] = (sfCompress / 36);
263 slen[1] = (sfCompress % 36) / 6;
264 slen[2] = (sfCompress % 36) % 6;
265 slen[3] = 0;
266 sfcIdx = 3;
267 } else if (sfCompress < 244) {
268
269 sfCompress -= 180;
270 slen[0] = (sfCompress & 0x3f) >> 4;
271 slen[1] = (sfCompress & 0x0f) >> 2;
272 slen[2] = (sfCompress & 0x03);
273 slen[3] = 0;
274 sfcIdx = 4;
275 } else {
276
277 sfCompress -= 244;
278 slen[0] = (sfCompress / 3);
279 slen[1] = (sfCompress % 3);
280 slen[2] = slen[3] = 0;
281 sfcIdx = 5;
282 }
283 }
284
285
286 btIdx = 0;
289 for (i = 0; i < 4; i++)
290 nr[i] = (
int)
NRTab[sfcIdx][btIdx][i];
291
292
293 if( (modeExt & 0x01) && (ch == 1) ) {
294 for (i = 0; i < 4; i++) {
295 sfjs->
slen[i] = slen[i];
297 }
299 }
301
302
305
306 for (sfb=0; sfb < 6; sfb++) {
307 sfis->
l[sfb] = (char)
GetBits(bsi, slen[0]);
308 }
309 sfb = 3;
310 nrIdx = 1;
311 } else {
312
313 sfb = 0;
314 nrIdx = 0;
315 }
316
317
318 for ( ; nrIdx <= 3; nrIdx++) {
319 for (i=0; i < nr[nrIdx]; i++, sfb++) {
320 sfis->
s[sfb][0] = (char)
GetBits(bsi, slen[nrIdx]);
321 sfis->
s[sfb][1] = (char)
GetBits(bsi, slen[nrIdx]);
322 sfis->
s[sfb][2] = (char)
GetBits(bsi, slen[nrIdx]);
323 }
324 }
325
326 sfis->
s[12][0] = sfis->
s[12][1] = sfis->
s[12][2] = 0;
327 } else {
328
329 sfb = 0;
330 for (nrIdx = 0; nrIdx <= 3; nrIdx++) {
331 for(i=0; i < nr[nrIdx]; i++, sfb++) {
332 sfis->
l[sfb] = (char)
GetBits(bsi, slen[nrIdx]);
333 }
334 }
335
336 sfis->
l[21] = sfis->
l[22] = 0;
337
338 }
339}
uint32_t GetBits(BitStreamInfo *bsi, int32_t nBits) FL_NOEXCEPT
static const char NRTab[6][3][4]