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) == 0) \
120 list[n++] = list[i]; \
121 list[n++] = list[i] + \
122 (((level & 1) ? pitch : 1) << (level / 2 + 1)); \
125 #define SVQ1_ADD_CODEBOOK() \
127 for (j = 0; j < stages; j++) { \
128 n3 = codebook[entries[j]] ^ 0x80808080; \
129 n1 += (n3 & 0xFF00FF00) >> 8; \
130 n2 += n3 & 0x00FF00FF; \
134 if (n1 & 0xFF00FF00) { \
135 n3 = (n1 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
137 n1 |= (~n1 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
138 n1 &= n3 & 0x00FF00FF; \
141 if (n2 & 0xFF00FF00) { \
142 n3 = (n2 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
144 n2 |= (~n2 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
145 n2 &= n3 & 0x00FF00FF; \
148 #define SVQ1_CALC_CODEBOOK_ENTRIES(cbook) \
149 codebook = (const uint32_t *)cbook[level]; \
151 bit_cache = get_bits(bitbuf, 4 * stages); \
153 for (j = 0; j < stages; j++) { \
154 entries[j] = (((bit_cache >> (4 * (stages - j - 1))) & 0xF) + \
155 16 * j) << (level + 1); \
157 mean -= stages * 128; \
158 n4 = mean + (mean >> 31) << 16 | (mean & 0xFFFF);
166 const uint32_t *codebook;
171 uint32_t n1, n2, n3, n4;
177 for (i = 0, m = 1, n = 1, level = 5; i < n; i++) {
181 dst = (uint32_t *)list[i];
182 width = 1 << ((4 +
level) / 2);
183 height = 1 << ((3 +
level) / 2);
186 stages =
get_vlc2(bitbuf, svq1_intra_multistage[level].table, 3, 3) - 1;
189 for (y = 0; y <
height; y++)
190 memset(&dst[y * (pitch / 4)], 0, width);
194 if (stages > 0 && level >= 4) {
196 "Error (svq1_decode_block_intra): invalid vector: stages=%i level=%i\n",
204 for (y = 0; y <
height; y++)
205 memset(&dst[y * (pitch / 4)], mean, width);
209 for (y = 0; y <
height; y++) {
210 for (x = 0; x < width / 4; x++, codebook++) {
215 dst[x] = n1 << 8 | n2;
231 const uint32_t *codebook;
236 uint32_t n1, n2, n3, n4;
242 for (i = 0, m = 1, n = 1, level = 5; i < n; i++) {
246 dst = (uint32_t *)list[i];
247 width = 1 << ((4 +
level) / 2);
248 height = 1 << ((3 +
level) / 2);
251 stages =
get_vlc2(bitbuf, svq1_inter_multistage[level].table, 3, 2) - 1;
256 if ((stages > 0) && (level >= 4)) {
258 "Error (svq1_decode_block_non_intra): invalid vector: stages=%i level=%i\n",
267 for (y = 0; y <
height; y++) {
268 for (x = 0; x < width / 4; x++, codebook++) {
271 n1 = n4 + ((n3 & 0xFF00FF00) >> 8);
272 n2 = n4 + (n3 & 0x00FF00FF);
275 dst[x] = n1 << 8 | n2;
289 for (i = 0; i < 2; i++) {
310 int pitch,
int x,
int y)
316 src = &previous[x + y * pitch];
319 for (i = 0; i < 16; i++) {
320 memcpy(dst, src, 16);
328 int pitch,
svq1_pmv *motion,
int x,
int y,
343 pmv[1] = &motion[x / 8 + 2];
344 pmv[2] = &motion[x / 8 + 4];
353 motion[x / 8 + 2].
x =
354 motion[x / 8 + 3].
x = mv.
x;
356 motion[x / 8 + 2].
y =
357 motion[x / 8 + 3].
y = mv.
y;
359 mv.
x = av_clip(mv.
x, -2 * x, 2 * (width - x - 16));
360 mv.
y = av_clip(mv.
y, -2 * y, 2 * (height - y - 16));
362 src = &previous[(x + (mv.
x >> 1)) + (y + (mv.
y >> 1)) * pitch];
372 int pitch,
svq1_pmv *motion,
int x,
int y,
387 pmv[1] = &motion[(x / 8) + 2];
388 pmv[2] = &motion[(x / 8) + 4];
402 pmv[1] = &motion[(x / 8) + 3];
411 pmv[2] = &motion[(x / 8) + 1];
419 pmv[2] = &motion[(x / 8) + 2];
420 pmv[3] = &motion[(x / 8) + 3];
428 for (i = 0; i < 4; i++) {
429 int mvx = pmv[i]->x + (i & 1) * 16;
430 int mvy = pmv[i]->y + (i >> 1) * 16;
433 mvx = av_clip(mvx, -2 * x, 2 * (width - x - 8));
434 mvy = av_clip(mvy, -2 * y, 2 * (height - y - 8));
436 src = &previous[(x + (mvx >> 1)) + (y + (mvy >> 1)) * pitch];
439 hdsp->
put_pixels_tab[1][((mvy & 1) << 1) | (mvx & 1)](dst, src, pitch, 8);
443 current += 8 * (pitch - 1);
454 int pitch,
svq1_pmv *motion,
int x,
int y,
467 motion[x / 8 + 2].
x =
468 motion[x / 8 + 2].
y =
469 motion[x / 8 + 3].
x =
470 motion[x / 8 + 3].
y = 0;
473 switch (block_type) {
480 pitch, motion, x, y, width, height);
483 av_dlog(avctx,
"Error in svq1_motion_inter_block %i\n", result);
491 pitch, motion, x, y, width, height);
494 av_dlog(avctx,
"Error in svq1_motion_inter_4v_block %i\n", result);
516 for (i = 1; i <= out[0]; i++) {
555 av_dlog(avctx,
"%s checksum (%02x) for packet data\n",
556 (csum == 0) ?
"correct" :
"incorrect", csum);
565 "embedded message: \"%s\"\n", (
char *)msg);
573 frame_size_code =
get_bits(bitbuf, 3);
575 if (frame_size_code == 7) {
615 int buf_size = avpkt->
size;
635 if (buf_size < 9 * 4) {
652 for (i = 0; i < 4; i++)
653 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 } };
788 svq1_intra_multistage[i].
table = &table[offset];
790 offset += sizes[0][i];
791 init_vlc(&svq1_intra_multistage[i], 3, 8,
795 svq1_inter_multistage[i].
table = &table[offset];
797 offset += sizes[1][i];
798 init_vlc(&svq1_inter_multistage[i], 3, 8,