Mercurial > libavcodec.hg
comparison simple_idct.c @ 2967:ef2149182f1c libavcodec
COSMETICS: Remove all trailing whitespace.
author | diego |
---|---|
date | Sat, 17 Dec 2005 18:14:38 +0000 |
parents | 1e39f273ecd6 |
children | bfabfdf9ce55 |
comparison
equal
deleted
inserted
replaced
2966:564788471dd4 | 2967:ef2149182f1c |
---|---|
15 * | 15 * |
16 * You should have received a copy of the GNU Lesser General Public | 16 * You should have received a copy of the GNU Lesser General Public |
17 * License along with this library; if not, write to the Free Software | 17 * License along with this library; if not, write to the Free Software |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 */ | 19 */ |
20 | 20 |
21 /** | 21 /** |
22 * @file simple_idct.c | 22 * @file simple_idct.c |
23 * simpleidct in C. | 23 * simpleidct in C. |
24 */ | 24 */ |
25 | 25 |
26 /* | 26 /* |
27 based upon some outcommented c code from mpeg2dec (idct_mmx.c | 27 based upon some outcommented c code from mpeg2dec (idct_mmx.c |
28 written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>) | 28 written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>) |
29 */ | 29 */ |
30 #include "avcodec.h" | 30 #include "avcodec.h" |
31 #include "dsputil.h" | 31 #include "dsputil.h" |
32 #include "simple_idct.h" | 32 #include "simple_idct.h" |
33 | 33 |
87 #define ROW0_MASK 0xffff000000000000LL | 87 #define ROW0_MASK 0xffff000000000000LL |
88 #else | 88 #else |
89 #define ROW0_MASK 0xffffLL | 89 #define ROW0_MASK 0xffffLL |
90 #endif | 90 #endif |
91 if(sizeof(DCTELEM)==2){ | 91 if(sizeof(DCTELEM)==2){ |
92 if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) | | 92 if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) | |
93 ((uint64_t *)row)[1]) == 0) { | 93 ((uint64_t *)row)[1]) == 0) { |
94 temp = (row[0] << 3) & 0xffff; | 94 temp = (row[0] << 3) & 0xffff; |
95 temp += temp << 16; | 95 temp += temp << 16; |
96 temp += temp << 32; | 96 temp += temp << 32; |
97 ((uint64_t *)row)[0] = temp; | 97 ((uint64_t *)row)[0] = temp; |
106 } | 106 } |
107 #else | 107 #else |
108 if(sizeof(DCTELEM)==2){ | 108 if(sizeof(DCTELEM)==2){ |
109 if (!(((uint32_t*)row)[1] | | 109 if (!(((uint32_t*)row)[1] | |
110 ((uint32_t*)row)[2] | | 110 ((uint32_t*)row)[2] | |
111 ((uint32_t*)row)[3] | | 111 ((uint32_t*)row)[3] | |
112 row[1])) { | 112 row[1])) { |
113 temp = (row[0] << 3) & 0xffff; | 113 temp = (row[0] << 3) & 0xffff; |
114 temp += temp << 16; | 114 temp += temp << 16; |
115 ((uint32_t*)row)[0]=((uint32_t*)row)[1] = | 115 ((uint32_t*)row)[0]=((uint32_t*)row)[1] = |
116 ((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp; | 116 ((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp; |
155 a2 += - W4*row[4] + W2*row[6]; | 155 a2 += - W4*row[4] + W2*row[6]; |
156 a3 += W4*row[4] - W6*row[6]; | 156 a3 += W4*row[4] - W6*row[6]; |
157 | 157 |
158 MAC16(b0, W5, row[5]); | 158 MAC16(b0, W5, row[5]); |
159 MAC16(b0, W7, row[7]); | 159 MAC16(b0, W7, row[7]); |
160 | 160 |
161 MAC16(b1, -W1, row[5]); | 161 MAC16(b1, -W1, row[5]); |
162 MAC16(b1, -W5, row[7]); | 162 MAC16(b1, -W5, row[7]); |
163 | 163 |
164 MAC16(b2, W7, row[5]); | 164 MAC16(b2, W7, row[5]); |
165 MAC16(b2, W3, row[7]); | 165 MAC16(b2, W3, row[7]); |
166 | 166 |
167 MAC16(b3, W3, row[5]); | 167 MAC16(b3, W3, row[5]); |
168 MAC16(b3, -W1, row[7]); | 168 MAC16(b3, -W1, row[7]); |
169 } | 169 } |
170 | 170 |
171 row[0] = (a0 + b0) >> ROW_SHIFT; | 171 row[0] = (a0 + b0) >> ROW_SHIFT; |
176 row[5] = (a2 - b2) >> ROW_SHIFT; | 176 row[5] = (a2 - b2) >> ROW_SHIFT; |
177 row[3] = (a3 + b3) >> ROW_SHIFT; | 177 row[3] = (a3 + b3) >> ROW_SHIFT; |
178 row[4] = (a3 - b3) >> ROW_SHIFT; | 178 row[4] = (a3 - b3) >> ROW_SHIFT; |
179 } | 179 } |
180 | 180 |
181 static inline void idctSparseColPut (uint8_t *dest, int line_size, | 181 static inline void idctSparseColPut (uint8_t *dest, int line_size, |
182 DCTELEM * col) | 182 DCTELEM * col) |
183 { | 183 { |
184 int a0, a1, a2, a3, b0, b1, b2, b3; | 184 int a0, a1, a2, a3, b0, b1, b2, b3; |
185 uint8_t *cm = cropTbl + MAX_NEG_CROP; | 185 uint8_t *cm = cropTbl + MAX_NEG_CROP; |
186 | 186 |
248 dest[0] = cm[(a1 - b1) >> COL_SHIFT]; | 248 dest[0] = cm[(a1 - b1) >> COL_SHIFT]; |
249 dest += line_size; | 249 dest += line_size; |
250 dest[0] = cm[(a0 - b0) >> COL_SHIFT]; | 250 dest[0] = cm[(a0 - b0) >> COL_SHIFT]; |
251 } | 251 } |
252 | 252 |
253 static inline void idctSparseColAdd (uint8_t *dest, int line_size, | 253 static inline void idctSparseColAdd (uint8_t *dest, int line_size, |
254 DCTELEM * col) | 254 DCTELEM * col) |
255 { | 255 { |
256 int a0, a1, a2, a3, b0, b1, b2, b3; | 256 int a0, a1, a2, a3, b0, b1, b2, b3; |
257 uint8_t *cm = cropTbl + MAX_NEG_CROP; | 257 uint8_t *cm = cropTbl + MAX_NEG_CROP; |
258 | 258 |
388 void simple_idct_put(uint8_t *dest, int line_size, DCTELEM *block) | 388 void simple_idct_put(uint8_t *dest, int line_size, DCTELEM *block) |
389 { | 389 { |
390 int i; | 390 int i; |
391 for(i=0; i<8; i++) | 391 for(i=0; i<8; i++) |
392 idctRowCondDC(block + i*8); | 392 idctRowCondDC(block + i*8); |
393 | 393 |
394 for(i=0; i<8; i++) | 394 for(i=0; i<8; i++) |
395 idctSparseColPut(dest + i, line_size, block + i); | 395 idctSparseColPut(dest + i, line_size, block + i); |
396 } | 396 } |
397 | 397 |
398 void simple_idct_add(uint8_t *dest, int line_size, DCTELEM *block) | 398 void simple_idct_add(uint8_t *dest, int line_size, DCTELEM *block) |
399 { | 399 { |
400 int i; | 400 int i; |
401 for(i=0; i<8; i++) | 401 for(i=0; i<8; i++) |
402 idctRowCondDC(block + i*8); | 402 idctRowCondDC(block + i*8); |
403 | 403 |
404 for(i=0; i<8; i++) | 404 for(i=0; i<8; i++) |
405 idctSparseColAdd(dest + i, line_size, block + i); | 405 idctSparseColAdd(dest + i, line_size, block + i); |
406 } | 406 } |
407 | 407 |
408 void simple_idct(DCTELEM *block) | 408 void simple_idct(DCTELEM *block) |
409 { | 409 { |
410 int i; | 410 int i; |
411 for(i=0; i<8; i++) | 411 for(i=0; i<8; i++) |
412 idctRowCondDC(block + i*8); | 412 idctRowCondDC(block + i*8); |
413 | 413 |
414 for(i=0; i<8; i++) | 414 for(i=0; i<8; i++) |
415 idctSparseCol(block + i); | 415 idctSparseCol(block + i); |
416 } | 416 } |
417 | 417 |
418 /* 2x4x8 idct */ | 418 /* 2x4x8 idct */ |
465 specification */ | 465 specification */ |
466 void simple_idct248_put(uint8_t *dest, int line_size, DCTELEM *block) | 466 void simple_idct248_put(uint8_t *dest, int line_size, DCTELEM *block) |
467 { | 467 { |
468 int i; | 468 int i; |
469 DCTELEM *ptr; | 469 DCTELEM *ptr; |
470 | 470 |
471 /* butterfly */ | 471 /* butterfly */ |
472 ptr = block; | 472 ptr = block; |
473 for(i=0;i<4;i++) { | 473 for(i=0;i<4;i++) { |
474 BF(0); | 474 BF(0); |
475 BF(1); | 475 BF(1); |