34#define BSDEC_VLC_MAXNZ 11
36#define BSDEC_VLC_HALFWORD(e) ((uint16_t)((e) & 0xffff))
37#define BSDEC_VLC_SUFFIXBITS(e) (((e) >> 16) & 0x1f)
38#define BSDEC_VLC_KIND(e) (((e) >> 21) & 3)
39#define BSDEC_VLC_VALID(e) ((e) & (1 << 23))
41#define BSDEC_VLC_NORMAL 0
42#define BSDEC_VLC_EOB 1
43#define BSDEC_VLC_ESCAPE 2
47static const uint8_t c_bsdecVlcSuffixBits[32] = {2, 3, 6, 3, 3, 0, 4, 5, 5, 5, 5, 5, 0, 0, 0, 0,
48 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
50static const uint16_t c_bsdecVlcOffset[32] = {0, 4, 12, 76, 84, 92, 93, 109, 141, 173, 205,
51 237, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
52 269, 269, 269, 269, 269, 269, 269, 269, 269, 269};
54static const uint32_t c_bsdecVlc[270] = {
345#define BSDEC_VLC_LENGTH(e) (((e) >> 16) & 0x1f)
346static const uint32_t c_bsdecPrim9[512] = {
347 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00c60000,
348 0x00c60000, 0x00c60000, 0x00c60000, 0x00c60000, 0x00c60000, 0x00c60000, 0x00c60000, 0x00880802, 0x00880802,
349 0x00880bfe, 0x00880bfe, 0x00882401, 0x00882401, 0x008827ff, 0x008827ff, 0x00880004, 0x00880004, 0x008803fc,
350 0x008803fc, 0x00882001, 0x00882001, 0x008823ff, 0x008823ff, 0x00871c01, 0x00871c01, 0x00871c01, 0x00871c01,
351 0x00871fff, 0x00871fff, 0x00871fff, 0x00871fff, 0x00871801, 0x00871801, 0x00871801, 0x00871801, 0x00871bff,
352 0x00871bff, 0x00871bff, 0x00871bff, 0x00870402, 0x00870402, 0x00870402, 0x00870402, 0x008707fe, 0x008707fe,
353 0x008707fe, 0x008707fe, 0x00871401, 0x00871401, 0x00871401, 0x00871401, 0x008717ff, 0x008717ff, 0x008717ff,
354 0x008717ff, 0x00893401, 0x008937ff, 0x00890006, 0x008903fa, 0x00893001, 0x008933ff, 0x00892c01, 0x00892fff,
355 0x00890c02, 0x00890ffe, 0x00890403, 0x008907fd, 0x00890005, 0x008903fb, 0x00892801, 0x00892bff, 0x00860003,
356 0x00860003, 0x00860003, 0x00860003, 0x00860003, 0x00860003, 0x00860003, 0x00860003, 0x008603fd, 0x008603fd,
357 0x008603fd, 0x008603fd, 0x008603fd, 0x008603fd, 0x008603fd, 0x008603fd, 0x00861001, 0x00861001, 0x00861001,
358 0x00861001, 0x00861001, 0x00861001, 0x00861001, 0x00861001, 0x008613ff, 0x008613ff, 0x008613ff, 0x008613ff,
359 0x008613ff, 0x008613ff, 0x008613ff, 0x008613ff, 0x00860c01, 0x00860c01, 0x00860c01, 0x00860c01, 0x00860c01,
360 0x00860c01, 0x00860c01, 0x00860c01, 0x00860fff, 0x00860fff, 0x00860fff, 0x00860fff, 0x00860fff, 0x00860fff,
361 0x00860fff, 0x00860fff, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002,
362 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002, 0x00850002,
363 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe,
364 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x008503fe, 0x00850801, 0x00850801,
365 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850801,
366 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850801, 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff,
367 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff, 0x00850bff,
368 0x00850bff, 0x00850bff, 0x00850bff, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401,
369 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401,
370 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401,
371 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x00840401, 0x008407ff,
372 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff,
373 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff,
374 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff,
375 0x008407ff, 0x008407ff, 0x008407ff, 0x008407ff, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
376 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
377 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
378 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
379 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
380 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
381 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
382 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
383 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
384 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
385 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
386 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
387 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
388 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00,
389 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00a2fe00, 0x00830001, 0x00830001, 0x00830001,
390 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001,
391 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001,
392 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001,
393 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001,
394 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001,
395 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001,
396 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x00830001, 0x008303ff, 0x008303ff,
397 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
398 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
399 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
400 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
401 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
402 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
403 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff, 0x008303ff,
406static const uint32_t c_bsdecSec9[512] = {
407 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
408 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
409 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
410 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x008f001f, 0x008f03e1, 0x008f001e, 0x008f03e2,
411 0x008f001d, 0x008f03e3, 0x008f001c, 0x008f03e4, 0x008f001b, 0x008f03e5, 0x008f001a, 0x008f03e6, 0x008f0019,
412 0x008f03e7, 0x008f0018, 0x008f03e8, 0x008f0017, 0x008f03e9, 0x008f0016, 0x008f03ea, 0x008f0015, 0x008f03eb,
413 0x008f0014, 0x008f03ec, 0x008f0013, 0x008f03ed, 0x008f0012, 0x008f03ee, 0x008f0011, 0x008f03ef, 0x008f0010,
414 0x008f03f0, 0x008e2802, 0x008e2802, 0x008e2bfe, 0x008e2bfe, 0x008e2402, 0x008e2402, 0x008e27fe, 0x008e27fe,
415 0x008e1403, 0x008e1403, 0x008e17fd, 0x008e17fd, 0x008e0c04, 0x008e0c04, 0x008e0ffc, 0x008e0ffc, 0x008e0805,
416 0x008e0805, 0x008e0bfb, 0x008e0bfb, 0x008e0407, 0x008e0407, 0x008e07f9, 0x008e07f9, 0x008e0406, 0x008e0406,
417 0x008e07fa, 0x008e07fa, 0x008e000f, 0x008e000f, 0x008e03f1, 0x008e03f1, 0x008e000e, 0x008e000e, 0x008e03f2,
418 0x008e03f2, 0x008e000d, 0x008e000d, 0x008e03f3, 0x008e03f3, 0x008e000c, 0x008e000c, 0x008e03f4, 0x008e03f4,
419 0x008e6801, 0x008e6801, 0x008e6bff, 0x008e6bff, 0x008e6401, 0x008e6401, 0x008e67ff, 0x008e67ff, 0x008e6001,
420 0x008e6001, 0x008e63ff, 0x008e63ff, 0x008e5c01, 0x008e5c01, 0x008e5fff, 0x008e5fff, 0x008e5801, 0x008e5801,
421 0x008e5bff, 0x008e5bff, 0x008d000b, 0x008d000b, 0x008d000b, 0x008d000b, 0x008d03f5, 0x008d03f5, 0x008d03f5,
422 0x008d03f5, 0x008d2002, 0x008d2002, 0x008d2002, 0x008d2002, 0x008d23fe, 0x008d23fe, 0x008d23fe, 0x008d23fe,
423 0x008d1003, 0x008d1003, 0x008d1003, 0x008d1003, 0x008d13fd, 0x008d13fd, 0x008d13fd, 0x008d13fd, 0x008d000a,
424 0x008d000a, 0x008d000a, 0x008d000a, 0x008d03f6, 0x008d03f6, 0x008d03f6, 0x008d03f6, 0x008d0804, 0x008d0804,
425 0x008d0804, 0x008d0804, 0x008d0bfc, 0x008d0bfc, 0x008d0bfc, 0x008d0bfc, 0x008d1c02, 0x008d1c02, 0x008d1c02,
426 0x008d1c02, 0x008d1ffe, 0x008d1ffe, 0x008d1ffe, 0x008d1ffe, 0x008d5401, 0x008d5401, 0x008d5401, 0x008d5401,
427 0x008d57ff, 0x008d57ff, 0x008d57ff, 0x008d57ff, 0x008d5001, 0x008d5001, 0x008d5001, 0x008d5001, 0x008d53ff,
428 0x008d53ff, 0x008d53ff, 0x008d53ff, 0x008d0009, 0x008d0009, 0x008d0009, 0x008d0009, 0x008d03f7, 0x008d03f7,
429 0x008d03f7, 0x008d03f7, 0x008d4c01, 0x008d4c01, 0x008d4c01, 0x008d4c01, 0x008d4fff, 0x008d4fff, 0x008d4fff,
430 0x008d4fff, 0x008d4801, 0x008d4801, 0x008d4801, 0x008d4801, 0x008d4bff, 0x008d4bff, 0x008d4bff, 0x008d4bff,
431 0x008d0405, 0x008d0405, 0x008d0405, 0x008d0405, 0x008d07fb, 0x008d07fb, 0x008d07fb, 0x008d07fb, 0x008d0c03,
432 0x008d0c03, 0x008d0c03, 0x008d0c03, 0x008d0ffd, 0x008d0ffd, 0x008d0ffd, 0x008d0ffd, 0x008d0008, 0x008d0008,
433 0x008d0008, 0x008d0008, 0x008d03f8, 0x008d03f8, 0x008d03f8, 0x008d03f8, 0x008d1802, 0x008d1802, 0x008d1802,
434 0x008d1802, 0x008d1bfe, 0x008d1bfe, 0x008d1bfe, 0x008d1bfe, 0x008d4401, 0x008d4401, 0x008d4401, 0x008d4401,
435 0x008d47ff, 0x008d47ff, 0x008d47ff, 0x008d47ff, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001,
436 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001, 0x008b4001,
437 0x008b4001, 0x008b4001, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff,
438 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff, 0x008b43ff,
439 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402,
440 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b1402, 0x008b17fe, 0x008b17fe,
441 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe,
442 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b17fe, 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007,
443 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007, 0x008b0007,
444 0x008b0007, 0x008b0007, 0x008b0007, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9,
445 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9, 0x008b03f9,
446 0x008b03f9, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803,
447 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0803, 0x008b0bfd,
448 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd,
449 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0bfd, 0x008b0404, 0x008b0404, 0x008b0404,
450 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404,
451 0x008b0404, 0x008b0404, 0x008b0404, 0x008b0404, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc,
452 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc, 0x008b07fc,
453 0x008b07fc, 0x008b07fc, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01,
454 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01, 0x008b3c01,
455 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff,
456 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3fff, 0x008b3801, 0x008b3801,
457 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801,
458 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3801, 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff,
459 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b3bff,
460 0x008b3bff, 0x008b3bff, 0x008b3bff, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002,
461 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002, 0x008b1002,
462 0x008b1002, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe,
463 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe, 0x008b13fe,
471static const uint8_t c_bsdecDcLumaCode[9] = {0x04, 0x00, 0x01, 0x05, 0x06, 0x0e, 0x1e, 0x3e, 0x7e};
472static const uint8_t c_bsdecDcLumaBits[9] = {3, 2, 2, 3, 3, 4, 5, 6, 7};
473static const uint8_t c_bsdecDcChromaCode[9] = {0x00, 0x01, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0x7e, 0xfe};
474static const uint8_t c_bsdecDcChromaBits[9] = {2, 2, 2, 3, 4, 5, 6, 7, 8};