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.

2444 lines
104KB

  1. /*
  2. * BitJazz SheerVideo decoder
  3. * Copyright (c) 2016 Paul B Mahol
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include <string.h>
  24. #include "libavutil/intreadwrite.h"
  25. #include "avcodec.h"
  26. #include "get_bits.h"
  27. #include "internal.h"
  28. #include "thread.h"
  29. typedef struct SheerVideoContext {
  30. unsigned format;
  31. VLC vlc[2];
  32. void (*decode_frame)(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb);
  33. } SheerVideoContext;
  34. static const uint8_t l_r_rgb[256] = {
  35. 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8,
  36. 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
  37. 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12,
  38. 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  39. 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  40. 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  41. 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  42. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  43. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  44. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15,
  45. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
  46. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13,
  47. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12,
  48. 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10,
  49. 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
  50. 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 4, 4, 4,
  51. };
  52. static const uint8_t l_r_rgbi[256] = {
  53. 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7,
  54. 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
  55. 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
  56. 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  57. 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  58. 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
  59. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15,
  60. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  61. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  62. 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  63. 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13,
  64. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12,
  65. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11,
  66. 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  67. 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8,
  68. 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4,
  69. };
  70. static const uint8_t l_g_rgbi[256] = {
  71. 1, 3, 4, 5, 6, 7, 7, 8, 9, 9, 10, 10, 10, 10, 11, 11,
  72. 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
  73. 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16,
  74. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  75. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  76. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  77. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  78. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  79. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  80. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  81. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  82. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  83. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  84. 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14,
  85. 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12,
  86. 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 7, 6, 5, 5, 3,
  87. };
  88. static const uint8_t l_g_rgb[256] = {
  89. 2, 2, 4, 4, 6, 7, 9, 9, 10, 11, 11, 11, 12, 12, 12, 13,
  90. 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
  91. 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  92. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  93. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  94. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  95. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  96. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  97. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  98. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  99. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  100. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  101. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  102. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15,
  103. 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
  104. 13, 13, 12, 12, 12, 11, 11, 11, 10, 9, 9, 8, 6, 4, 3, 3,
  105. };
  106. static const uint8_t l_y_ybr[256] = {
  107. 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8,
  108. 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
  109. 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
  110. 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
  111. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
  112. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
  113. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  114. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  115. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  116. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  117. 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  118. 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  119. 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
  120. 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11,
  121. 11, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 8, 8,
  122. 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 4, 4, 3,
  123. };
  124. static const uint8_t l_u_ybr[256] = {
  125. 1, 2, 4, 6, 9, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14,
  126. 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  127. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  128. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  129. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  130. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  131. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  132. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  133. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  134. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  135. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  136. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  137. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  138. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  139. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15,
  140. 14, 14, 14, 14, 14, 13, 13, 13, 12, 12, 11, 11, 10, 8, 5, 3,
  141. };
  142. static const uint8_t l_y_ybyr[256] = {
  143. 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8,
  144. 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
  145. 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12,
  146. 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13,
  147. 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  148. 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  149. 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  150. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  151. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  152. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15,
  153. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14,
  154. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
  155. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12,
  156. 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10,
  157. 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
  158. 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 4, 4, 4,
  159. };
  160. static const uint8_t l_u_ybyr[256] = {
  161. 1, 2, 4, 6, 8, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14,
  162. 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16,
  163. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  164. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  165. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  166. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  167. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  168. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  169. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  170. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  171. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  172. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  173. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  174. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  175. 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14,
  176. 14, 14, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 8, 7, 6, 3,
  177. };
  178. static const uint8_t l_y_byry[256] = {
  179. 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8,
  180. 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
  181. 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
  182. 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
  183. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
  184. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
  185. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  186. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  187. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  188. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  189. 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  190. 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  191. 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
  192. 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11,
  193. 11, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 8, 8,
  194. 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 4, 4, 3,
  195. };
  196. static const uint8_t l_u_byry[256] = {
  197. 1, 2, 4, 6, 8, 9, 9, 10, 11, 11, 12, 12, 13, 13, 13, 14,
  198. 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16,
  199. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  200. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  201. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  202. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  203. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  204. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  205. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  206. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  207. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  208. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  209. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  210. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  211. 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14,
  212. 14, 14, 14, 13, 13, 12, 12, 12, 11, 11, 10, 9, 8, 7, 6, 3,
  213. };
  214. static const uint8_t l_y_ybr10[1024] = {
  215. 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7,
  216. 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  217. 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
  218. 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  219. 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11,
  220. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  221. 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  222. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  223. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  224. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  225. 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  226. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  227. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  228. 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  229. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  230. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  231. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  232. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
  233. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  234. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  235. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  236. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  237. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  238. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  239. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  240. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  241. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  242. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  243. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  244. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  245. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  246. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  247. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  248. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  249. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  250. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  251. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  252. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  253. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  254. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  255. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  256. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  257. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  258. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  259. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  260. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  261. 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15,
  262. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  263. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  264. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  265. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  266. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  267. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  268. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
  269. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  270. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  271. 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  272. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
  273. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  274. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10,
  275. 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
  276. 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
  277. 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
  278. 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5,
  279. };
  280. static const uint8_t l_u_ybr10[1024] = {
  281. 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10, 11, 11,
  282. 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
  283. 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  284. 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16,
  285. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  286. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  287. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  288. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  289. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  290. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  291. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  292. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  293. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  294. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  295. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  296. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  297. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  298. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  299. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  300. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  301. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  302. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  303. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  304. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  305. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  306. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  307. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  308. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  309. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  310. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  311. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  312. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  313. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  314. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  315. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  316. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  317. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  318. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  319. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  320. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  321. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  322. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  323. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  324. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  325. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  326. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  327. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  328. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  329. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  330. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  331. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  332. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  333. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  334. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  335. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  336. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  337. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  338. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  339. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  340. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  341. 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15,
  342. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
  343. 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12,
  344. 12, 11, 11, 11, 10, 10, 9, 9, 8, 8, 7, 6, 5, 4, 4, 3,
  345. };
  346. static const uint8_t l_r_rgbx[1024] = {
  347. 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,
  348. 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  349. 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
  350. 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  351. 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  352. 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  353. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12,
  354. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  355. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  356. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  357. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  358. 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
  359. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  360. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  361. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15,
  362. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  363. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  364. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  365. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  366. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
  367. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  368. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  369. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  370. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  371. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  372. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  373. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  374. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  375. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  376. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  377. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  378. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  379. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  380. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  381. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  382. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  383. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  384. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  385. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  386. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  387. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  388. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  389. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  390. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  391. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15,
  392. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  393. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  394. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  395. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  396. 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  397. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  398. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  399. 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13,
  400. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  401. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  402. 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  403. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  404. 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  405. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  406. 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  407. 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9,
  408. 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
  409. 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7,
  410. 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5,
  411. };
  412. static const uint8_t l_g_rgbx[1024] = {
  413. 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7,
  414. 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12,
  415. 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  416. 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  417. 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  418. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  419. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
  420. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  421. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  422. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  423. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  424. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  425. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  426. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  427. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  428. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  429. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  430. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  431. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  432. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  433. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  434. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  435. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  436. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  437. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  438. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  439. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  440. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  441. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  442. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  443. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  444. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  445. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  446. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  447. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  448. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  449. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  450. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  451. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  452. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  453. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  454. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  455. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  456. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  457. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  458. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  459. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  460. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  461. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  462. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  463. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  464. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  465. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  466. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  467. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  468. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  469. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  470. 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  471. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  472. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
  473. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13,
  474. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12,
  475. 12, 12, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9,
  476. 8, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4,
  477. };
  478. static const uint8_t l_y_yry10[1024] = {
  479. 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7,
  480. 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  481. 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
  482. 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  483. 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11,
  484. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  485. 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  486. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  487. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  488. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  489. 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  490. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  491. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  492. 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  493. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  494. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  495. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  496. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
  497. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  498. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  499. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  500. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  501. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  502. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  503. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  504. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  505. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  506. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  507. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  508. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  509. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  510. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  511. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  512. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  513. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  514. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  515. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  516. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  517. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  518. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  519. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  520. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  521. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  522. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  523. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  524. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  525. 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15,
  526. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  527. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  528. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  529. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  530. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  531. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  532. 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
  533. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  534. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  535. 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  536. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
  537. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  538. 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10,
  539. 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
  540. 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
  541. 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
  542. 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5,
  543. };
  544. static const uint8_t l_u_yry10[1024] = {
  545. 2, 3, 3, 4, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10,
  546. 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
  547. 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  548. 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  549. 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  550. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  551. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  552. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  553. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  554. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  555. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  556. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  557. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  558. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  559. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  560. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  561. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  562. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  563. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  564. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  565. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  566. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  567. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  568. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  569. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  570. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  571. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  572. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  573. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  574. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  575. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  576. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  577. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  578. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  579. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  580. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  581. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  582. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  583. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  584. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  585. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  586. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  587. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  588. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  589. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  590. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  591. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  592. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  593. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  594. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  595. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  596. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  597. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  598. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  599. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  600. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  601. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  602. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  603. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  604. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  605. 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  606. 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
  607. 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
  608. 10, 10, 10, 10, 9, 9, 9, 8, 8, 7, 7, 6, 5, 4, 4, 3,
  609. };
  610. static const uint8_t l_y_ybri[256] = {
  611. 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8,
  612. 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
  613. 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12,
  614. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
  615. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
  616. 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
  617. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  618. 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  619. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  620. 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  621. 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  622. 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  623. 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  624. 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10,
  625. 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8,
  626. 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 3,
  627. };
  628. static const uint8_t l_u_ybri[256] = {
  629. 1, 3, 5, 6, 8, 8, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13,
  630. 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16,
  631. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  632. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  633. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  634. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  635. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  636. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  637. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  638. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  639. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  640. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  641. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  642. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  643. 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14,
  644. 14, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 8, 8, 6, 5, 2,
  645. };
  646. static const uint8_t l_y_byryi[256] = {
  647. 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8,
  648. 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
  649. 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12,
  650. 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
  651. 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
  652. 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
  653. 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  654. 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  655. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  656. 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  657. 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  658. 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  659. 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  660. 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10,
  661. 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8,
  662. 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 4, 4, 3,
  663. };
  664. static const uint8_t l_u_byryi[256] = {
  665. 1, 3, 4, 6, 6, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11,
  666. 12, 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15,
  667. 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  668. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  669. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  670. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  671. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  672. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  673. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  674. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  675. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  676. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  677. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  678. 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15,
  679. 15, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12,
  680. 12, 11, 11, 11, 10, 10, 10, 9, 9, 8, 8, 7, 7, 5, 4, 3,
  681. };
  682. static void decode_ca4p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  683. {
  684. SheerVideoContext *s = avctx->priv_data;
  685. uint16_t *dst_y, *dst_u, *dst_v, *dst_a;
  686. int x, y;
  687. dst_a = (uint16_t *)p->data[3];
  688. dst_y = (uint16_t *)p->data[0];
  689. dst_u = (uint16_t *)p->data[1];
  690. dst_v = (uint16_t *)p->data[2];
  691. if (get_bits1(gb)) {
  692. for (x = 0; x < avctx->width; x++) {
  693. dst_a[x] = get_bits(gb, 10);
  694. dst_y[x] = get_bits(gb, 10);
  695. dst_u[x] = get_bits(gb, 10);
  696. dst_v[x] = get_bits(gb, 10);
  697. }
  698. } else {
  699. int pred[4] = { 502, 512, 512, 502 };
  700. for (x = 0; x < avctx->width; x++) {
  701. int y, u, v, a;
  702. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  703. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  704. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  705. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  706. dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff;
  707. dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff;
  708. dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff;
  709. dst_v[x] = pred[2] = (v + pred[2]) & 0x3ff;
  710. }
  711. }
  712. dst_y += p->linesize[0] / 2;
  713. dst_u += p->linesize[1] / 2;
  714. dst_v += p->linesize[2] / 2;
  715. dst_a += p->linesize[3] / 2;
  716. for (y = 1; y < avctx->height; y++) {
  717. if (get_bits1(gb)) {
  718. for (x = 0; x < avctx->width; x++) {
  719. dst_a[x] = get_bits(gb, 10);
  720. dst_y[x] = get_bits(gb, 10);
  721. dst_u[x] = get_bits(gb, 10);
  722. dst_v[x] = get_bits(gb, 10);
  723. }
  724. } else {
  725. int pred_TL[4], pred_L[4], pred_T[4];
  726. int y, u, v, a;
  727. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
  728. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
  729. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
  730. pred_TL[3] = pred_L[3] = dst_a[-p->linesize[3] / 2];
  731. for (x = 0; x < avctx->width; x++) {
  732. pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
  733. pred_T[1] = dst_u[-p->linesize[1] / 2 + x];
  734. pred_T[2] = dst_v[-p->linesize[2] / 2 + x];
  735. pred_T[3] = dst_a[-p->linesize[3] / 2 + x];
  736. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  737. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  738. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  739. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  740. dst_a[x] = pred_L[3] = (a + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0x3ff;
  741. dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
  742. dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
  743. dst_v[x] = pred_L[2] = (v + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
  744. pred_TL[0] = pred_T[0];
  745. pred_TL[1] = pred_T[1];
  746. pred_TL[2] = pred_T[2];
  747. pred_TL[3] = pred_T[3];
  748. }
  749. }
  750. dst_y += p->linesize[0] / 2;
  751. dst_u += p->linesize[1] / 2;
  752. dst_v += p->linesize[2] / 2;
  753. dst_a += p->linesize[3] / 2;
  754. }
  755. }
  756. static void decode_ybr10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  757. {
  758. SheerVideoContext *s = avctx->priv_data;
  759. uint16_t *dst_y, *dst_u, *dst_v;
  760. int x, y;
  761. dst_y = (uint16_t *)p->data[0];
  762. dst_u = (uint16_t *)p->data[1];
  763. dst_v = (uint16_t *)p->data[2];
  764. if (get_bits1(gb)) {
  765. for (x = 0; x < avctx->width; x++) {
  766. dst_y[x] = get_bits(gb, 10);
  767. dst_u[x] = get_bits(gb, 10);
  768. dst_v[x] = get_bits(gb, 10);
  769. }
  770. } else {
  771. int pred[4] = { 502, 512, 512, 512 };
  772. for (x = 0; x < avctx->width; x++) {
  773. int y, u, v;
  774. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  775. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  776. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  777. dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff;
  778. dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff;
  779. dst_v[x] = pred[2] = (v + pred[2]) & 0x3ff;
  780. }
  781. }
  782. dst_y += p->linesize[0] / 2;
  783. dst_u += p->linesize[1] / 2;
  784. dst_v += p->linesize[2] / 2;
  785. for (y = 1; y < avctx->height; y++) {
  786. if (get_bits1(gb)) {
  787. for (x = 0; x < avctx->width; x++) {
  788. dst_y[x] = get_bits(gb, 10);
  789. dst_u[x] = get_bits(gb, 10);
  790. dst_v[x] = get_bits(gb, 10);
  791. }
  792. } else {
  793. int pred_TL[4], pred_L[4], pred_T[4];
  794. int y, u, v;
  795. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
  796. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
  797. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
  798. for (x = 0; x < avctx->width; x++) {
  799. pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
  800. pred_T[1] = dst_u[-p->linesize[1] / 2 + x];
  801. pred_T[2] = dst_v[-p->linesize[2] / 2 + x];
  802. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  803. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  804. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  805. dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
  806. dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
  807. dst_v[x] = pred_L[2] = (v + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
  808. pred_TL[0] = pred_T[0];
  809. pred_TL[1] = pred_T[1];
  810. pred_TL[2] = pred_T[2];
  811. }
  812. }
  813. dst_y += p->linesize[0] / 2;
  814. dst_u += p->linesize[1] / 2;
  815. dst_v += p->linesize[2] / 2;
  816. }
  817. }
  818. static void decode_yry10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  819. {
  820. SheerVideoContext *s = avctx->priv_data;
  821. uint16_t *dst_y, *dst_u, *dst_v;
  822. int x, y;
  823. dst_y = (uint16_t *)p->data[0];
  824. dst_u = (uint16_t *)p->data[1];
  825. dst_v = (uint16_t *)p->data[2];
  826. if (get_bits1(gb)) {
  827. for (x = 0; x < avctx->width; x += 2) {
  828. dst_y[x ] = get_bits(gb, 10);
  829. dst_u[x / 2] = get_bits(gb, 10);
  830. dst_y[x + 1] = get_bits(gb, 10);
  831. dst_v[x / 2] = get_bits(gb, 10);
  832. }
  833. } else {
  834. int pred[4] = { 502, 512, 512, 0 };
  835. for (x = 0; x < avctx->width; x += 2) {
  836. int y1, y2, u, v;
  837. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  838. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  839. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  840. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  841. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff;
  842. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff;
  843. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0x3ff;
  844. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0x3ff;
  845. }
  846. }
  847. dst_y += p->linesize[0] / 2;
  848. dst_u += p->linesize[1] / 2;
  849. dst_v += p->linesize[2] / 2;
  850. for (y = 1; y < avctx->height; y++) {
  851. if (get_bits1(gb)) {
  852. for (x = 0; x < avctx->width; x += 2) {
  853. dst_y[x ] = get_bits(gb, 10);
  854. dst_u[x / 2] = get_bits(gb, 10);
  855. dst_y[x + 1] = get_bits(gb, 10);
  856. dst_v[x / 2] = get_bits(gb, 10);
  857. }
  858. } else {
  859. int pred_TL[6], pred_L[6], pred_T[6];
  860. int y1, y2, u, v;
  861. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
  862. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
  863. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
  864. for (x = 0; x < avctx->width; x += 2) {
  865. pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
  866. pred_T[3] = dst_y[-p->linesize[0] / 2 + x + 1];
  867. pred_T[1] = dst_u[-p->linesize[1] / 2 + x / 2];
  868. pred_T[2] = dst_v[-p->linesize[2] / 2 + x / 2];
  869. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  870. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  871. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  872. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  873. dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
  874. dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0x3ff;
  875. dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0x3ff;
  876. dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0x3ff;
  877. pred_TL[0] = pred_T[3];
  878. pred_TL[1] = pred_T[1];
  879. pred_TL[2] = pred_T[2];
  880. }
  881. }
  882. dst_y += p->linesize[0] / 2;
  883. dst_u += p->linesize[1] / 2;
  884. dst_v += p->linesize[2] / 2;
  885. }
  886. }
  887. static void decode_ca2p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  888. {
  889. SheerVideoContext *s = avctx->priv_data;
  890. uint16_t *dst_y, *dst_u, *dst_v, *dst_a;
  891. int x, y;
  892. dst_y = (uint16_t *)p->data[0];
  893. dst_u = (uint16_t *)p->data[1];
  894. dst_v = (uint16_t *)p->data[2];
  895. dst_a = (uint16_t *)p->data[3];
  896. if (get_bits1(gb)) {
  897. for (x = 0; x < avctx->width; x += 2) {
  898. dst_a[x ] = get_bits(gb, 10);
  899. dst_y[x ] = get_bits(gb, 10);
  900. dst_u[x / 2] = get_bits(gb, 10);
  901. dst_a[x + 1] = get_bits(gb, 10);
  902. dst_y[x + 1] = get_bits(gb, 10);
  903. dst_v[x / 2] = get_bits(gb, 10);
  904. }
  905. } else {
  906. int pred[4] = { 502, 512, 512, 502 };
  907. for (x = 0; x < avctx->width; x += 2) {
  908. int y1, y2, u, v, a1, a2;
  909. a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  910. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  911. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  912. a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  913. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  914. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  915. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff;
  916. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff;
  917. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0x3ff;
  918. dst_a[x ] = pred[3] = (a1 + pred[3]) & 0x3ff;
  919. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0x3ff;
  920. dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0x3ff;
  921. }
  922. }
  923. dst_y += p->linesize[0] / 2;
  924. dst_u += p->linesize[1] / 2;
  925. dst_v += p->linesize[2] / 2;
  926. dst_a += p->linesize[3] / 2;
  927. for (y = 1; y < avctx->height; y++) {
  928. if (get_bits1(gb)) {
  929. for (x = 0; x < avctx->width; x += 2) {
  930. dst_a[x ] = get_bits(gb, 10);
  931. dst_y[x ] = get_bits(gb, 10);
  932. dst_u[x / 2] = get_bits(gb, 10);
  933. dst_a[x + 1] = get_bits(gb, 10);
  934. dst_y[x + 1] = get_bits(gb, 10);
  935. dst_v[x / 2] = get_bits(gb, 10);
  936. }
  937. } else {
  938. int pred_TL[6], pred_L[6], pred_T[6];
  939. int y1, y2, u, v, a1, a2;
  940. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
  941. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
  942. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
  943. pred_TL[4] = pred_L[4] = dst_a[-p->linesize[3] / 2];
  944. for (x = 0; x < avctx->width; x += 2) {
  945. pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
  946. pred_T[3] = dst_y[-p->linesize[0] / 2 + x + 1];
  947. pred_T[1] = dst_u[-p->linesize[1] / 2 + x / 2];
  948. pred_T[2] = dst_v[-p->linesize[2] / 2 + x / 2];
  949. pred_T[4] = dst_a[-p->linesize[3] / 2 + x];
  950. pred_T[5] = dst_a[-p->linesize[3] / 2 + x + 1];
  951. a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  952. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  953. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  954. a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  955. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  956. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  957. dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
  958. dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0x3ff;
  959. dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0x3ff;
  960. dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0x3ff;
  961. dst_a[x ] = pred_L[4] = (a1 + ((3 * (pred_T[4] + pred_L[4]) - 2 * pred_TL[4]) >> 2)) & 0x3ff;
  962. dst_a[x + 1] = pred_L[4] = (a2 + ((3 * (pred_T[5] + pred_L[4]) - 2 * pred_T[4]) >> 2)) & 0x3ff;
  963. pred_TL[0] = pred_T[3];
  964. pred_TL[1] = pred_T[1];
  965. pred_TL[2] = pred_T[2];
  966. pred_TL[4] = pred_T[5];
  967. }
  968. }
  969. dst_y += p->linesize[0] / 2;
  970. dst_u += p->linesize[1] / 2;
  971. dst_v += p->linesize[2] / 2;
  972. dst_a += p->linesize[3] / 2;
  973. }
  974. }
  975. static void decode_c82i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  976. {
  977. SheerVideoContext *s = avctx->priv_data;
  978. uint8_t *dst_y, *dst_u, *dst_v, *dst_a;
  979. int x, y;
  980. dst_y = p->data[0];
  981. dst_u = p->data[1];
  982. dst_v = p->data[2];
  983. dst_a = p->data[3];
  984. for (y = 0; y < avctx->height; y += 1) {
  985. if (get_bits1(gb)) {
  986. for (x = 0; x < avctx->width; x += 2) {
  987. dst_a[x ] = get_bits(gb, 8);
  988. dst_y[x ] = get_bits(gb, 8);
  989. dst_u[x / 2] = get_bits(gb, 8);
  990. dst_a[x + 1] = get_bits(gb, 8);
  991. dst_y[x + 1] = get_bits(gb, 8);
  992. dst_v[x / 2] = get_bits(gb, 8);
  993. }
  994. } else {
  995. int pred[4] = { 125, -128, -128, 125 };
  996. for (x = 0; x < avctx->width; x += 2) {
  997. int y1, y2, u, v, a1, a2;
  998. a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  999. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1000. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1001. a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1002. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1003. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1004. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
  1005. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
  1006. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
  1007. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
  1008. dst_a[x ] = pred[3] = (a1 + pred[3]) & 0xff;
  1009. dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0xff;
  1010. }
  1011. }
  1012. dst_y += p->linesize[0];
  1013. dst_u += p->linesize[1];
  1014. dst_v += p->linesize[2];
  1015. dst_a += p->linesize[3];
  1016. }
  1017. }
  1018. static void decode_c82p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1019. {
  1020. SheerVideoContext *s = avctx->priv_data;
  1021. uint8_t *dst_y, *dst_u, *dst_v, *dst_a;
  1022. int x, y;
  1023. dst_y = p->data[0];
  1024. dst_u = p->data[1];
  1025. dst_v = p->data[2];
  1026. dst_a = p->data[3];
  1027. if (get_bits1(gb)) {
  1028. for (x = 0; x < avctx->width; x += 2) {
  1029. dst_a[x ] = get_bits(gb, 8);
  1030. dst_y[x ] = get_bits(gb, 8);
  1031. dst_u[x / 2] = get_bits(gb, 8);
  1032. dst_a[x + 1] = get_bits(gb, 8);
  1033. dst_y[x + 1] = get_bits(gb, 8);
  1034. dst_v[x / 2] = get_bits(gb, 8);
  1035. }
  1036. } else {
  1037. int pred[4] = { -125, 128, 128, 125 };
  1038. for (x = 0; x < avctx->width; x += 2) {
  1039. int y1, y2, u, v, a1, a2;
  1040. a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1041. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1042. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1043. a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1044. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1045. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1046. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
  1047. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
  1048. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
  1049. dst_a[x ] = pred[3] = (a1 + pred[3]) & 0xff;
  1050. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
  1051. dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0xff;
  1052. }
  1053. }
  1054. dst_y += p->linesize[0];
  1055. dst_u += p->linesize[1];
  1056. dst_v += p->linesize[2];
  1057. dst_a += p->linesize[3];
  1058. for (y = 1; y < avctx->height; y++) {
  1059. if (get_bits1(gb)) {
  1060. for (x = 0; x < avctx->width; x += 2) {
  1061. dst_a[x ] = get_bits(gb, 8);
  1062. dst_y[x ] = get_bits(gb, 8);
  1063. dst_u[x / 2] = get_bits(gb, 8);
  1064. dst_a[x + 1] = get_bits(gb, 8);
  1065. dst_y[x + 1] = get_bits(gb, 8);
  1066. dst_v[x / 2] = get_bits(gb, 8);
  1067. }
  1068. } else {
  1069. int pred_TL[6], pred_L[6], pred_T[6];
  1070. int y1, y2, u, v, a1, a2;
  1071. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
  1072. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
  1073. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
  1074. pred_TL[4] = pred_L[4] = dst_a[-p->linesize[3]];
  1075. for (x = 0; x < avctx->width; x += 2) {
  1076. pred_T[0] = dst_y[-p->linesize[0] + x];
  1077. pred_T[3] = dst_y[-p->linesize[0] + x + 1];
  1078. pred_T[1] = dst_u[-p->linesize[1] + x / 2];
  1079. pred_T[2] = dst_v[-p->linesize[2] + x / 2];
  1080. pred_T[4] = dst_a[-p->linesize[3] + x];
  1081. pred_T[5] = dst_a[-p->linesize[3] + x + 1];
  1082. a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1083. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1084. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1085. a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1086. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1087. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1088. dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1089. dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff;
  1090. dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0xff;
  1091. dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0xff;
  1092. dst_a[x ] = pred_L[4] = (a1 + ((3 * (pred_T[4] + pred_L[4]) - 2 * pred_TL[4]) >> 2)) & 0xff;
  1093. dst_a[x + 1] = pred_L[4] = (a2 + ((3 * (pred_T[5] + pred_L[4]) - 2 * pred_T[4]) >> 2)) & 0xff;
  1094. pred_TL[0] = pred_T[3];
  1095. pred_TL[1] = pred_T[1];
  1096. pred_TL[2] = pred_T[2];
  1097. pred_TL[4] = pred_T[5];
  1098. }
  1099. }
  1100. dst_y += p->linesize[0];
  1101. dst_u += p->linesize[1];
  1102. dst_v += p->linesize[2];
  1103. dst_a += p->linesize[3];
  1104. }
  1105. }
  1106. static void decode_ybyr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1107. {
  1108. SheerVideoContext *s = avctx->priv_data;
  1109. uint8_t *dst_y, *dst_u, *dst_v;
  1110. int x, y;
  1111. dst_y = p->data[0];
  1112. dst_u = p->data[1];
  1113. dst_v = p->data[2];
  1114. if (get_bits1(gb)) {
  1115. for (x = 0; x < avctx->width; x += 2) {
  1116. dst_y[x ] = get_bits(gb, 8);
  1117. dst_u[x / 2] = get_bits(gb, 8);
  1118. dst_y[x + 1] = get_bits(gb, 8);
  1119. dst_v[x / 2] = get_bits(gb, 8);
  1120. }
  1121. } else {
  1122. int pred[4] = { -125, 128, 128, 0 };
  1123. for (x = 0; x < avctx->width; x += 2) {
  1124. int y1, y2, u, v;
  1125. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1126. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1127. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1128. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1129. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
  1130. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
  1131. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
  1132. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
  1133. }
  1134. }
  1135. dst_y += p->linesize[0];
  1136. dst_u += p->linesize[1];
  1137. dst_v += p->linesize[2];
  1138. for (y = 1; y < avctx->height; y++) {
  1139. if (get_bits1(gb)) {
  1140. for (x = 0; x < avctx->width; x += 2) {
  1141. dst_y[x ] = get_bits(gb, 8);
  1142. dst_u[x / 2] = get_bits(gb, 8);
  1143. dst_y[x + 1] = get_bits(gb, 8);
  1144. dst_v[x / 2] = get_bits(gb, 8);
  1145. }
  1146. } else {
  1147. int pred_TL[4], pred_L[4], pred_T[4];
  1148. int y1, y2, u, v;
  1149. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
  1150. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
  1151. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
  1152. for (x = 0; x < avctx->width; x += 2) {
  1153. pred_T[0] = dst_y[-p->linesize[0] + x];
  1154. pred_T[3] = dst_y[-p->linesize[0] + x + 1];
  1155. pred_T[1] = dst_u[-p->linesize[1] + x / 2];
  1156. pred_T[2] = dst_v[-p->linesize[2] + x / 2];
  1157. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1158. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1159. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1160. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1161. dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1162. dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff;
  1163. dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0xff;
  1164. dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0xff;
  1165. pred_TL[0] = pred_T[3];
  1166. pred_TL[1] = pred_T[1];
  1167. pred_TL[2] = pred_T[2];
  1168. }
  1169. }
  1170. dst_y += p->linesize[0];
  1171. dst_u += p->linesize[1];
  1172. dst_v += p->linesize[2];
  1173. }
  1174. }
  1175. static void decode_byryi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1176. {
  1177. SheerVideoContext *s = avctx->priv_data;
  1178. uint8_t *dst_y, *dst_u, *dst_v;
  1179. int x, y;
  1180. dst_y = p->data[0];
  1181. dst_u = p->data[1];
  1182. dst_v = p->data[2];
  1183. if (get_bits1(gb)) {
  1184. for (x = 0; x < avctx->width; x += 2) {
  1185. dst_y[x ] = get_bits(gb, 8);
  1186. dst_u[x / 2] = get_bits(gb, 8);
  1187. dst_y[x + 1] = get_bits(gb, 8);
  1188. dst_v[x / 2] = get_bits(gb, 8);
  1189. }
  1190. } else {
  1191. int pred[4] = { 125, -128, -128, 0 };
  1192. for (x = 0; x < avctx->width; x += 2) {
  1193. int y1, y2, u, v;
  1194. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1195. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1196. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1197. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1198. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
  1199. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
  1200. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
  1201. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
  1202. }
  1203. }
  1204. dst_y += p->linesize[0];
  1205. dst_u += p->linesize[1];
  1206. dst_v += p->linesize[2];
  1207. for (y = 1; y < avctx->height; y++) {
  1208. if (get_bits1(gb)) {
  1209. for (x = 0; x < avctx->width; x += 2) {
  1210. dst_y[x ] = get_bits(gb, 8);
  1211. dst_u[x / 2] = get_bits(gb, 8);
  1212. dst_y[x + 1] = get_bits(gb, 8);
  1213. dst_v[x / 2] = get_bits(gb, 8);
  1214. }
  1215. } else {
  1216. int pred_L[4];
  1217. int y1, y2, u, v;
  1218. pred_L[0] = dst_y[-p->linesize[0]];
  1219. pred_L[1] = dst_u[-p->linesize[1]];
  1220. pred_L[2] = dst_v[-p->linesize[2]];
  1221. for (x = 0; x < avctx->width; x += 2) {
  1222. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1223. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1224. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1225. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1226. dst_y[x ] = pred_L[0] = (y1 + pred_L[0]) & 0xff;
  1227. dst_u[x / 2] = pred_L[1] = (u + pred_L[1]) & 0xff;
  1228. dst_y[x + 1] = pred_L[0] = (y2 + pred_L[0]) & 0xff;
  1229. dst_v[x / 2] = pred_L[2] = (v + pred_L[2]) & 0xff;
  1230. }
  1231. }
  1232. dst_y += p->linesize[0];
  1233. dst_u += p->linesize[1];
  1234. dst_v += p->linesize[2];
  1235. }
  1236. }
  1237. static void decode_byry(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1238. {
  1239. SheerVideoContext *s = avctx->priv_data;
  1240. uint8_t *dst_y, *dst_u, *dst_v;
  1241. int x, y;
  1242. dst_y = p->data[0];
  1243. dst_u = p->data[1];
  1244. dst_v = p->data[2];
  1245. if (get_bits1(gb)) {
  1246. for (x = 0; x < avctx->width; x += 2) {
  1247. dst_y[x ] = get_bits(gb, 8);
  1248. dst_u[x / 2] = get_bits(gb, 8);
  1249. dst_y[x + 1] = get_bits(gb, 8);
  1250. dst_v[x / 2] = get_bits(gb, 8);
  1251. }
  1252. } else {
  1253. int pred[4] = { 125, -128, -128, 0 };
  1254. for (x = 0; x < avctx->width; x += 2) {
  1255. int y1, y2, u, v;
  1256. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1257. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1258. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1259. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1260. dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
  1261. dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
  1262. dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
  1263. dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
  1264. }
  1265. }
  1266. dst_y += p->linesize[0];
  1267. dst_u += p->linesize[1];
  1268. dst_v += p->linesize[2];
  1269. for (y = 1; y < avctx->height; y++) {
  1270. if (get_bits1(gb)) {
  1271. for (x = 0; x < avctx->width; x += 2) {
  1272. dst_y[x ] = get_bits(gb, 8);
  1273. dst_u[x / 2] = get_bits(gb, 8);
  1274. dst_y[x + 1] = get_bits(gb, 8);
  1275. dst_v[x / 2] = get_bits(gb, 8);
  1276. }
  1277. } else {
  1278. int pred_TL[4], pred_L[4], pred_T[4];
  1279. int y1, y2, u, v;
  1280. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
  1281. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
  1282. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
  1283. for (x = 0; x < avctx->width; x += 2) {
  1284. pred_T[0] = dst_y[-p->linesize[0] + x];
  1285. pred_T[3] = dst_y[-p->linesize[0] + x + 1];
  1286. pred_T[1] = dst_u[-p->linesize[1] + x / 2];
  1287. pred_T[2] = dst_v[-p->linesize[2] + x / 2];
  1288. y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1289. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1290. y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1291. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1292. dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1293. dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff;
  1294. dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0xff;
  1295. dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0xff;
  1296. pred_TL[0] = pred_T[3];
  1297. pred_TL[1] = pred_T[1];
  1298. pred_TL[2] = pred_T[2];
  1299. }
  1300. }
  1301. dst_y += p->linesize[0];
  1302. dst_u += p->linesize[1];
  1303. dst_v += p->linesize[2];
  1304. }
  1305. }
  1306. static void decode_ybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1307. {
  1308. SheerVideoContext *s = avctx->priv_data;
  1309. uint8_t *dst_y, *dst_u, *dst_v;
  1310. int x, y;
  1311. dst_y = p->data[0];
  1312. dst_u = p->data[1];
  1313. dst_v = p->data[2];
  1314. if (get_bits1(gb)) {
  1315. for (x = 0; x < avctx->width; x++) {
  1316. dst_y[x] = get_bits(gb, 8);
  1317. dst_u[x] = get_bits(gb, 8);
  1318. dst_v[x] = get_bits(gb, 8);
  1319. }
  1320. } else {
  1321. int pred[4] = { 125, -128, -128, -128 };
  1322. for (x = 0; x < avctx->width; x++) {
  1323. int y, u, v;
  1324. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1325. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1326. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1327. dst_y[x] = pred[0] = (y + pred[0]) & 0xff;
  1328. dst_u[x] = pred[1] = (u + pred[1]) & 0xff;
  1329. dst_v[x] = pred[2] = (v + pred[2]) & 0xff;
  1330. }
  1331. }
  1332. dst_y += p->linesize[0];
  1333. dst_u += p->linesize[1];
  1334. dst_v += p->linesize[2];
  1335. for (y = 1; y < avctx->height; y++) {
  1336. if (get_bits1(gb)) {
  1337. for (x = 0; x < avctx->width; x++) {
  1338. dst_y[x] = get_bits(gb, 8);
  1339. dst_u[x] = get_bits(gb, 8);
  1340. dst_v[x] = get_bits(gb, 8);
  1341. }
  1342. } else {
  1343. int pred_L[4];
  1344. int y, u, v;
  1345. pred_L[0] = dst_y[-p->linesize[0]];
  1346. pred_L[1] = dst_u[-p->linesize[1]];
  1347. pred_L[2] = dst_v[-p->linesize[2]];
  1348. for (x = 0; x < avctx->width; x++) {
  1349. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1350. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1351. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1352. dst_y[x] = pred_L[0] = (y + pred_L[0]) & 0xff;
  1353. dst_u[x] = pred_L[1] = (u + pred_L[1]) & 0xff;
  1354. dst_v[x] = pred_L[2] = (v + pred_L[2]) & 0xff;
  1355. }
  1356. }
  1357. dst_y += p->linesize[0];
  1358. dst_u += p->linesize[1];
  1359. dst_v += p->linesize[2];
  1360. }
  1361. }
  1362. static void decode_ybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1363. {
  1364. SheerVideoContext *s = avctx->priv_data;
  1365. uint8_t *dst_y, *dst_u, *dst_v;
  1366. int x, y;
  1367. dst_y = p->data[0];
  1368. dst_u = p->data[1];
  1369. dst_v = p->data[2];
  1370. if (get_bits1(gb)) {
  1371. for (x = 0; x < avctx->width; x++) {
  1372. dst_y[x] = get_bits(gb, 8);
  1373. dst_u[x] = get_bits(gb, 8);
  1374. dst_v[x] = get_bits(gb, 8);
  1375. }
  1376. } else {
  1377. int pred[4] = { 125, -128, -128, -128 };
  1378. for (x = 0; x < avctx->width; x++) {
  1379. int y, u, v;
  1380. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1381. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1382. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1383. dst_y[x] = pred[0] = (y + pred[0]) & 0xff;
  1384. dst_u[x] = pred[1] = (u + pred[1]) & 0xff;
  1385. dst_v[x] = pred[2] = (v + pred[2]) & 0xff;
  1386. }
  1387. }
  1388. dst_y += p->linesize[0];
  1389. dst_u += p->linesize[1];
  1390. dst_v += p->linesize[2];
  1391. for (y = 1; y < avctx->height; y++) {
  1392. if (get_bits1(gb)) {
  1393. for (x = 0; x < avctx->width; x++) {
  1394. dst_y[x] = get_bits(gb, 8);
  1395. dst_u[x] = get_bits(gb, 8);
  1396. dst_v[x] = get_bits(gb, 8);
  1397. }
  1398. } else {
  1399. int pred_TL[4], pred_L[4], pred_T[4];
  1400. int y, u, v;
  1401. pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
  1402. pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
  1403. pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
  1404. for (x = 0; x < avctx->width; x++) {
  1405. pred_T[0] = dst_y[-p->linesize[0] + x];
  1406. pred_T[1] = dst_u[-p->linesize[1] + x];
  1407. pred_T[2] = dst_v[-p->linesize[2] + x];
  1408. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1409. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1410. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1411. dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1412. dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
  1413. dst_v[x] = pred_L[2] = (v + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
  1414. pred_TL[0] = pred_T[0];
  1415. pred_TL[1] = pred_T[1];
  1416. pred_TL[2] = pred_T[2];
  1417. }
  1418. }
  1419. dst_y += p->linesize[0];
  1420. dst_u += p->linesize[1];
  1421. dst_v += p->linesize[2];
  1422. }
  1423. }
  1424. static void decode_aybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1425. {
  1426. SheerVideoContext *s = avctx->priv_data;
  1427. uint8_t *dst_a, *dst_y, *dst_u, *dst_v;
  1428. int x, y;
  1429. dst_a = p->data[3];
  1430. dst_y = p->data[0];
  1431. dst_u = p->data[1];
  1432. dst_v = p->data[2];
  1433. if (get_bits1(gb)) {
  1434. for (x = 0; x < avctx->width; x++) {
  1435. dst_a[x] = get_bits(gb, 8);
  1436. dst_y[x] = get_bits(gb, 8);
  1437. dst_u[x] = get_bits(gb, 8);
  1438. dst_v[x] = get_bits(gb, 8);
  1439. }
  1440. } else {
  1441. int pred[4] = { 125, 125, -128, -128 };
  1442. for (x = 0; x < avctx->width; x++) {
  1443. int a, y, u, v;
  1444. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1445. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1446. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1447. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1448. dst_a[x] = pred[0] = (a + pred[0]) & 0xff;
  1449. dst_y[x] = pred[1] = (y + pred[1]) & 0xff;
  1450. dst_u[x] = pred[2] = (u + pred[2]) & 0xff;
  1451. dst_v[x] = pred[3] = (v + pred[3]) & 0xff;
  1452. }
  1453. }
  1454. dst_a += p->linesize[3];
  1455. dst_y += p->linesize[0];
  1456. dst_u += p->linesize[1];
  1457. dst_v += p->linesize[2];
  1458. for (y = 1; y < avctx->height; y++) {
  1459. if (get_bits1(gb)) {
  1460. for (x = 0; x < avctx->width; x++) {
  1461. dst_a[x] = get_bits(gb, 8);
  1462. dst_y[x] = get_bits(gb, 8);
  1463. dst_u[x] = get_bits(gb, 8);
  1464. dst_v[x] = get_bits(gb, 8);
  1465. }
  1466. } else {
  1467. int pred_L[4];
  1468. int a, y, u, v;
  1469. pred_L[0] = dst_a[-p->linesize[3]];
  1470. pred_L[1] = dst_y[-p->linesize[0]];
  1471. pred_L[2] = dst_u[-p->linesize[1]];
  1472. pred_L[3] = dst_v[-p->linesize[2]];
  1473. for (x = 0; x < avctx->width; x++) {
  1474. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1475. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1476. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1477. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1478. dst_a[x] = pred_L[0] = (a + pred_L[0]) & 0xff;
  1479. dst_y[x] = pred_L[1] = (y + pred_L[1]) & 0xff;
  1480. dst_u[x] = pred_L[2] = (u + pred_L[2]) & 0xff;
  1481. dst_v[x] = pred_L[3] = (v + pred_L[3]) & 0xff;
  1482. }
  1483. }
  1484. dst_a += p->linesize[3];
  1485. dst_y += p->linesize[0];
  1486. dst_u += p->linesize[1];
  1487. dst_v += p->linesize[2];
  1488. }
  1489. }
  1490. static void decode_aybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1491. {
  1492. SheerVideoContext *s = avctx->priv_data;
  1493. uint8_t *dst_a, *dst_y, *dst_u, *dst_v;
  1494. int x, y;
  1495. dst_a = p->data[3];
  1496. dst_y = p->data[0];
  1497. dst_u = p->data[1];
  1498. dst_v = p->data[2];
  1499. if (get_bits1(gb)) {
  1500. for (x = 0; x < avctx->width; x++) {
  1501. dst_a[x] = get_bits(gb, 8);
  1502. dst_y[x] = get_bits(gb, 8);
  1503. dst_u[x] = get_bits(gb, 8);
  1504. dst_v[x] = get_bits(gb, 8);
  1505. }
  1506. } else {
  1507. int pred[4] = { 125, 125, -128, -128 };
  1508. for (x = 0; x < avctx->width; x++) {
  1509. int a, y, u, v;
  1510. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1511. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1512. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1513. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1514. dst_a[x] = pred[0] = (a + pred[0]) & 0xff;
  1515. dst_y[x] = pred[1] = (y + pred[1]) & 0xff;
  1516. dst_u[x] = pred[2] = (u + pred[2]) & 0xff;
  1517. dst_v[x] = pred[3] = (v + pred[3]) & 0xff;
  1518. }
  1519. }
  1520. dst_a += p->linesize[3];
  1521. dst_y += p->linesize[0];
  1522. dst_u += p->linesize[1];
  1523. dst_v += p->linesize[2];
  1524. for (y = 1; y < avctx->height; y++) {
  1525. if (get_bits1(gb)) {
  1526. for (x = 0; x < avctx->width; x++) {
  1527. dst_a[x] = get_bits(gb, 8);
  1528. dst_y[x] = get_bits(gb, 8);
  1529. dst_u[x] = get_bits(gb, 8);
  1530. dst_v[x] = get_bits(gb, 8);
  1531. }
  1532. } else {
  1533. int pred_TL[4], pred_L[4], pred_T[4];
  1534. int a, y, u, v;
  1535. pred_TL[0] = pred_L[0] = dst_a[-p->linesize[3]];
  1536. pred_TL[1] = pred_L[1] = dst_y[-p->linesize[0]];
  1537. pred_TL[2] = pred_L[2] = dst_u[-p->linesize[1]];
  1538. pred_TL[3] = pred_L[3] = dst_v[-p->linesize[2]];
  1539. for (x = 0; x < avctx->width; x++) {
  1540. pred_T[0] = dst_a[-p->linesize[3] + x];
  1541. pred_T[1] = dst_y[-p->linesize[0] + x];
  1542. pred_T[2] = dst_u[-p->linesize[1] + x];
  1543. pred_T[3] = dst_v[-p->linesize[2] + x];
  1544. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1545. y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1546. u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1547. v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1548. dst_a[x] = pred_L[0] = (a + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1549. dst_y[x] = pred_L[1] = (y + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
  1550. dst_u[x] = pred_L[2] = (u + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
  1551. dst_v[x] = pred_L[3] = (v + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0xff;
  1552. pred_TL[0] = pred_T[0];
  1553. pred_TL[1] = pred_T[1];
  1554. pred_TL[2] = pred_T[2];
  1555. pred_TL[3] = pred_T[3];
  1556. }
  1557. }
  1558. dst_a += p->linesize[3];
  1559. dst_y += p->linesize[0];
  1560. dst_u += p->linesize[1];
  1561. dst_v += p->linesize[2];
  1562. }
  1563. }
  1564. static void decode_argx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1565. {
  1566. SheerVideoContext *s = avctx->priv_data;
  1567. uint16_t *dst_r, *dst_g, *dst_b, *dst_a;
  1568. int x, y;
  1569. dst_r = (uint16_t *)p->data[2];
  1570. dst_g = (uint16_t *)p->data[0];
  1571. dst_b = (uint16_t *)p->data[1];
  1572. dst_a = (uint16_t *)p->data[3];
  1573. if (get_bits1(gb)) {
  1574. for (x = 0; x < avctx->width; x++) {
  1575. dst_a[x] = get_bits(gb, 10);
  1576. dst_r[x] = get_bits(gb, 10);
  1577. dst_g[x] = get_bits(gb, 10);
  1578. dst_b[x] = get_bits(gb, 10);
  1579. }
  1580. } else {
  1581. int pred[4] = { 512, 512, 512, 0 };
  1582. for (x = 0; x < avctx->width; x++) {
  1583. int r, g, b, a;
  1584. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1585. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1586. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1587. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1588. dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff;
  1589. dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff;
  1590. dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff;
  1591. dst_b[x] = pred[2] = (r + g + b + pred[2]) & 0x3ff;
  1592. }
  1593. }
  1594. dst_r += p->linesize[2] / 2;
  1595. dst_g += p->linesize[0] / 2;
  1596. dst_b += p->linesize[1] / 2;
  1597. dst_a += p->linesize[3] / 2;
  1598. for (y = 1; y < avctx->height; y++) {
  1599. if (get_bits1(gb)) {
  1600. for (x = 0; x < avctx->width; x++) {
  1601. dst_a[x] = get_bits(gb, 10);
  1602. dst_r[x] = get_bits(gb, 10);
  1603. dst_g[x] = get_bits(gb, 10);
  1604. dst_b[x] = get_bits(gb, 10);
  1605. }
  1606. } else {
  1607. int pred_TL[4], pred_L[4], pred_T[4];
  1608. int r, g, b, a;
  1609. pred_TL[0] = pred_L[0] = dst_r[-p->linesize[2] / 2];
  1610. pred_TL[1] = pred_L[1] = dst_g[-p->linesize[0] / 2];
  1611. pred_TL[2] = pred_L[2] = dst_b[-p->linesize[1] / 2];
  1612. pred_TL[3] = pred_L[3] = dst_a[-p->linesize[3] / 2];
  1613. for (x = 0; x < avctx->width; x++) {
  1614. pred_T[0] = dst_r[-p->linesize[2] / 2 + x];
  1615. pred_T[1] = dst_g[-p->linesize[0] / 2 + x];
  1616. pred_T[2] = dst_b[-p->linesize[1] / 2 + x];
  1617. pred_T[3] = dst_a[-p->linesize[3] / 2 + x];
  1618. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1619. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1620. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1621. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1622. dst_a[x] = pred_L[3] = (a + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0x3ff;
  1623. dst_r[x] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
  1624. dst_g[x] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
  1625. dst_b[x] = pred_L[2] = (r + g + b + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
  1626. pred_TL[0] = pred_T[0];
  1627. pred_TL[1] = pred_T[1];
  1628. pred_TL[2] = pred_T[2];
  1629. pred_TL[3] = pred_T[3];
  1630. }
  1631. }
  1632. dst_r += p->linesize[2] / 2;
  1633. dst_g += p->linesize[0] / 2;
  1634. dst_b += p->linesize[1] / 2;
  1635. dst_a += p->linesize[3] / 2;
  1636. }
  1637. }
  1638. static void decode_rgbx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1639. {
  1640. SheerVideoContext *s = avctx->priv_data;
  1641. uint16_t *dst_r, *dst_g, *dst_b;
  1642. int x, y;
  1643. dst_r = (uint16_t *)p->data[2];
  1644. dst_g = (uint16_t *)p->data[0];
  1645. dst_b = (uint16_t *)p->data[1];
  1646. if (get_bits1(gb)) {
  1647. for (x = 0; x < avctx->width; x++) {
  1648. dst_r[x] = get_bits(gb, 10);
  1649. dst_g[x] = get_bits(gb, 10);
  1650. dst_b[x] = get_bits(gb, 10);
  1651. }
  1652. } else {
  1653. int pred[4] = { 512, 512, 512, 0 };
  1654. for (x = 0; x < avctx->width; x++) {
  1655. int r, g, b;
  1656. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1657. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1658. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1659. dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff;
  1660. dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff;
  1661. dst_b[x] = pred[2] = (r + g + b + pred[2]) & 0x3ff;
  1662. }
  1663. }
  1664. dst_r += p->linesize[2] / 2;
  1665. dst_g += p->linesize[0] / 2;
  1666. dst_b += p->linesize[1] / 2;
  1667. for (y = 1; y < avctx->height; y++) {
  1668. if (get_bits1(gb)) {
  1669. for (x = 0; x < avctx->width; x++) {
  1670. dst_r[x] = get_bits(gb, 10);
  1671. dst_g[x] = get_bits(gb, 10);
  1672. dst_b[x] = get_bits(gb, 10);
  1673. }
  1674. } else {
  1675. int pred_TL[4], pred_L[4], pred_T[4];
  1676. int r, g, b;
  1677. pred_TL[0] = pred_L[0] = dst_r[-p->linesize[2] / 2];
  1678. pred_TL[1] = pred_L[1] = dst_g[-p->linesize[0] / 2];
  1679. pred_TL[2] = pred_L[2] = dst_b[-p->linesize[1] / 2];
  1680. for (x = 0; x < avctx->width; x++) {
  1681. pred_T[0] = dst_r[-p->linesize[2] / 2 + x];
  1682. pred_T[1] = dst_g[-p->linesize[0] / 2 + x];
  1683. pred_T[2] = dst_b[-p->linesize[1] / 2 + x];
  1684. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1685. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1686. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1687. dst_r[x] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
  1688. dst_g[x] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
  1689. dst_b[x] = pred_L[2] = (r + g + b + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
  1690. pred_TL[0] = pred_T[0];
  1691. pred_TL[1] = pred_T[1];
  1692. pred_TL[2] = pred_T[2];
  1693. }
  1694. }
  1695. dst_r += p->linesize[2] / 2;
  1696. dst_g += p->linesize[0] / 2;
  1697. dst_b += p->linesize[1] / 2;
  1698. }
  1699. }
  1700. static void decode_argbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1701. {
  1702. SheerVideoContext *s = avctx->priv_data;
  1703. uint8_t *dst;
  1704. int x, y;
  1705. dst = p->data[0];
  1706. if (get_bits1(gb)) {
  1707. for (x = 0; x < avctx->width; x++) {
  1708. dst[x * 4 + 0] = get_bits(gb, 8);
  1709. dst[x * 4 + 1] = get_bits(gb, 8);
  1710. dst[x * 4 + 2] = get_bits(gb, 8);
  1711. dst[x * 4 + 3] = get_bits(gb, 8);
  1712. }
  1713. } else {
  1714. int pred[4] = { -128, -128, -128, -128 };
  1715. for (x = 0; x < avctx->width; x++) {
  1716. int a, r, g, b;
  1717. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1718. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1719. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1720. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1721. dst[4 * x + 0] = pred[0] = (a + pred[0]) & 0xff;
  1722. dst[4 * x + 1] = pred[1] = (r + pred[1]) & 0xff;
  1723. dst[4 * x + 2] = pred[2] = (r + g + pred[2]) & 0xff;
  1724. dst[4 * x + 3] = pred[3] = (r + g + b + pred[3]) & 0xff;
  1725. }
  1726. }
  1727. dst += p->linesize[0];
  1728. for (y = 1; y < avctx->height; y++) {
  1729. if (get_bits1(gb)) {
  1730. for (x = 0; x < avctx->width; x++) {
  1731. dst[x * 4 + 0] = get_bits(gb, 8);
  1732. dst[x * 4 + 1] = get_bits(gb, 8);
  1733. dst[x * 4 + 2] = get_bits(gb, 8);
  1734. dst[x * 4 + 3] = get_bits(gb, 8);
  1735. }
  1736. } else {
  1737. int pred_L[4];
  1738. int a, r, g, b;
  1739. pred_L[0] = dst[-p->linesize[0] + 0];
  1740. pred_L[1] = dst[-p->linesize[0] + 1];
  1741. pred_L[2] = dst[-p->linesize[0] + 2];
  1742. pred_L[3] = dst[-p->linesize[0] + 3];
  1743. for (x = 0; x < avctx->width; x++) {
  1744. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1745. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1746. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1747. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1748. dst[4 * x + 0] = pred_L[0] = (a + pred_L[0]) & 0xff;
  1749. dst[4 * x + 1] = pred_L[1] = (r + pred_L[1]) & 0xff;
  1750. dst[4 * x + 2] = pred_L[2] = (r + g + pred_L[2]) & 0xff;
  1751. dst[4 * x + 3] = pred_L[3] = (r + g + b + pred_L[3]) & 0xff;
  1752. }
  1753. }
  1754. dst += p->linesize[0];
  1755. }
  1756. }
  1757. static void decode_argb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1758. {
  1759. SheerVideoContext *s = avctx->priv_data;
  1760. uint8_t *dst;
  1761. int x, y;
  1762. dst = p->data[0];
  1763. if (get_bits1(gb)) {
  1764. for (x = 0; x < avctx->width; x++) {
  1765. dst[x * 4 + 0] = get_bits(gb, 8);
  1766. dst[x * 4 + 1] = get_bits(gb, 8);
  1767. dst[x * 4 + 2] = get_bits(gb, 8);
  1768. dst[x * 4 + 3] = get_bits(gb, 8);
  1769. }
  1770. } else {
  1771. int pred[4] = { -128, -128, -128, -128 };
  1772. for (x = 0; x < avctx->width; x++) {
  1773. int a, r, g, b;
  1774. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1775. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1776. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1777. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1778. dst[4 * x + 0] = pred[0] = (a + pred[0]) & 0xff;
  1779. dst[4 * x + 1] = pred[1] = (r + pred[1]) & 0xff;
  1780. dst[4 * x + 2] = pred[2] = (r + g + pred[2]) & 0xff;
  1781. dst[4 * x + 3] = pred[3] = (r + g + b + pred[3]) & 0xff;
  1782. }
  1783. }
  1784. dst += p->linesize[0];
  1785. for (y = 1; y < avctx->height; y++) {
  1786. if (get_bits1(gb)) {
  1787. for (x = 0; x < avctx->width; x++) {
  1788. dst[x * 4 + 0] = get_bits(gb, 8);
  1789. dst[x * 4 + 1] = get_bits(gb, 8);
  1790. dst[x * 4 + 2] = get_bits(gb, 8);
  1791. dst[x * 4 + 3] = get_bits(gb, 8);
  1792. }
  1793. } else {
  1794. int pred_TL[4], pred_L[4], pred_T[4];
  1795. int a, r, g, b;
  1796. pred_TL[0] = pred_L[0] = dst[-p->linesize[0] + 0];
  1797. pred_TL[1] = pred_L[1] = dst[-p->linesize[0] + 1];
  1798. pred_TL[2] = pred_L[2] = dst[-p->linesize[0] + 2];
  1799. pred_TL[3] = pred_L[3] = dst[-p->linesize[0] + 3];
  1800. for (x = 0; x < avctx->width; x++) {
  1801. pred_T[0] = dst[-p->linesize[0] + 4 * x + 0];
  1802. pred_T[1] = dst[-p->linesize[0] + 4 * x + 1];
  1803. pred_T[2] = dst[-p->linesize[0] + 4 * x + 2];
  1804. pred_T[3] = dst[-p->linesize[0] + 4 * x + 3];
  1805. a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1806. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1807. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1808. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1809. dst[4 * x + 0] = pred_L[0] = (a + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1810. dst[4 * x + 1] = pred_L[1] = (r + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
  1811. dst[4 * x + 2] = pred_L[2] = (r + g + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
  1812. dst[4 * x + 3] = pred_L[3] = (r + g + b + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0xff;
  1813. pred_TL[0] = pred_T[0];
  1814. pred_TL[1] = pred_T[1];
  1815. pred_TL[2] = pred_T[2];
  1816. pred_TL[3] = pred_T[3];
  1817. }
  1818. }
  1819. dst += p->linesize[0];
  1820. }
  1821. }
  1822. static void decode_rgbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1823. {
  1824. SheerVideoContext *s = avctx->priv_data;
  1825. uint8_t *dst;
  1826. int x, y;
  1827. dst = p->data[0];
  1828. if (get_bits1(gb)) {
  1829. for (x = 0; x < avctx->width; x++) {
  1830. dst[x * 4 + 0] = get_bits(gb, 8);
  1831. dst[x * 4 + 1] = get_bits(gb, 8);
  1832. dst[x * 4 + 2] = get_bits(gb, 8);
  1833. }
  1834. } else {
  1835. int pred[4] = { -128, -128, -128, -128 };
  1836. for (x = 0; x < avctx->width; x++) {
  1837. int r, g, b;
  1838. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1839. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1840. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1841. dst[4 * x + 0] = pred[0] = (r + pred[0]) & 0xff;
  1842. dst[4 * x + 1] = pred[1] = (r + g + pred[1]) & 0xff;
  1843. dst[4 * x + 2] = pred[2] = (r + g + b + pred[2]) & 0xff;
  1844. }
  1845. }
  1846. dst += p->linesize[0];
  1847. for (y = 1; y < avctx->height; y++) {
  1848. if (get_bits1(gb)) {
  1849. for (x = 0; x < avctx->width; x++) {
  1850. dst[x * 4 + 0] = get_bits(gb, 8);
  1851. dst[x * 4 + 1] = get_bits(gb, 8);
  1852. dst[x * 4 + 2] = get_bits(gb, 8);
  1853. }
  1854. } else {
  1855. int pred_L[4];
  1856. int r, g, b;
  1857. pred_L[0] = dst[-p->linesize[0] + 0];
  1858. pred_L[1] = dst[-p->linesize[0] + 1];
  1859. pred_L[2] = dst[-p->linesize[0] + 2];
  1860. for (x = 0; x < avctx->width; x++) {
  1861. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1862. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1863. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1864. dst[4 * x + 0] = pred_L[0] = (r + pred_L[0]) & 0xff;
  1865. dst[4 * x + 1] = pred_L[1] = (r + g + pred_L[1]) & 0xff;
  1866. dst[4 * x + 2] = pred_L[2] = (r + g + b + pred_L[2]) & 0xff;
  1867. }
  1868. }
  1869. dst += p->linesize[0];
  1870. }
  1871. }
  1872. static void decode_rgb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
  1873. {
  1874. SheerVideoContext *s = avctx->priv_data;
  1875. uint8_t *dst;
  1876. int x, y;
  1877. dst = p->data[0];
  1878. if (get_bits1(gb)) {
  1879. for (x = 0; x < avctx->width; x++) {
  1880. dst[x * 4 + 0] = get_bits(gb, 8);
  1881. dst[x * 4 + 1] = get_bits(gb, 8);
  1882. dst[x * 4 + 2] = get_bits(gb, 8);
  1883. }
  1884. } else {
  1885. int pred[4] = { -128, -128, -128, -128 };
  1886. for (x = 0; x < avctx->width; x++) {
  1887. int r, g, b;
  1888. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1889. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1890. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1891. dst[4 * x + 0] = pred[0] = (r + pred[0]) & 0xff;
  1892. dst[4 * x + 1] = pred[1] = (r + g + pred[1]) & 0xff;
  1893. dst[4 * x + 2] = pred[2] = (r + g + b + pred[2]) & 0xff;
  1894. }
  1895. }
  1896. dst += p->linesize[0];
  1897. for (y = 1; y < avctx->height; y++) {
  1898. if (get_bits1(gb)) {
  1899. for (x = 0; x < avctx->width; x++) {
  1900. dst[x * 4 + 0] = get_bits(gb, 8);
  1901. dst[x * 4 + 1] = get_bits(gb, 8);
  1902. dst[x * 4 + 2] = get_bits(gb, 8);
  1903. }
  1904. } else {
  1905. int pred_TL[4], pred_L[4], pred_T[4];
  1906. int r, g, b;
  1907. pred_TL[0] = pred_L[0] = dst[-p->linesize[0] + 0];
  1908. pred_TL[1] = pred_L[1] = dst[-p->linesize[0] + 1];
  1909. pred_TL[2] = pred_L[2] = dst[-p->linesize[0] + 2];
  1910. for (x = 0; x < avctx->width; x++) {
  1911. pred_T[0] = dst[-p->linesize[0] + 4 * x + 0];
  1912. pred_T[1] = dst[-p->linesize[0] + 4 * x + 1];
  1913. pred_T[2] = dst[-p->linesize[0] + 4 * x + 2];
  1914. r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
  1915. g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1916. b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
  1917. dst[4 * x + 0] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
  1918. dst[4 * x + 1] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
  1919. dst[4 * x + 2] = pred_L[2] = (r + g + b + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
  1920. pred_TL[0] = pred_T[0];
  1921. pred_TL[1] = pred_T[1];
  1922. pred_TL[2] = pred_T[2];
  1923. }
  1924. }
  1925. dst += p->linesize[0];
  1926. }
  1927. }
  1928. static int build_vlc(VLC *vlc, const uint8_t *len, int count)
  1929. {
  1930. uint32_t codes[1024];
  1931. uint8_t bits[1024];
  1932. uint16_t syms[1024];
  1933. uint64_t index;
  1934. int i;
  1935. index = 0;
  1936. for (i = 0; i < count; i++) {
  1937. codes[i] = index >> (32 - len[i]);
  1938. bits[i] = len[i];
  1939. syms[i] = i;
  1940. index += 1ULL << (32 - len[i]);
  1941. }
  1942. ff_free_vlc(vlc);
  1943. return ff_init_vlc_sparse(vlc, 16, count,
  1944. bits, sizeof(*bits), sizeof(*bits),
  1945. codes, sizeof(*codes), sizeof(*codes),
  1946. syms, sizeof(*syms), sizeof(*syms), 0);
  1947. }
  1948. static int decode_frame(AVCodecContext *avctx,
  1949. void *data, int *got_frame,
  1950. AVPacket *avpkt)
  1951. {
  1952. SheerVideoContext *s = avctx->priv_data;
  1953. ThreadFrame frame = { .f = data };
  1954. AVFrame *p = data;
  1955. GetBitContext gb;
  1956. unsigned format;
  1957. int ret;
  1958. if (avpkt->size <= 20)
  1959. return AVERROR_INVALIDDATA;
  1960. if (AV_RL32(avpkt->data) != MKTAG('S','h','i','r') &&
  1961. AV_RL32(avpkt->data) != MKTAG('Z','w','a','k'))
  1962. return AVERROR_INVALIDDATA;
  1963. format = AV_RL32(avpkt->data + 16);
  1964. switch (format) {
  1965. case MKTAG(' ', 'R', 'G', 'B'):
  1966. avctx->pix_fmt = AV_PIX_FMT_RGB0;
  1967. s->decode_frame = decode_rgb;
  1968. if (s->format != format) {
  1969. build_vlc(&s->vlc[0], l_r_rgb, 256);
  1970. build_vlc(&s->vlc[1], l_g_rgb, 256);
  1971. }
  1972. break;
  1973. case MKTAG(' ', 'r', 'G', 'B'):
  1974. avctx->pix_fmt = AV_PIX_FMT_RGB0;
  1975. s->decode_frame = decode_rgbi;
  1976. if (s->format != format) {
  1977. build_vlc(&s->vlc[0], l_r_rgbi, 256);
  1978. build_vlc(&s->vlc[1], l_g_rgbi, 256);
  1979. }
  1980. break;
  1981. case MKTAG('A', 'R', 'G', 'X'):
  1982. avctx->pix_fmt = AV_PIX_FMT_GBRAP12;
  1983. s->decode_frame = decode_argx;
  1984. if (s->format != format) {
  1985. build_vlc(&s->vlc[0], l_r_rgbx, 1024);
  1986. build_vlc(&s->vlc[1], l_g_rgbx, 1024);
  1987. }
  1988. break;
  1989. case MKTAG('R', 'G', 'B', 'X'):
  1990. avctx->pix_fmt = AV_PIX_FMT_GBRP10;
  1991. s->decode_frame = decode_rgbx;
  1992. if (s->format != format) {
  1993. build_vlc(&s->vlc[0], l_r_rgbx, 1024);
  1994. build_vlc(&s->vlc[1], l_g_rgbx, 1024);
  1995. }
  1996. break;
  1997. case MKTAG('A', 'R', 'G', 'B'):
  1998. avctx->pix_fmt = AV_PIX_FMT_ARGB;
  1999. s->decode_frame = decode_argb;
  2000. if (s->format != format) {
  2001. build_vlc(&s->vlc[0], l_r_rgb, 256);
  2002. build_vlc(&s->vlc[1], l_g_rgb, 256);
  2003. }
  2004. break;
  2005. case MKTAG('A', 'r', 'G', 'B'):
  2006. avctx->pix_fmt = AV_PIX_FMT_ARGB;
  2007. s->decode_frame = decode_argbi;
  2008. if (s->format != format) {
  2009. build_vlc(&s->vlc[0], l_r_rgbi, 256);
  2010. build_vlc(&s->vlc[1], l_g_rgbi, 256);
  2011. }
  2012. break;
  2013. case MKTAG('A', 'Y', 'B', 'R'):
  2014. case MKTAG('A', 'Y', 'b', 'R'):
  2015. avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
  2016. s->decode_frame = decode_aybr;
  2017. if (s->format != format) {
  2018. build_vlc(&s->vlc[0], l_y_ybr, 256);
  2019. build_vlc(&s->vlc[1], l_u_ybr, 256);
  2020. }
  2021. break;
  2022. case MKTAG('A', 'y', 'B', 'R'):
  2023. case MKTAG('A', 'y', 'b', 'R'):
  2024. avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
  2025. s->decode_frame = decode_aybri;
  2026. if (s->format != format) {
  2027. build_vlc(&s->vlc[0], l_y_ybri, 256);
  2028. build_vlc(&s->vlc[1], l_u_ybri, 256);
  2029. }
  2030. break;
  2031. case MKTAG(' ', 'Y', 'B', 'R'):
  2032. case MKTAG(' ', 'Y', 'b', 'R'):
  2033. avctx->pix_fmt = AV_PIX_FMT_YUV444P;
  2034. s->decode_frame = decode_ybr;
  2035. if (s->format != format) {
  2036. build_vlc(&s->vlc[0], l_y_ybr, 256);
  2037. build_vlc(&s->vlc[1], l_u_ybr, 256);
  2038. }
  2039. break;
  2040. case MKTAG(' ', 'y', 'B', 'R'):
  2041. case MKTAG(' ', 'y', 'b', 'R'):
  2042. avctx->pix_fmt = AV_PIX_FMT_YUV444P;
  2043. s->decode_frame = decode_ybri;
  2044. if (s->format != format) {
  2045. build_vlc(&s->vlc[0], l_y_ybri, 256);
  2046. build_vlc(&s->vlc[1], l_u_ybri, 256);
  2047. }
  2048. break;
  2049. case MKTAG('Y', 'B', 'R', 0x0a):
  2050. avctx->pix_fmt = AV_PIX_FMT_YUV444P10;
  2051. s->decode_frame = decode_ybr10;
  2052. if (s->format != format) {
  2053. build_vlc(&s->vlc[0], l_y_ybr10, 1024);
  2054. build_vlc(&s->vlc[1], l_u_ybr10, 1024);
  2055. }
  2056. break;
  2057. case MKTAG('C', 'A', '4', 'p'):
  2058. avctx->pix_fmt = AV_PIX_FMT_YUVA444P10;
  2059. s->decode_frame = decode_ca4p;
  2060. if (s->format != format) {
  2061. build_vlc(&s->vlc[0], l_y_ybr10, 1024);
  2062. build_vlc(&s->vlc[1], l_u_ybr10, 1024);
  2063. }
  2064. break;
  2065. case MKTAG('B', 'Y', 'R', 'Y'):
  2066. avctx->pix_fmt = AV_PIX_FMT_YUV422P;
  2067. s->decode_frame = decode_byry;
  2068. if (s->format != format) {
  2069. build_vlc(&s->vlc[0], l_y_byry, 256);
  2070. build_vlc(&s->vlc[1], l_u_byry, 256);
  2071. }
  2072. break;
  2073. case MKTAG('B', 'Y', 'R', 'y'):
  2074. avctx->pix_fmt = AV_PIX_FMT_YUV422P;
  2075. s->decode_frame = decode_byryi;
  2076. if (s->format != format) {
  2077. build_vlc(&s->vlc[0], l_y_byryi, 256);
  2078. build_vlc(&s->vlc[1], l_u_byryi, 256);
  2079. }
  2080. break;
  2081. case MKTAG('Y', 'b', 'Y', 'r'):
  2082. avctx->pix_fmt = AV_PIX_FMT_YUV422P;
  2083. s->decode_frame = decode_ybyr;
  2084. if (s->format != format) {
  2085. build_vlc(&s->vlc[0], l_y_ybyr, 256);
  2086. build_vlc(&s->vlc[1], l_u_ybyr, 256);
  2087. }
  2088. break;
  2089. case MKTAG('C', '8', '2', 'p'):
  2090. avctx->pix_fmt = AV_PIX_FMT_YUVA422P;
  2091. s->decode_frame = decode_c82p;
  2092. if (s->format != format) {
  2093. build_vlc(&s->vlc[0], l_y_byry, 256);
  2094. build_vlc(&s->vlc[1], l_u_byry, 256);
  2095. }
  2096. break;
  2097. case MKTAG('C', '8', '2', 'i'):
  2098. avctx->pix_fmt = AV_PIX_FMT_YUVA422P;
  2099. s->decode_frame = decode_c82i;
  2100. if (s->format != format) {
  2101. build_vlc(&s->vlc[0], l_y_byryi, 256);
  2102. build_vlc(&s->vlc[1], l_u_byryi, 256);
  2103. }
  2104. break;
  2105. case MKTAG(0xa2, 'Y', 'R', 'Y'):
  2106. avctx->pix_fmt = AV_PIX_FMT_YUV422P10;
  2107. s->decode_frame = decode_yry10;
  2108. if (s->format != format) {
  2109. build_vlc(&s->vlc[0], l_y_yry10, 1024);
  2110. build_vlc(&s->vlc[1], l_u_yry10, 1024);
  2111. }
  2112. break;
  2113. case MKTAG('C', 'A', '2', 'p'):
  2114. avctx->pix_fmt = AV_PIX_FMT_YUVA422P10;
  2115. s->decode_frame = decode_ca2p;
  2116. if (s->format != format) {
  2117. build_vlc(&s->vlc[0], l_y_yry10, 1024);
  2118. build_vlc(&s->vlc[1], l_u_yry10, 1024);
  2119. }
  2120. break;
  2121. default:
  2122. avpriv_request_sample(avctx, "unsupported format: 0x%X", format);
  2123. return AVERROR_PATCHWELCOME;
  2124. }
  2125. s->format = format;
  2126. p->pict_type = AV_PICTURE_TYPE_I;
  2127. p->key_frame = 1;
  2128. if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
  2129. return ret;
  2130. if ((ret = init_get_bits8(&gb, avpkt->data + 20, avpkt->size - 20)) < 0)
  2131. return ret;
  2132. s->decode_frame(avctx, p, &gb);
  2133. *got_frame = 1;
  2134. return avpkt->size;
  2135. }
  2136. #if HAVE_THREADS
  2137. static int decode_init_thread_copy(AVCodecContext *avctx)
  2138. {
  2139. SheerVideoContext *s = avctx->priv_data;
  2140. s->format = 0;
  2141. memset(&s->vlc[0], 0, sizeof(s->vlc[0]));
  2142. memset(&s->vlc[1], 0, sizeof(s->vlc[1]));
  2143. return 0;
  2144. }
  2145. #endif
  2146. static av_cold int decode_end(AVCodecContext *avctx)
  2147. {
  2148. SheerVideoContext *s = avctx->priv_data;
  2149. ff_free_vlc(&s->vlc[0]);
  2150. ff_free_vlc(&s->vlc[1]);
  2151. return 0;
  2152. }
  2153. AVCodec ff_sheervideo_decoder = {
  2154. .name = "sheervideo",
  2155. .long_name = NULL_IF_CONFIG_SMALL("BitJazz SheerVideo"),
  2156. .type = AVMEDIA_TYPE_VIDEO,
  2157. .id = AV_CODEC_ID_SHEERVIDEO,
  2158. .priv_data_size = sizeof(SheerVideoContext),
  2159. .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
  2160. .close = decode_end,
  2161. .decode = decode_frame,
  2162. .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,
  2163. };