summaryrefslogtreecommitdiffstats
path: root/libswscale
diff options
context:
space:
mode:
authorramiro <ramiro@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-08-19 01:33:17 +0000
committerramiro <ramiro@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-08-19 01:33:17 +0000
commit67636ed48b0496139c907b406e156acafb234967 (patch)
treeee95f18c11a1b77b03229d8dbea06f7c5b2e1320 /libswscale
parent0f89c75f31d8fa3f700b22bc65d4c1a8f9095059 (diff)
downloadmpv-67636ed48b0496139c907b406e156acafb234967.tar.bz2
mpv-67636ed48b0496139c907b406e156acafb234967.tar.xz
Introduce and use sws_allocVec().
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29536 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libswscale')
-rw-r--r--libswscale/swscale.c36
-rw-r--r--libswscale/swscale.h5
2 files changed, 23 insertions, 18 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 5b80843780..6dfbed7e17 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -3240,20 +3240,28 @@ SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
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)
{
const int length= (int)(variance*quality + 0.5) | 1;
int i;
- double *coeff= av_malloc(length*sizeof(double));
double middle= (length-1)*0.5;
- SwsVector *vec= av_malloc(sizeof(SwsVector));
-
- vec->coeff= coeff;
- vec->length= length;
+ SwsVector *vec= sws_allocVec(length);
for (i=0; i<length; i++) {
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);
@@ -3264,14 +3272,10 @@ SwsVector *sws_getGaussianVec(double variance, double quality)
SwsVector *sws_getConstVec(double c, int length)
{
int i;
- double *coeff= av_malloc(length*sizeof(double));
- SwsVector *vec= av_malloc(sizeof(SwsVector));
-
- vec->coeff= coeff;
- vec->length= length;
+ SwsVector *vec= sws_allocVec(length);
for (i=0; i<length; i++)
- coeff[i]= c;
+ vec->coeff[i]= c;
return vec;
}
@@ -3397,14 +3401,10 @@ void sws_convVec(SwsVector *a, SwsVector *b)
SwsVector *sws_cloneVec(SwsVector *a)
{
- double *coeff= av_malloc(a->length*sizeof(double));
int i;
- SwsVector *vec= av_malloc(sizeof(SwsVector));
-
- vec->coeff= coeff;
- vec->length= a->length;
+ SwsVector *vec= sws_allocVec(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;
}
diff --git a/libswscale/swscale.h b/libswscale/swscale.h
index a151095858..43ff7e20f5 100644
--- a/libswscale/swscale.h
+++ b/libswscale/swscale.h
@@ -182,6 +182,11 @@ int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table,
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
* quality=3 is high quality, lower is lower quality.
*/