Mercurial > mplayer.hg
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 |