changeset 9985:3d8b145a5470

moving getFilter stuff back (vf_scale.c -> swscale.c)
author michael
date Fri, 25 Apr 2003 11:26:34 +0000
parents 84b64dece730
children 4bdd248d372e
files libmpcodecs/vf_scale.c postproc/swscale.c postproc/swscale.h
diffstat 3 files changed, 90 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vf_scale.c	Fri Apr 25 10:20:15 2003 +0000
+++ b/libmpcodecs/vf_scale.c	Fri Apr 25 11:26:34 2003 +0000
@@ -40,6 +40,9 @@
 
 //===========================================================================//
 
+void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam);
+struct SwsContext *sws_getContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat);
+
 static unsigned int outfmt_list[]={
 // RGB:
     IMGFMT_BGR32,
@@ -384,7 +387,7 @@
 int sws_flags=2;
 
 //global srcFilter
-SwsFilter src_filter= {NULL, NULL, NULL, NULL};
+static SwsFilter *src_filter= NULL;
 
 float sws_lum_gblur= 0.0;
 float sws_chr_gblur= 0.0;
@@ -442,63 +445,13 @@
 	}
 	else if(verbose>1) *flags= SWS_PRINT_INFO;
 
-	if(src_filter.lumH) sws_freeVec(src_filter.lumH);
-	if(src_filter.lumV) sws_freeVec(src_filter.lumV);
-	if(src_filter.chrH) sws_freeVec(src_filter.chrH);
-	if(src_filter.chrV) sws_freeVec(src_filter.chrV);
-
-	if(sws_lum_gblur!=0.0){
-		src_filter.lumH= sws_getGaussianVec(sws_lum_gblur, 3.0);
-		src_filter.lumV= sws_getGaussianVec(sws_lum_gblur, 3.0);
-	}else{
-		src_filter.lumH= sws_getIdentityVec();
-		src_filter.lumV= sws_getIdentityVec();
-	}
-
-	if(sws_chr_gblur!=0.0){
-		src_filter.chrH= sws_getGaussianVec(sws_chr_gblur, 3.0);
-		src_filter.chrV= sws_getGaussianVec(sws_chr_gblur, 3.0);
-	}else{
-		src_filter.chrH= sws_getIdentityVec();
-		src_filter.chrV= sws_getIdentityVec();
-	}
+	if(src_filter) sws_freeFilter(src_filter);
 
-	if(sws_chr_sharpen!=0.0){
-		SwsVector *g= sws_getConstVec(-1.0, 3);
-		SwsVector *id= sws_getConstVec(10.0/sws_chr_sharpen, 1);
-		g->coeff[1]=2.0;
-		sws_addVec(id, g);
-		sws_convVec(src_filter.chrH, id);
-		sws_convVec(src_filter.chrV, id);
-		sws_freeVec(g);
-		sws_freeVec(id);
-	}
-
-	if(sws_lum_sharpen!=0.0){
-		SwsVector *g= sws_getConstVec(-1.0, 3);
-		SwsVector *id= sws_getConstVec(10.0/sws_lum_sharpen, 1);
-		g->coeff[1]=2.0;
-		sws_addVec(id, g);
-		sws_convVec(src_filter.lumH, id);
-		sws_convVec(src_filter.lumV, id);
-		sws_freeVec(g);
-		sws_freeVec(id);
-	}
-
-	if(sws_chr_hshift)
-		sws_shiftVec(src_filter.chrH, sws_chr_hshift);
-
-	if(sws_chr_vshift)
-		sws_shiftVec(src_filter.chrV, sws_chr_vshift);
-
-	sws_normalizeVec(src_filter.chrH, 1.0);
-	sws_normalizeVec(src_filter.chrV, 1.0);
-	sws_normalizeVec(src_filter.lumH, 1.0);
-	sws_normalizeVec(src_filter.lumV, 1.0);
-
-	if(verbose > 1) sws_printVec(src_filter.chrH);
-	if(verbose > 1) sws_printVec(src_filter.lumH);
-
+	src_filter= sws_getDefaultFilter(
+		sws_lum_gblur, sws_chr_gblur,
+		sws_lum_sharpen, sws_chr_sharpen,
+		sws_chr_vshift, sws_chr_hshift, verbose>1);
+        
 	switch(sws_flags)
 	{
 		case 0: *flags|= SWS_FAST_BILINEAR; break;
@@ -515,7 +468,7 @@
 		default:*flags|= SWS_BILINEAR; break;
 	}
 	
-	*srcFilterParam= &src_filter;
+	*srcFilterParam= src_filter;
 	*dstFilterParam= NULL;
 }
 
--- a/postproc/swscale.c	Fri Apr 25 10:20:15 2003 +0000
+++ b/postproc/swscale.c	Fri Apr 25 11:26:34 2003 +0000
@@ -2110,11 +2110,72 @@
 	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 @@
 	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;
--- a/postproc/swscale.h	Fri Apr 25 10:20:15 2003 +0000
+++ b/postproc/swscale.h	Fri Apr 25 11:26:34 2003 +0000
@@ -116,6 +116,12 @@
 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