comparison motion_est.c @ 884:2cef5c4c0ca6 libavcodec

* altivec and pix_norm patch by Brian Foley
author kabi
date Fri, 22 Nov 2002 07:53:06 +0000
parents 4ba00af12589
children 22ee74da2cd3
comparison
equal deleted inserted replaced
883:b0d29bf1cecd 884:2cef5c4c0ca6
57 s += ABS(pix[6]-mean); 57 s += ABS(pix[6]-mean);
58 s += ABS(pix[7]-mean); 58 s += ABS(pix[7]-mean);
59 pix += 8; 59 pix += 8;
60 } 60 }
61 pix += line_size - 16; 61 pix += line_size - 16;
62 }
63 return s;
64 }
65
66 static int pix_norm(UINT8 * pix1, UINT8 * pix2, int line_size)
67 {
68 int s, i, j;
69 UINT32 *sq = squareTbl + 256;
70
71 s = 0;
72 for (i = 0; i < 16; i++) {
73 for (j = 0; j < 16; j += 8) {
74 s += sq[pix1[0] - pix2[0]];
75 s += sq[pix1[1] - pix2[1]];
76 s += sq[pix1[2] - pix2[2]];
77 s += sq[pix1[3] - pix2[3]];
78 s += sq[pix1[4] - pix2[4]];
79 s += sq[pix1[5] - pix2[5]];
80 s += sq[pix1[6] - pix2[6]];
81 s += sq[pix1[7] - pix2[7]];
82 pix1 += 8;
83 pix2 += 8;
84 }
85 pix1 += line_size - 16;
86 pix2 += line_size - 16;
87 } 62 }
88 return s; 63 return s;
89 } 64 }
90 65
91 static inline void no_motion_search(MpegEncContext * s, 66 static inline void no_motion_search(MpegEncContext * s,
1135 1110
1136 sum = s->dsp.pix_sum(pix, s->linesize); 1111 sum = s->dsp.pix_sum(pix, s->linesize);
1137 1112
1138 varc = (s->dsp.pix_norm1(pix, s->linesize) - (((unsigned)(sum*sum))>>8) + 500 + 128)>>8; 1113 varc = (s->dsp.pix_norm1(pix, s->linesize) - (((unsigned)(sum*sum))>>8) + 500 + 128)>>8;
1139 // FIXME: MMX OPTIMIZE 1114 // FIXME: MMX OPTIMIZE
1140 vard = (pix_norm(pix, ppix, s->linesize)+128)>>8; 1115 vard = (s->dsp.pix_norm(pix, ppix, s->linesize)+128)>>8;
1141 1116
1142 //printf("%d %d %d %X %X %X\n", s->mb_width, mb_x, mb_y,(int)s, (int)s->mb_var, (int)s->mc_mb_var); fflush(stdout); 1117 //printf("%d %d %d %X %X %X\n", s->mb_width, mb_x, mb_y,(int)s, (int)s->mb_var, (int)s->mc_mb_var); fflush(stdout);
1143 s->mb_var [s->mb_width * mb_y + mb_x] = varc; 1118 s->mb_var [s->mb_width * mb_y + mb_x] = varc;
1144 s->mc_mb_var[s->mb_width * mb_y + mb_x] = vard; 1119 s->mc_mb_var[s->mb_width * mb_y + mb_x] = vard;
1145 s->mb_mean [s->mb_width * mb_y + mb_x] = (sum+128)>>8; 1120 s->mb_mean [s->mb_width * mb_y + mb_x] = (sum+128)>>8;