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;
111 zret = inflateInit(&s->
zstream);
140 inflate(&s->
zstream, Z_SYNC_FLUSH);
142 if (deflateInit(&zs, 0) != Z_OK)
148 deflate(&zs, Z_SYNC_FLUSH);
151 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
160 inflate(&s->
zstream, Z_SYNC_FLUSH);
173 int ret = inflateReset(&s->
zstream);
189 ret = inflate(&s->
zstream, Z_FINISH);
190 if (ret == Z_DATA_ERROR) {
193 ret = inflate(&s->
zstream, Z_FINISH);
196 if (ret != Z_OK && ret != Z_STREAM_END) {
230 zstream.zalloc = Z_NULL;
231 zstream.zfree = Z_NULL;
232 zstream.opaque = Z_NULL;
233 if (deflateInit(&zstream, 0) != Z_OK)
235 size = deflateBound(&zstream, tmpblock_size);
236 deflateEnd(&zstream);
244 int buf_size = avpkt->
size;
246 int h_blocks, v_blocks, h_part, v_part, i, j;
314 "Frame width or height differs from first frame!\n");
328 (v_blocks + !!v_part) * (h_blocks + !!h_part)
331 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
333 h_blocks, v_blocks, h_part, v_part);
345 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
348 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
351 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
353 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
380 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
387 "inter frame without keyframe\n");
393 "%dx%d diff start %d height %d\n",
421 for (k = 0; k < cur_blk_height; k++)
430 cur_blk_width, cur_blk_height,
432 i + j * (h_blocks + !!h_part)))
434 "error in decompression of block %dx%d\n", i, j);
476 #if CONFIG_FLASHSV_DECODER
491 #if CONFIG_FLASHSV2_DECODER
492 static const uint32_t ff_flashsv2_default_palette[128] = {
493 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
494 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
495 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
496 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
497 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
498 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
499 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
500 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
501 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
502 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
503 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
504 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
505 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
506 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
507 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
508 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
509 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
510 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
511 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
512 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
513 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
521 s->
pal = ff_flashsv2_default_palette;
540 AVCodec ff_flashsv2_decoder = {
545 .
init = flashsv2_decode_init,
546 .
close = flashsv2_decode_end,