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