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