73 0x00, 0xD5, 0x7F, 0xAA, 0xFE, 0x2B, 0x81, 0x54,
74 0x29, 0xFC, 0x56, 0x83, 0xD7, 0x02, 0xA8, 0x7D,
75 0x52, 0x87, 0x2D, 0xF8, 0xAC, 0x79, 0xD3, 0x06,
76 0x7B, 0xAE, 0x04, 0xD1, 0x85, 0x50, 0xFA, 0x2F,
77 0xA4, 0x71, 0xDB, 0x0E, 0x5A, 0x8F, 0x25, 0xF0,
78 0x8D, 0x58, 0xF2, 0x27, 0x73, 0xA6, 0x0C, 0xD9,
79 0xF6, 0x23, 0x89, 0x5C, 0x08, 0xDD, 0x77, 0xA2,
80 0xDF, 0x0A, 0xA0, 0x75, 0x21, 0xF4, 0x5E, 0x8B,
81 0x9D, 0x48, 0xE2, 0x37, 0x63, 0xB6, 0x1C, 0xC9,
82 0xB4, 0x61, 0xCB, 0x1E, 0x4A, 0x9F, 0x35, 0xE0,
83 0xCF, 0x1A, 0xB0, 0x65, 0x31, 0xE4, 0x4E, 0x9B,
84 0xE6, 0x33, 0x99, 0x4C, 0x18, 0xCD, 0x67, 0xB2,
85 0x39, 0xEC, 0x46, 0x93, 0xC7, 0x12, 0xB8, 0x6D,
86 0x10, 0xC5, 0x6F, 0xBA, 0xEE, 0x3B, 0x91, 0x44,
87 0x6B, 0xBE, 0x14, 0xC1, 0x95, 0x40, 0xEA, 0x3F,
88 0x42, 0x97, 0x3D, 0xE8, 0xBC, 0x69, 0xC3, 0x16,
89 0xEF, 0x3A, 0x90, 0x45, 0x11, 0xC4, 0x6E, 0xBB,
90 0xC6, 0x13, 0xB9, 0x6C, 0x38, 0xED, 0x47, 0x92,
91 0xBD, 0x68, 0xC2, 0x17, 0x43, 0x96, 0x3C, 0xE9,
92 0x94, 0x41, 0xEB, 0x3E, 0x6A, 0xBF, 0x15, 0xC0,
93 0x4B, 0x9E, 0x34, 0xE1, 0xB5, 0x60, 0xCA, 0x1F,
94 0x62, 0xB7, 0x1D, 0xC8, 0x9C, 0x49, 0xE3, 0x36,
95 0x19, 0xCC, 0x66, 0xB3, 0xE7, 0x32, 0x98, 0x4D,
96 0x30, 0xE5, 0x4F, 0x9A, 0xCE, 0x1B, 0xB1, 0x64,
97 0x72, 0xA7, 0x0D, 0xD8, 0x8C, 0x59, 0xF3, 0x26,
98 0x5B, 0x8E, 0x24, 0xF1, 0xA5, 0x70, 0xDA, 0x0F,
99 0x20, 0xF5, 0x5F, 0x8A, 0xDE, 0x0B, 0xA1, 0x74,
100 0x09, 0xDC, 0x76, 0xA3, 0xF7, 0x22, 0x88, 0x5D,
101 0xD6, 0x03, 0xA9, 0x7C, 0x28, 0xFD, 0x57, 0x82,
102 0xFF, 0x2A, 0x80, 0x55, 0x01, 0xD4, 0x7E, 0xAB,
103 0x84, 0x51, 0xFB, 0x2E, 0x7A, 0xAF, 0x05, 0xD0,
104 0xAD, 0x78, 0xD2, 0x07, 0x53, 0x86, 0x2C, 0xF9
107 #define SVQ1_PROCESS_VECTOR() \
108 for (; level > 0; i++) { \
116 if (!get_bits1(bitbuf)) \
119 list[n++] = list[i]; \
120 list[n++] = list[i] + (((level & 1) ? pitch : 1) << ((level >> 1) + 1));\
123 #define SVQ1_ADD_CODEBOOK() \
125 for (j = 0; j < stages; j++) { \
126 n3 = codebook[entries[j]] ^ 0x80808080; \
127 n1 += (n3 & 0xFF00FF00) >> 8; \
128 n2 += n3 & 0x00FF00FF; \
132 if (n1 & 0xFF00FF00) { \
133 n3 = (n1 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
135 n1 |= (~n1 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
136 n1 &= n3 & 0x00FF00FF; \
139 if (n2 & 0xFF00FF00) { \
140 n3 = (n2 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
142 n2 |= (~n2 >> 15 & 0x00010001 | 0x01000100) - 0x00010001; \
143 n2 &= n3 & 0x00FF00FF; \
146 #define SVQ1_CALC_CODEBOOK_ENTRIES(cbook) \
147 codebook = (const uint32_t *)cbook[level]; \
149 bit_cache = get_bits(bitbuf, 4 * stages); \
151 for (j = 0; j < stages; j++) { \
152 entries[j] = (((bit_cache >> (4 * (stages - j - 1))) & 0xF) + \
153 16 * j) << (level + 1); \
155 mean -= stages * 128; \
156 n4 = (mean << 16) + mean;
164 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];
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",
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;
237 uint32_t n1, n2, n3, n4;
243 for (
i = 0, m = 1, n = 1,
level = 5;
i < n;
i++) {
247 dst = (uint32_t *)
list[
i];
257 if ((stages > 0 &&
level >= 4)) {
259 "Error (svq1_decode_block_non_intra): invalid vector: stages=%i level=%i\n",
269 for (y = 0; y <
height; y++) {
270 for (x = 0; x <
width / 4; x++, codebook++) {
273 n1 = n4 + ((n3 & 0xFF00FF00) >> 8);
274 n2 = n4 + (n3 & 0x00FF00FF);
277 dst[x] = n1 << 8 | n2;
291 for (
i = 0;
i < 2;
i++) {
312 ptrdiff_t pitch,
int x,
int y)
318 src = &previous[x + y * pitch];
321 for (
i = 0;
i < 16;
i++) {
322 memcpy(dst,
src, 16);
330 ptrdiff_t pitch, svq1_pmv *motion,
int x,
int y,
345 pmv[1] = &motion[x / 8 + 2];
346 pmv[2] = &motion[x / 8 + 4];
354 motion[x / 8 + 2].x =
355 motion[x / 8 + 3].x =
mv.x;
357 motion[x / 8 + 2].y =
358 motion[x / 8 + 3].y =
mv.y;
360 mv.x = av_clip(
mv.x, -2 * x, 2 * (
width - x - 16));
361 mv.y = av_clip(
mv.y, -2 * y, 2 * (
height - y - 16));
363 src = &previous[(x + (
mv.x >> 1)) + (y + (
mv.y >> 1)) * pitch];
373 ptrdiff_t pitch, svq1_pmv *motion,
int x,
int y,
388 pmv[1] = &motion[(x / 8) + 2];
389 pmv[2] = &motion[(x / 8) + 4];
402 pmv[1] = &motion[(x / 8) + 3];
410 pmv[2] = &motion[(x / 8) + 1];
417 pmv[2] = &motion[(x / 8) + 2];
418 pmv[3] = &motion[(x / 8) + 3];
425 for (
i = 0;
i < 4;
i++) {
426 int mvx = pmv[
i]->x + (
i & 1) * 16;
427 int mvy = pmv[
i]->y + (
i >> 1) * 16;
430 mvx = av_clip(mvx, -2 * x, 2 * (
width - x - 8));
431 mvy = av_clip(mvy, -2 * y, 2 * (
height - y - 8));
433 src = &previous[(x + (mvx >> 1)) + (y + (mvy >> 1)) * pitch];
440 current += 8 * (pitch - 1);
451 ptrdiff_t pitch, svq1_pmv *motion,
int x,
int y,
464 motion[x / 8 + 2].x =
465 motion[x / 8 + 2].y =
466 motion[x / 8 + 3].x =
467 motion[x / 8 + 3].y = 0;
470 switch (block_type) {
480 ff_dlog(avctx,
"Error in svq1_motion_inter_block %i\n",
result);
491 ff_dlog(avctx,
"Error in svq1_motion_inter_4v_block %i\n",
result);
513 for (
i = 1;
i <=
out[0];
i++) {
548 if (
s->frame_code == 0x50 ||
s->frame_code == 0x60) {
553 ff_dlog(avctx,
"%s checksum (%02x) for packet data\n",
554 (csum == 0) ?
"correct" :
"incorrect", csum);
557 if ((
s->frame_code ^ 0x10) >= 0x50) {
563 "embedded message:\n%s\n", ((
char *)msg) + 1);
571 frame_size_code =
get_bits(bitbuf, 3);
573 if (frame_size_code == 7) {
617 int buf_size = avpkt->
size;
633 if ((
s->frame_code & ~0x70) || !(
s->frame_code & 0x60))
637 if (
s->frame_code != 0x20) {
640 if (buf_size < 9 * 4) {
646 &
s->pkt_swapped_allocated,
651 memcpy(
s->pkt_swapped, buf, buf_size);
652 buf =
s->pkt_swapped;
656 src = (uint32_t *)(
s->pkt_swapped + 4);
658 for (
i = 0;
i < 4;
i++)
664 ff_dlog(avctx,
"Error in svq1_decode_frame_header %i\n",
result);
687 for (
i = 0;
i < 3;
i++) {
699 current = cur->
data[
i];
703 for (y = 0; y <
height; y += 16) {
704 for (x = 0; x <
width; x += 16) {
709 "Error in svq1_decode_block %i (keyframe)\n",
714 current += 16 * linesize;
720 s->prev->width !=
s->width ||
s->prev->height !=
s->height) {
726 memset(pmv, 0, ((
width / 8) + 3) *
sizeof(svq1_pmv));
728 for (y = 0; y <
height; y += 16) {
729 for (x = 0; x <
width; x += 16) {
736 "Error in svq1_decode_delta_block %i\n",
745 current += 16 * linesize;
775 s->width = avctx->
width + 3 & ~3;
776 s->height = avctx->
height + 3 & ~3;
789 for (
i = 0;
i < 6;
i++) {
790 static const uint8_t sizes[2][6] = { { 14, 10, 14, 18, 16, 18 },
791 { 10, 10, 14, 14, 14, 16 } };
826 s->pkt_swapped_allocated = 0;