73 int h,
int w,
int stride,
const uint32_t *pal)
78 for (y = dx + h; y > dx; y--) {
79 uint8_t *dst = dptr + (y * stride) + dy * 3;
80 for (x = 0; x < w; x++) {
85 unsigned c =
AV_RB16(sptr) & ~0x8000;
86 unsigned b = c & 0x1F;
87 unsigned g = (c >> 5) & 0x1F;
90 *dst++ = (b << 3) | (b >> 2);
91 *dst++ = (g << 3) | (g >> 2);
92 *dst++ = (r << 3) | (r >> 2);
96 uint32_t
c = pal[*sptr++];
97 bytestream_put_le24(&dst, c);
101 return sptr - orig_src;
126 zret = inflateInit(&s->
zstream);
158 inflate(&s->
zstream, Z_SYNC_FLUSH);
160 if (deflateInit(&zs, 0) != Z_OK)
166 deflate(&zs, Z_SYNC_FLUSH);
169 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
178 inflate(&s->
zstream, Z_SYNC_FLUSH);
207 ret = inflate(&s->
zstream, Z_FINISH);
208 if (ret == Z_DATA_ERROR) {
211 ret = inflate(&s->
zstream, Z_FINISH);
214 if (ret != Z_OK && ret != Z_STREAM_END) {
256 zstream.zalloc = Z_NULL;
257 zstream.zfree = Z_NULL;
258 zstream.opaque = Z_NULL;
259 if (deflateInit(&zstream, 0) != Z_OK)
261 size = deflateBound(&zstream, tmpblock_size);
262 deflateEnd(&zstream);
270 int buf_size = avpkt->
size;
272 int h_blocks, v_blocks, h_part, v_part, i, j,
ret;
322 "Cannot allocate decompression buffer.\n");
329 "Cannot determine deflate buffer size.\n");
350 "Frame width or height differs from first frame!\n");
368 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
370 h_blocks, v_blocks, h_part, v_part);
376 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
379 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
382 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
384 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
410 "%dx%d invalid color depth %d\n",
418 "Inter frame without keyframe\n");
425 "Block parameters invalid: %d + %d > %d\n",
430 "%dx%d diff start %d height %d\n",
449 "no data available for zlib priming\n");
459 for (k = 0; k < cur_blk_height; k++) {
469 cur_blk_width, cur_blk_height,
471 i + j * (h_blocks + !!h_part)))
473 "error in decompression of block %dx%d\n", i, j);
502 #if CONFIG_FLASHSV_DECODER
517 #if CONFIG_FLASHSV2_DECODER
518 static const uint32_t ff_flashsv2_default_palette[128] = {
519 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
520 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
521 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
522 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
523 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
524 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
525 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
526 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
527 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
528 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
529 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
530 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
531 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
532 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
533 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
534 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
535 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
536 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
537 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
538 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
539 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
547 s->
pal = ff_flashsv2_default_palette;
566 AVCodec ff_flashsv2_decoder = {
572 .
init = flashsv2_decode_init,
573 .close = flashsv2_decode_end,