Mercurial > mplayer.hg
changeset 6990:857bae3001e8
semi regular noise pattern patch by (Jindrich Makovicka <makovick at kmlinux dot fjfi dot cvut dot cz>)
author | michael |
---|---|
date | Tue, 13 Aug 2002 17:53:32 +0000 |
parents | b2ba67f6203e |
children | bd242a56b563 |
files | DOCS/tech/vop.txt libmpcodecs/vf_noise.c |
diffstat | 2 files changed, 34 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/tech/vop.txt Tue Aug 13 16:04:16 2002 +0000 +++ b/DOCS/tech/vop.txt Tue Aug 13 17:53:32 2002 +0000 @@ -161,5 +161,6 @@ t temporal noise (noise pattern changes between frames) a averaged temporal (smoother, but a lot slower) h high quality (slightly better looking, slightly slower) + p mix random noise with a (semi)regular pattern MPI: DR (if possible) or TEMP, accepts stride
--- a/libmpcodecs/vf_noise.c Tue Aug 13 16:04:16 2002 +0000 +++ b/libmpcodecs/vf_noise.c Tue Aug 13 17:53:32 2002 +0000 @@ -53,6 +53,7 @@ int temporal; int quality; int averaged; + int pattern; int shiftptr; int8_t *noise; int8_t *prev_shift[MAX_RES][3]; @@ -67,40 +68,60 @@ static int nonTempRandShift[MAX_RES]= {-1}; +static int patt[4] = { + -1,0,1,0 +}; + +#define RAND_N(range) ((int) ((double)range*rand()/(RAND_MAX+1.0))) static int8_t *initNoise(FilterParam *fp){ int strength= fp->strength; int uniform= fp->uniform; int averaged= fp->averaged; + int pattern= fp->pattern; int8_t *noise= memalign(16, MAX_NOISE*sizeof(int8_t)); int i, j; srand(123457); - for(i=0; i<MAX_NOISE; i++) + for(i=0,j=0; i<MAX_NOISE; i++,j++) { - if(uniform) { - if (averaged) { - noise[i]= (((rand()/11)%strength) - strength/2)/3; - } else { - noise[i]= ((rand()/11)%strength) - strength/2; - } - } else { + if(uniform) { + if (averaged) { + if (pattern) { + noise[i]= (RAND_N(strength) - strength/2)/6 + +patt[j%4]*strength*0.25/3; + } else { + noise[i]= (RAND_N(strength) - strength/2)/3; + } + } else { + if (pattern) { + noise[i]= (RAND_N(strength) - strength/2)/2 + + patt[j%4]*strength*0.25; + } else { + noise[i]= RAND_N(strength) - strength/2; + } + } + } else { double x1, x2, w, y1; do { x1 = 2.0 * rand()/(float)RAND_MAX - 1.0; x2 = 2.0 * rand()/(float)RAND_MAX - 1.0; w = x1 * x1 + x2 * x2; } while ( w >= 1.0 ); - + w = sqrt( (-2.0 * log( w ) ) / w ); y1= x1 * w; - y1*= strength / sqrt(3.0); + if (pattern) { + y1 /= 2; + y1 += patt[j%4]*strength*0.35; + } if (y1<-128) y1=-128; else if(y1> 127) y1= 127; if (averaged) y1 /= 3.0; noise[i]= (int)y1; } + if (RAND_N(6) == 0) j--; } @@ -382,6 +403,8 @@ if(pos && pos<max) fp->temporal=1; pos= strchr(args, 'h'); if(pos && pos<max) fp->quality=1; + pos= strchr(args, 'p'); + if(pos && pos<max) fp->pattern=1; pos= strchr(args, 'a'); if(pos && pos<max) { fp->temporal=1;