74 int h,
int w,
int stride,
const uint32_t *pal)
79 for (y = dx+h; y > dx; y--) {
81 for (x = 0; x < w; x++) {
84 unsigned c =
AV_RB16(sptr) & ~0x8000;
85 unsigned b = c & 0x1F;
86 unsigned g = (c >> 5) & 0x1F;
89 *dst++ = (b << 3) | (b >> 2);
90 *dst++ = (g << 3) | (g >> 2);
91 *dst++ = (r << 3) | (r >> 2);
95 uint32_t
c = pal[*sptr++];
96 bytestream_put_le24(&dst, c);
100 return sptr - orig_src;
125 zret = inflateInit(&s->
zstream);
158 inflate(&s->
zstream, Z_SYNC_FLUSH);
160 if (deflateInit(&zs, 0) != Z_OK)
166 deflate(&zs, Z_SYNC_FLUSH);
169 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
178 inflate(&s->
zstream, Z_SYNC_FLUSH);
207 ret = inflate(&s->
zstream, Z_FINISH);
208 if (ret == Z_DATA_ERROR) {
211 ret = inflate(&s->
zstream, Z_FINISH);
214 if (ret != Z_OK && ret != Z_STREAM_END) {
248 zstream.zalloc = Z_NULL;
249 zstream.zfree = Z_NULL;
250 zstream.opaque = Z_NULL;
251 if (deflateInit(&zstream, 0) != Z_OK)
253 size = deflateBound(&zstream, tmpblock_size);
254 deflateEnd(&zstream);
262 int buf_size = avpkt->
size;
264 int h_blocks, v_blocks, h_part, v_part, i, j,
ret;
338 "Frame width or height differs from first frame!\n");
354 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
356 h_blocks, v_blocks, h_part, v_part);
362 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
365 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
368 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
370 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
396 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
403 "inter frame without keyframe\n");
413 "%dx%d diff start %d height %d\n",
441 for (k = 0; k < cur_blk_height; k++)
450 cur_blk_width, cur_blk_height,
452 i + j * (h_blocks + !!h_part)))
454 "error in decompression of block %dx%d\n", i, j);
482 #if CONFIG_FLASHSV_DECODER
497 #if CONFIG_FLASHSV2_DECODER
498 static const uint32_t ff_flashsv2_default_palette[128] = {
499 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
500 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
501 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
502 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
503 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
504 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
505 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
506 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
507 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
508 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
509 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
510 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
511 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
512 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
513 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
514 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
515 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
516 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
517 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
518 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
519 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
527 s->
pal = ff_flashsv2_default_palette;
546 AVCodec ff_flashsv2_decoder = {
552 .
init = flashsv2_decode_init,
553 .
close = flashsv2_decode_end,