60 int len, xmin, xmax, ymin, ymax;
80 if (xmin || ymin || !xmax || !ymax)
83 if (p->
buf[3] >= 20 || xmax < 16 || ymax < 16)
90 static int zlib_refill(
void *opaque,
uint8_t *
buf,
int buf_size)
94 z_stream *z = &swf->zstream;
102 z->next_in = swf->zbuf_in;
107 z->avail_out = buf_size;
109 ret = inflate(z, Z_NO_FLUSH);
112 if (ret == Z_STREAM_END)
115 if (buf_size - z->avail_out == 0)
118 return buf_size - z->avail_out;
131 if (tag ==
MKBETAG(
'C',
'W',
'S', 0)) {
138 if (!swf->zbuf_in || !swf->zbuf_out || !swf->zpb)
140 swf->zpb->seekable = 0;
141 if (inflateInit(&swf->zstream) != Z_OK) {
150 }
else if (tag !=
MKBETAG(
'F',
'W',
'S', 0))
154 len = (4 * nbits - 3 + 7) / 8;
166 int sample_rate_code, sample_size_code;
181 sample_rate_code = info>>2 & 3;
182 sample_size_code = info>>1 & 1;
268 if (((v>>4) & 15) == 2) {
302 const int colormapbpp = 3 + alpha_bmp;
303 int linesize, colormapsize = 0;
306 const int bmp_fmt =
avio_r8(pb);
316 colormapsize =
avio_r8(pb) + 1;
320 linesize = width * 2;
323 linesize = width * 4;
327 goto bitmap_end_skip;
330 linesize =
FFALIGN(linesize, 4);
333 linesize >= INT_MAX / height ||
334 linesize * height >= INT_MAX - colormapsize * colormapbpp) {
336 goto bitmap_end_skip;
339 out_len = colormapsize * colormapbpp + linesize *
height;
341 av_dlog(s,
"bitmap: ch=%d fmt=%d %dx%d (linesize=%d) len=%d->%ld pal=%d\n",
342 ch_id, bmp_fmt, width, height, linesize, len, out_len, colormapsize);
352 if (len < 0 || (res = uncompress(buf, &out_len, zbuf, len)) != Z_OK) {
354 goto bitmap_end_skip;
375 if ((res =
av_new_packet(pkt, out_len - colormapsize * colormapbpp)) < 0)
377 if (!st->codec->width && !st->codec->height) {
379 st->codec->height =
height;
389 for (i = 0; i < colormapsize; i++)
390 if (alpha_bmp) colormap[i] = buf[3]<<24 |
AV_RB24(buf + 4*i);
391 else colormap[i] = 0xff
U <<24 |
AV_RB24(buf + 3*i);
408 if (st->codec->pix_fmt !=
AV_PIX_FMT_NONE && st->codec->pix_fmt != pix_fmt) {
415 if (linesize * height > pkt->
size) {
419 memcpy(pkt->
data, buf + colormapsize*colormapbpp, linesize * height);
493 if (res != pkt->
size) {
519 inflateEnd(&s->zstream);