diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2003-04-25 11:26:34 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2003-04-25 11:26:34 +0000 |
commit | e21206a820339d4dbb8e98f5940b57c6d0cb2d6a (patch) | |
tree | b060dd37d01dcfe845ba8b7fddae7d76b4e2200b | |
parent | d90cf87b907f4f31b65429affe34666de8f84b59 (diff) | |
download | ffmpeg-e21206a820339d4dbb8e98f5940b57c6d0cb2d6a.tar.gz |
moving getFilter stuff back (vf_scale.c -> swscale.c)
Originally committed as revision 9986 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
-rw-r--r-- | postproc/swscale.c | 74 | ||||
-rw-r--r-- | postproc/swscale.h | 6 |
2 files changed, 79 insertions, 1 deletions
diff --git a/postproc/swscale.c b/postproc/swscale.c index 2a4c274128..c5319f9bd1 100644 --- a/postproc/swscale.c +++ b/postproc/swscale.c @@ -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; diff --git a/postproc/swscale.h b/postproc/swscale.h index ea3fe5d6c1..6587816b44 100644 --- a/postproc/swscale.h +++ b/postproc/swscale.h @@ -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 |