comparison postproc/swscale.c @ 9985:3d8b145a5470

moving getFilter stuff back (vf_scale.c -> swscale.c)
author michael
date Fri, 25 Apr 2003 11:26:34 +0000
parents 3914afe5c0a7
children 988c2ffc5bc1
comparison
equal deleted inserted replaced
9984:84b64dece730 9985:3d8b145a5470
2108 sws_orderYUV(c->origDstFormat, dst, dstStride, dstParam, dstStrideParam); 2108 sws_orderYUV(c->origDstFormat, dst, dstStride, dstParam, dstStrideParam);
2109 //printf("sws: slice %d %d\n", srcSliceY, srcSliceH); 2109 //printf("sws: slice %d %d\n", srcSliceY, srcSliceH);
2110 return c->swScale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride); 2110 return c->swScale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride);
2111 } 2111 }
2112 2112
2113 SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
2114 float lumaSharpen, float chromaSharpen,
2115 float chromaHShift, float chromaVShift,
2116 int verbose)
2117 {
2118 SwsFilter *filter= malloc(sizeof(SwsFilter));
2119
2120 if(lumaGBlur!=0.0){
2121 filter->lumH= sws_getGaussianVec(lumaGBlur, 3.0);
2122 filter->lumV= sws_getGaussianVec(lumaGBlur, 3.0);
2123 }else{
2124 filter->lumH= sws_getIdentityVec();
2125 filter->lumV= sws_getIdentityVec();
2126 }
2127
2128 if(chromaGBlur!=0.0){
2129 filter->chrH= sws_getGaussianVec(chromaGBlur, 3.0);
2130 filter->chrV= sws_getGaussianVec(chromaGBlur, 3.0);
2131 }else{
2132 filter->chrH= sws_getIdentityVec();
2133 filter->chrV= sws_getIdentityVec();
2134 }
2135
2136 if(chromaSharpen!=0.0){
2137 SwsVector *g= sws_getConstVec(-1.0, 3);
2138 SwsVector *id= sws_getConstVec(10.0/chromaSharpen, 1);
2139 g->coeff[1]=2.0;
2140 sws_addVec(id, g);
2141 sws_convVec(filter->chrH, id);
2142 sws_convVec(filter->chrV, id);
2143 sws_freeVec(g);
2144 sws_freeVec(id);
2145 }
2146
2147 if(lumaSharpen!=0.0){
2148 SwsVector *g= sws_getConstVec(-1.0, 3);
2149 SwsVector *id= sws_getConstVec(10.0/lumaSharpen, 1);
2150 g->coeff[1]=2.0;
2151 sws_addVec(id, g);
2152 sws_convVec(filter->lumH, id);
2153 sws_convVec(filter->lumV, id);
2154 sws_freeVec(g);
2155 sws_freeVec(id);
2156 }
2157
2158 if(chromaHShift != 0.0)
2159 sws_shiftVec(filter->chrH, (int)(chromaHShift+0.5));
2160
2161 if(chromaVShift != 0.0)
2162 sws_shiftVec(filter->chrV, (int)(chromaVShift+0.5));
2163
2164 sws_normalizeVec(filter->chrH, 1.0);
2165 sws_normalizeVec(filter->chrV, 1.0);
2166 sws_normalizeVec(filter->lumH, 1.0);
2167 sws_normalizeVec(filter->lumV, 1.0);
2168
2169 if(verbose) sws_printVec(filter->chrH);
2170 if(verbose) sws_printVec(filter->lumH);
2171
2172 return filter;
2173 }
2174
2113 /** 2175 /**
2114 * returns a normalized gaussian curve used to filter stuff 2176 * returns a normalized gaussian curve used to filter stuff
2115 * quality=3 is high quality, lowwer is lowwer quality 2177 * quality=3 is high quality, lowwer is lowwer quality
2116 */ 2178 */
2117
2118 SwsVector *sws_getGaussianVec(double variance, double quality){ 2179 SwsVector *sws_getGaussianVec(double variance, double quality){
2119 const int length= (int)(variance*quality + 0.5) | 1; 2180 const int length= (int)(variance*quality + 0.5) | 1;
2120 int i; 2181 int i;
2121 double *coeff= memalign(sizeof(double), length*sizeof(double)); 2182 double *coeff= memalign(sizeof(double), length*sizeof(double));
2122 double middle= (length-1)*0.5; 2183 double middle= (length-1)*0.5;
2332 if(a->coeff) free(a->coeff); 2393 if(a->coeff) free(a->coeff);
2333 a->coeff=NULL; 2394 a->coeff=NULL;
2334 a->length=0; 2395 a->length=0;
2335 free(a); 2396 free(a);
2336 } 2397 }
2398
2399 void sws_freeFilter(SwsFilter *filter){
2400 if(!filter) return;
2401
2402 if(filter->lumH) sws_freeVec(filter->lumH);
2403 if(filter->lumV) sws_freeVec(filter->lumV);
2404 if(filter->chrH) sws_freeVec(filter->chrH);
2405 if(filter->chrV) sws_freeVec(filter->chrV);
2406 free(filter);
2407 }
2408
2337 2409
2338 void sws_freeContext(SwsContext *c){ 2410 void sws_freeContext(SwsContext *c){
2339 int i; 2411 int i;
2340 if(!c) return; 2412 if(!c) return;
2341 2413