mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-20 16:25:04 +02:00
moving getFilter stuff back (vf_scale.c -> swscale.c)
Originally committed as revision 9986 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
This commit is contained in:
parent
d90cf87b90
commit
e21206a820
@ -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);
|
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
|
* returns a normalized gaussian curve used to filter stuff
|
||||||
* quality=3 is high quality, lowwer is lowwer quality
|
* quality=3 is high quality, lowwer is lowwer quality
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SwsVector *sws_getGaussianVec(double variance, double quality){
|
SwsVector *sws_getGaussianVec(double variance, double quality){
|
||||||
const int length= (int)(variance*quality + 0.5) | 1;
|
const int length= (int)(variance*quality + 0.5) | 1;
|
||||||
int i;
|
int i;
|
||||||
@ -2335,6 +2396,17 @@ void sws_freeVec(SwsVector *a){
|
|||||||
free(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){
|
void sws_freeContext(SwsContext *c){
|
||||||
int i;
|
int i;
|
||||||
if(!c) return;
|
if(!c) return;
|
||||||
|
@ -116,6 +116,12 @@ SwsVector *sws_cloneVec(SwsVector *a);
|
|||||||
void sws_printVec(SwsVector *a);
|
void sws_printVec(SwsVector *a);
|
||||||
void sws_freeVec(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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user