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 };
137 int val, i1, i2, b1, b2;
144 if (i1 < 0 || i2 < 0)
150 }
else if(val == ctx->
escapes[1]) {
153 }
else if(val == ctx->
escapes[2]) {
189 if(size >= UINT_MAX>>4){
208 memset(&vlc[0], 0,
sizeof(
VLC));
209 memset(&vlc[1], 0,
sizeof(
VLC));
215 tmp1.
lengths,
sizeof(
int),
sizeof(
int),
228 tmp2.
lengths,
sizeof(
int),
sizeof(
int),
245 last[0] = last[1] = last[2] = -1;
256 huff.
length = ((size + 3) >> 2) + 4;
292 int mmap_size, mclr_size, full_size, type_size;
342 recode[last[0]] = recode[last[1]] = recode[last[2]] = 0;
347 register int *table = recode;
353 table += (*table) & (~SMK_NODE);
359 if(v != recode[last[0]]) {
360 recode[last[2]] = recode[last[1]];
361 recode[last[1]] = recode[last[0]];
369 const uint8_t *buf = avpkt->
data;
370 int buf_size = avpkt->
size;
375 int blocks,
blk, bw, bh;
390 pal = (uint32_t*)smk->
pic.
data[1];
399 for(i = 0; i < 256; i++)
400 *pal++ = bytestream_get_be24(&buf);
410 bw = avctx->
width >> 2;
415 while(blk < blocks) {
423 while(run-- && blk < blocks){
428 out = smk->
pic.
data[0] + (blk / bw) * (stride * 4) + (blk % bw) * 4;
431 for(i = 0; i < 4; i++) {
432 if(map & 1) out[0] = hi;
else out[0] = lo;
433 if(map & 2) out[1] = hi;
else out[1] = lo;
434 if(map & 4) out[2] = hi;
else out[2] = lo;
435 if(map & 8) out[3] = hi;
else out[3] = lo;
448 while(run-- && blk < blocks){
449 out = smk->
pic.
data[0] + (blk / bw) * (stride * 4) + (blk % bw) * 4;
452 for(i = 0; i < 4; i++) {
462 out[0] = out[1] = pix & 0xFF;
463 out[2] = out[3] = pix >> 8;
465 out[0] = out[1] = pix & 0xFF;
466 out[2] = out[3] = pix >> 8;
469 out[0] = out[1] = pix & 0xFF;
470 out[2] = out[3] = pix >> 8;
472 out[0] = out[1] = pix & 0xFF;
473 out[2] = out[3] = pix >> 8;
477 for(i = 0; i < 2; i++) {
494 while(run-- && blk < blocks)
499 while(run-- && blk < blocks){
501 out = smk->
pic.
data[0] + (blk / bw) * (stride * 4) + (blk % bw) * 4;
502 col = mode * 0x01010101;
503 for(i = 0; i < 4; i++) {
504 *((uint32_t*)out) = col;
597 int *got_frame_ptr,
AVPacket *avpkt)
600 const uint8_t *buf = avpkt->
data;
601 int buf_size = avpkt->
size;
611 int pred[2] = {0, 0};
629 if (stereo ^ (avctx->
channels != 1)) {
637 if (unp_size % (avctx->
channels * (bits + 1))) {
639 "The buffer does not contain an integer number of samples\n");
652 memset(vlc, 0,
sizeof(
VLC) * 4);
655 for(i = 0; i < (1 << (bits + stereo)); i++) {
664 for (; i >= 0; i--) {
674 if(h[i].current > 1) {
676 h[i].lengths,
sizeof(
int),
sizeof(
int),
677 h[i].bits,
sizeof(uint32_t),
sizeof(uint32_t),
INIT_VLC_LE);
685 for(i = stereo; i >= 0; i--)
687 for(i = 0; i <= stereo; i++)
688 *samples++ = pred[i];
689 for(; i < unp_size / 2; i++) {
700 val |= h[3].
values[res] << 8;
702 *samples++ = av_clip_int16(pred[1]);
713 val |= h[1].
values[res] << 8;
715 *samples++ = av_clip_int16(pred[0]);
719 for(i = stereo; i >= 0; i--)
721 for(i = 0; i <= stereo; i++)
722 *samples8++ = pred[i];
723 for(; i < unp_size; i++) {
730 *samples8++ = av_clip_uint8(pred[1]);
737 *samples8++ = av_clip_uint8(pred[0]);
742 for(i = 0; i < 4; i++) {