comparison libmpcodecs/vf_noise.c @ 6964:f35d05c32dd1

film/average noise cleanup remove unused vars/functions avoid statics so multiple noise filters can be used
author michael
date Sun, 11 Aug 2002 09:52:23 +0000
parents 76fee64d884a
children f8ea0af8edb0
comparison
equal deleted inserted replaced
6963:76fee64d884a 6964:f35d05c32dd1
41 41
42 //===========================================================================// 42 //===========================================================================//
43 43
44 static inline void lineNoise_C(uint8_t *dst, uint8_t *src, int8_t *noise, int len, int shift); 44 static inline void lineNoise_C(uint8_t *dst, uint8_t *src, int8_t *noise, int len, int shift);
45 static inline void lineNoiseAvg_C(uint8_t *dst, uint8_t *src, int len, int8_t **shift); 45 static inline void lineNoiseAvg_C(uint8_t *dst, uint8_t *src, int len, int8_t **shift);
46 static inline void lineNoiseAvg_CX(uint8_t *dst, uint8_t *src, int len, int8_t **shift, int add);
47 46
48 static void (*lineNoise)(uint8_t *dst, uint8_t *src, int8_t *noise, int len, int shift)= lineNoise_C; 47 static void (*lineNoise)(uint8_t *dst, uint8_t *src, int8_t *noise, int len, int shift)= lineNoise_C;
49 static void (*lineNoiseAvg)(uint8_t *dst, uint8_t *src, int len, int8_t **shift)= lineNoiseAvg_C; 48 static void (*lineNoiseAvg)(uint8_t *dst, uint8_t *src, int len, int8_t **shift)= lineNoiseAvg_C;
50 49
51 typedef struct FilterParam{ 50 typedef struct FilterParam{
54 int temporal; 53 int temporal;
55 int quality; 54 int quality;
56 int averaged; 55 int averaged;
57 int shiftptr; 56 int shiftptr;
58 int8_t *noise; 57 int8_t *noise;
58 int8_t *prev_shift[MAX_RES][3];
59 }FilterParam; 59 }FilterParam;
60 60
61 struct vf_priv_s { 61 struct vf_priv_s {
62 FilterParam lumaParam; 62 FilterParam lumaParam;
63 FilterParam chromaParam; 63 FilterParam chromaParam;
64 mp_image_t *dmpi; 64 mp_image_t *dmpi;
65 unsigned int outfmt; 65 unsigned int outfmt;
66 }; 66 };
67 67
68 static int nonTempRandShift[MAX_RES]= {-1}; 68 static int nonTempRandShift[MAX_RES]= {-1};
69 static int8_t *prev_shift[MAX_RES][3];
70 69
71 static int8_t *initNoise(FilterParam *fp){ 70 static int8_t *initNoise(FilterParam *fp){
72 int strength= fp->strength; 71 int strength= fp->strength;
73 int uniform= fp->uniform; 72 int uniform= fp->uniform;
74 int averaged= fp->averaged; 73 int averaged= fp->averaged;
105 } 104 }
106 105
107 106
108 for (i = 0; i < MAX_RES; i++) 107 for (i = 0; i < MAX_RES; i++)
109 for (j = 0; j < 3; j++) 108 for (j = 0; j < 3; j++)
110 prev_shift[i][j] = noise + (rand()&(MAX_SHIFT-1)); 109 fp->prev_shift[i][j] = noise + (rand()&(MAX_SHIFT-1));
111 110
112 if(nonTempRandShift[0]==-1){ 111 if(nonTempRandShift[0]==-1){
113 for(i=0; i<MAX_RES; i++){ 112 for(i=0; i<MAX_RES; i++){
114 nonTempRandShift[i]= rand()&(MAX_SHIFT-1); 113 nonTempRandShift[i]= rand()&(MAX_SHIFT-1);
115 } 114 }
192 } 191 }
193 192
194 /***************************************************************************/ 193 /***************************************************************************/
195 194
196 static inline void lineNoiseAvg_C(uint8_t *dst, uint8_t *src, int len, int8_t **shift){ 195 static inline void lineNoiseAvg_C(uint8_t *dst, uint8_t *src, int len, int8_t **shift){
197 int i, j, n, v; 196 int i, j, n;
198 197
199 for(i=0; i<len; i++) 198 for(i=0; i<len; i++)
200 { 199 {
201 for(j=0,n=0;j<3;j++) 200 for(j=0,n=0;j<3;j++)
202 n+=shift[j][i]; 201 n+=shift[j][i];
233 if(fp->temporal) shift= rand()&(MAX_SHIFT -1); 232 if(fp->temporal) shift= rand()&(MAX_SHIFT -1);
234 else shift= nonTempRandShift[y]; 233 else shift= nonTempRandShift[y];
235 234
236 if(fp->quality==0) shift&= ~7; 235 if(fp->quality==0) shift&= ~7;
237 if (fp->averaged) { 236 if (fp->averaged) {
238 lineNoiseAvg(dst, src, width, prev_shift[y]); 237 lineNoiseAvg(dst, src, width, fp->prev_shift[y]);
239 prev_shift[y][fp->shiftptr] = noise + shift; 238 fp->prev_shift[y][fp->shiftptr] = noise + shift;
240 } else { 239 } else {
241 lineNoise(dst, src, noise, width, shift); 240 lineNoise(dst, src, noise, width, shift);
242 } 241 }
243 dst+= dstStride; 242 dst+= dstStride;
244 src+= srcStride; 243 src+= srcStride;