Browse Source

moving getFilter stuff back (vf_scale.c -> swscale.c)

Originally committed as revision 9986 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
tags/v0.5
Michael Niedermayer 22 years ago
parent
commit
e21206a820
2 changed files with 79 additions and 1 deletions
  1. +73
    -1
      postproc/swscale.c
  2. +6
    -0
      postproc/swscale.h

+ 73
- 1
postproc/swscale.c View File

@@ -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;


+ 6
- 0
postproc/swscale.h View File

@@ -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…
Cancel
Save