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);
136 inflate(&s->
zstream, Z_SYNC_FLUSH);
143 deflate(&zs, Z_SYNC_FLUSH);
146 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
155 inflate(&s->
zstream, Z_SYNC_FLUSH);
168 int ret = inflateReset(&s->
zstream);
184 ret = inflate(&s->
zstream, Z_FINISH);
185 if (ret == Z_DATA_ERROR) {
188 ret = inflate(&s->
zstream, Z_FINISH);
191 if (ret != Z_OK && ret != Z_STREAM_END) {
225 zstream.zalloc = Z_NULL;
226 zstream.zfree = Z_NULL;
227 zstream.opaque = Z_NULL;
228 if (deflateInit(&zstream, 0) != Z_OK)
230 size = deflateBound(&zstream, tmpblock_size);
231 deflateEnd(&zstream);
239 int buf_size = avpkt->
size;
241 int h_blocks, v_blocks, h_part, v_part, i, j;
310 "Frame width or height differs from first frame!\n");
322 (v_blocks + !!v_part) * (h_blocks + !!h_part)
326 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
328 h_blocks, v_blocks, h_part, v_part);
340 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
343 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
346 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
348 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
375 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
382 "inter frame without keyframe\n");
389 "Block parameters invalid: %d + %d > %d\n",
394 "%dx%d diff start %d height %d\n",
422 for (k = 0; k < cur_blk_height; k++)
431 cur_blk_width, cur_blk_height,
433 i + j * (h_blocks + !!h_part)))
435 "error in decompression of block %dx%d\n", i, j);
477 #if CONFIG_FLASHSV_DECODER
486 .capabilities = CODEC_CAP_DR1,
492 #if CONFIG_FLASHSV2_DECODER
493 static const uint32_t ff_flashsv2_default_palette[128] = {
494 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
495 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
496 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
497 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
498 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
499 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
500 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
501 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
502 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
503 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
504 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
505 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
506 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
507 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
508 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
509 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
510 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
511 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
512 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
513 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
514 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
522 s->
pal = ff_flashsv2_default_palette;
541 AVCodec ff_flashsv2_decoder = {
546 .
init = flashsv2_decode_init,
547 .
close = flashsv2_decode_end,
549 .capabilities = CODEC_CAP_DR1,