Commit 1aff375d authored by Ramiro Polla's avatar Ramiro Polla

Introduce and use sws_allocVec().

Originally committed as revision 29536 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
parent 20484b90
...@@ -3240,20 +3240,28 @@ SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, ...@@ -3240,20 +3240,28 @@ SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
return filter; return filter;
} }
SwsVector *sws_allocVec(int length)
{
SwsVector *vec = av_malloc(sizeof(SwsVector));
if (!vec)
return NULL;
vec->length = length;
vec->coeff = av_malloc(sizeof(double) * length);
if (!vec->coeff)
av_freep(&vec);
return vec;
}
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;
double *coeff= av_malloc(length*sizeof(double));
double middle= (length-1)*0.5; double middle= (length-1)*0.5;
SwsVector *vec= av_malloc(sizeof(SwsVector)); SwsVector *vec= sws_allocVec(length);
vec->coeff= coeff;
vec->length= length;
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
double dist= i-middle; double dist= i-middle;
coeff[i]= exp(-dist*dist/(2*variance*variance)) / sqrt(2*variance*PI); vec->coeff[i]= exp(-dist*dist/(2*variance*variance)) / sqrt(2*variance*PI);
} }
sws_normalizeVec(vec, 1.0); sws_normalizeVec(vec, 1.0);
...@@ -3264,14 +3272,10 @@ SwsVector *sws_getGaussianVec(double variance, double quality) ...@@ -3264,14 +3272,10 @@ SwsVector *sws_getGaussianVec(double variance, double quality)
SwsVector *sws_getConstVec(double c, int length) SwsVector *sws_getConstVec(double c, int length)
{ {
int i; int i;
double *coeff= av_malloc(length*sizeof(double)); SwsVector *vec= sws_allocVec(length);
SwsVector *vec= av_malloc(sizeof(SwsVector));
vec->coeff= coeff;
vec->length= length;
for (i=0; i<length; i++) for (i=0; i<length; i++)
coeff[i]= c; vec->coeff[i]= c;
return vec; return vec;
} }
...@@ -3397,14 +3401,10 @@ void sws_convVec(SwsVector *a, SwsVector *b) ...@@ -3397,14 +3401,10 @@ void sws_convVec(SwsVector *a, SwsVector *b)
SwsVector *sws_cloneVec(SwsVector *a) SwsVector *sws_cloneVec(SwsVector *a)
{ {
double *coeff= av_malloc(a->length*sizeof(double));
int i; int i;
SwsVector *vec= av_malloc(sizeof(SwsVector)); SwsVector *vec= sws_allocVec(a->length);
vec->coeff= coeff;
vec->length= a->length;
for (i=0; i<a->length; i++) coeff[i]= a->coeff[i]; for (i=0; i<a->length; i++) vec->coeff[i]= a->coeff[i];
return vec; return vec;
} }
......
...@@ -181,6 +181,11 @@ int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, ...@@ -181,6 +181,11 @@ int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table,
int *srcRange, int **table, int *dstRange, int *srcRange, int **table, int *dstRange,
int *brightness, int *contrast, int *saturation); int *brightness, int *contrast, int *saturation);
/**
* Allocates and returns an uninitialized vector with length coefficients.
*/
SwsVector *sws_allocVec(int length);
/** /**
* Returns a normalized Gaussian curve used to filter stuff * Returns a normalized Gaussian curve used to filter stuff
* quality=3 is high quality, lower is lower quality. * quality=3 is high quality, lower is lower quality.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment