45 #define Rnd0 65536 // 1<<(COL_SHIFT+ROW_SHIFT-1);
46 #define Rnd1 3597 // FIX (1.75683487303);
47 #define Rnd2 2260 // FIX (1.10355339059);
48 #define Rnd3 1203 // FIX (0.587788325588);
50 #define Rnd5 120 // FIX (0.058658283817);
51 #define Rnd6 512 // FIX (0.25);
52 #define Rnd7 512 // FIX (0.25);
54 static const int Tab04[] = { 22725, 21407, 19266, 16384, 12873, 8867, 4520 };
55 static const int Tab17[] = { 31521, 29692, 26722, 22725, 17855, 12299, 6270 };
56 static const int Tab26[] = { 29692, 27969, 25172, 21407, 16819, 11585, 5906 };
57 static const int Tab35[] = { 26722, 25172, 22654, 19266, 15137, 10426, 5315 };
59 static int Idct_Row(
short * In,
const int *
const Tab,
int Rnd)
61 const int C1 = Tab[0];
62 const int C2 = Tab[1];
63 const int C3 = Tab[2];
64 const int C4 = Tab[3];
65 const int C5 = Tab[4];
66 const int C6 = Tab[5];
67 const int C7 = Tab[6];
69 const int Right = In[5]|In[6]|In[7];
70 const int Left = In[1]|In[2]|In[3];
73 const int K = C4*In[0] + Rnd;
76 const int a0 = K + C2*In[2];
77 const int a1 = K + C6*In[2];
78 const int a2 = K - C6*In[2];
79 const int a3 = K - C2*In[2];
81 const int b0 = C1*In[1] + C3*In[3];
82 const int b1 = C3*In[1] - C7*In[3];
83 const int b2 = C5*In[1] - C1*In[3];
84 const int b3 = C7*In[1] - C5*In[3];
99 In[0] = In[1] = In[2] = In[3] =
100 In[4] = In[5] = In[6] = In[7] =
a0;
105 else if (!(Left|Right))
107 const int a0 = (Rnd + C4*(In[0]+In[4])) >>
ROW_SHIFT;
108 const int a1 = (Rnd + C4*(In[0]-In[4])) >>
ROW_SHIFT;
121 const int K = C4*In[0] + Rnd;
122 const int a0 = K + C2*In[2] + C4*In[4] + C6*In[6];
123 const int a1 = K + C6*In[2] - C4*In[4] - C2*In[6];
124 const int a2 = K - C6*In[2] - C4*In[4] + C2*In[6];
125 const int a3 = K - C2*In[2] + C4*In[4] - C6*In[6];
127 const int b0 = C1*In[1] + C3*In[3] + C5*In[5] + C7*In[7];
128 const int b1 = C3*In[1] - C7*In[3] - C1*In[5] - C5*In[7];
129 const int b2 = C5*In[1] - C1*In[3] + C7*In[5] + C3*In[7];
130 const int b3 = C7*In[1] - C5*In[3] + C3*In[5] - C1*In[7];
149 #define MULT(c,x, n) ( ((c) * (x)) >> (n) )
153 #define BUTF(a, b, tmp) \
158 #define LOAD_BUTF(m1, m2, a, b, tmp, S) \
159 (m1) = (S)[(a)] + (S)[(b)]; \
160 (m2) = (S)[(a)] - (S)[(b)]
164 int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;
195 LOAD_BUTF(mm0, mm1, 0*8, 4*8, Spill, In);
197 BUTF(mm0, mm3, Spill);
198 BUTF(mm0, mm7, Spill);
216 int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;
237 mm0 = mm1 = (int)In[0*8];
241 BUTF(mm0, mm3, Spill);
242 BUTF(mm0, mm7, Spill);
260 int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;
274 mm0 = mm1 = (int)In[0*8];
278 BUTF(mm0, mm3, Spill);
279 BUTF(mm0, mm7, Spill);
322 else if (Rows&0x08) {