41 int depth = (bpp + 1) >> 3;
45 diff = stride - w * depth;
50 "Ran ouf of data before end-of-image\n");
53 type = bytestream2_get_byteu(&s->
gb);
54 count = (type & 0x7F) + 1;
56 if (x + count > w && x + count + 1 > (h - y) * w) {
58 "Packet went out of bounds: position (%i,%i) size %i\n",
64 int n =
FFMIN(count, w - x);
79 int n =
FFMIN(count, w - x);
83 memcpy(dst, tmp, depth);
98 void *
data,
int *got_frame,
106 int idlen, compr, y, w, h, bpp,
flags;
107 int first_clr, colors, csize;
112 idlen = bytestream2_get_byte(&s->
gb);
114 compr = bytestream2_get_byte(&s->
gb);
115 first_clr = bytestream2_get_le16(&s->
gb);
116 colors = bytestream2_get_le16(&s->
gb);
117 csize = bytestream2_get_byte(&s->
gb);
119 w = bytestream2_get_le16(&s->
gb);
120 h = bytestream2_get_le16(&s->
gb);
121 bpp = bytestream2_get_byte(&s->
gb);
122 flags = bytestream2_get_byte(&s->
gb);
167 int pal_size, pal_sample_size;
168 if((colors + first_clr) > 256){
169 av_log(avctx,
AV_LOG_ERROR,
"Incorrect palette: %i colors with offset %i\n", colors, first_clr);
173 case 24: pal_sample_size = 3;
break;
175 case 15: pal_sample_size = 2;
break;
180 pal_size = colors * pal_sample_size;
185 uint32_t *pal = ((uint32_t *)p->
data[1]) + first_clr;
189 "Not enough data to read palette\n");
192 switch (pal_sample_size) {
195 for (t = 0; t < colors; t++)
196 *pal++ = bytestream2_get_le24u(&s->
gb);
200 for (t = 0; t < colors; t++) {
201 uint32_t v = bytestream2_get_le16u(&s->
gb);
202 v = ((v & 0x7C00) << 9) |
203 ((v & 0x03E0) << 6) |
206 v |= (v & 0xE0E0E0
U) >> 5;
222 size_t img_size = w * ((bpp + 1) >> 3);
225 "Not enough data available for image\n");
228 for (y = 0; y < h; y++) {