73 static int decode_hybrid(
const uint8_t *sptr, uint8_t *dptr,
int dx,
int dy,
74 int h,
int w,
int stride,
const uint32_t *pal)
77 const uint8_t *orig_src = sptr;
79 for (y = dx+h; y > dx; y--) {
80 uint8_t *dst = dptr + (y *
stride) + dy * 3;
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;
112 zret = inflateInit(&s->
zstream);
125 int size,
int unp_size)
137 inflate(&s->
zstream, Z_SYNC_FLUSH);
144 deflate(&zs, Z_SYNC_FLUSH);
153 inflate(&s->
zstream, Z_SYNC_FLUSH);
164 int ret = inflateReset(&s->
zstream);
176 ret = inflate(&s->
zstream, Z_FINISH);
177 if (ret == Z_DATA_ERROR) {
180 ret = inflate(&s->
zstream, Z_FINISH);
183 if (ret != Z_OK && ret != Z_STREAM_END) {
218 zstream.zalloc = Z_NULL;
219 zstream.zfree = Z_NULL;
220 zstream.opaque = Z_NULL;
221 if (deflateInit(&zstream, 0) != Z_OK)
223 size = deflateBound(&zstream, tmpblock_size);
224 deflateEnd(&zstream);
232 int buf_size = avpkt->
size;
234 int h_blocks, v_blocks, h_part, v_part, i, j;
303 "Frame width or height differs from first frame!\n");
315 (v_blocks + !!v_part) * (h_blocks + !!h_part)
319 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
321 h_blocks, v_blocks, h_part, v_part);
333 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
336 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
339 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
341 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
368 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
375 "inter frame without keyframe\n");
382 "Block parameters invalid: %d + %d > %d\n",
387 "%dx%d diff start %d height %d\n",
415 for (k = 0; k < cur_blk_height; k++)
424 cur_blk_width, cur_blk_height,
426 i + j * (h_blocks + !!h_part)))
428 "error in decompression of block %dx%d\n", i, j);
470 #if CONFIG_FLASHSV_DECODER
485 #if CONFIG_FLASHSV2_DECODER
486 static const uint32_t ff_flashsv2_default_palette[128] = {
487 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
488 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
489 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
490 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
491 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
492 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
493 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
494 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
495 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
496 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
497 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
498 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
499 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
500 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
501 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
502 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
503 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
504 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
505 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
506 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
507 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
515 s->
pal = ff_flashsv2_default_palette;
534 AVCodec ff_flashsv2_decoder = {
539 .
init = flashsv2_decode_init,
540 .
close = flashsv2_decode_end,