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++) {
551 av_dlog(avctx,
"%s checksum (%02x) for packet data\n",
552 (csum == 0) ?
"correct" :
"incorrect", csum);
561 "embedded message:\n%s\n", (
char *)msg);
569 frame_size_code =
get_bits(bitbuf, 3);
571 if (frame_size_code == 7) {
576 if (!width || !height)
613 int buf_size = avpkt->
size;
633 if (buf_size < 9 * 4) {
653 for (i = 0; i < 4; i++)
654 src[i] = ((src[i] << 16) | (src[i] >> 16)) ^ src[7 - i];
659 av_dlog(avctx,
"Error in svq1_decode_frame_header %i\n", result);
682 for (i = 0; i < 3; i++) {
694 current = cur->
data[i];
698 for (y = 0; y <
height; y += 16) {
699 for (x = 0; x <
width; x += 16) {
704 "Error in svq1_decode_block %i (keyframe)\n",
709 current += 16 * linesize;
721 memset(pmv, 0, ((width / 8) + 3) *
sizeof(
svq1_pmv));
723 for (y = 0; y <
height; y += 16) {
724 for (x = 0; x <
width; x += 16) {
728 pmv, x, y, width, height);
731 "Error in svq1_decode_delta_block %i\n",
740 current += 16 * linesize;
784 for (i = 0; i < 6; i++) {
785 static const uint8_t sizes[2][6] = { { 14, 10, 14, 18, 16, 18 },
786 { 10, 10, 14, 14, 14, 16 } };
790 offset += sizes[0][i];
791 init_vlc(&svq1_intra_multistage[i], 3, 8,
797 offset += sizes[1][i];
798 init_vlc(&svq1_inter_multistage[i], 3, 8,