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");
388 "%dx%d diff start %d height %d\n",
416 for (k = 0; k < cur_blk_height; k++)
425 cur_blk_width, cur_blk_height,
427 i + j * (h_blocks + !!h_part)))
429 "error in decompression of block %dx%d\n", i, j);
471 #if CONFIG_FLASHSV_DECODER
480 .capabilities = CODEC_CAP_DR1,
486 #if CONFIG_FLASHSV2_DECODER
487 static const uint32_t ff_flashsv2_default_palette[128] = {
488 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
489 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
490 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
491 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
492 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
493 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
494 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
495 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
496 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
497 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
498 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
499 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
500 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
501 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
502 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
503 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
504 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
505 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
506 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
507 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
508 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
516 s->
pal = ff_flashsv2_default_palette;
535 AVCodec ff_flashsv2_decoder = {
540 .
init = flashsv2_decode_init,
541 .
close = flashsv2_decode_end,
543 .capabilities = CODEC_CAP_DR1,