39 #define BITSTREAM_READER_LE
43 #define SMKTREE_BITS 9
44 #define SMK_NODE 0x80000000
80 1, 2, 3, 4, 5, 6, 7, 8,
81 9, 10, 11, 12, 13, 14, 15, 16,
82 17, 18, 19, 20, 21, 22, 23, 24,
83 25, 26, 27, 28, 29, 30, 31, 32,
84 33, 34, 35, 36, 37, 38, 39, 40,
85 41, 42, 43, 44, 45, 46, 47, 48,
86 49, 50, 51, 52, 53, 54, 55, 56,
87 57, 58, 59, 128, 256, 512, 1024, 2048 };
140 if (i1 < 0 || i2 < 0)
146 }
else if(val == ctx->
escapes[1]) {
149 }
else if(val == ctx->
escapes[2]) {
180 VLC vlc[2] = { { 0 } };
185 if(size >= UINT_MAX>>4){
208 tmp1.
lengths,
sizeof(
int),
sizeof(
int),
221 tmp2.
lengths,
sizeof(
int),
sizeof(
int),
238 last[0] = last[1] = last[2] = -1;
249 huff.
length = ((size + 3) >> 2) + 4;
285 int mmap_size, mclr_size, full_size, type_size;
335 recode[last[0]] = recode[last[1]] = recode[last[2]] = 0;
340 register int *table = recode;
345 table += (*table) & (~SMK_NODE);
350 if(v != recode[last[0]]) {
351 recode[last[2]] = recode[last[1]];
352 recode[last[1]] = recode[last[0]];
366 int blocks,
blk, bw, bh;
371 if (avpkt->
size <= 769)
382 pal = (uint32_t*)smk->
pic.
data[1];
384 flags = bytestream2_get_byteu(&gb2);
392 for(i = 0; i < 256; i++)
393 *pal++ = bytestream2_get_be24u(&gb2);
402 bw = avctx->
width >> 2;
407 while(blk < blocks) {
415 while(run-- && blk < blocks){
420 out = smk->
pic.
data[0] + (blk / bw) * (stride * 4) + (blk % bw) * 4;
423 for(i = 0; i < 4; i++) {
424 if(map & 1) out[0] = hi;
else out[0] = lo;
425 if(map & 2) out[1] = hi;
else out[1] = lo;
426 if(map & 4) out[2] = hi;
else out[2] = lo;
427 if(map & 8) out[3] = hi;
else out[3] = lo;
440 while(run-- && blk < blocks){
441 out = smk->
pic.
data[0] + (blk / bw) * (stride * 4) + (blk % bw) * 4;
444 for(i = 0; i < 4; i++) {
454 out[0] = out[1] = pix & 0xFF;
455 out[2] = out[3] = pix >> 8;
457 out[0] = out[1] = pix & 0xFF;
458 out[2] = out[3] = pix >> 8;
461 out[0] = out[1] = pix & 0xFF;
462 out[2] = out[3] = pix >> 8;
464 out[0] = out[1] = pix & 0xFF;
465 out[2] = out[3] = pix >> 8;
469 for(i = 0; i < 2; i++) {
486 while(run-- && blk < blocks)
491 while(run-- && blk < blocks){
493 out = smk->
pic.
data[0] + (blk / bw) * (stride * 4) + (blk % bw) * 4;
494 col = mode * 0x01010101;
495 for(i = 0; i < 4; i++) {
496 *((uint32_t*)out) = col;
589 int *got_frame_ptr,
AVPacket *avpkt)
593 int buf_size = avpkt->
size;
596 VLC vlc[4] = { { 0 } };
603 int pred[2] = {0, 0};
621 if (stereo ^ (avctx->
channels != 1)) {
640 for(i = 0; i < (1 << (bits + stereo)); i++) {
649 for (; i >= 0; i--) {
659 if(h[i].current > 1) {
661 h[i].lengths,
sizeof(
int),
sizeof(
int),
662 h[i].bits,
sizeof(uint32_t),
sizeof(uint32_t),
INIT_VLC_LE);
670 for(i = stereo; i >= 0; i--)
672 for(i = 0; i <= stereo; i++)
673 *samples++ = pred[i];
674 for(; i < unp_size / 2; i++) {
685 val |= h[3].
values[res] << 8;
687 *samples++ = av_clip_int16(pred[1]);
698 val |= h[1].
values[res] << 8;
700 *samples++ = av_clip_int16(pred[0]);
704 for(i = stereo; i >= 0; i--)
706 for(i = 0; i <= stereo; i++)
707 *samples8++ = pred[i];
708 for(; i < unp_size; i++) {
715 *samples8++ = av_clip_uint8(pred[1]);
722 *samples8++ = av_clip_uint8(pred[0]);
727 for(i = 0; i < 4; i++) {