54 for (i = 0; i < 256; i++)
55 s->
palette[i] = bytestream2_get_le32u(&s->
gb);
79 int *x,
int width,
int linesize)
81 int remaining = width - *x;
83 int striplen =
FFMIN(count, remaining);
88 }
else if (pixel >= 0)
89 memset(*dst, pixel, striplen);
91 remaining -= striplen;
94 *dst += linesize -
width;
98 if (*dst >= dst_end)
goto exhausted;
100 if (*dst <= dst_end)
goto exhausted;
103 *x = width - remaining;
107 *x = width - remaining;
112 void *
data,
int *got_frame,
116 const int buf_size = avpkt->
size;
127 if (bytestream2_get_byte(&s->
gb) != 0x42) {
131 if (bytestream2_get_byte(&s->
gb)) {
140 #define OP(gb, pixel, count) \
141 op(&dst, dst_end, (gb), (pixel), (count), &s->x, avctx->width, s->frame->linesize[0])
143 int type = bytestream2_get_byte(&s->
gb);
147 if (
OP(type ? NULL : &s->
gb, -1, count))
break;
150 count = bytestream2_get_byte(&s->
gb);
151 pixel = bytestream2_get_byte(&s->
gb);
152 if (
OP(NULL, pixel, count))
break;
155 type = bytestream2_get_le16(&s->
gb);
156 count = type & 0x3FFF;
167 pixel = type == 3 ? bytestream2_get_byte(&s->
gb) : -1;
168 if (type == 1) count += 0x4000;
169 if (
OP(type == 2 ? &s->
gb : NULL, pixel, count))
break;