56 { 0, 1, 5, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 },
57 { 0, 3, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0 }
61 { 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125 },
62 { 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119 }
66 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
67 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
68 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08,
69 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0,
70 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16,
71 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28,
72 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
73 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
74 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
75 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
76 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
77 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
78 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
79 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
80 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
81 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
82 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4,
83 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
84 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,
85 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
87 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
88 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
89 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
90 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0,
91 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34,
92 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26,
93 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38,
94 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
95 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
96 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
97 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
98 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
99 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96,
100 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5,
101 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4,
102 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3,
103 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2,
104 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
105 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
106 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
116 { 0, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
117 { 0, 1, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
121 { 0, 7, 6, 5, 8, 4, 3, 1, 2 },
122 { 0, 2, 3, 4, 5, 6, 7, 1, 8 }
125 #define MAX_ENTRIES 162
146 const uint8_t *syms,
int num_syms)
151 int prefix = 0, max_bits = 0, idx = 0;
153 for (i = 0; i < 16; i++) {
154 for (j = 0; j < lens[i]; j++) {
156 codes[idx] = prefix++;
164 codes, 2, 2, syms, 1, 1, 0);
171 for (i = 0; i < 2; i++) {
191 for (i = 0; i < 2; i++) {
213 if (val < (1 << (nbits - 1)))
214 val -= (1 << nbits) - 1;
227 int *
block,
int *dc_cache,
228 int bx,
int by, uint16_t *quant_mat)
230 int skip,
val, pos = 1, zz_pos,
dc;
232 memset(block, 0,
sizeof(*block) * 64);
252 dc += dc_cache[
LEFT];
255 block[0] = dc * quant_mat[0];
274 block[zz_pos] = val * quant_mat[zz_pos];
278 return pos == 64 ? 0 : -1;
282 uint8_t *dst[3],
int mb_x,
int mb_y)
287 for (j = 0; j < 2; j++) {
288 for (i = 0; i < 2; i++) {
289 int xpos = mb_x * 2 + i;
305 for (i = 1; i < 3; i++) {
316 out = dst[i] + mb_x * 16;
319 for (j = 0; j < 16; j++) {
320 for (k = 0; k < 8; k++)
330 int *sel_len,
int *prev)
334 for (i = 2; i >= 0; i--) {
340 if (sel_len[i] > 0) {
342 vec_pos[i] =
get_bits(gb, sel_len[i]);
343 if (vec_pos[i] >= pval)
346 vec_pos[i] = !prev[i];
350 vec_pos[i] = prev[i];
356 int vec_size,
int component,
int shift,
int *prev)
358 if (vec_pos < vec_size)
361 return prev[component];
363 return prev[component];
366 #define MKVAL(vals) ((vals)[0] | ((vals)[1] << 3) | ((vals)[2] << 6))
380 uint8_t *picdst[3],
int mb_x,
int mb_y)
384 int sel_len[3], sel_flag[3];
386 int prev_vec1 = 0, prev_split = 0;
388 int prev_pix[3] = { 0 };
389 int prev_mode[16] = { 0 };
392 const int val_shift = ctx->
quality == 100 ? 0 : 2;
394 for (i = 0; i < 3; i++)
397 for (i = 0; i < 3; i++) {
399 for (j = 0; j < vec_len[i]; j++) {
404 sel_flag[i] = vec_len[i] > 1;
405 sel_len[i] = vec_len[i] > 2 ? vec_len[i] - 2 : 0;
408 for (j = 0; j < 16; j++) {
413 vals[0] = vals[1] = vals[2] = 0;
420 for (i = 0; i < 16; i++) {
422 vals[0] = prev_mode[i] & 7;
423 vals[1] = (prev_mode[i] >> 3) & 7;
424 vals[2] = prev_mode[i] >> 6;
425 if (mode == 1 && i == split) {
428 }
else if (mode == 2) {
432 for (k = 0; k < 3; k++)
435 val_shift, prev_pix);
436 prev_mode[i] =
MKVAL(vals);
441 if (split >= prev_split)
448 vals[0] = prev_mode[0] & 7;
449 vals[1] = (prev_mode[0] >> 3) & 7;
450 vals[2] = prev_mode[0] >> 6;
451 for (i = 0; i < 3; i++) {
452 for (k = 0; k <
split; k++) {
454 vec_len[i], i, val_shift,
456 prev_mode[k] =
MKVAL(vals);
462 vals[0] = prev_vec1 & 7;
463 vals[1] = (prev_vec1 >> 3) & 7;
464 vals[2] = prev_vec1 >> 6;
467 prev_vec1 =
MKVAL(vals);
469 for (i = 0; i < 3; i++) {
470 for (k = 0; k < 16 -
split; k++) {
472 vec_len[i], i, val_shift,
474 prev_mode[split + k] =
MKVAL(vals);
481 for (i = 0; i < 3; i++)
482 for (j = 0; j < 16; j++)
483 memcpy(picdst[i] + mb_x * 16 + j * ctx->
pic->
linesize[i],
484 ctx->
imgbuf[i] + j * 16, 16);
498 for (i = 0; i < 2; i++)
499 c->
prev_dc[0][mb_x * 2 + i] = 0;
501 for (i = 1; i < 3; i++) {
512 int buf_size = avpkt->
size;
518 int x,
y, i, mb_width, mb_height, blk_type;
523 "Frame should have at least %d bytes, got %d instead\n",
529 width = bytestream2_get_be16(&bc);
530 height = bytestream2_get_be16(&bc);
532 quality = bytestream2_get_byte(&bc);
533 frame_type = bytestream2_get_byte(&bc);
535 if (width > avctx->
width ||
536 height != avctx->
height) {
541 if (quality < 1 || quality > 100) {
545 if ((frame_type & ~3) || frame_type == 3) {
552 "Empty frame found but it is not a skip frame.\n");
571 for (i = 0; i < 2; i++)
577 mb_width =
FFALIGN(width, 16) >> 4;
578 mb_height =
FFALIGN(height, 16) >> 4;
584 for (y = 0; y < mb_height; y++) {
586 for (x = 0; x < mb_width; x++) {
592 "Error decoding DCT block %d,%d\n",
600 "Error decoding VQ block %d,%d\n",
634 for (i = 0; i < 3; i++)
651 for (i = 0; i < 3; i++) {