40 #include "libavutil/intreadwrite.h"
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;
320 "Frame width or height differs from first frame!\n");
336 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
338 h_blocks, v_blocks, h_part, v_part);
350 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
353 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
356 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
358 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
385 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
392 "inter frame without keyframe\n");
402 "%dx%d diff start %d height %d\n",
430 for (k = 0; k < cur_blk_height; k++)
439 cur_blk_width, cur_blk_height,
441 i + j * (h_blocks + !!h_part)))
443 "error in decompression of block %dx%d\n", i, j);
485 #if CONFIG_FLASHSV_DECODER
500 #if CONFIG_FLASHSV2_DECODER
501 static const uint32_t ff_flashsv2_default_palette[128] = {
502 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
503 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
504 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
505 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
506 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
507 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
508 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
509 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
510 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
511 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
512 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
513 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
514 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
515 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
516 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
517 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
518 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
519 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
520 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
521 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
522 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
530 s->
pal = ff_flashsv2_default_palette;
549 AVCodec ff_flashsv2_decoder = {
554 .
init = flashsv2_decode_init,
555 .
close = flashsv2_decode_end,