2 * BitJazz SheerVideo decoder
3 * Copyright (c) 2016 Paul B Mahol
5 * This file is part of FFmpeg.
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.
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.
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
26 #include "libavutil/intreadwrite.h"
32 typedef struct SheerVideoContext {
36 void (*decode_frame)(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb);
39 static const uint8_t l_r_rgb[256] = {
40 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8,
41 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
42 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12,
43 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
44 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
45 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
46 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
47 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
48 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
49 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15,
50 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
51 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13,
52 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12,
53 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10,
54 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
55 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 4, 4, 4,
58 static const uint8_t l_r_rgbi[256] = {
59 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7,
60 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
61 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
62 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12,
63 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
64 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
65 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15,
66 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
67 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
68 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
69 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13,
70 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12,
71 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11,
72 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10,
73 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8,
74 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4,
77 static const uint8_t l_g_rgbi[256] = {
78 1, 3, 4, 5, 6, 7, 7, 8, 9, 9, 10, 10, 10, 10, 11, 11,
79 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
80 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
85 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
86 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
87 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
88 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
89 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
90 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
91 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14,
92 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12,
93 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 7, 6, 5, 5, 3,
96 static const uint8_t l_g_rgb[256] = {
97 2, 2, 4, 4, 6, 7, 9, 9, 10, 11, 11, 11, 12, 12, 12, 13,
98 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
99 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16,
103 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
104 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
105 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
106 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
107 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
108 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
109 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
110 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15,
111 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
112 13, 13, 12, 12, 12, 11, 11, 11, 10, 9, 9, 8, 6, 4, 3, 3,
115 static const uint8_t l_y_ybr[256] = {
116 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8,
117 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
118 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
119 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
120 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
121 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
122 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
123 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
124 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
125 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
126 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
127 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
128 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
129 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11,
130 11, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 8, 8,
131 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 4, 4, 3,
134 static const uint8_t l_u_ybr[256] = {
135 1, 2, 4, 6, 9, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14,
136 14, 14, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16,
140 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
141 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
142 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
143 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
144 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
145 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
146 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
147 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
149 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15,
150 14, 14, 14, 14, 14, 13, 13, 13, 12, 12, 11, 11, 10, 8, 5, 3,
153 static const uint8_t l_y_ybyr[256] = {
154 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8,
155 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
156 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12,
157 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13,
158 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
159 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
160 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
161 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
162 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
163 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15,
164 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14,
165 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
166 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12,
167 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10,
168 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
169 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 4, 4, 4,
172 static const uint8_t l_u_ybyr[256] = {
173 1, 2, 4, 6, 8, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14,
174 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16,
175 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
176 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
177 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
178 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
179 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
180 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
181 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
182 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
183 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
184 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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, 15, 15, 15, 15, 15, 14, 14,
188 14, 14, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 8, 7, 6, 3,
191 static const uint8_t l_y_byry[256] = {
192 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8,
193 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
194 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
195 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
196 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
197 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
198 16, 16, 16, 16, 16, 16, 16, 16, 16, 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, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
203 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
204 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
205 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11,
206 11, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 8, 8,
207 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 4, 4, 3,
210 static const uint8_t l_u_byry[256] = {
211 1, 2, 4, 6, 8, 9, 9, 10, 11, 11, 12, 12, 13, 13, 13, 14,
212 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16,
213 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
214 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
215 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
216 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
217 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
218 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
219 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
220 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
221 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
222 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
223 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
224 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
225 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14,
226 14, 14, 14, 13, 13, 12, 12, 12, 11, 11, 10, 9, 8, 7, 6, 3,
229 static const uint8_t l_y_ybr10i[1024] = {
230 3, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7,
231 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
232 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
233 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
234 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11,
235 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
236 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12,
237 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
238 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
239 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
240 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
241 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
242 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
243 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
244 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
245 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
246 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
247 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
248 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
249 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
250 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
251 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16, 16, 16, 16,
262 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
263 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
264 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
265 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
266 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
267 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
268 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
269 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
270 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
271 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
272 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15,
273 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
274 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
275 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
276 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
277 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
278 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
279 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
280 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
281 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
282 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
283 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
284 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
285 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
286 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
287 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11,
288 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
289 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
290 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
291 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
292 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7,
293 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5,
296 static const uint8_t l_y_ybr10[1024] = {
297 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7,
298 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
299 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
300 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
301 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11,
302 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
303 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
304 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
305 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
306 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
307 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
308 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
309 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
310 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
311 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
312 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
313 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
314 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16, 16, 16,
342 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
343 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15,
344 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
345 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
346 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
347 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
348 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
349 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
350 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
351 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
352 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
353 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
354 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
355 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
356 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10,
357 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
358 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
359 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
360 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5,
363 static const uint8_t l_u_ybr10i[1024] = {
364 2, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10,
365 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
366 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
367 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
368 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
369 15, 15, 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, 16, 16, 16, 16, 16, 16,
392 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
393 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
394 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
395 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
396 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
397 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
398 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
399 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
400 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
401 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
402 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
403 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
404 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
405 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
406 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
407 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
408 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
409 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
410 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
411 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
412 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
413 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
414 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
415 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
416 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
417 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
418 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
419 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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, 15, 15,
423 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
424 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14,
425 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
426 13, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 10, 10,
427 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 6, 5, 5, 4, 4, 3,
430 static const uint8_t l_u_ybr10[1024] = {
431 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10, 11, 11,
432 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
433 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
434 15, 15, 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
471 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
472 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
473 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
474 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
475 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
476 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
477 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
478 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
479 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
480 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
481 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
482 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
483 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
484 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
485 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
486 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
487 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
488 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
489 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
490 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
491 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15,
492 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
493 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12,
494 12, 11, 11, 11, 10, 10, 9, 9, 8, 8, 7, 6, 5, 4, 4, 3,
497 static const uint8_t l_r_rgbx[1024] = {
498 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,
499 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
500 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
501 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10,
502 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
503 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
504 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12,
505 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
506 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
507 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
508 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
509 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
510 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
511 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
512 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15,
513 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
514 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
515 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
516 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
517 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16, 16, 16, 16,
526 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
527 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
528 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
529 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
530 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
531 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
532 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
533 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
534 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
535 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
536 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
537 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
538 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
539 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
540 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
541 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
542 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15,
543 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
544 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
545 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
546 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
547 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14,
548 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
549 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
550 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13,
551 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
552 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
553 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
554 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
555 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
556 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
557 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
558 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9,
559 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
560 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7,
561 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5,
564 static const uint8_t l_g_rgbx[1024] = {
565 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7,
566 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12,
567 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
568 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
569 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
570 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
571 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
606 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
607 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
608 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
609 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
610 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
611 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
612 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
613 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
614 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
615 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
616 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
617 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
618 16, 16, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
621 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
622 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
623 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
624 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
625 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13,
626 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12,
627 12, 12, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9,
628 8, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4,
631 static const uint8_t l_y_yry10[1024] = {
632 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7,
633 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
634 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
635 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
636 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11,
637 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
638 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
639 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
640 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
641 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
642 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
643 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
644 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
645 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
646 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
647 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
648 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
649 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
650 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
651 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
652 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
653 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
654 16, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
657 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
658 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
659 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
660 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
661 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
662 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
663 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
664 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
665 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
666 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
667 16, 16, 16, 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, 15, 15, 15, 15, 15, 15, 15, 15,
679 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
680 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
681 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
682 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
683 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
684 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
685 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
686 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
687 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
688 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
689 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
690 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
691 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10,
692 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
693 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
694 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
695 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5,
698 static const uint8_t l_y_yry10i[1024] = {
699 3, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7,
700 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
701 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
702 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
703 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11,
704 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
705 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12,
706 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
707 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
708 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
709 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
710 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
711 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
712 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
713 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
714 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
715 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
716 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
717 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
718 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
719 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
720 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
721 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
722 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
723 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
724 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
725 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
726 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
727 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
728 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
729 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
730 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
731 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
732 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
733 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
734 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
735 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
736 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
737 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
738 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
739 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
740 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
741 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15,
742 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
743 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
744 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
745 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
746 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
747 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
748 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
749 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
750 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
751 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
752 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
753 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
754 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
755 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
756 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11,
757 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
758 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
759 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
760 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
761 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7,
762 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5,
765 static const uint8_t l_u_yry10[1024] = {
766 2, 3, 3, 4, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10,
767 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
768 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
769 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
770 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
771 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
772 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
773 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
774 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
775 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
776 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
777 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
778 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
779 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
780 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
781 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
782 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
783 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
784 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
785 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
786 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
787 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
788 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
789 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
790 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
791 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
792 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
793 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
794 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
795 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
796 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
797 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
798 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
799 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
800 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
801 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
802 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
803 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
804 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
805 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
806 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
807 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
808 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
809 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
810 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
811 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
812 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
813 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
814 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
815 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
816 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
817 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
818 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
819 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
820 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
821 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
822 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
823 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
824 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
825 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
826 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
827 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
828 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
829 10, 10, 10, 10, 9, 9, 9, 8, 8, 7, 7, 6, 5, 4, 4, 3,
832 static const uint8_t l_u_yry10i[1024] = {
833 2, 4, 4, 4, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9,
834 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
835 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,
836 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
837 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
838 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
839 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
840 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
841 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
842 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
843 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
844 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
845 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
846 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
847 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
848 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
849 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
850 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
851 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
852 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
853 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
854 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
855 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
856 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
857 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
858 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
859 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
860 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
861 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
862 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
863 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
864 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
865 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
866 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
867 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
868 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
869 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
870 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
871 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
872 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
873 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
874 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
875 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
876 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
877 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
878 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
879 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
880 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
881 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
882 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
883 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
884 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
885 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
886 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
887 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
888 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
889 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
890 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
891 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
892 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
893 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13,
894 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
895 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 9, 9, 9,
896 9, 9, 8, 8, 8, 8, 7, 7, 7, 6, 6, 5, 5, 4, 4, 3,
899 static const uint8_t l_y_ybri[256] = {
900 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8,
901 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
902 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12,
903 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
904 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
905 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
906 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
907 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
908 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
909 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
910 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
911 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
912 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12,
913 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10,
914 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8,
915 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 3,
918 static const uint8_t l_u_ybri[256] = {
919 1, 3, 5, 6, 8, 8, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13,
920 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16,
921 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
922 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
923 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
924 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
925 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
926 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
927 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
928 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
929 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
930 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
931 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
932 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
933 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14,
934 14, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 8, 8, 6, 5, 2,
937 static const uint8_t l_y_byryi[256] = {
938 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8,
939 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
940 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12,
941 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
942 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
943 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
944 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
945 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
946 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
947 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
948 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
949 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
950 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12,
951 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10,
952 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8,
953 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 4, 4, 3,
956 static const uint8_t l_u_byryi[256] = {
957 1, 3, 4, 6, 6, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11,
958 12, 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15,
959 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
960 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
961 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
962 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
963 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
964 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
965 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
966 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
967 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
968 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
969 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
970 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15,
971 15, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12,
972 12, 11, 11, 11, 10, 10, 10, 9, 9, 8, 8, 7, 7, 5, 4, 3,
975 static const uint8_t l_r_rgbxi[1024] = {
976 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
977 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
978 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
979 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
980 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
981 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
982 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
983 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
984 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
985 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
986 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
987 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
988 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
989 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
990 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
991 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
992 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
993 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
994 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
995 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
996 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
997 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
998 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
999 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1000 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1001 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1002 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1003 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1004 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1005 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1006 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1007 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1008 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1009 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1010 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1011 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1012 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1013 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1014 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1015 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1016 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1017 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1018 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1019 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1020 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1021 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1022 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1023 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1024 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15,
1025 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1026 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1027 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1028 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1029 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
1030 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
1031 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13,
1032 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
1033 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1034 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
1035 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
1036 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1037 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9,
1038 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
1039 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 5, 5, 4, 4, 4,
1042 static const uint8_t l_g_rgbxi[1024] = {
1043 2, 3, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
1044 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11,
1045 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
1046 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
1047 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
1048 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1049 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16,
1050 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1051 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1052 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1053 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1054 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1055 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1056 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1057 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1058 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1059 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1060 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1061 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1062 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1063 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1064 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1065 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1066 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1067 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1068 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1069 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1070 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1071 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1072 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1073 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1074 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1075 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1076 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1077 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1078 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1079 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1080 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1081 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1082 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1083 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1084 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1085 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1086 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1087 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1088 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1089 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1090 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1091 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1092 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1093 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1094 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1095 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1096 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1097 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1098 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1099 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1100 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1101 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1102 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
1103 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1104 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11,
1105 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9,
1106 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 3,
1109 static void decode_ca4i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1111 SheerVideoContext *s = avctx->priv_data;
1112 uint16_t *dst_y, *dst_u, *dst_v, *dst_a;
1115 dst_a = (uint16_t *)p->data[3];
1116 dst_y = (uint16_t *)p->data[0];
1117 dst_u = (uint16_t *)p->data[1];
1118 dst_v = (uint16_t *)p->data[2];
1120 for (y = 0; y < avctx->height; y++) {
1121 if (get_bits1(gb)) {
1122 for (x = 0; x < avctx->width; x++) {
1123 dst_a[x] = get_bits(gb, 10);
1124 dst_y[x] = get_bits(gb, 10);
1125 dst_u[x] = get_bits(gb, 10);
1126 dst_v[x] = get_bits(gb, 10);
1129 int pred[4] = { 502, 512, 512, 502 };
1131 for (x = 0; x < avctx->width; x++) {
1134 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1135 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1136 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1137 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1139 dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff;
1140 dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff;
1141 dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff;
1142 dst_v[x] = pred[2] = (v + pred[2]) & 0x3ff;
1146 dst_y += p->linesize[0] / 2;
1147 dst_u += p->linesize[1] / 2;
1148 dst_v += p->linesize[2] / 2;
1149 dst_a += p->linesize[3] / 2;
1153 static void decode_ca4p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1155 SheerVideoContext *s = avctx->priv_data;
1156 uint16_t *dst_y, *dst_u, *dst_v, *dst_a;
1159 dst_a = (uint16_t *)p->data[3];
1160 dst_y = (uint16_t *)p->data[0];
1161 dst_u = (uint16_t *)p->data[1];
1162 dst_v = (uint16_t *)p->data[2];
1164 if (get_bits1(gb)) {
1165 for (x = 0; x < avctx->width; x++) {
1166 dst_a[x] = get_bits(gb, 10);
1167 dst_y[x] = get_bits(gb, 10);
1168 dst_u[x] = get_bits(gb, 10);
1169 dst_v[x] = get_bits(gb, 10);
1172 int pred[4] = { 502, 512, 512, 502 };
1174 for (x = 0; x < avctx->width; x++) {
1177 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1178 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1179 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1180 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1182 dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff;
1183 dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff;
1184 dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff;
1185 dst_v[x] = pred[2] = (v + pred[2]) & 0x3ff;
1189 dst_y += p->linesize[0] / 2;
1190 dst_u += p->linesize[1] / 2;
1191 dst_v += p->linesize[2] / 2;
1192 dst_a += p->linesize[3] / 2;
1194 for (y = 1; y < avctx->height; y++) {
1195 if (get_bits1(gb)) {
1196 for (x = 0; x < avctx->width; x++) {
1197 dst_a[x] = get_bits(gb, 10);
1198 dst_y[x] = get_bits(gb, 10);
1199 dst_u[x] = get_bits(gb, 10);
1200 dst_v[x] = get_bits(gb, 10);
1203 int pred_TL[4], pred_L[4], pred_T[4];
1206 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
1207 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
1208 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
1209 pred_TL[3] = pred_L[3] = dst_a[-p->linesize[3] / 2];
1211 for (x = 0; x < avctx->width; x++) {
1212 pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
1213 pred_T[1] = dst_u[-p->linesize[1] / 2 + x];
1214 pred_T[2] = dst_v[-p->linesize[2] / 2 + x];
1215 pred_T[3] = dst_a[-p->linesize[3] / 2 + x];
1217 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1218 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1219 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1220 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1222 dst_a[x] = pred_L[3] = (a + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0x3ff;
1223 dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
1224 dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
1225 dst_v[x] = pred_L[2] = (v + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
1227 pred_TL[0] = pred_T[0];
1228 pred_TL[1] = pred_T[1];
1229 pred_TL[2] = pred_T[2];
1230 pred_TL[3] = pred_T[3];
1234 dst_y += p->linesize[0] / 2;
1235 dst_u += p->linesize[1] / 2;
1236 dst_v += p->linesize[2] / 2;
1237 dst_a += p->linesize[3] / 2;
1241 static void decode_ybr10i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1243 SheerVideoContext *s = avctx->priv_data;
1244 uint16_t *dst_y, *dst_u, *dst_v;
1247 dst_y = (uint16_t *)p->data[0];
1248 dst_u = (uint16_t *)p->data[1];
1249 dst_v = (uint16_t *)p->data[2];
1251 for (y = 0; y < avctx->height; y++) {
1252 if (get_bits1(gb)) {
1253 for (x = 0; x < avctx->width; x++) {
1254 dst_y[x] = get_bits(gb, 10);
1255 dst_u[x] = get_bits(gb, 10);
1256 dst_v[x] = get_bits(gb, 10);
1259 int pred[4] = { 502, 512, 512, 512 };
1261 for (x = 0; x < avctx->width; x++) {
1264 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1265 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1266 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1268 dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff;
1269 dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff;
1270 dst_v[x] = pred[2] = (v + pred[2]) & 0x3ff;
1274 dst_y += p->linesize[0] / 2;
1275 dst_u += p->linesize[1] / 2;
1276 dst_v += p->linesize[2] / 2;
1280 static void decode_ybr10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1282 SheerVideoContext *s = avctx->priv_data;
1283 uint16_t *dst_y, *dst_u, *dst_v;
1286 dst_y = (uint16_t *)p->data[0];
1287 dst_u = (uint16_t *)p->data[1];
1288 dst_v = (uint16_t *)p->data[2];
1290 if (get_bits1(gb)) {
1291 for (x = 0; x < avctx->width; x++) {
1292 dst_y[x] = get_bits(gb, 10);
1293 dst_u[x] = get_bits(gb, 10);
1294 dst_v[x] = get_bits(gb, 10);
1297 int pred[4] = { 502, 512, 512, 512 };
1299 for (x = 0; x < avctx->width; x++) {
1302 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1303 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1304 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1306 dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff;
1307 dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff;
1308 dst_v[x] = pred[2] = (v + pred[2]) & 0x3ff;
1312 dst_y += p->linesize[0] / 2;
1313 dst_u += p->linesize[1] / 2;
1314 dst_v += p->linesize[2] / 2;
1316 for (y = 1; y < avctx->height; y++) {
1317 if (get_bits1(gb)) {
1318 for (x = 0; x < avctx->width; x++) {
1319 dst_y[x] = get_bits(gb, 10);
1320 dst_u[x] = get_bits(gb, 10);
1321 dst_v[x] = get_bits(gb, 10);
1324 int pred_TL[4], pred_L[4], pred_T[4];
1327 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
1328 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
1329 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
1331 for (x = 0; x < avctx->width; x++) {
1332 pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
1333 pred_T[1] = dst_u[-p->linesize[1] / 2 + x];
1334 pred_T[2] = dst_v[-p->linesize[2] / 2 + x];
1336 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1337 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1338 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1340 dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
1341 dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
1342 dst_v[x] = pred_L[2] = (v + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
1344 pred_TL[0] = pred_T[0];
1345 pred_TL[1] = pred_T[1];
1346 pred_TL[2] = pred_T[2];
1350 dst_y += p->linesize[0] / 2;
1351 dst_u += p->linesize[1] / 2;
1352 dst_v += p->linesize[2] / 2;
1356 static void decode_yry10i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1358 SheerVideoContext *s = avctx->priv_data;
1359 uint16_t *dst_y, *dst_u, *dst_v;
1362 dst_y = (uint16_t *)p->data[0];
1363 dst_u = (uint16_t *)p->data[1];
1364 dst_v = (uint16_t *)p->data[2];
1366 for (y = 0; y < avctx->height; y++) {
1367 if (get_bits1(gb)) {
1368 for (x = 0; x < avctx->width; x += 2) {
1369 dst_y[x ] = get_bits(gb, 10);
1370 dst_u[x / 2] = get_bits(gb, 10);
1371 dst_y[x + 1] = get_bits(gb, 10);
1372 dst_v[x / 2] = get_bits(gb, 10);
1375 int pred[4] = { 502, 512, 512, 0 };
1377 for (x = 0; x < avctx->width; x += 2) {
1380 y1 = 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 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1383 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1385 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff;
1386 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff;
1387 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0x3ff;
1388 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0x3ff;
1392 dst_y += p->linesize[0] / 2;
1393 dst_u += p->linesize[1] / 2;
1394 dst_v += p->linesize[2] / 2;
1398 static void decode_yry10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1400 SheerVideoContext *s = avctx->priv_data;
1401 uint16_t *dst_y, *dst_u, *dst_v;
1404 dst_y = (uint16_t *)p->data[0];
1405 dst_u = (uint16_t *)p->data[1];
1406 dst_v = (uint16_t *)p->data[2];
1408 if (get_bits1(gb)) {
1409 for (x = 0; x < avctx->width; x += 2) {
1410 dst_y[x ] = get_bits(gb, 10);
1411 dst_u[x / 2] = get_bits(gb, 10);
1412 dst_y[x + 1] = get_bits(gb, 10);
1413 dst_v[x / 2] = get_bits(gb, 10);
1416 int pred[4] = { 502, 512, 512, 0 };
1418 for (x = 0; x < avctx->width; x += 2) {
1421 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1422 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1423 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1424 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1426 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff;
1427 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff;
1428 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0x3ff;
1429 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0x3ff;
1433 dst_y += p->linesize[0] / 2;
1434 dst_u += p->linesize[1] / 2;
1435 dst_v += p->linesize[2] / 2;
1437 for (y = 1; y < avctx->height; y++) {
1438 if (get_bits1(gb)) {
1439 for (x = 0; x < avctx->width; x += 2) {
1440 dst_y[x ] = get_bits(gb, 10);
1441 dst_u[x / 2] = get_bits(gb, 10);
1442 dst_y[x + 1] = get_bits(gb, 10);
1443 dst_v[x / 2] = get_bits(gb, 10);
1446 int pred_TL[6], pred_L[6], pred_T[6];
1449 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
1450 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
1451 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
1453 for (x = 0; x < avctx->width; x += 2) {
1454 pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
1455 pred_T[3] = dst_y[-p->linesize[0] / 2 + x + 1];
1456 pred_T[1] = dst_u[-p->linesize[1] / 2 + x / 2];
1457 pred_T[2] = dst_v[-p->linesize[2] / 2 + x / 2];
1459 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1460 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1461 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1462 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1464 dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
1465 dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0x3ff;
1466 dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0x3ff;
1467 dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0x3ff;
1469 pred_TL[0] = pred_T[3];
1470 pred_TL[1] = pred_T[1];
1471 pred_TL[2] = pred_T[2];
1475 dst_y += p->linesize[0] / 2;
1476 dst_u += p->linesize[1] / 2;
1477 dst_v += p->linesize[2] / 2;
1481 static void decode_ca2i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1483 SheerVideoContext *s = avctx->priv_data;
1484 uint16_t *dst_y, *dst_u, *dst_v, *dst_a;
1487 dst_y = (uint16_t *)p->data[0];
1488 dst_u = (uint16_t *)p->data[1];
1489 dst_v = (uint16_t *)p->data[2];
1490 dst_a = (uint16_t *)p->data[3];
1492 for (y = 0; y < avctx->height; y++) {
1493 if (get_bits1(gb)) {
1494 for (x = 0; x < avctx->width; x += 2) {
1495 dst_a[x ] = get_bits(gb, 10);
1496 dst_y[x ] = get_bits(gb, 10);
1497 dst_u[x / 2] = get_bits(gb, 10);
1498 dst_a[x + 1] = get_bits(gb, 10);
1499 dst_y[x + 1] = get_bits(gb, 10);
1500 dst_v[x / 2] = get_bits(gb, 10);
1503 int pred[4] = { 502, 512, 512, 502 };
1505 for (x = 0; x < avctx->width; x += 2) {
1506 int y1, y2, u, v, a1, a2;
1508 a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1509 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1510 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1511 a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1512 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1513 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1515 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff;
1516 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff;
1517 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0x3ff;
1518 dst_a[x ] = pred[3] = (a1 + pred[3]) & 0x3ff;
1519 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0x3ff;
1520 dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0x3ff;
1524 dst_y += p->linesize[0] / 2;
1525 dst_u += p->linesize[1] / 2;
1526 dst_v += p->linesize[2] / 2;
1527 dst_a += p->linesize[3] / 2;
1531 static void decode_ca2p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1533 SheerVideoContext *s = avctx->priv_data;
1534 uint16_t *dst_y, *dst_u, *dst_v, *dst_a;
1537 dst_y = (uint16_t *)p->data[0];
1538 dst_u = (uint16_t *)p->data[1];
1539 dst_v = (uint16_t *)p->data[2];
1540 dst_a = (uint16_t *)p->data[3];
1542 if (get_bits1(gb)) {
1543 for (x = 0; x < avctx->width; x += 2) {
1544 dst_a[x ] = get_bits(gb, 10);
1545 dst_y[x ] = get_bits(gb, 10);
1546 dst_u[x / 2] = get_bits(gb, 10);
1547 dst_a[x + 1] = get_bits(gb, 10);
1548 dst_y[x + 1] = get_bits(gb, 10);
1549 dst_v[x / 2] = get_bits(gb, 10);
1552 int pred[4] = { 502, 512, 512, 502 };
1554 for (x = 0; x < avctx->width; x += 2) {
1555 int y1, y2, u, v, a1, a2;
1557 a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1558 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1559 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1560 a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1561 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1562 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1564 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff;
1565 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff;
1566 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0x3ff;
1567 dst_a[x ] = pred[3] = (a1 + pred[3]) & 0x3ff;
1568 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0x3ff;
1569 dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0x3ff;
1573 dst_y += p->linesize[0] / 2;
1574 dst_u += p->linesize[1] / 2;
1575 dst_v += p->linesize[2] / 2;
1576 dst_a += p->linesize[3] / 2;
1578 for (y = 1; y < avctx->height; y++) {
1579 if (get_bits1(gb)) {
1580 for (x = 0; x < avctx->width; x += 2) {
1581 dst_a[x ] = get_bits(gb, 10);
1582 dst_y[x ] = get_bits(gb, 10);
1583 dst_u[x / 2] = get_bits(gb, 10);
1584 dst_a[x + 1] = get_bits(gb, 10);
1585 dst_y[x + 1] = get_bits(gb, 10);
1586 dst_v[x / 2] = get_bits(gb, 10);
1589 int pred_TL[6], pred_L[6], pred_T[6];
1590 int y1, y2, u, v, a1, a2;
1592 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0] / 2];
1593 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1] / 2];
1594 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2] / 2];
1595 pred_TL[4] = pred_L[4] = dst_a[-p->linesize[3] / 2];
1597 for (x = 0; x < avctx->width; x += 2) {
1598 pred_T[0] = dst_y[-p->linesize[0] / 2 + x];
1599 pred_T[3] = dst_y[-p->linesize[0] / 2 + x + 1];
1600 pred_T[1] = dst_u[-p->linesize[1] / 2 + x / 2];
1601 pred_T[2] = dst_v[-p->linesize[2] / 2 + x / 2];
1602 pred_T[4] = dst_a[-p->linesize[3] / 2 + x];
1603 pred_T[5] = dst_a[-p->linesize[3] / 2 + x + 1];
1605 a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1606 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1607 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1608 a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1609 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1610 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1612 dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
1613 dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0x3ff;
1614 dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0x3ff;
1615 dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0x3ff;
1616 dst_a[x ] = pred_L[4] = (a1 + ((3 * (pred_T[4] + pred_L[4]) - 2 * pred_TL[4]) >> 2)) & 0x3ff;
1617 dst_a[x + 1] = pred_L[4] = (a2 + ((3 * (pred_T[5] + pred_L[4]) - 2 * pred_T[4]) >> 2)) & 0x3ff;
1619 pred_TL[0] = pred_T[3];
1620 pred_TL[1] = pred_T[1];
1621 pred_TL[2] = pred_T[2];
1622 pred_TL[4] = pred_T[5];
1626 dst_y += p->linesize[0] / 2;
1627 dst_u += p->linesize[1] / 2;
1628 dst_v += p->linesize[2] / 2;
1629 dst_a += p->linesize[3] / 2;
1633 static void decode_c82i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1635 SheerVideoContext *s = avctx->priv_data;
1636 uint8_t *dst_y, *dst_u, *dst_v, *dst_a;
1644 for (y = 0; y < avctx->height; y += 1) {
1645 if (get_bits1(gb)) {
1646 for (x = 0; x < avctx->width; x += 2) {
1647 dst_a[x ] = get_bits(gb, 8);
1648 dst_y[x ] = get_bits(gb, 8);
1649 dst_u[x / 2] = get_bits(gb, 8);
1650 dst_a[x + 1] = get_bits(gb, 8);
1651 dst_y[x + 1] = get_bits(gb, 8);
1652 dst_v[x / 2] = get_bits(gb, 8);
1655 int pred[4] = { 125, -128, -128, 125 };
1657 for (x = 0; x < avctx->width; x += 2) {
1658 int y1, y2, u, v, a1, a2;
1660 a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1661 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1662 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1663 a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1664 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1665 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1667 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
1668 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
1669 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
1670 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
1671 dst_a[x ] = pred[3] = (a1 + pred[3]) & 0xff;
1672 dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0xff;
1676 dst_y += p->linesize[0];
1677 dst_u += p->linesize[1];
1678 dst_v += p->linesize[2];
1679 dst_a += p->linesize[3];
1683 static void decode_c82p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1685 SheerVideoContext *s = avctx->priv_data;
1686 uint8_t *dst_y, *dst_u, *dst_v, *dst_a;
1694 if (get_bits1(gb)) {
1695 for (x = 0; x < avctx->width; x += 2) {
1696 dst_a[x ] = get_bits(gb, 8);
1697 dst_y[x ] = get_bits(gb, 8);
1698 dst_u[x / 2] = get_bits(gb, 8);
1699 dst_a[x + 1] = get_bits(gb, 8);
1700 dst_y[x + 1] = get_bits(gb, 8);
1701 dst_v[x / 2] = get_bits(gb, 8);
1704 int pred[4] = { 125, -128, -128, 125 };
1706 for (x = 0; x < avctx->width; x += 2) {
1707 int y1, y2, u, v, a1, a2;
1709 a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1710 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1711 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1712 a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1713 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1714 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1716 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
1717 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
1718 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
1719 dst_a[x ] = pred[3] = (a1 + pred[3]) & 0xff;
1720 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
1721 dst_a[x + 1] = pred[3] = (a2 + pred[3]) & 0xff;
1725 dst_y += p->linesize[0];
1726 dst_u += p->linesize[1];
1727 dst_v += p->linesize[2];
1728 dst_a += p->linesize[3];
1730 for (y = 1; y < avctx->height; y++) {
1731 if (get_bits1(gb)) {
1732 for (x = 0; x < avctx->width; x += 2) {
1733 dst_a[x ] = get_bits(gb, 8);
1734 dst_y[x ] = get_bits(gb, 8);
1735 dst_u[x / 2] = get_bits(gb, 8);
1736 dst_a[x + 1] = get_bits(gb, 8);
1737 dst_y[x + 1] = get_bits(gb, 8);
1738 dst_v[x / 2] = get_bits(gb, 8);
1741 int pred_TL[6], pred_L[6], pred_T[6];
1742 int y1, y2, u, v, a1, a2;
1744 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
1745 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
1746 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
1747 pred_TL[4] = pred_L[4] = dst_a[-p->linesize[3]];
1749 for (x = 0; x < avctx->width; x += 2) {
1750 pred_T[0] = dst_y[-p->linesize[0] + x];
1751 pred_T[3] = dst_y[-p->linesize[0] + x + 1];
1752 pred_T[1] = dst_u[-p->linesize[1] + x / 2];
1753 pred_T[2] = dst_v[-p->linesize[2] + x / 2];
1754 pred_T[4] = dst_a[-p->linesize[3] + x];
1755 pred_T[5] = dst_a[-p->linesize[3] + x + 1];
1757 a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1758 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1759 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1760 a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1761 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1762 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1764 dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
1765 dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff;
1766 dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0xff;
1767 dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0xff;
1768 dst_a[x ] = pred_L[4] = (a1 + ((3 * (pred_T[4] + pred_L[4]) - 2 * pred_TL[4]) >> 2)) & 0xff;
1769 dst_a[x + 1] = pred_L[4] = (a2 + ((3 * (pred_T[5] + pred_L[4]) - 2 * pred_T[4]) >> 2)) & 0xff;
1771 pred_TL[0] = pred_T[3];
1772 pred_TL[1] = pred_T[1];
1773 pred_TL[2] = pred_T[2];
1774 pred_TL[4] = pred_T[5];
1778 dst_y += p->linesize[0];
1779 dst_u += p->linesize[1];
1780 dst_v += p->linesize[2];
1781 dst_a += p->linesize[3];
1785 static void decode_ybyr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1787 SheerVideoContext *s = avctx->priv_data;
1788 uint8_t *dst_y, *dst_u, *dst_v;
1795 if (get_bits1(gb)) {
1796 for (x = 0; x < avctx->width; x += 2) {
1797 dst_y[x ] = get_bits(gb, 8);
1798 dst_u[x / 2] = get_bits(gb, 8) + 128;
1799 dst_y[x + 1] = get_bits(gb, 8);
1800 dst_v[x / 2] = get_bits(gb, 8) + 128;
1803 int pred[4] = { -128, 128, 128, 0 };
1805 for (x = 0; x < avctx->width; x += 2) {
1808 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1809 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1810 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1811 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1813 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
1814 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
1815 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
1816 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
1820 dst_y += p->linesize[0];
1821 dst_u += p->linesize[1];
1822 dst_v += p->linesize[2];
1824 for (y = 1; y < avctx->height; y++) {
1825 if (get_bits1(gb)) {
1826 for (x = 0; x < avctx->width; x += 2) {
1827 dst_y[x ] = get_bits(gb, 8);
1828 dst_u[x / 2] = get_bits(gb, 8) + 128;
1829 dst_y[x + 1] = get_bits(gb, 8);
1830 dst_v[x / 2] = get_bits(gb, 8) + 128;
1833 int pred_TL[4], pred_L[4], pred_T[4];
1836 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
1837 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
1838 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
1840 for (x = 0; x < avctx->width; x += 2) {
1841 pred_T[0] = dst_y[-p->linesize[0] + x];
1842 pred_T[3] = dst_y[-p->linesize[0] + x + 1];
1843 pred_T[1] = dst_u[-p->linesize[1] + x / 2];
1844 pred_T[2] = dst_v[-p->linesize[2] + x / 2];
1846 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1847 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1848 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1849 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1851 dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
1852 dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff;
1853 dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0xff;
1854 dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0xff;
1856 pred_TL[0] = pred_T[3];
1857 pred_TL[1] = pred_T[1];
1858 pred_TL[2] = pred_T[2];
1862 dst_y += p->linesize[0];
1863 dst_u += p->linesize[1];
1864 dst_v += p->linesize[2];
1868 static void decode_byryi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1870 SheerVideoContext *s = avctx->priv_data;
1871 uint8_t *dst_y, *dst_u, *dst_v;
1878 if (get_bits1(gb)) {
1879 for (x = 0; x < avctx->width; x += 2) {
1880 dst_y[x ] = get_bits(gb, 8);
1881 dst_u[x / 2] = get_bits(gb, 8);
1882 dst_y[x + 1] = get_bits(gb, 8);
1883 dst_v[x / 2] = get_bits(gb, 8);
1886 int pred[4] = { 125, -128, -128, 0 };
1888 for (x = 0; x < avctx->width; x += 2) {
1891 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1892 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1893 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1894 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1896 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
1897 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
1898 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
1899 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
1903 dst_y += p->linesize[0];
1904 dst_u += p->linesize[1];
1905 dst_v += p->linesize[2];
1907 for (y = 1; y < avctx->height; y++) {
1908 if (get_bits1(gb)) {
1909 for (x = 0; x < avctx->width; x += 2) {
1910 dst_y[x ] = get_bits(gb, 8);
1911 dst_u[x / 2] = get_bits(gb, 8);
1912 dst_y[x + 1] = get_bits(gb, 8);
1913 dst_v[x / 2] = get_bits(gb, 8);
1919 pred_L[0] = dst_y[-p->linesize[0]];
1920 pred_L[1] = dst_u[-p->linesize[1]];
1921 pred_L[2] = dst_v[-p->linesize[2]];
1923 for (x = 0; x < avctx->width; x += 2) {
1924 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1925 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1926 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1927 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1929 dst_y[x ] = pred_L[0] = (y1 + pred_L[0]) & 0xff;
1930 dst_u[x / 2] = pred_L[1] = (u + pred_L[1]) & 0xff;
1931 dst_y[x + 1] = pred_L[0] = (y2 + pred_L[0]) & 0xff;
1932 dst_v[x / 2] = pred_L[2] = (v + pred_L[2]) & 0xff;
1936 dst_y += p->linesize[0];
1937 dst_u += p->linesize[1];
1938 dst_v += p->linesize[2];
1942 static void decode_byry(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
1944 SheerVideoContext *s = avctx->priv_data;
1945 uint8_t *dst_y, *dst_u, *dst_v;
1952 if (get_bits1(gb)) {
1953 for (x = 0; x < avctx->width; x += 2) {
1954 dst_y[x ] = get_bits(gb, 8);
1955 dst_u[x / 2] = get_bits(gb, 8);
1956 dst_y[x + 1] = get_bits(gb, 8);
1957 dst_v[x / 2] = get_bits(gb, 8);
1960 int pred[4] = { 125, -128, -128, 0 };
1962 for (x = 0; x < avctx->width; x += 2) {
1965 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1966 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1967 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
1968 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
1970 dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff;
1971 dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff;
1972 dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff;
1973 dst_v[x / 2] = pred[2] = (v + pred[2]) & 0xff;
1977 dst_y += p->linesize[0];
1978 dst_u += p->linesize[1];
1979 dst_v += p->linesize[2];
1981 for (y = 1; y < avctx->height; y++) {
1982 if (get_bits1(gb)) {
1983 for (x = 0; x < avctx->width; x += 2) {
1984 dst_y[x ] = get_bits(gb, 8);
1985 dst_u[x / 2] = get_bits(gb, 8);
1986 dst_y[x + 1] = get_bits(gb, 8);
1987 dst_v[x / 2] = get_bits(gb, 8);
1990 int pred_TL[4], pred_L[4], pred_T[4];
1993 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
1994 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
1995 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
1997 for (x = 0; x < avctx->width; x += 2) {
1998 pred_T[0] = dst_y[-p->linesize[0] + x];
1999 pred_T[3] = dst_y[-p->linesize[0] + x + 1];
2000 pred_T[1] = dst_u[-p->linesize[1] + x / 2];
2001 pred_T[2] = dst_v[-p->linesize[2] + x / 2];
2003 y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2004 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2005 y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2006 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2008 dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
2009 dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff;
2010 dst_y[x + 1] = pred_L[0] = (y2 + ((3 * (pred_T[3] + pred_L[0]) - 2 * pred_T[0]) >> 2)) & 0xff;
2011 dst_v[x / 2] = pred_L[2] = (v + (((pred_L[2] - pred_TL[2]) >> 1) + pred_T[2])) & 0xff;
2013 pred_TL[0] = pred_T[3];
2014 pred_TL[1] = pred_T[1];
2015 pred_TL[2] = pred_T[2];
2019 dst_y += p->linesize[0];
2020 dst_u += p->linesize[1];
2021 dst_v += p->linesize[2];
2025 static void decode_ybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2027 SheerVideoContext *s = avctx->priv_data;
2028 uint8_t *dst_y, *dst_u, *dst_v;
2035 if (get_bits1(gb)) {
2036 for (x = 0; x < avctx->width; x++) {
2037 dst_y[x] = get_bits(gb, 8);
2038 dst_u[x] = get_bits(gb, 8);
2039 dst_v[x] = get_bits(gb, 8);
2042 int pred[4] = { s->alt ? 125 : -146, -128, -128, -128 };
2044 for (x = 0; x < avctx->width; x++) {
2047 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2048 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2049 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2051 dst_y[x] = pred[0] = (y + pred[0]) & 0xff;
2052 dst_u[x] = pred[1] = (u + pred[1]) & 0xff;
2053 dst_v[x] = pred[2] = (v + pred[2]) & 0xff;
2057 dst_y += p->linesize[0];
2058 dst_u += p->linesize[1];
2059 dst_v += p->linesize[2];
2061 for (y = 1; y < avctx->height; y++) {
2062 if (get_bits1(gb)) {
2063 for (x = 0; x < avctx->width; x++) {
2064 dst_y[x] = get_bits(gb, 8);
2065 dst_u[x] = get_bits(gb, 8);
2066 dst_v[x] = get_bits(gb, 8);
2072 pred_L[0] = dst_y[-p->linesize[0]];
2073 pred_L[1] = dst_u[-p->linesize[1]];
2074 pred_L[2] = dst_v[-p->linesize[2]];
2076 for (x = 0; x < avctx->width; x++) {
2077 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2078 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2079 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2081 dst_y[x] = pred_L[0] = (y + pred_L[0]) & 0xff;
2082 dst_u[x] = pred_L[1] = (u + pred_L[1]) & 0xff;
2083 dst_v[x] = pred_L[2] = (v + pred_L[2]) & 0xff;
2087 dst_y += p->linesize[0];
2088 dst_u += p->linesize[1];
2089 dst_v += p->linesize[2];
2093 static void decode_ybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2095 SheerVideoContext *s = avctx->priv_data;
2096 uint8_t *dst_y, *dst_u, *dst_v;
2103 if (get_bits1(gb)) {
2104 for (x = 0; x < avctx->width; x++) {
2105 dst_y[x] = get_bits(gb, 8);
2106 dst_u[x] = get_bits(gb, 8);
2107 dst_v[x] = get_bits(gb, 8);
2110 int pred[4] = { s->alt ? 125 : -146, -128, -128, -128 };
2112 for (x = 0; x < avctx->width; x++) {
2115 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2116 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2117 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2119 dst_y[x] = pred[0] = (y + pred[0]) & 0xff;
2120 dst_u[x] = pred[1] = (u + pred[1]) & 0xff;
2121 dst_v[x] = pred[2] = (v + pred[2]) & 0xff;
2125 dst_y += p->linesize[0];
2126 dst_u += p->linesize[1];
2127 dst_v += p->linesize[2];
2129 for (y = 1; y < avctx->height; y++) {
2130 if (get_bits1(gb)) {
2131 for (x = 0; x < avctx->width; x++) {
2132 dst_y[x] = get_bits(gb, 8);
2133 dst_u[x] = get_bits(gb, 8);
2134 dst_v[x] = get_bits(gb, 8);
2137 int pred_TL[4], pred_L[4], pred_T[4];
2140 pred_TL[0] = pred_L[0] = dst_y[-p->linesize[0]];
2141 pred_TL[1] = pred_L[1] = dst_u[-p->linesize[1]];
2142 pred_TL[2] = pred_L[2] = dst_v[-p->linesize[2]];
2144 for (x = 0; x < avctx->width; x++) {
2145 pred_T[0] = dst_y[-p->linesize[0] + x];
2146 pred_T[1] = dst_u[-p->linesize[1] + x];
2147 pred_T[2] = dst_v[-p->linesize[2] + x];
2149 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2150 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2151 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2153 dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
2154 dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
2155 dst_v[x] = pred_L[2] = (v + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
2157 pred_TL[0] = pred_T[0];
2158 pred_TL[1] = pred_T[1];
2159 pred_TL[2] = pred_T[2];
2163 dst_y += p->linesize[0];
2164 dst_u += p->linesize[1];
2165 dst_v += p->linesize[2];
2169 static void decode_aybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2171 SheerVideoContext *s = avctx->priv_data;
2172 uint8_t *dst_a, *dst_y, *dst_u, *dst_v;
2180 if (get_bits1(gb)) {
2181 for (x = 0; x < avctx->width; x++) {
2182 dst_a[x] = get_bits(gb, 8);
2183 dst_y[x] = get_bits(gb, 8);
2184 dst_u[x] = get_bits(gb, 8);
2185 dst_v[x] = get_bits(gb, 8);
2188 int pred[4] = { 125, s->alt ? 125 : -146, -128, -128 };
2190 for (x = 0; x < avctx->width; x++) {
2193 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2194 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2195 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2196 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2198 dst_a[x] = pred[0] = (a + pred[0]) & 0xff;
2199 dst_y[x] = pred[1] = (y + pred[1]) & 0xff;
2200 dst_u[x] = pred[2] = (u + pred[2]) & 0xff;
2201 dst_v[x] = pred[3] = (v + pred[3]) & 0xff;
2205 dst_a += p->linesize[3];
2206 dst_y += p->linesize[0];
2207 dst_u += p->linesize[1];
2208 dst_v += p->linesize[2];
2210 for (y = 1; y < avctx->height; y++) {
2211 if (get_bits1(gb)) {
2212 for (x = 0; x < avctx->width; x++) {
2213 dst_a[x] = get_bits(gb, 8);
2214 dst_y[x] = get_bits(gb, 8);
2215 dst_u[x] = get_bits(gb, 8);
2216 dst_v[x] = get_bits(gb, 8);
2222 pred_L[0] = dst_a[-p->linesize[3]];
2223 pred_L[1] = dst_y[-p->linesize[0]];
2224 pred_L[2] = dst_u[-p->linesize[1]];
2225 pred_L[3] = dst_v[-p->linesize[2]];
2227 for (x = 0; x < avctx->width; x++) {
2228 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2229 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2230 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2231 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2233 dst_a[x] = pred_L[0] = (a + pred_L[0]) & 0xff;
2234 dst_y[x] = pred_L[1] = (y + pred_L[1]) & 0xff;
2235 dst_u[x] = pred_L[2] = (u + pred_L[2]) & 0xff;
2236 dst_v[x] = pred_L[3] = (v + pred_L[3]) & 0xff;
2240 dst_a += p->linesize[3];
2241 dst_y += p->linesize[0];
2242 dst_u += p->linesize[1];
2243 dst_v += p->linesize[2];
2247 static void decode_aybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2249 SheerVideoContext *s = avctx->priv_data;
2250 uint8_t *dst_a, *dst_y, *dst_u, *dst_v;
2258 if (get_bits1(gb)) {
2259 for (x = 0; x < avctx->width; x++) {
2260 dst_a[x] = get_bits(gb, 8);
2261 dst_y[x] = get_bits(gb, 8);
2262 dst_u[x] = get_bits(gb, 8);
2263 dst_v[x] = get_bits(gb, 8);
2266 int pred[4] = { 125, s->alt ? 125 : -146, -128, -128 };
2268 for (x = 0; x < avctx->width; x++) {
2271 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2272 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2273 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2274 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2276 dst_a[x] = pred[0] = (a + pred[0]) & 0xff;
2277 dst_y[x] = pred[1] = (y + pred[1]) & 0xff;
2278 dst_u[x] = pred[2] = (u + pred[2]) & 0xff;
2279 dst_v[x] = pred[3] = (v + pred[3]) & 0xff;
2283 dst_a += p->linesize[3];
2284 dst_y += p->linesize[0];
2285 dst_u += p->linesize[1];
2286 dst_v += p->linesize[2];
2288 for (y = 1; y < avctx->height; y++) {
2289 if (get_bits1(gb)) {
2290 for (x = 0; x < avctx->width; x++) {
2291 dst_a[x] = get_bits(gb, 8);
2292 dst_y[x] = get_bits(gb, 8);
2293 dst_u[x] = get_bits(gb, 8);
2294 dst_v[x] = get_bits(gb, 8);
2297 int pred_TL[4], pred_L[4], pred_T[4];
2300 pred_TL[0] = pred_L[0] = dst_a[-p->linesize[3]];
2301 pred_TL[1] = pred_L[1] = dst_y[-p->linesize[0]];
2302 pred_TL[2] = pred_L[2] = dst_u[-p->linesize[1]];
2303 pred_TL[3] = pred_L[3] = dst_v[-p->linesize[2]];
2305 for (x = 0; x < avctx->width; x++) {
2306 pred_T[0] = dst_a[-p->linesize[3] + x];
2307 pred_T[1] = dst_y[-p->linesize[0] + x];
2308 pred_T[2] = dst_u[-p->linesize[1] + x];
2309 pred_T[3] = dst_v[-p->linesize[2] + x];
2311 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2312 y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2313 u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2314 v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2316 dst_a[x] = pred_L[0] = (a + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
2317 dst_y[x] = pred_L[1] = (y + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
2318 dst_u[x] = pred_L[2] = (u + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
2319 dst_v[x] = pred_L[3] = (v + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0xff;
2321 pred_TL[0] = pred_T[0];
2322 pred_TL[1] = pred_T[1];
2323 pred_TL[2] = pred_T[2];
2324 pred_TL[3] = pred_T[3];
2328 dst_a += p->linesize[3];
2329 dst_y += p->linesize[0];
2330 dst_u += p->linesize[1];
2331 dst_v += p->linesize[2];
2335 static void decode_argxi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2337 SheerVideoContext *s = avctx->priv_data;
2338 uint16_t *dst_r, *dst_g, *dst_b, *dst_a;
2341 dst_r = (uint16_t *)p->data[2];
2342 dst_g = (uint16_t *)p->data[0];
2343 dst_b = (uint16_t *)p->data[1];
2344 dst_a = (uint16_t *)p->data[3];
2346 for (y = 0; y < avctx->height; y++) {
2347 if (get_bits1(gb)) {
2348 for (x = 0; x < avctx->width; x++) {
2349 dst_a[x] = get_bits(gb, 10);
2350 dst_r[x] = get_bits(gb, 10);
2351 dst_g[x] = get_bits(gb, 10);
2352 dst_b[x] = get_bits(gb, 10);
2355 int pred[4] = { 512, 512, 512, 512 };
2357 for (x = 0; x < avctx->width; x++) {
2360 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2361 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2362 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2363 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2365 dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff;
2366 dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff;
2367 dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff;
2368 dst_b[x] = pred[2] = (r + g + b + pred[2]) & 0x3ff;
2372 dst_r += p->linesize[2] / 2;
2373 dst_g += p->linesize[0] / 2;
2374 dst_b += p->linesize[1] / 2;
2375 dst_a += p->linesize[3] / 2;
2379 static void decode_argx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2381 SheerVideoContext *s = avctx->priv_data;
2382 uint16_t *dst_r, *dst_g, *dst_b, *dst_a;
2385 dst_r = (uint16_t *)p->data[2];
2386 dst_g = (uint16_t *)p->data[0];
2387 dst_b = (uint16_t *)p->data[1];
2388 dst_a = (uint16_t *)p->data[3];
2390 if (get_bits1(gb)) {
2391 for (x = 0; x < avctx->width; x++) {
2392 dst_a[x] = get_bits(gb, 10);
2393 dst_r[x] = get_bits(gb, 10);
2394 dst_g[x] = get_bits(gb, 10);
2395 dst_b[x] = get_bits(gb, 10);
2398 int pred[4] = { 512, 512, 512, 512 };
2400 for (x = 0; x < avctx->width; x++) {
2403 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2404 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2405 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2406 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2408 dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff;
2409 dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff;
2410 dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff;
2411 dst_b[x] = pred[2] = (r + g + b + pred[2]) & 0x3ff;
2415 dst_r += p->linesize[2] / 2;
2416 dst_g += p->linesize[0] / 2;
2417 dst_b += p->linesize[1] / 2;
2418 dst_a += p->linesize[3] / 2;
2420 for (y = 1; y < avctx->height; y++) {
2421 if (get_bits1(gb)) {
2422 for (x = 0; x < avctx->width; x++) {
2423 dst_a[x] = get_bits(gb, 10);
2424 dst_r[x] = get_bits(gb, 10);
2425 dst_g[x] = get_bits(gb, 10);
2426 dst_b[x] = get_bits(gb, 10);
2429 int pred_TL[4], pred_L[4], pred_T[4];
2432 pred_TL[0] = pred_L[0] = dst_r[-p->linesize[2] / 2];
2433 pred_TL[1] = pred_L[1] = dst_g[-p->linesize[0] / 2];
2434 pred_TL[2] = pred_L[2] = dst_b[-p->linesize[1] / 2];
2435 pred_TL[3] = pred_L[3] = dst_a[-p->linesize[3] / 2];
2437 for (x = 0; x < avctx->width; x++) {
2438 pred_T[0] = dst_r[-p->linesize[2] / 2 + x];
2439 pred_T[1] = dst_g[-p->linesize[0] / 2 + x];
2440 pred_T[2] = dst_b[-p->linesize[1] / 2 + x];
2441 pred_T[3] = dst_a[-p->linesize[3] / 2 + x];
2443 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2444 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2445 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2446 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2448 dst_a[x] = pred_L[3] = (a + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0x3ff;
2449 dst_r[x] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
2450 dst_g[x] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
2451 dst_b[x] = pred_L[2] = (r + g + b + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
2453 pred_TL[0] = pred_T[0];
2454 pred_TL[1] = pred_T[1];
2455 pred_TL[2] = pred_T[2];
2456 pred_TL[3] = pred_T[3];
2460 dst_r += p->linesize[2] / 2;
2461 dst_g += p->linesize[0] / 2;
2462 dst_b += p->linesize[1] / 2;
2463 dst_a += p->linesize[3] / 2;
2467 static void decode_rgbxi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2469 SheerVideoContext *s = avctx->priv_data;
2470 uint16_t *dst_r, *dst_g, *dst_b;
2473 dst_r = (uint16_t *)p->data[2];
2474 dst_g = (uint16_t *)p->data[0];
2475 dst_b = (uint16_t *)p->data[1];
2477 for (y = 0; y < avctx->height; y++) {
2478 if (get_bits1(gb)) {
2479 for (x = 0; x < avctx->width; x++) {
2480 dst_r[x] = get_bits(gb, 10);
2481 dst_g[x] = get_bits(gb, 10);
2482 dst_b[x] = get_bits(gb, 10);
2485 int pred[4] = { 512, 512, 512, 0 };
2487 for (x = 0; x < avctx->width; x++) {
2490 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2491 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2492 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2494 dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff;
2495 dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff;
2496 dst_b[x] = pred[2] = (r + g + b + pred[2]) & 0x3ff;
2500 dst_r += p->linesize[2] / 2;
2501 dst_g += p->linesize[0] / 2;
2502 dst_b += p->linesize[1] / 2;
2506 static void decode_rgbx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2508 SheerVideoContext *s = avctx->priv_data;
2509 uint16_t *dst_r, *dst_g, *dst_b;
2512 dst_r = (uint16_t *)p->data[2];
2513 dst_g = (uint16_t *)p->data[0];
2514 dst_b = (uint16_t *)p->data[1];
2516 if (get_bits1(gb)) {
2517 for (x = 0; x < avctx->width; x++) {
2518 dst_r[x] = get_bits(gb, 10);
2519 dst_g[x] = get_bits(gb, 10);
2520 dst_b[x] = get_bits(gb, 10);
2523 int pred[4] = { 512, 512, 512, 0 };
2525 for (x = 0; x < avctx->width; x++) {
2528 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2529 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2530 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2532 dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff;
2533 dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff;
2534 dst_b[x] = pred[2] = (r + g + b + pred[2]) & 0x3ff;
2538 dst_r += p->linesize[2] / 2;
2539 dst_g += p->linesize[0] / 2;
2540 dst_b += p->linesize[1] / 2;
2542 for (y = 1; y < avctx->height; y++) {
2543 if (get_bits1(gb)) {
2544 for (x = 0; x < avctx->width; x++) {
2545 dst_r[x] = get_bits(gb, 10);
2546 dst_g[x] = get_bits(gb, 10);
2547 dst_b[x] = get_bits(gb, 10);
2550 int pred_TL[4], pred_L[4], pred_T[4];
2553 pred_TL[0] = pred_L[0] = dst_r[-p->linesize[2] / 2];
2554 pred_TL[1] = pred_L[1] = dst_g[-p->linesize[0] / 2];
2555 pred_TL[2] = pred_L[2] = dst_b[-p->linesize[1] / 2];
2557 for (x = 0; x < avctx->width; x++) {
2558 pred_T[0] = dst_r[-p->linesize[2] / 2 + x];
2559 pred_T[1] = dst_g[-p->linesize[0] / 2 + x];
2560 pred_T[2] = dst_b[-p->linesize[1] / 2 + x];
2562 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2563 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2564 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2566 dst_r[x] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff;
2567 dst_g[x] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff;
2568 dst_b[x] = pred_L[2] = (r + g + b + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0x3ff;
2570 pred_TL[0] = pred_T[0];
2571 pred_TL[1] = pred_T[1];
2572 pred_TL[2] = pred_T[2];
2576 dst_r += p->linesize[2] / 2;
2577 dst_g += p->linesize[0] / 2;
2578 dst_b += p->linesize[1] / 2;
2582 static void decode_argbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2584 SheerVideoContext *s = avctx->priv_data;
2589 if (get_bits1(gb)) {
2590 for (x = 0; x < avctx->width; x++) {
2591 dst[x * 4 + 0] = get_bits(gb, 8);
2592 dst[x * 4 + 1] = get_bits(gb, 8);
2593 dst[x * 4 + 2] = get_bits(gb, 8);
2594 dst[x * 4 + 3] = get_bits(gb, 8);
2597 int pred[4] = { -128, -128, -128, -128 };
2599 for (x = 0; x < avctx->width; x++) {
2602 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2603 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2604 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2605 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2607 dst[4 * x + 0] = pred[0] = (a + pred[0]) & 0xff;
2608 dst[4 * x + 1] = pred[1] = (r + pred[1]) & 0xff;
2609 dst[4 * x + 2] = pred[2] = (r + g + pred[2]) & 0xff;
2610 dst[4 * x + 3] = pred[3] = (r + g + b + pred[3]) & 0xff;
2614 dst += p->linesize[0];
2615 for (y = 1; y < avctx->height; y++) {
2616 if (get_bits1(gb)) {
2617 for (x = 0; x < avctx->width; x++) {
2618 dst[x * 4 + 0] = get_bits(gb, 8);
2619 dst[x * 4 + 1] = get_bits(gb, 8);
2620 dst[x * 4 + 2] = get_bits(gb, 8);
2621 dst[x * 4 + 3] = get_bits(gb, 8);
2627 pred_L[0] = dst[-p->linesize[0] + 0];
2628 pred_L[1] = dst[-p->linesize[0] + 1];
2629 pred_L[2] = dst[-p->linesize[0] + 2];
2630 pred_L[3] = dst[-p->linesize[0] + 3];
2632 for (x = 0; x < avctx->width; x++) {
2633 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2634 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2635 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2636 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2638 dst[4 * x + 0] = pred_L[0] = (a + pred_L[0]) & 0xff;
2639 dst[4 * x + 1] = pred_L[1] = (r + pred_L[1]) & 0xff;
2640 dst[4 * x + 2] = pred_L[2] = (r + g + pred_L[2]) & 0xff;
2641 dst[4 * x + 3] = pred_L[3] = (r + g + b + pred_L[3]) & 0xff;
2644 dst += p->linesize[0];
2648 static void decode_argb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2650 SheerVideoContext *s = avctx->priv_data;
2655 if (get_bits1(gb)) {
2656 for (x = 0; x < avctx->width; x++) {
2657 dst[x * 4 + 0] = get_bits(gb, 8);
2658 dst[x * 4 + 1] = get_bits(gb, 8);
2659 dst[x * 4 + 2] = get_bits(gb, 8);
2660 dst[x * 4 + 3] = get_bits(gb, 8);
2663 int pred[4] = { -128, -128, -128, -128 };
2665 for (x = 0; x < avctx->width; x++) {
2668 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2669 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2670 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2671 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2673 dst[4 * x + 0] = pred[0] = (a + pred[0]) & 0xff;
2674 dst[4 * x + 1] = pred[1] = (r + pred[1]) & 0xff;
2675 dst[4 * x + 2] = pred[2] = (r + g + pred[2]) & 0xff;
2676 dst[4 * x + 3] = pred[3] = (r + g + b + pred[3]) & 0xff;
2680 dst += p->linesize[0];
2681 for (y = 1; y < avctx->height; y++) {
2682 if (get_bits1(gb)) {
2683 for (x = 0; x < avctx->width; x++) {
2684 dst[x * 4 + 0] = get_bits(gb, 8);
2685 dst[x * 4 + 1] = get_bits(gb, 8);
2686 dst[x * 4 + 2] = get_bits(gb, 8);
2687 dst[x * 4 + 3] = get_bits(gb, 8);
2690 int pred_TL[4], pred_L[4], pred_T[4];
2693 pred_TL[0] = pred_L[0] = dst[-p->linesize[0] + 0];
2694 pred_TL[1] = pred_L[1] = dst[-p->linesize[0] + 1];
2695 pred_TL[2] = pred_L[2] = dst[-p->linesize[0] + 2];
2696 pred_TL[3] = pred_L[3] = dst[-p->linesize[0] + 3];
2698 for (x = 0; x < avctx->width; x++) {
2699 pred_T[0] = dst[-p->linesize[0] + 4 * x + 0];
2700 pred_T[1] = dst[-p->linesize[0] + 4 * x + 1];
2701 pred_T[2] = dst[-p->linesize[0] + 4 * x + 2];
2702 pred_T[3] = dst[-p->linesize[0] + 4 * x + 3];
2704 a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2705 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2706 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2707 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2709 dst[4 * x + 0] = pred_L[0] = (a + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
2710 dst[4 * x + 1] = pred_L[1] = (r + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
2711 dst[4 * x + 2] = pred_L[2] = (r + g + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
2712 dst[4 * x + 3] = pred_L[3] = (r + g + b + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0xff;
2714 pred_TL[0] = pred_T[0];
2715 pred_TL[1] = pred_T[1];
2716 pred_TL[2] = pred_T[2];
2717 pred_TL[3] = pred_T[3];
2720 dst += p->linesize[0];
2724 static void decode_rgbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2726 SheerVideoContext *s = avctx->priv_data;
2731 if (get_bits1(gb)) {
2732 for (x = 0; x < avctx->width; x++) {
2733 dst[x * 4 + 0] = get_bits(gb, 8);
2734 dst[x * 4 + 1] = get_bits(gb, 8);
2735 dst[x * 4 + 2] = get_bits(gb, 8);
2738 int pred[4] = { -128, -128, -128, -128 };
2740 for (x = 0; x < avctx->width; x++) {
2743 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2744 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2745 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2747 dst[4 * x + 0] = pred[0] = (r + pred[0]) & 0xff;
2748 dst[4 * x + 1] = pred[1] = (r + g + pred[1]) & 0xff;
2749 dst[4 * x + 2] = pred[2] = (r + g + b + pred[2]) & 0xff;
2753 dst += p->linesize[0];
2754 for (y = 1; y < avctx->height; y++) {
2755 if (get_bits1(gb)) {
2756 for (x = 0; x < avctx->width; x++) {
2757 dst[x * 4 + 0] = get_bits(gb, 8);
2758 dst[x * 4 + 1] = get_bits(gb, 8);
2759 dst[x * 4 + 2] = get_bits(gb, 8);
2765 pred_L[0] = dst[-p->linesize[0] + 0];
2766 pred_L[1] = dst[-p->linesize[0] + 1];
2767 pred_L[2] = dst[-p->linesize[0] + 2];
2769 for (x = 0; x < avctx->width; x++) {
2770 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2771 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2772 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2774 dst[4 * x + 0] = pred_L[0] = (r + pred_L[0]) & 0xff;
2775 dst[4 * x + 1] = pred_L[1] = (r + g + pred_L[1]) & 0xff;
2776 dst[4 * x + 2] = pred_L[2] = (r + g + b + pred_L[2]) & 0xff;
2779 dst += p->linesize[0];
2783 static void decode_rgb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb)
2785 SheerVideoContext *s = avctx->priv_data;
2790 if (get_bits1(gb)) {
2791 for (x = 0; x < avctx->width; x++) {
2792 dst[x * 4 + 0] = get_bits(gb, 8);
2793 dst[x * 4 + 1] = get_bits(gb, 8);
2794 dst[x * 4 + 2] = get_bits(gb, 8);
2797 int pred[4] = { -128, -128, -128, -128 };
2799 for (x = 0; x < avctx->width; x++) {
2802 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2803 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2804 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2806 dst[4 * x + 0] = pred[0] = (r + pred[0]) & 0xff;
2807 dst[4 * x + 1] = pred[1] = (r + g + pred[1]) & 0xff;
2808 dst[4 * x + 2] = pred[2] = (r + g + b + pred[2]) & 0xff;
2812 dst += p->linesize[0];
2813 for (y = 1; y < avctx->height; y++) {
2814 if (get_bits1(gb)) {
2815 for (x = 0; x < avctx->width; x++) {
2816 dst[x * 4 + 0] = get_bits(gb, 8);
2817 dst[x * 4 + 1] = get_bits(gb, 8);
2818 dst[x * 4 + 2] = get_bits(gb, 8);
2821 int pred_TL[4], pred_L[4], pred_T[4];
2824 pred_TL[0] = pred_L[0] = dst[-p->linesize[0] + 0];
2825 pred_TL[1] = pred_L[1] = dst[-p->linesize[0] + 1];
2826 pred_TL[2] = pred_L[2] = dst[-p->linesize[0] + 2];
2828 for (x = 0; x < avctx->width; x++) {
2829 pred_T[0] = dst[-p->linesize[0] + 4 * x + 0];
2830 pred_T[1] = dst[-p->linesize[0] + 4 * x + 1];
2831 pred_T[2] = dst[-p->linesize[0] + 4 * x + 2];
2833 r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2);
2834 g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2835 b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2);
2837 dst[4 * x + 0] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff;
2838 dst[4 * x + 1] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff;
2839 dst[4 * x + 2] = pred_L[2] = (r + g + b + ((3 * (pred_T[2] + pred_L[2]) - 2 * pred_TL[2]) >> 2)) & 0xff;
2841 pred_TL[0] = pred_T[0];
2842 pred_TL[1] = pred_T[1];
2843 pred_TL[2] = pred_T[2];
2846 dst += p->linesize[0];
2850 static int build_vlc(VLC *vlc, const uint8_t *len, int count)
2852 uint32_t codes[1024];
2854 uint16_t syms[1024];
2859 for (i = 0; i < count; i++) {
2860 codes[i] = index >> (32 - len[i]);
2863 index += 1ULL << (32 - len[i]);
2867 return ff_init_vlc_sparse(vlc, 16, count,
2868 bits, sizeof(*bits), sizeof(*bits),
2869 codes, sizeof(*codes), sizeof(*codes),
2870 syms, sizeof(*syms), sizeof(*syms), 0);
2873 static int decode_frame(AVCodecContext *avctx,
2874 void *data, int *got_frame,
2877 SheerVideoContext *s = avctx->priv_data;
2878 ThreadFrame frame = { .f = data };
2884 if (avpkt->size <= 20)
2885 return AVERROR_INVALIDDATA;
2887 if (AV_RL32(avpkt->data) != MKTAG('S','h','i','r') &&
2888 AV_RL32(avpkt->data) != MKTAG('Z','w','a','k'))
2889 return AVERROR_INVALIDDATA;
2892 format = AV_RL32(avpkt->data + 16);
2893 av_log(avctx, AV_LOG_DEBUG, "format: %s\n", av_fourcc2str(format));
2895 case MKTAG(' ', 'R', 'G', 'B'):
2896 avctx->pix_fmt = AV_PIX_FMT_RGB0;
2897 s->decode_frame = decode_rgb;
2898 if (s->format != format) {
2899 ret = build_vlc(&s->vlc[0], l_r_rgb, 256);
2900 ret |= build_vlc(&s->vlc[1], l_g_rgb, 256);
2903 case MKTAG(' ', 'r', 'G', 'B'):
2904 avctx->pix_fmt = AV_PIX_FMT_RGB0;
2905 s->decode_frame = decode_rgbi;
2906 if (s->format != format) {
2907 ret = build_vlc(&s->vlc[0], l_r_rgbi, 256);
2908 ret |= build_vlc(&s->vlc[1], l_g_rgbi, 256);
2911 case MKTAG('A', 'R', 'G', 'X'):
2912 avctx->pix_fmt = AV_PIX_FMT_GBRAP10;
2913 s->decode_frame = decode_argx;
2914 if (s->format != format) {
2915 ret = build_vlc(&s->vlc[0], l_r_rgbx, 1024);
2916 ret |= build_vlc(&s->vlc[1], l_g_rgbx, 1024);
2919 case MKTAG('A', 'r', 'G', 'X'):
2920 avctx->pix_fmt = AV_PIX_FMT_GBRAP10;
2921 s->decode_frame = decode_argxi;
2922 if (s->format != format) {
2923 ret = build_vlc(&s->vlc[0], l_r_rgbxi, 1024);
2924 ret |= build_vlc(&s->vlc[1], l_g_rgbxi, 1024);
2927 case MKTAG('R', 'G', 'B', 'X'):
2928 avctx->pix_fmt = AV_PIX_FMT_GBRP10;
2929 s->decode_frame = decode_rgbx;
2930 if (s->format != format) {
2931 ret = build_vlc(&s->vlc[0], l_r_rgbx, 1024);
2932 ret |= build_vlc(&s->vlc[1], l_g_rgbx, 1024);
2935 case MKTAG('r', 'G', 'B', 'X'):
2936 avctx->pix_fmt = AV_PIX_FMT_GBRP10;
2937 s->decode_frame = decode_rgbxi;
2938 if (s->format != format) {
2939 ret = build_vlc(&s->vlc[0], l_r_rgbxi, 1024);
2940 ret |= build_vlc(&s->vlc[1], l_g_rgbxi, 1024);
2943 case MKTAG('A', 'R', 'G', 'B'):
2944 avctx->pix_fmt = AV_PIX_FMT_ARGB;
2945 s->decode_frame = decode_argb;
2946 if (s->format != format) {
2947 ret = build_vlc(&s->vlc[0], l_r_rgb, 256);
2948 ret |= build_vlc(&s->vlc[1], l_g_rgb, 256);
2951 case MKTAG('A', 'r', 'G', 'B'):
2952 avctx->pix_fmt = AV_PIX_FMT_ARGB;
2953 s->decode_frame = decode_argbi;
2954 if (s->format != format) {
2955 ret = build_vlc(&s->vlc[0], l_r_rgbi, 256);
2956 ret |= build_vlc(&s->vlc[1], l_g_rgbi, 256);
2959 case MKTAG('A', 'Y', 'B', 'R'):
2961 case MKTAG('A', 'Y', 'b', 'R'):
2962 avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
2963 s->decode_frame = decode_aybr;
2964 if (s->format != format) {
2965 ret = build_vlc(&s->vlc[0], l_y_ybr, 256);
2966 ret |= build_vlc(&s->vlc[1], l_u_ybr, 256);
2969 case MKTAG('A', 'y', 'B', 'R'):
2971 case MKTAG('A', 'y', 'b', 'R'):
2972 avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
2973 s->decode_frame = decode_aybri;
2974 if (s->format != format) {
2975 ret = build_vlc(&s->vlc[0], l_y_ybri, 256);
2976 ret |= build_vlc(&s->vlc[1], l_u_ybri, 256);
2979 case MKTAG(' ', 'Y', 'B', 'R'):
2981 case MKTAG(' ', 'Y', 'b', 'R'):
2982 avctx->pix_fmt = AV_PIX_FMT_YUV444P;
2983 s->decode_frame = decode_ybr;
2984 if (s->format != format) {
2985 ret = build_vlc(&s->vlc[0], l_y_ybr, 256);
2986 ret |= build_vlc(&s->vlc[1], l_u_ybr, 256);
2989 case MKTAG(' ', 'y', 'B', 'R'):
2991 case MKTAG(' ', 'y', 'b', 'R'):
2992 avctx->pix_fmt = AV_PIX_FMT_YUV444P;
2993 s->decode_frame = decode_ybri;
2994 if (s->format != format) {
2995 ret = build_vlc(&s->vlc[0], l_y_ybri, 256);
2996 ret |= build_vlc(&s->vlc[1], l_u_ybri, 256);
2999 case MKTAG('Y', 'B', 'R', 0x0a):
3000 avctx->pix_fmt = AV_PIX_FMT_YUV444P10;
3001 s->decode_frame = decode_ybr10;
3002 if (s->format != format) {
3003 ret = build_vlc(&s->vlc[0], l_y_ybr10, 1024);
3004 ret |= build_vlc(&s->vlc[1], l_u_ybr10, 1024);
3007 case MKTAG('y', 'B', 'R', 0x0a):
3008 avctx->pix_fmt = AV_PIX_FMT_YUV444P10;
3009 s->decode_frame = decode_ybr10i;
3010 if (s->format != format) {
3011 ret = build_vlc(&s->vlc[0], l_y_ybr10i, 1024);
3012 ret |= build_vlc(&s->vlc[1], l_u_ybr10i, 1024);
3015 case MKTAG('C', 'A', '4', 'p'):
3016 avctx->pix_fmt = AV_PIX_FMT_YUVA444P10;
3017 s->decode_frame = decode_ca4p;
3018 if (s->format != format) {
3019 ret = build_vlc(&s->vlc[0], l_y_ybr10, 1024);
3020 ret |= build_vlc(&s->vlc[1], l_u_ybr10, 1024);
3023 case MKTAG('C', 'A', '4', 'i'):
3024 avctx->pix_fmt = AV_PIX_FMT_YUVA444P10;
3025 s->decode_frame = decode_ca4i;
3026 if (s->format != format) {
3027 ret = build_vlc(&s->vlc[0], l_y_ybr10i, 1024);
3028 ret |= build_vlc(&s->vlc[1], l_u_ybr10i, 1024);
3031 case MKTAG('B', 'Y', 'R', 'Y'):
3032 avctx->pix_fmt = AV_PIX_FMT_YUV422P;
3033 s->decode_frame = decode_byry;
3034 if (s->format != format) {
3035 ret = build_vlc(&s->vlc[0], l_y_byry, 256);
3036 ret |= build_vlc(&s->vlc[1], l_u_byry, 256);
3039 case MKTAG('B', 'Y', 'R', 'y'):
3040 avctx->pix_fmt = AV_PIX_FMT_YUV422P;
3041 s->decode_frame = decode_byryi;
3042 if (s->format != format) {
3043 ret = build_vlc(&s->vlc[0], l_y_byryi, 256);
3044 ret |= build_vlc(&s->vlc[1], l_u_byryi, 256);
3047 case MKTAG('Y', 'b', 'Y', 'r'):
3048 avctx->pix_fmt = AV_PIX_FMT_YUV422P;
3049 s->decode_frame = decode_ybyr;
3050 if (s->format != format) {
3051 ret = build_vlc(&s->vlc[0], l_y_ybyr, 256);
3052 ret |= build_vlc(&s->vlc[1], l_u_ybyr, 256);
3055 case MKTAG('C', '8', '2', 'p'):
3056 avctx->pix_fmt = AV_PIX_FMT_YUVA422P;
3057 s->decode_frame = decode_c82p;
3058 if (s->format != format) {
3059 ret = build_vlc(&s->vlc[0], l_y_byry, 256);
3060 ret |= build_vlc(&s->vlc[1], l_u_byry, 256);
3063 case MKTAG('C', '8', '2', 'i'):
3064 avctx->pix_fmt = AV_PIX_FMT_YUVA422P;
3065 s->decode_frame = decode_c82i;
3066 if (s->format != format) {
3067 ret = build_vlc(&s->vlc[0], l_y_byryi, 256);
3068 ret |= build_vlc(&s->vlc[1], l_u_byryi, 256);
3071 case MKTAG(0xa2, 'Y', 'R', 'Y'):
3072 avctx->pix_fmt = AV_PIX_FMT_YUV422P10;
3073 s->decode_frame = decode_yry10;
3074 if (s->format != format) {
3075 ret = build_vlc(&s->vlc[0], l_y_yry10, 1024);
3076 ret |= build_vlc(&s->vlc[1], l_u_yry10, 1024);
3079 case MKTAG(0xa2, 'Y', 'R', 'y'):
3080 avctx->pix_fmt = AV_PIX_FMT_YUV422P10;
3081 s->decode_frame = decode_yry10i;
3082 if (s->format != format) {
3083 ret = build_vlc(&s->vlc[0], l_y_yry10i, 1024);
3084 ret |= build_vlc(&s->vlc[1], l_u_yry10i, 1024);
3087 case MKTAG('C', 'A', '2', 'p'):
3088 avctx->pix_fmt = AV_PIX_FMT_YUVA422P10;
3089 s->decode_frame = decode_ca2p;
3090 if (s->format != format) {
3091 ret = build_vlc(&s->vlc[0], l_y_yry10, 1024);
3092 ret |= build_vlc(&s->vlc[1], l_u_yry10, 1024);
3095 case MKTAG('C', 'A', '2', 'i'):
3096 avctx->pix_fmt = AV_PIX_FMT_YUVA422P10;
3097 s->decode_frame = decode_ca2i;
3098 if (s->format != format) {
3099 ret = build_vlc(&s->vlc[0], l_y_yry10i, 1024);
3100 ret |= build_vlc(&s->vlc[1], l_u_yry10i, 1024);
3104 avpriv_request_sample(avctx, "unsupported format: 0x%X", format);
3105 return AVERROR_PATCHWELCOME;
3108 if (avpkt->size < 20 + avctx->width * avctx->height / 16) {
3109 av_log(avctx, AV_LOG_ERROR, "Input packet too small\n");
3110 return AVERROR_INVALIDDATA;
3113 if (s->format != format) {
3119 p->pict_type = AV_PICTURE_TYPE_I;
3122 if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
3125 if ((ret = init_get_bits8(&gb, avpkt->data + 20, avpkt->size - 20)) < 0)
3128 s->decode_frame(avctx, p, &gb);
3136 static int decode_init_thread_copy(AVCodecContext *avctx)
3138 SheerVideoContext *s = avctx->priv_data;
3141 memset(&s->vlc[0], 0, sizeof(s->vlc[0]));
3142 memset(&s->vlc[1], 0, sizeof(s->vlc[1]));
3148 static av_cold int decode_end(AVCodecContext *avctx)
3150 SheerVideoContext *s = avctx->priv_data;
3152 ff_free_vlc(&s->vlc[0]);
3153 ff_free_vlc(&s->vlc[1]);
3158 AVCodec ff_sheervideo_decoder = {
3159 .name = "sheervideo",
3160 .long_name = NULL_IF_CONFIG_SMALL("BitJazz SheerVideo"),
3161 .type = AVMEDIA_TYPE_VIDEO,
3162 .id = AV_CODEC_ID_SHEERVIDEO,
3163 .priv_data_size = sizeof(SheerVideoContext),
3164 .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
3165 .close = decode_end,
3166 .decode = decode_frame,
3167 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,