Mercurial > libavcodec.hg
comparison libpostproc/postprocess.c @ 2038:02b59a3c62cd libavcodec
faster c lowpass filter
| author | michael |
|---|---|
| date | Thu, 27 May 2004 16:16:09 +0000 |
| parents | 98d8283534bb |
| children | f25e485a7850 |
comparison
equal
deleted
inserted
replaced
| 2037:98d8283534bb | 2038:02b59a3c62cd |
|---|---|
| 374 * Do a horizontal low pass filter on the 10x8 block (dst points to middle 8x8 Block) | 374 * Do a horizontal low pass filter on the 10x8 block (dst points to middle 8x8 Block) |
| 375 * using the 9-Tap Filter (1,1,2,2,4,2,2,1,1)/16 (C version) | 375 * using the 9-Tap Filter (1,1,2,2,4,2,2,1,1)/16 (C version) |
| 376 */ | 376 */ |
| 377 static inline void doHorizLowPass_C(uint8_t dst[], int stride, PPContext *c) | 377 static inline void doHorizLowPass_C(uint8_t dst[], int stride, PPContext *c) |
| 378 { | 378 { |
| 379 | |
| 380 int y; | 379 int y; |
| 381 for(y=0; y<BLOCK_SIZE; y++) | 380 for(y=0; y<BLOCK_SIZE; y++) |
| 382 { | 381 { |
| 383 const int first= ABS(dst[-1] - dst[0]) < c->QP ? dst[-1] : dst[0]; | 382 const int first= ABS(dst[-1] - dst[0]) < c->QP ? dst[-1] : dst[0]; |
| 384 const int last= ABS(dst[8] - dst[7]) < c->QP ? dst[8] : dst[7]; | 383 const int last= ABS(dst[8] - dst[7]) < c->QP ? dst[8] : dst[7]; |
| 385 | 384 |
| 386 int sums[9]; | 385 int sums[10]; |
| 387 sums[0] = first + dst[0]; | 386 sums[0] = 4*first + dst[0] + dst[1] + dst[2] + 4; |
| 388 sums[1] = dst[0] + dst[1]; | 387 sums[1] = sums[0] - first + dst[3]; |
| 389 sums[2] = dst[1] + dst[2]; | 388 sums[2] = sums[1] - first + dst[4]; |
| 390 sums[3] = dst[2] + dst[3]; | 389 sums[3] = sums[2] - first + dst[5]; |
| 391 sums[4] = dst[3] + dst[4]; | 390 sums[4] = sums[3] - first + dst[6]; |
| 392 sums[5] = dst[4] + dst[5]; | 391 sums[5] = sums[4] - dst[0] + dst[7]; |
| 393 sums[6] = dst[5] + dst[6]; | 392 sums[6] = sums[5] - dst[1] + last; |
| 394 sums[7] = dst[6] + dst[7]; | 393 sums[7] = sums[6] - dst[2] + last; |
| 395 sums[8] = dst[7] + last; | 394 sums[8] = sums[7] - dst[3] + last; |
| 396 | 395 sums[9] = sums[8] - dst[4] + last; |
| 397 dst[0]= ((sums[0]<<2) + ((first + sums[2])<<1) + sums[4] + 8)>>4; | 396 |
| 398 dst[1]= ((dst[1]<<2) + ((first + sums[0] + sums[3])<<1) + sums[5] + 8)>>4; | 397 dst[0]= (sums[0] + sums[2] + 2*dst[0])>>4; |
| 399 dst[2]= ((dst[2]<<2) + ((first + sums[1] + sums[4])<<1) + sums[6] + 8)>>4; | 398 dst[1]= (sums[1] + sums[3] + 2*dst[1])>>4; |
| 400 dst[3]= ((dst[3]<<2) + ((sums[2] + sums[5])<<1) + sums[0] + sums[7] + 8)>>4; | 399 dst[2]= (sums[2] + sums[4] + 2*dst[2])>>4; |
| 401 dst[4]= ((dst[4]<<2) + ((sums[3] + sums[6])<<1) + sums[1] + sums[8] + 8)>>4; | 400 dst[3]= (sums[3] + sums[5] + 2*dst[3])>>4; |
| 402 dst[5]= ((dst[5]<<2) + ((last + sums[7] + sums[4])<<1) + sums[2] + 8)>>4; | 401 dst[4]= (sums[4] + sums[6] + 2*dst[4])>>4; |
| 403 dst[6]= (((last + dst[6])<<2) + ((dst[7] + sums[5])<<1) + sums[3] + 8)>>4; | 402 dst[5]= (sums[5] + sums[7] + 2*dst[5])>>4; |
| 404 dst[7]= ((sums[8]<<2) + ((last + sums[6])<<1) + sums[4] + 8)>>4; | 403 dst[6]= (sums[6] + sums[8] + 2*dst[6])>>4; |
| 404 dst[7]= (sums[7] + sums[9] + 2*dst[7])>>4; | |
| 405 | 405 |
| 406 dst+= stride; | 406 dst+= stride; |
| 407 } | 407 } |
| 408 } | 408 } |
| 409 | 409 |
