change sws sharpen filter a little
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 4 Feb 2006 00:08:54 +0000 (00:08 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 4 Feb 2006 00:08:54 +0000 (00:08 +0000)
Originally committed as revision 17531 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/swscale.c

index a836aac..fbdedae 100644 (file)
@@ -2346,24 +2346,20 @@ SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
        }
 
        if(chromaSharpen!=0.0){
-               SwsVector *g= sws_getConstVec(-1.0, 3);
-               SwsVector *id= sws_getConstVec(10.0/chromaSharpen, 1);
-               g->coeff[1]=2.0;
-               sws_addVec(id, g);
-               sws_convVec(filter->chrH, id);
-               sws_convVec(filter->chrV, id);
-               sws_freeVec(g);
+               SwsVector *id= sws_getIdentityVec();
+                sws_scaleVec(filter->chrH, -chromaSharpen);
+                sws_scaleVec(filter->chrV, -chromaSharpen);
+               sws_addVec(filter->chrH, id);
+               sws_addVec(filter->chrV, id);
                sws_freeVec(id);
        }
 
        if(lumaSharpen!=0.0){
-               SwsVector *g= sws_getConstVec(-1.0, 3);
-               SwsVector *id= sws_getConstVec(10.0/lumaSharpen, 1);
-               g->coeff[1]=2.0;
-               sws_addVec(id, g);
-               sws_convVec(filter->lumH, id);
-               sws_convVec(filter->lumV, id);
-               sws_freeVec(g);
+               SwsVector *id= sws_getIdentityVec();
+                sws_scaleVec(filter->lumH, -lumaSharpen);
+                sws_scaleVec(filter->lumV, -lumaSharpen);
+               sws_addVec(filter->lumH, id);
+               sws_addVec(filter->lumV, id);
                sws_freeVec(id);
        }
 
@@ -2425,28 +2421,17 @@ SwsVector *sws_getConstVec(double c, int length){
 
 
 SwsVector *sws_getIdentityVec(void){
-       double *coeff= memalign(sizeof(double), sizeof(double));
-       SwsVector *vec= malloc(sizeof(SwsVector));
-       coeff[0]= 1.0;
-
-       vec->coeff= coeff;
-       vec->length= 1;
-
-       return vec;
+        return sws_getConstVec(1.0, 1);
 }
 
-void sws_normalizeVec(SwsVector *a, double height){
+double sws_dcVec(SwsVector *a){
        int i;
-       double sum=0;
-       double inv;
+        double sum=0;
 
        for(i=0; i<a->length; i++)
                sum+= a->coeff[i];
 
-       inv= height/sum;
-
-       for(i=0; i<a->length; i++)
-               a->coeff[i]*= inv;
+        return sum;
 }
 
 void sws_scaleVec(SwsVector *a, double scalar){
@@ -2456,6 +2441,10 @@ void sws_scaleVec(SwsVector *a, double scalar){
                a->coeff[i]*= scalar;
 }
 
+void sws_normalizeVec(SwsVector *a, double height){
+        sws_scaleVec(a, height/sws_dcVec(a));
+}
+
 static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b){
        int length= a->length + b->length - 1;
        double *coeff= memalign(sizeof(double), length*sizeof(double));