Originally committed as revision 12557 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -926,8 +926,8 @@ static void reallocBuffers(PPContext *c, int width, int height, int stride, int | |||
| for(i=0; i<3; i++){ | |||
| //Note: The +17*1024 is just there so i do not have to worry about r/w over the end. | |||
| reallocAlign((void **)&c->tempBlured[i], 8, stride*mbHeight*16 + 17*1024); | |||
| reallocAlign((void **)&c->tempBluredPast[i], 8, 256*((height+7)&(~7))/2 + 17*1024);//FIXME size | |||
| reallocAlign((void **)&c->tempBlurred[i], 8, stride*mbHeight*16 + 17*1024); | |||
| reallocAlign((void **)&c->tempBlurredPast[i], 8, 256*((height+7)&(~7))/2 + 17*1024);//FIXME size | |||
| } | |||
| reallocAlign((void **)&c->deintTemp, 8, 2*width+32); | |||
| @@ -969,8 +969,8 @@ void pp_free_context(void *vc){ | |||
| PPContext *c = (PPContext*)vc; | |||
| int i; | |||
| for(i=0; i<3; i++) av_free(c->tempBlured[i]); | |||
| for(i=0; i<3; i++) av_free(c->tempBluredPast[i]); | |||
| for(i=0; i<3; i++) av_free(c->tempBlurred[i]); | |||
| for(i=0; i<3; i++) av_free(c->tempBlurredPast[i]); | |||
| av_free(c->tempBlocks); | |||
| av_free(c->yHistogram); | |||
| @@ -800,7 +800,7 @@ static inline void dering_altivec(uint8_t src[], int stride, PPContext *c) { | |||
| #define do_a_deblock_altivec(a...) do_a_deblock_C(a) | |||
| static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| uint8_t *tempBlured, uint32_t *tempBluredPast, int *maxNoise) | |||
| uint8_t *tempBlurred, uint32_t *tempBlurredPast, int *maxNoise) | |||
| { | |||
| const vector signed int zero = vec_splat_s32(0); | |||
| const vector signed short vsint16_1 = vec_splat_s16(1); | |||
| @@ -808,9 +808,9 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| vector signed int v_sysdp = zero; | |||
| int d, sysd, i; | |||
| tempBluredPast[127]= maxNoise[0]; | |||
| tempBluredPast[128]= maxNoise[1]; | |||
| tempBluredPast[129]= maxNoise[2]; | |||
| tempBlurredPast[127]= maxNoise[0]; | |||
| tempBlurredPast[128]= maxNoise[1]; | |||
| tempBlurredPast[129]= maxNoise[2]; | |||
| #define LOAD_LINE(src, i) \ | |||
| register int j##src##i = i * stride; \ | |||
| @@ -832,18 +832,18 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| LOAD_LINE(src, 6); | |||
| LOAD_LINE(src, 7); | |||
| LOAD_LINE(tempBlured, 0); | |||
| LOAD_LINE(tempBlured, 1); | |||
| LOAD_LINE(tempBlured, 2); | |||
| LOAD_LINE(tempBlured, 3); | |||
| LOAD_LINE(tempBlured, 4); | |||
| LOAD_LINE(tempBlured, 5); | |||
| LOAD_LINE(tempBlured, 6); | |||
| LOAD_LINE(tempBlured, 7); | |||
| LOAD_LINE(tempBlurred, 0); | |||
| LOAD_LINE(tempBlurred, 1); | |||
| LOAD_LINE(tempBlurred, 2); | |||
| LOAD_LINE(tempBlurred, 3); | |||
| LOAD_LINE(tempBlurred, 4); | |||
| LOAD_LINE(tempBlurred, 5); | |||
| LOAD_LINE(tempBlurred, 6); | |||
| LOAD_LINE(tempBlurred, 7); | |||
| #undef LOAD_LINE | |||
| #define ACCUMULATE_DIFFS(i) \ | |||
| vector signed short v_d##i = vec_sub(v_tempBluredAss##i, \ | |||
| vector signed short v_d##i = vec_sub(v_tempBlurredAss##i, \ | |||
| v_srcAss##i); \ | |||
| v_dp = vec_msums(v_d##i, v_d##i, v_dp); \ | |||
| v_sysdp = vec_msums(v_d##i, vsint16_1, v_sysdp) | |||
| @@ -869,16 +869,16 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| i = d; | |||
| d = (4*d | |||
| +(*(tempBluredPast-256)) | |||
| +(*(tempBluredPast-1))+ (*(tempBluredPast+1)) | |||
| +(*(tempBluredPast+256)) | |||
| +(*(tempBlurredPast-256)) | |||
| +(*(tempBlurredPast-1))+ (*(tempBlurredPast+1)) | |||
| +(*(tempBlurredPast+256)) | |||
| +4)>>3; | |||
| *tempBluredPast=i; | |||
| *tempBlurredPast=i; | |||
| if (d > maxNoise[1]) { | |||
| if (d < maxNoise[2]) { | |||
| #define OP(i) v_tempBluredAss##i = vec_avg(v_tempBluredAss##i, v_srcAss##i); | |||
| #define OP(i) v_tempBlurredAss##i = vec_avg(v_tempBlurredAss##i, v_srcAss##i); | |||
| OP(0); | |||
| OP(1); | |||
| @@ -890,7 +890,7 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| OP(7); | |||
| #undef OP | |||
| } else { | |||
| #define OP(i) v_tempBluredAss##i = v_srcAss##i; | |||
| #define OP(i) v_tempBlurredAss##i = v_srcAss##i; | |||
| OP(0); | |||
| OP(1); | |||
| @@ -910,11 +910,11 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| #define OP(i) \ | |||
| const vector signed short v_temp##i = \ | |||
| vec_mladd(v_tempBluredAss##i, \ | |||
| vec_mladd(v_tempBlurredAss##i, \ | |||
| vsint16_7, v_srcAss##i); \ | |||
| const vector signed short v_temp2##i = \ | |||
| vec_add(v_temp##i, vsint16_4); \ | |||
| v_tempBluredAss##i = vec_sr(v_temp2##i, vuint16_3) | |||
| v_tempBlurredAss##i = vec_sr(v_temp2##i, vuint16_3) | |||
| OP(0); | |||
| OP(1); | |||
| @@ -931,11 +931,11 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| #define OP(i) \ | |||
| const vector signed short v_temp##i = \ | |||
| vec_mladd(v_tempBluredAss##i, \ | |||
| vec_mladd(v_tempBlurredAss##i, \ | |||
| vsint16_3, v_srcAss##i); \ | |||
| const vector signed short v_temp2##i = \ | |||
| vec_add(v_temp##i, vsint16_2); \ | |||
| v_tempBluredAss##i = vec_sr(v_temp2##i, (vector unsigned short)vsint16_2) | |||
| v_tempBlurredAss##i = vec_sr(v_temp2##i, (vector unsigned short)vsint16_2) | |||
| OP(0); | |||
| OP(1); | |||
| @@ -957,7 +957,7 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| const vector unsigned char perms##src##i = \ | |||
| vec_lvsr(i * stride, src); \ | |||
| const vector unsigned char vf##src##i = \ | |||
| vec_packsu(v_tempBluredAss##i, (vector signed short)zero); \ | |||
| vec_packsu(v_tempBlurredAss##i, (vector signed short)zero); \ | |||
| const vector unsigned char vg##src##i = \ | |||
| vec_perm(vf##src##i, v_##src##A##i, permHH); \ | |||
| const vector unsigned char mask##src##i = \ | |||
| @@ -979,14 +979,14 @@ static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| PACK_AND_STORE(src, 5); | |||
| PACK_AND_STORE(src, 6); | |||
| PACK_AND_STORE(src, 7); | |||
| PACK_AND_STORE(tempBlured, 0); | |||
| PACK_AND_STORE(tempBlured, 1); | |||
| PACK_AND_STORE(tempBlured, 2); | |||
| PACK_AND_STORE(tempBlured, 3); | |||
| PACK_AND_STORE(tempBlured, 4); | |||
| PACK_AND_STORE(tempBlured, 5); | |||
| PACK_AND_STORE(tempBlured, 6); | |||
| PACK_AND_STORE(tempBlured, 7); | |||
| PACK_AND_STORE(tempBlurred, 0); | |||
| PACK_AND_STORE(tempBlurred, 1); | |||
| PACK_AND_STORE(tempBlurred, 2); | |||
| PACK_AND_STORE(tempBlurred, 3); | |||
| PACK_AND_STORE(tempBlurred, 4); | |||
| PACK_AND_STORE(tempBlurred, 5); | |||
| PACK_AND_STORE(tempBlurred, 6); | |||
| PACK_AND_STORE(tempBlurred, 7); | |||
| #undef PACK_AND_STORE | |||
| } | |||
| @@ -130,8 +130,8 @@ typedef struct PPContext{ | |||
| DECLARE_ALIGNED(8, uint64_t, packedYScale); | |||
| /** Temporal noise reducing buffers */ | |||
| uint8_t *tempBlured[3]; | |||
| int32_t *tempBluredPast[3]; | |||
| uint8_t *tempBlurred[3]; | |||
| int32_t *tempBlurredPast[3]; | |||
| /** Temporary buffers for handling the last row(s) */ | |||
| uint8_t *tempDst; | |||
| @@ -2182,12 +2182,12 @@ static inline void RENAME(transpose2)(uint8_t *dst, int dstStride, uint8_t *src) | |||
| #ifndef HAVE_ALTIVEC | |||
| static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride, | |||
| uint8_t *tempBlured, uint32_t *tempBluredPast, int *maxNoise) | |||
| uint8_t *tempBlurred, uint32_t *tempBlurredPast, int *maxNoise) | |||
| { | |||
| // to save a register (FIXME do this outside of the loops) | |||
| tempBluredPast[127]= maxNoise[0]; | |||
| tempBluredPast[128]= maxNoise[1]; | |||
| tempBluredPast[129]= maxNoise[2]; | |||
| tempBlurredPast[127]= maxNoise[0]; | |||
| tempBlurredPast[128]= maxNoise[1]; | |||
| tempBlurredPast[129]= maxNoise[2]; | |||
| #define FAST_L2_DIFF | |||
| //#define L1_DIFF //u should change the thresholds too if u try that one | |||
| @@ -2476,7 +2476,7 @@ L2_DIFF_CORE((%0, %%REGc) , (%1, %%REGc)) | |||
| "4: \n\t" | |||
| :: "r" (src), "r" (tempBlured), "r"((long)stride), "m" (tempBluredPast) | |||
| :: "r" (src), "r" (tempBlurred), "r"((long)stride), "m" (tempBlurredPast) | |||
| : "%"REG_a, "%"REG_d, "%"REG_c, "memory" | |||
| ); | |||
| #else //defined (HAVE_MMX2) || defined (HAVE_3DNOW) | |||
| @@ -2489,7 +2489,7 @@ L2_DIFF_CORE((%0, %%REGc) , (%1, %%REGc)) | |||
| for(y=0; y<8; y++){ | |||
| int x; | |||
| for(x=0; x<8; x++){ | |||
| int ref= tempBlured[ x + y*stride ]; | |||
| int ref= tempBlurred[ x + y*stride ]; | |||
| int cur= src[ x + y*stride ]; | |||
| int d1=ref - cur; | |||
| // if(x==0 || x==7) d1+= d1>>1; | |||
| @@ -2502,12 +2502,12 @@ L2_DIFF_CORE((%0, %%REGc) , (%1, %%REGc)) | |||
| i=d; | |||
| d= ( | |||
| 4*d | |||
| +(*(tempBluredPast-256)) | |||
| +(*(tempBluredPast-1))+ (*(tempBluredPast+1)) | |||
| +(*(tempBluredPast+256)) | |||
| +(*(tempBlurredPast-256)) | |||
| +(*(tempBlurredPast-1))+ (*(tempBlurredPast+1)) | |||
| +(*(tempBlurredPast+256)) | |||
| +4)>>3; | |||
| *tempBluredPast=i; | |||
| // ((*tempBluredPast)*3 + d + 2)>>2; | |||
| *tempBlurredPast=i; | |||
| // ((*tempBlurredPast)*3 + d + 2)>>2; | |||
| /* | |||
| Switch between | |||
| @@ -2521,9 +2521,9 @@ Switch between | |||
| for(y=0; y<8; y++){ | |||
| int x; | |||
| for(x=0; x<8; x++){ | |||
| int ref= tempBlured[ x + y*stride ]; | |||
| int ref= tempBlurred[ x + y*stride ]; | |||
| int cur= src[ x + y*stride ]; | |||
| tempBlured[ x + y*stride ]= | |||
| tempBlurred[ x + y*stride ]= | |||
| src[ x + y*stride ]= | |||
| (ref + cur + 1)>>1; | |||
| } | |||
| @@ -2532,7 +2532,7 @@ Switch between | |||
| for(y=0; y<8; y++){ | |||
| int x; | |||
| for(x=0; x<8; x++){ | |||
| tempBlured[ x + y*stride ]= src[ x + y*stride ]; | |||
| tempBlurred[ x + y*stride ]= src[ x + y*stride ]; | |||
| } | |||
| } | |||
| } | |||
| @@ -2541,9 +2541,9 @@ Switch between | |||
| for(y=0; y<8; y++){ | |||
| int x; | |||
| for(x=0; x<8; x++){ | |||
| int ref= tempBlured[ x + y*stride ]; | |||
| int ref= tempBlurred[ x + y*stride ]; | |||
| int cur= src[ x + y*stride ]; | |||
| tempBlured[ x + y*stride ]= | |||
| tempBlurred[ x + y*stride ]= | |||
| src[ x + y*stride ]= | |||
| (ref*7 + cur + 4)>>3; | |||
| } | |||
| @@ -2552,9 +2552,9 @@ Switch between | |||
| for(y=0; y<8; y++){ | |||
| int x; | |||
| for(x=0; x<8; x++){ | |||
| int ref= tempBlured[ x + y*stride ]; | |||
| int ref= tempBlurred[ x + y*stride ]; | |||
| int cur= src[ x + y*stride ]; | |||
| tempBlured[ x + y*stride ]= | |||
| tempBlurred[ x + y*stride ]= | |||
| src[ x + y*stride ]= | |||
| (ref*3 + cur + 2)>>2; | |||
| } | |||
| @@ -3650,8 +3650,8 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ | |||
| if(mode & TEMP_NOISE_FILTER) | |||
| { | |||
| RENAME(tempNoiseReducer)(dstBlock-8, stride, | |||
| c.tempBlured[isColor] + y*dstStride + x, | |||
| c.tempBluredPast[isColor] + (y>>3)*256 + (x>>3), | |||
| c.tempBlurred[isColor] + y*dstStride + x, | |||
| c.tempBlurredPast[isColor] + (y>>3)*256 + (x>>3), | |||
| c.ppMode.maxTmpNoise); | |||
| } | |||
| } | |||
| @@ -3672,8 +3672,8 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ | |||
| if((mode & TEMP_NOISE_FILTER)){ | |||
| RENAME(tempNoiseReducer)(dstBlock-8, dstStride, | |||
| c.tempBlured[isColor] + y*dstStride + x, | |||
| c.tempBluredPast[isColor] + (y>>3)*256 + (x>>3), | |||
| c.tempBlurred[isColor] + y*dstStride + x, | |||
| c.tempBlurredPast[isColor] + (y>>3)*256 + (x>>3), | |||
| c.ppMode.maxTmpNoise); | |||
| } | |||