33 #define CDG_FULL_WIDTH 300
35 #define CDG_FULL_HEIGHT 216
36 #define CDG_DISPLAY_WIDTH 294
37 #define CDG_DISPLAY_HEIGHT 204
38 #define CDG_BORDER_WIDTH 6
39 #define CDG_BORDER_HEIGHT 12
42 #define CDG_COMMAND 0x09
46 #define CDG_INST_MEMORY_PRESET 1
47 #define CDG_INST_BORDER_PRESET 2
48 #define CDG_INST_TILE_BLOCK 6
49 #define CDG_INST_SCROLL_PRESET 20
50 #define CDG_INST_SCROLL_COPY 24
51 #define CDG_INST_LOAD_PAL_LO 30
52 #define CDG_INST_LOAD_PAL_HIGH 31
53 #define CDG_INST_TILE_BLOCK_XOR 38
56 #define CDG_PACKET_SIZE 24
57 #define CDG_DATA_SIZE 16
58 #define CDG_TILE_HEIGHT 12
59 #define CDG_TILE_WIDTH 6
60 #define CDG_MINIMUM_PKT_SIZE 6
61 #define CDG_MINIMUM_SCROLL_SIZE 3
62 #define CDG_HEADER_SIZE 8
63 #define CDG_PALETTE_SIZE 16
99 int color = data[0] & 0x0F;
101 if (!(data[1] & 0x0F)) {
121 int array_offset = low ? 0 : 8;
124 for (i = 0; i < 8; i++) {
125 color = (data[2 * i] << 6) + (data[2 * i + 1] & 0x3F);
126 r = ((color >> 8) & 0x000F) * 17;
127 g = ((color >> 4) & 0x000F) * 17;
128 b = ((
color ) & 0x000F) * 17;
129 palette[i + array_offset] = r << 16 | g << 8 |
b;
153 if (!((data[4 + y] >> (5 - x)) & 0x01))
154 color = data[0] & 0x0F;
156 color = data[1] & 0x0F;
158 ai = ci + x + (stride * (ri + y));
174 int in_tl_x,
int in_tl_y, uint8_t *in,
179 in += in_tl_x + in_tl_y *
stride;
180 out += out_tl_x + out_tl_y *
stride;
181 for (y = 0; y < h; y++)
182 memcpy(out + y * stride, in + y * stride, w);
190 for (y = tl_y; y < tl_y + h; y++)
191 memset(out + tl_x + y * stride, color, w);
195 int in_tl_x,
int in_tl_y, uint8_t *in,
207 AVFrame *new_frame,
int roll_over)
210 int hscmd, h_off, hinc, vscmd, v_off, vinc;
214 uint8_t *out = new_frame->
data[0];
216 color = data[0] & 0x0F;
217 hscmd = (data[1] & 0x30) >> 4;
218 vscmd = (data[2] & 0x30) >> 4;
244 memcpy(out +
FFMAX(0, hinc) + stride * y,
245 in +
FFMAX(0, hinc) - hinc + (y - vinc) * stride,
246 FFMIN(stride + hinc, stride));
251 stride, vinc, stride, roll_over);
255 stride, -1 * vinc, stride, roll_over);
271 const uint8_t *buf = avpkt->
data;
272 int buf_size = avpkt->
size;
274 uint8_t command, inst;
290 command = bytestream_get_byte(&buf);
291 inst = bytestream_get_byte(&buf);
299 if (!(cdg_data[1] & 0x0F))
300 memset(cc->
frame.
data[0], cdg_data[0] & 0x0F,
344 cc->
frame = new_frame;
371 .
name =
"cdgraphics",