OSDN Git Service

Introduce and use sws_allocVec().
authorRamiro Polla <ramiro.polla@gmail.com>
Wed, 19 Aug 2009 01:33:17 +0000 (01:33 +0000)
committerRamiro Polla <ramiro.polla@gmail.com>
Wed, 19 Aug 2009 01:33:17 +0000 (01:33 +0000)
Originally committed as revision 29536 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale.c
libswscale/swscale.h

index 5b80843..6dfbed7 100644 (file)
@@ -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;
 }
index a151095..43ff7e2 100644 (file)
@@ -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.
  */