moving getFilter stuff back (vf_scale.c -> swscale.c)
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 25 Apr 2003 11:26:34 +0000 (11:26 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 25 Apr 2003 11:26:34 +0000 (11:26 +0000)
Originally committed as revision 9986 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/swscale.c
postproc/swscale.h

index 2a4c274..c5319f9 100644 (file)
@@ -2110,11 +2110,72 @@ int sws_scale(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcS
        return c->swScale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride);
 }
 
+SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, 
+                               float lumaSharpen, float chromaSharpen,
+                               float chromaHShift, float chromaVShift,
+                               int verbose)
+{
+       SwsFilter *filter= malloc(sizeof(SwsFilter));
+
+       if(lumaGBlur!=0.0){
+               filter->lumH= sws_getGaussianVec(lumaGBlur, 3.0);
+               filter->lumV= sws_getGaussianVec(lumaGBlur, 3.0);
+       }else{
+               filter->lumH= sws_getIdentityVec();
+               filter->lumV= sws_getIdentityVec();
+       }
+
+       if(chromaGBlur!=0.0){
+               filter->chrH= sws_getGaussianVec(chromaGBlur, 3.0);
+               filter->chrV= sws_getGaussianVec(chromaGBlur, 3.0);
+       }else{
+               filter->chrH= sws_getIdentityVec();
+               filter->chrV= sws_getIdentityVec();
+       }
+
+       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);
+               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);
+               sws_freeVec(id);
+       }
+
+       if(chromaHShift != 0.0)
+               sws_shiftVec(filter->chrH, (int)(chromaHShift+0.5));
+
+       if(chromaVShift != 0.0)
+               sws_shiftVec(filter->chrV, (int)(chromaVShift+0.5));
+
+       sws_normalizeVec(filter->chrH, 1.0);
+       sws_normalizeVec(filter->chrV, 1.0);
+       sws_normalizeVec(filter->lumH, 1.0);
+       sws_normalizeVec(filter->lumV, 1.0);
+
+       if(verbose) sws_printVec(filter->chrH);
+       if(verbose) sws_printVec(filter->lumH);
+
+        return filter;
+}
+
 /**
  * returns a normalized gaussian curve used to filter stuff
  * quality=3 is high quality, lowwer is lowwer quality
  */
-
 SwsVector *sws_getGaussianVec(double variance, double quality){
        const int length= (int)(variance*quality + 0.5) | 1;
        int i;
@@ -2335,6 +2396,17 @@ void sws_freeVec(SwsVector *a){
        free(a);
 }
 
+void sws_freeFilter(SwsFilter *filter){
+       if(!filter) return;
+
+       if(filter->lumH) sws_freeVec(filter->lumH);
+       if(filter->lumV) sws_freeVec(filter->lumV);
+       if(filter->chrH) sws_freeVec(filter->chrH);
+       if(filter->chrV) sws_freeVec(filter->chrV);
+       free(filter);
+}
+
+
 void sws_freeContext(SwsContext *c){
        int i;
        if(!c) return;
index ea3fe5d..6587816 100644 (file)
@@ -116,6 +116,12 @@ SwsVector *sws_cloneVec(SwsVector *a);
 void sws_printVec(SwsVector *a);
 void sws_freeVec(SwsVector *a);
 
+SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, 
+                               float lumaSarpen, float chromaSharpen,
+                               float chromaHShift, float chromaVShift,
+                               int verbose);
+void sws_freeFilter(SwsFilter *filter);
+
 #ifdef __cplusplus
 }
 #endif