32 { 0, 0, 0, 0, 0, 0, 0, 0 },
33 { 2, 0, 0, 0, 0, 0, 0, 0 },
34 { 5, 7, 0, 0, 0, 0, 0, 0 },
35 { 5, 0, 0, 0, 0, 0, 0, 0 },
36 { 6, 0, 0, 0, 0, 0, 0, 0 },
37 { 5, 7, 5, 7, 0, 0, 0, 0 },
38 { 5, 7, 5, 0, 0, 0, 0, 0 },
39 { 5, 7, 6, 0, 0, 0, 0, 0 },
40 { 5, 5, 0, 0, 0, 0, 0, 0 },
41 { 3, 0, 0, 0, 0, 0, 0, 0 },
42 { 6, 6, 0, 0, 0, 0, 0, 0 },
43 { 2, 4, 0, 0, 0, 0, 0, 0 },
44 { 2, 4, 5, 7, 0, 0, 0, 0 },
45 { 2, 4, 5, 0, 0, 0, 0, 0 },
46 { 2, 4, 6, 0, 0, 0, 0, 0 },
47 { 2, 4, 5, 7, 5, 7, 0, 0 },
72 for (i = 0; i < 4; i++)
88 "width %d and height %d must be multiplie of 4.\n",
101 for (i = 0; i < 4; i++) {
116 for (i = 0; i < 4; i++) {
126 for (i = 0; i < 4; i++) {
127 if (mask & (1 << 7 - i))
129 if (mask & (1 << 3 - i))
130 dst[width + i] =
color;
138 for (i = 0; i < 4; i++) {
139 if (mask & (1 << 7 - i))
141 if (mask & (1 << 3 - i))
142 dst[width + i] = src[width + i];
150 int val = bytestream2_get_be16(&c->
gb);
151 int page = val >> 14;
152 int x = (val & 0x7F);
153 int y = ((val >> 7) & 0x7F);
155 *p = c->
frame[page] + x * 2 + y * 2 * c->
width;
161 uint32_t opcode_size,
offset;
166 i = bytestream2_get_byte(&c->
gb);
177 val = bytestream2_get_be16(&c->
gb);
179 x = (val & 0x7F) * 2;
180 y = ((val >> 7) & 0x7F) * 2;
183 offset = (x & 0x7F) * 2;
184 j = bytestream2_get_le16(&c->
gb) +
offset;
187 if (dst + 3 * c->
width + 4 > dend)
190 if ((offset & 0x3F) == 0)
193 }
while (offset < j);
201 if ((src + 3 * c->
width + 4 > send) ||
202 (dst + 3 * c->
width + 4 > dend))
209 }
while (i < c->video_size / 16);
211 opcode_size = bytestream2_get_le16(&c->
gb);
222 for (i = 0; i < c->
height; i += 4, dst += c->
width * 3)
223 for (j = 0; j < c->
width; j += 4, dst += 4) {
225 if (op > opcode_size)
228 opcode = opcodes[
op] & 15;
231 opcode = opcodes[
op] >> 4;
235 offset = c->
width * 2;
242 color = bytestream2_get_byte(&c->
gb);
244 mask = bytestream2_get_byte(&c->
gb);
252 if (src + offset + c->
width + 4 > send)
254 mask = bytestream2_get_byte(&c->
gb);
276 code = bytestream2_get_byte(&c->
gb);
278 for (i = 0; i < 4; i++)
294 index = bytestream2_get_byte(&c->
gb);
295 count = bytestream2_get_byte(&c->
gb) + 1;
297 if (index +
count > 256)
303 for (i = 0; i <
count; i++) {
306 r = bytestream2_get_byteu(&c->
gb);
308 g = bytestream2_get_byteu(&c->
gb);
310 b = bytestream2_get_byteu(&c->
gb);
312 *out++ = (0xFF
U << 24) | (r << 16) | (g << 8) | b;
317 switch (code & 0x0F) {
338 frame = bytestream2_get_byte(&c->
gb);
358 code = bytestream2_get_byteu(&c->
gb);
359 count =
FFABS(code) + 1;
361 if (dst + count > end)
364 memset(dst, bytestream2_get_byteu(&c->
gb), count);