Mercurial > libpostproc.hg
comparison postprocess_template.c @ 78:47ff4bd209cd libpostproc
const
author | michael |
---|---|
date | Sat, 02 Feb 2008 21:24:54 +0000 |
parents | 95d9409452f2 |
children | 8e738e0a16f5 |
comparison
equal
deleted
inserted
replaced
77:13e4f6ebb206 | 78:47ff4bd209cd |
---|---|
3178 STOP_TIMER("stepX") | 3178 STOP_TIMER("stepX") |
3179 }*/ | 3179 }*/ |
3180 } | 3180 } |
3181 #endif //HAVE_MMX | 3181 #endif //HAVE_MMX |
3182 | 3182 |
3183 static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | 3183 static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, |
3184 QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c); | 3184 const QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c); |
3185 | 3185 |
3186 /** | 3186 /** |
3187 * Copies a block from src to dst and fixes the blacklevel. | 3187 * Copies a block from src to dst and fixes the blacklevel. |
3188 * levelFix == 0 -> do not touch the brighness & contrast | 3188 * levelFix == 0 -> do not touch the brighness & contrast |
3189 */ | 3189 */ |
3190 #undef SCALED_CPY | 3190 #undef SCALED_CPY |
3191 | 3191 |
3192 static inline void RENAME(blockCopy)(uint8_t dst[], int dstStride, uint8_t src[], int srcStride, | 3192 static inline void RENAME(blockCopy)(uint8_t dst[], int dstStride, const uint8_t src[], int srcStride, |
3193 int levelFix, int64_t *packedOffsetAndScale) | 3193 int levelFix, int64_t *packedOffsetAndScale) |
3194 { | 3194 { |
3195 #ifndef HAVE_MMX | 3195 #ifndef HAVE_MMX |
3196 int i; | 3196 int i; |
3197 #endif | 3197 #endif |
3344 } | 3344 } |
3345 | 3345 |
3346 /** | 3346 /** |
3347 * Filters array of bytes (Y or U or V values) | 3347 * Filters array of bytes (Y or U or V values) |
3348 */ | 3348 */ |
3349 static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | 3349 static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, |
3350 QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c2) | 3350 const QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c2) |
3351 { | 3351 { |
3352 DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access | 3352 DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access |
3353 int x,y; | 3353 int x,y; |
3354 #ifdef COMPILE_TIME_MODE | 3354 #ifdef COMPILE_TIME_MODE |
3355 const int mode= COMPILE_TIME_MODE; | 3355 const int mode= COMPILE_TIME_MODE; |
3460 } | 3460 } |
3461 | 3461 |
3462 /* copy & deinterlace first row of blocks */ | 3462 /* copy & deinterlace first row of blocks */ |
3463 y=-BLOCK_SIZE; | 3463 y=-BLOCK_SIZE; |
3464 { | 3464 { |
3465 uint8_t *srcBlock= &(src[y*srcStride]); | 3465 const uint8_t *srcBlock= &(src[y*srcStride]); |
3466 uint8_t *dstBlock= tempDst + dstStride; | 3466 uint8_t *dstBlock= tempDst + dstStride; |
3467 | 3467 |
3468 // From this point on it is guaranteed that we can read and write 16 lines downward | 3468 // From this point on it is guaranteed that we can read and write 16 lines downward |
3469 // finish 1 block before the next otherwise we might have a problem | 3469 // finish 1 block before the next otherwise we might have a problem |
3470 // with the L1 Cache of the P4 ... or only a few blocks at a time or soemthing | 3470 // with the L1 Cache of the P4 ... or only a few blocks at a time or soemthing |
3543 } | 3543 } |
3544 | 3544 |
3545 for(y=0; y<height; y+=BLOCK_SIZE) | 3545 for(y=0; y<height; y+=BLOCK_SIZE) |
3546 { | 3546 { |
3547 //1% speedup if these are here instead of the inner loop | 3547 //1% speedup if these are here instead of the inner loop |
3548 uint8_t *srcBlock= &(src[y*srcStride]); | 3548 const uint8_t *srcBlock= &(src[y*srcStride]); |
3549 uint8_t *dstBlock= &(dst[y*dstStride]); | 3549 uint8_t *dstBlock= &(dst[y*dstStride]); |
3550 #ifdef HAVE_MMX | 3550 #ifdef HAVE_MMX |
3551 uint8_t *tempBlock1= c.tempBlocks; | 3551 uint8_t *tempBlock1= c.tempBlocks; |
3552 uint8_t *tempBlock2= c.tempBlocks + 8; | 3552 uint8_t *tempBlock2= c.tempBlocks + 8; |
3553 #endif | 3553 #endif |
3554 int8_t *QPptr= &QPs[(y>>qpVShift)*QPStride]; | 3554 const int8_t *QPptr= &QPs[(y>>qpVShift)*QPStride]; |
3555 int8_t *nonBQPptr= &c.nonBQPTable[(y>>qpVShift)*FFABS(QPStride)]; | 3555 int8_t *nonBQPptr= &c.nonBQPTable[(y>>qpVShift)*FFABS(QPStride)]; |
3556 int QP=0; | 3556 int QP=0; |
3557 /* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards | 3557 /* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards |
3558 if not than use a temporary buffer */ | 3558 if not than use a temporary buffer */ |
3559 if(y+15 >= height) | 3559 if(y+15 >= height) |