40 int depth = (bpp + 1) >> 3;
44 diff = stride - w * depth;
49 "Ran ouf of data before end-of-image\n");
52 type = bytestream2_get_byteu(&s->
gb);
53 count = (type & 0x7F) + 1;
55 if (x + count > w && x + count + 1 > (h - y) * w) {
57 "Packet went out of bounds: position (%i,%i) size %i\n",
63 int n =
FFMIN(count, w - x);
78 int n =
FFMIN(count, w - x);
82 memcpy(dst, tmp, depth);
97 void *
data,
int *got_frame,
104 int idlen, compr, y, w, h, bpp,
flags, ret;
105 int first_clr, colors, csize;
110 idlen = bytestream2_get_byte(&s->
gb);
112 compr = bytestream2_get_byte(&s->
gb);
113 first_clr = bytestream2_get_le16(&s->
gb);
114 colors = bytestream2_get_le16(&s->
gb);
115 csize = bytestream2_get_byte(&s->
gb);
117 w = bytestream2_get_le16(&s->
gb);
118 h = bytestream2_get_le16(&s->
gb);
119 bpp = bytestream2_get_byte(&s->
gb);
120 flags = bytestream2_get_byte(&s->
gb);
161 int pal_size, pal_sample_size;
162 if((colors + first_clr) > 256){
163 av_log(avctx,
AV_LOG_ERROR,
"Incorrect palette: %i colors with offset %i\n", colors, first_clr);
167 case 24: pal_sample_size = 3;
break;
169 case 15: pal_sample_size = 2;
break;
174 pal_size = colors * pal_sample_size;
179 uint32_t *pal = ((uint32_t *)p->
data[1]) + first_clr;
183 "Not enough data to read palette\n");
186 switch (pal_sample_size) {
189 for (t = 0; t < colors; t++)
190 *pal++ = bytestream2_get_le24u(&s->
gb);
194 for (t = 0; t < colors; t++) {
195 uint32_t v = bytestream2_get_le16u(&s->
gb);
196 v = ((v & 0x7C00) << 9) |
197 ((v & 0x03E0) << 6) |
200 v |= (v & 0xE0E0E0
U) >> 5;
216 size_t img_size = w * ((bpp + 1) >> 3);
219 "Not enough data available for image\n");
222 for (y = 0; y < h; y++) {