You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
3.3KB

  1. /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
  2. the sign bit must be added afterwards. */
  3. /* first part of coeffs for last = 0. Indexed by [run][level-1] */
  4. static const UINT8 coeff_tab0[2][12][2] =
  5. {
  6. /* run = 0 */
  7. {
  8. {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7},
  9. {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21,10},
  10. {0x20,10}, {0x07,11}, {0x06,11}, {0x20,11}
  11. },
  12. /* run = 1 */
  13. {
  14. {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f,10},
  15. {0x21,11}, {0x50,12}, {0x00, 0}, {0x00, 0},
  16. {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  17. }
  18. };
  19. /* rest of coeffs for last = 0. indexing by [run-2][level-1] */
  20. static const UINT8 coeff_tab1[25][4][2] =
  21. {
  22. /* run = 2 */
  23. {
  24. {0x0e, 4}, {0x1d, 8}, {0x0e,10}, {0x51,12}
  25. },
  26. /* run = 3 */
  27. {
  28. {0x0d, 5}, {0x23, 9}, {0x0d,10}, {0x00, 0}
  29. },
  30. /* run = 4-26 */
  31. {
  32. {0x0c, 5}, {0x22, 9}, {0x52,12}, {0x00, 0}
  33. },
  34. {
  35. {0x0b, 5}, {0x0c,10}, {0x53,12}, {0x00, 0}
  36. },
  37. {
  38. {0x13, 6}, {0x0b,10}, {0x54,12}, {0x00, 0}
  39. },
  40. {
  41. {0x12, 6}, {0x0a,10}, {0x00, 0}, {0x00, 0}
  42. },
  43. {
  44. {0x11, 6}, {0x09,10}, {0x00, 0}, {0x00, 0}
  45. },
  46. {
  47. {0x10, 6}, {0x08,10}, {0x00, 0}, {0x00, 0}
  48. },
  49. {
  50. {0x16, 7}, {0x55,12}, {0x00, 0}, {0x00, 0}
  51. },
  52. {
  53. {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  54. },
  55. {
  56. {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  57. },
  58. {
  59. {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  60. },
  61. {
  62. {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  63. },
  64. {
  65. {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  66. },
  67. {
  68. {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  69. },
  70. {
  71. {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  72. },
  73. {
  74. {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  75. },
  76. {
  77. {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  78. },
  79. {
  80. {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  81. },
  82. {
  83. {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  84. },
  85. {
  86. {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  87. },
  88. {
  89. {0x22,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  90. },
  91. {
  92. {0x23,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  93. },
  94. {
  95. {0x56,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  96. },
  97. {
  98. {0x57,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  99. }
  100. };
  101. /* first coeffs of last = 1. indexing by [run][level-1] */
  102. static const UINT8 coeff_tab2[2][3][2] =
  103. {
  104. /* run = 0 */
  105. {
  106. {0x07, 4}, {0x19, 9}, {0x05,11}
  107. },
  108. /* run = 1 */
  109. {
  110. {0x0f, 6}, {0x04,11}, {0x00, 0}
  111. }
  112. };
  113. /* rest of coeffs for last = 1. indexing by [run-2] */
  114. static const UINT8 coeff_tab3[40][2] =
  115. {
  116. {0x0e, 6}, {0x0d, 6}, {0x0c, 6},
  117. {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7},
  118. {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8},
  119. {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8},
  120. {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9},
  121. {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},
  122. {0x07,10}, {0x06,10}, {0x05,10}, {0x04,10},
  123. {0x24,11}, {0x25,11}, {0x26,11}, {0x27,11},
  124. {0x58,12}, {0x59,12}, {0x5a,12}, {0x5b,12},
  125. {0x5c,12}, {0x5d,12}, {0x5e,12}, {0x5f,12},
  126. {0x00, 0}
  127. };
  128. /* intra MCBPC, mb_type = 3 */
  129. static UINT8 intra_MCBPC_code[4] = { 1, 1, 2, 3 };
  130. static UINT8 intra_MCBPC_bits[4] = { 1, 3, 3, 3 };
  131. /* inter MCBPC, mb_type = 0 then 3 */
  132. static UINT8 inter_MCBPC_code[8] = { 1, 3, 2, 5, 3, 4, 3, 3 };
  133. static UINT8 inter_MCBPC_bits[8] = { 1, 4, 4, 6, 5, 8, 8, 7 };
  134. static UINT8 cbpy_tab[16][2] =
  135. {
  136. {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
  137. {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
  138. };