73 int h,
int w,
int stride,
const uint32_t *pal)
78 for (y = dx + h; y > dx; y--) {
80 for (x = 0; x < w; x++) {
83 unsigned c =
AV_RB16(sptr) & ~0x8000;
84 unsigned b = c & 0x1F;
85 unsigned g = (c >> 5) & 0x1F;
88 *dst++ = (b << 3) | (b >> 2);
89 *dst++ = (g << 3) | (g >> 2);
90 *dst++ = (r << 3) | (r >> 2);
94 uint32_t c = pal[*sptr++];
95 bytestream_put_le24(&dst, c);
99 return sptr - orig_src;
124 zret = inflateInit(&s->
zstream);
153 inflate(&s->
zstream, Z_SYNC_FLUSH);
160 deflate(&zs, Z_SYNC_FLUSH);
163 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
172 inflate(&s->
zstream, Z_SYNC_FLUSH);
185 int ret = inflateReset(&s->
zstream);
201 ret = inflate(&s->
zstream, Z_FINISH);
202 if (ret == Z_DATA_ERROR) {
205 ret = inflate(&s->
zstream, Z_FINISH);
208 if (ret != Z_OK && ret != Z_STREAM_END) {
245 zstream.zalloc = Z_NULL;
246 zstream.zfree = Z_NULL;
247 zstream.opaque = Z_NULL;
248 if (deflateInit(&zstream, 0) != Z_OK)
250 size = deflateBound(&zstream, tmpblock_size);
251 deflateEnd(&zstream);
259 int buf_size = avpkt->
size;
261 int h_blocks, v_blocks, h_part, v_part, i, j, ret;
304 "Cannot allocate decompression buffer.\n");
311 "Cannot determine deflate buffer size.\n");
332 "Frame width or height differs from first frame!\n");
346 (h_blocks + !!h_part) *
sizeof(s->
blocks[0]))) < 0)
350 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
352 h_blocks, v_blocks, h_part, v_part);
360 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
363 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
366 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
368 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
394 "%dx%d invalid color depth %d\n",
402 "Inter frame without keyframe\n");
409 "Block parameters invalid: %d + %d > %d\n",
414 "%dx%d diff start %d height %d\n",
433 "no data available for zlib priming\n");
443 for (k = 0; k < cur_blk_height; k++) {
453 cur_blk_width, cur_blk_height,
455 i + j * (h_blocks + !!h_part)))
457 "error in decompression of block %dx%d\n", i, j);
486 #if CONFIG_FLASHSV_DECODER
501 #if CONFIG_FLASHSV2_DECODER
502 static const uint32_t ff_flashsv2_default_palette[128] = {
503 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
504 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
505 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
506 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
507 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
508 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
509 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
510 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
511 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
512 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
513 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
514 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
515 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
516 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
517 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
518 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
519 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
520 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
521 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
522 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
523 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
531 s->
pal = ff_flashsv2_default_palette;
550 AVCodec ff_flashsv2_decoder = {
556 .
init = flashsv2_decode_init,
557 .
close = flashsv2_decode_end,