54 typedef struct svq1_pmv_s {
74 0x00, 0xD5, 0x7F, 0xAA, 0xFE, 0x2B, 0x81, 0x54,
75 0x29, 0xFC, 0x56, 0x83, 0xD7, 0x02, 0xA8, 0x7D,
76 0x52, 0x87, 0x2D, 0xF8, 0xAC, 0x79, 0xD3, 0x06,
77 0x7B, 0xAE, 0x04, 0xD1, 0x85, 0x50, 0xFA, 0x2F,
78 0xA4, 0x71, 0xDB, 0x0E, 0x5A, 0x8F, 0x25, 0xF0,
79 0x8D, 0x58, 0xF2, 0x27, 0x73, 0xA6, 0x0C, 0xD9,
80 0xF6, 0x23, 0x89, 0x5C, 0x08, 0xDD, 0x77, 0xA2,
81 0xDF, 0x0A, 0xA0, 0x75, 0x21, 0xF4, 0x5E, 0x8B,
82 0x9D, 0x48, 0xE2, 0x37, 0x63, 0xB6, 0x1C, 0xC9,
83 0xB4, 0x61, 0xCB, 0x1E, 0x4A, 0x9F, 0x35, 0xE0,
84 0xCF, 0x1A, 0xB0, 0x65, 0x31, 0xE4, 0x4E, 0x9B,
85 0xE6, 0x33, 0x99, 0x4C, 0x18, 0xCD, 0x67, 0xB2,
86 0x39, 0xEC, 0x46, 0x93, 0xC7, 0x12, 0xB8, 0x6D,
87 0x10, 0xC5, 0x6F, 0xBA, 0xEE, 0x3B, 0x91, 0x44,
88 0x6B, 0xBE, 0x14, 0xC1, 0x95, 0x40, 0xEA, 0x3F,
89 0x42, 0x97, 0x3D, 0xE8, 0xBC, 0x69, 0xC3, 0x16,
90 0xEF, 0x3A, 0x90, 0x45, 0x11, 0xC4, 0x6E, 0xBB,
91 0xC6, 0x13, 0xB9, 0x6C, 0x38, 0xED, 0x47, 0x92,
92 0xBD, 0x68, 0xC2, 0x17, 0x43, 0x96, 0x3C, 0xE9,
93 0x94, 0x41, 0xEB, 0x3E, 0x6A, 0xBF, 0x15, 0xC0,
94 0x4B, 0x9E, 0x34, 0xE1, 0xB5, 0x60, 0xCA, 0x1F,
95 0x62, 0xB7, 0x1D, 0xC8, 0x9C, 0x49, 0xE3, 0x36,
96 0x19, 0xCC, 0x66, 0xB3, 0xE7, 0x32, 0x98, 0x4D,
97 0x30, 0xE5, 0x4F, 0x9A, 0xCE, 0x1B, 0xB1, 0x64,
98 0x72, 0xA7, 0x0D, 0xD8, 0x8C, 0x59, 0xF3, 0x26,
99 0x5B, 0x8E, 0x24, 0xF1, 0xA5, 0x70, 0xDA, 0x0F,
100 0x20, 0xF5, 0x5F, 0x8A, 0xDE, 0x0B, 0xA1, 0x74,
101 0x09, 0xDC, 0x76, 0xA3, 0xF7, 0x22, 0x88, 0x5D,
102 0xD6, 0x03, 0xA9, 0x7C, 0x28, 0xFD, 0x57, 0x82,
103 0xFF, 0x2A, 0x80, 0x55, 0x01, 0xD4, 0x7E, 0xAB,
104 0x84, 0x51, 0xFB, 0x2E, 0x7A, 0xAF, 0x05, 0xD0,
105 0xAD, 0x78, 0xD2, 0x07, 0x53, 0x86, 0x2C, 0xF9
108 #define SVQ1_PROCESS_VECTOR() \
109 for (; level > 0; i++) { \
117 if (!get_bits1(bitbuf)) \
120 list[n++] = list[i]; \
121 list[n++] = list[i] + (((level & 1) ? pitch : 1) << ((level >> 1) + 1));\
124 #define SVQ1_ADD_CODEBOOK() \
126 for (j = 0; j < stages; j++) { \
127 n3 = codebook[entries[j]] ^ 0x80808080; \
128 n1 += (n3 & 0xFF00FF00) >> 8; \
129 n2 += n3 & 0x00FF00FF; \
133 if (n1 & 0xFF00FF00) { \
134 n3 = (n1 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
136 n1 |= (~n1 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
137 n1 &= n3 & 0x00FF00FF; \
140 if (n2 & 0xFF00FF00) { \
141 n3 = (n2 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
143 n2 |= (~n2 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
144 n2 &= n3 & 0x00FF00FF; \
147 #define SVQ1_CALC_CODEBOOK_ENTRIES(cbook) \
148 codebook = (const uint32_t *)cbook[level]; \
150 bit_cache = get_bits(bitbuf, 4 * stages); \
152 for (j = 0; j < stages; j++) { \
153 entries[j] = (((bit_cache >> (4 * (stages - j - 1))) & 0xF) + \
154 16 * j) << (level + 1); \
156 mean -= stages * 128; \
157 n4 = (mean << 16) + mean;
165 const uint32_t *codebook;
170 uint32_t n1, n2, n3, n4;
176 for (i = 0, m = 1, n = 1, level = 5; i <
n; i++) {
180 dst = (uint32_t *)list[i];
181 width = 1 << ((4 +
level) / 2);
182 height = 1 << ((3 +
level) / 2);
185 stages =
get_vlc2(bitbuf, svq1_intra_multistage[level].
table, 3, 3) - 1;
188 for (y = 0; y <
height; y++)
189 memset(&dst[y * (pitch / 4)], 0, width);
193 if (stages > 0 && level >= 4) {
195 "Error (svq1_decode_block_intra): invalid vector: stages=%i level=%i\n",
203 for (y = 0; y <
height; y++)
204 memset(&dst[y * (pitch / 4)], mean, width);
208 for (y = 0; y <
height; y++) {
209 for (x = 0; x < width / 4; x++, codebook++) {
214 dst[x] = n1 << 8 | n2;
230 const uint32_t *codebook;
235 uint32_t n1, n2, n3, n4;
241 for (i = 0, m = 1, n = 1, level = 5; i <
n; i++) {
245 dst = (uint32_t *)list[i];
246 width = 1 << ((4 +
level) / 2);
247 height = 1 << ((3 +
level) / 2);
250 stages =
get_vlc2(bitbuf, svq1_inter_multistage[level].
table, 3, 2) - 1;
255 if ((stages > 0) && (level >= 4)) {
257 "Error (svq1_decode_block_non_intra): invalid vector: stages=%i level=%i\n",
266 for (y = 0; y <
height; y++) {
267 for (x = 0; x < width / 4; x++, codebook++) {
270 n1 = n4 + ((n3 & 0xFF00FF00) >> 8);
271 n2 = n4 + (n3 & 0x00FF00FF);
274 dst[x] = n1 << 8 | n2;
288 for (i = 0; i < 2; i++) {
309 int pitch,
int x,
int y)
315 src = &previous[x + y * pitch];
318 for (i = 0; i < 16; i++) {
319 memcpy(dst, src, 16);
327 int pitch,
svq1_pmv *motion,
int x,
int y,
342 pmv[1] = &motion[x / 8 + 2];
343 pmv[2] = &motion[x / 8 + 4];
351 motion[x / 8 + 2].
x =
352 motion[x / 8 + 3].
x = mv.
x;
354 motion[x / 8 + 2].
y =
355 motion[x / 8 + 3].
y = mv.
y;
357 mv.
x = av_clip(mv.
x, -2 * x, 2 * (width - x - 16));
358 mv.
y = av_clip(mv.
y, -2 * y, 2 * (height - y - 16));
360 src = &previous[(x + (mv.
x >> 1)) + (y + (mv.
y >> 1)) * pitch];
370 int pitch,
svq1_pmv *motion,
int x,
int y,
385 pmv[1] = &motion[(x / 8) + 2];
386 pmv[2] = &motion[(x / 8) + 4];
399 pmv[1] = &motion[(x / 8) + 3];
407 pmv[2] = &motion[(x / 8) + 1];
414 pmv[2] = &motion[(x / 8) + 2];
415 pmv[3] = &motion[(x / 8) + 3];
422 for (i = 0; i < 4; i++) {
423 int mvx = pmv[i]->x + (i & 1) * 16;
424 int mvy = pmv[i]->y + (i >> 1) * 16;
427 mvx = av_clip(mvx, -2 * x, 2 * (width - x - 8));
428 mvy = av_clip(mvy, -2 * y, 2 * (height - y - 8));
430 src = &previous[(x + (mvx >> 1)) + (y + (mvy >> 1)) * pitch];
433 hdsp->
put_pixels_tab[1][((mvy & 1) << 1) | (mvx & 1)](dst, src, pitch, 8);
437 current += 8 * (pitch - 1);
448 int pitch,
svq1_pmv *motion,
int x,
int y,
461 motion[x / 8 + 2].
x =
462 motion[x / 8 + 2].
y =
463 motion[x / 8 + 3].
x =
464 motion[x / 8 + 3].
y = 0;
467 switch (block_type) {
474 pitch, motion, x, y, width, height);
477 av_dlog(avctx,
"Error in svq1_motion_inter_block %i\n", result);
485 pitch, motion, x, y, width, height);
488 av_dlog(avctx,
"Error in svq1_motion_inter_4v_block %i\n", result);
510 for (i = 1; i <= out[0]; i++) {
552 av_dlog(avctx,
"%s checksum (%02x) for packet data\n",
553 (csum == 0) ?
"correct" :
"incorrect", csum);
562 "embedded message:\n%s\n", ((
char *)msg) + 1);
570 frame_size_code =
get_bits(bitbuf, 3);
572 if (frame_size_code == 7) {
577 if (!width || !height)
614 int buf_size = avpkt->
size;
634 if (buf_size < 9 * 4) {
654 for (i = 0; i < 4; i++)
655 src[i] = ((src[i] << 16) | (src[i] >> 16)) ^ src[7 - i];
660 av_dlog(avctx,
"Error in svq1_decode_frame_header %i\n", result);
683 for (i = 0; i < 3; i++) {
695 current = cur->
data[i];
699 for (y = 0; y <
height; y += 16) {
700 for (x = 0; x <
width; x += 16) {
705 "Error in svq1_decode_block %i (keyframe)\n",
710 current += 16 * linesize;
722 memset(pmv, 0, ((width / 8) + 3) *
sizeof(
svq1_pmv));
724 for (y = 0; y <
height; y += 16) {
725 for (x = 0; x <
width; x += 16) {
729 pmv, x, y, width, height);
732 "Error in svq1_decode_delta_block %i\n",
741 current += 16 * linesize;
785 for (i = 0; i < 6; i++) {
786 static const uint8_t sizes[2][6] = { { 14, 10, 14, 18, 16, 18 },
787 { 10, 10, 14, 14, 14, 16 } };
791 offset += sizes[0][i];
792 init_vlc(&svq1_intra_multistage[i], 3, 8,
798 offset += sizes[1][i];
799 init_vlc(&svq1_inter_multistage[i], 3, 8,