more fixme fixes of filter
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 20 Apr 2011 07:35:18 +0000 (07:35 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 20 Apr 2011 07:35:18 +0000 (07:35 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@58744 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_filter.c

index fb99261..37a7ac7 100644 (file)
@@ -6,7 +6,7 @@
 #include "evas_common.h"
 #include "evas_private.h"
 
-#include "assert.h"
+#include <assert.h>
 
 #ifdef BUILD_NEON
 # define BUILD_NEON0 1
@@ -70,8 +70,6 @@ static Eina_Bool greyscale_filter(Evas_Filter_Info*, RGBA_Image*, RGBA_Image*);
 static Eina_Bool brightness_filter(Evas_Filter_Info*, RGBA_Image*, RGBA_Image*);
 static Eina_Bool contrast_filter(Evas_Filter_Info *, RGBA_Image*, RGBA_Image*);
 
-static Eina_Bool negation_filter_neon(Evas_Filter_Info *, RGBA_Image *src, RGBA_Image *);
-
 struct filterinfo filterinfo[] =
 {
    /* None */
@@ -110,11 +108,13 @@ static struct fieldinfo greyfields[] =
    { "all",  TYPE_FLOAT, offsetof(Evas_Filter_Info_GreyScale, b) },
    { NULL, 0, 0 },
 };
+
 static struct fieldinfo brightnessfields[] =
 {
    { "adjust",  TYPE_FLOAT, offsetof(Evas_Filter_Info_Brightness, adjust) },
    { NULL, 0, 0 },
 };
+
 static struct fieldinfo contrastfields[] =
 {
    { "adjust",  TYPE_FLOAT, offsetof(Evas_Filter_Info_Contrast, adjust) },
@@ -139,8 +139,9 @@ evas_object_filter_mode_set(Evas_Object *o, Evas_Filter_Mode mode)
 {
    Evas_Filter_Info *info;
    
-   // FIXME: do real magic check
-   if (!o) return EINA_FALSE; /* nash: do Magic check */
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EINA_FALSE;
+   MAGIC_CHECK_END();
    
    if (mode != EVAS_FILTER_MODE_OBJECT && mode != EVAS_FILTER_MODE_BELOW)
       return EINA_FALSE;
@@ -161,8 +162,10 @@ evas_object_filter_mode_set(Evas_Object *o, Evas_Filter_Mode mode)
 EAPI Evas_Filter_Mode
 evas_object_filter_mode_get(Evas_Object *o)
 {
-   // FIXME: do real magic check
-   if (!o) return EVAS_FILTER_MODE_OBJECT; /* nash magic */
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EVAS_FILTER_MODE_OBJECT;
+   MAGIC_CHECK_END();
+   
    if (!o->filter) filter_alloc(o);
    if (!o->filter) return EVAS_FILTER_MODE_OBJECT;
    return o->filter->mode;
@@ -174,8 +177,9 @@ evas_object_filter_set(Evas_Object *o, Evas_Filter filter)
    Evas_Filter_Info *info;
    struct filterinfo *finfo;
 
-   // FIXME: do real magic check
-   if (!o) return EINA_FALSE; /* nash: magic */
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EINA_FALSE;
+   MAGIC_CHECK_END();
 
    /* force filter to be signed: else gcc complains, but enums may always be
     * signed */
@@ -213,8 +217,11 @@ evas_object_filter_set(Evas_Object *o, Evas_Filter filter)
 EAPI Evas_Filter
 evas_object_filter_get(Evas_Object *o)
 {
-   // FIXME: do real magic check
-   if (!o || !o->filter) return EVAS_FILTER_NONE;
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EVAS_FILTER_NONE;
+   MAGIC_CHECK_END();
+   
+   if (!o->filter) return EVAS_FILTER_NONE;
    return o->filter->filter;
 }
 
@@ -226,14 +233,15 @@ evas_object_filter_param_set_int(Evas_Object *o, const char *param, int val)
    Eina_Bool found;
    int i;
 
-   // FIXME: do real magic check
-   if (!o || !o->filter || !o->filter->data) return EINA_FALSE;
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EINA_FALSE;
+   MAGIC_CHECK_END();
+
+   if ((!o->filter) || (!o->filter->data)) return EINA_FALSE;
    
    fields = filterfields[o->filter->filter];
    data = o->filter->data;
-
-   found = EINA_FALSE;
-   
+   found = EINA_FALSE;   
    for (i = 0; fields[i].field; i++)
      {
         if (!strcmp(fields[i].field, param))
@@ -256,8 +264,11 @@ evas_object_filter_param_get_int(Evas_Object *o, const char *param)
    int val;
    int i;
 
-   // FIXME: do real magic check
-   if (!o || !o->filter || !o->filter->data) return -1;
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EINA_FALSE;
+   MAGIC_CHECK_END();
+
+   if ((!o->filter) || (!o->filter->data)) return -1;
    
    fields = blurfields;
    data = o->filter->data;
@@ -271,7 +282,6 @@ evas_object_filter_param_get_int(Evas_Object *o, const char *param)
              return val;
           }
      }
-
    return -1;
 }
 
@@ -300,8 +310,11 @@ evas_object_filter_param_set_float(Evas_Object *o, const char *param,
    int i;
    Eina_Bool rv;
 
-   // FIXME: do real magic check
-   if (!o || !o->filter || !o->filter->data) return EINA_FALSE;
+   MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+   return EINA_FALSE;
+   MAGIC_CHECK_END();
+
+   if ((!o->filter) || (!o->filter->data)) return EINA_FALSE;
 
    rv = EINA_FALSE;
    fields = blurfields;
@@ -386,7 +399,8 @@ evas_filter_key_get(const Evas_Filter_Info *info, uint32_t *lenp)
 
 
 static int
-blur_size_get(Evas_Filter_Info *info, int inw, int inh, int *outw, int *outh, Eina_Bool inv)
+blur_size_get(Evas_Filter_Info *info, int inw, int inh, int *outw, int *outh, 
+              Eina_Bool inv)
 {
    Evas_Filter_Info_Blur *blur = info->data;
 
@@ -421,7 +435,7 @@ gaussian_key_get(const Evas_Filter_Info *info, uint32_t *lenp)
    struct Evas_Filter_Info_Blur *blur;
    uint8_t *key;
 
-   if (!info || !info->data) return NULL;
+   if ((!info) || (!info->data)) return NULL;
    blur = info->data;
 
    if (lenp) *lenp = 4;
@@ -450,6 +464,7 @@ filter_alloc(Evas_Object *o)
    Evas_Filter_Info *info;
    if (!o) return NULL;
 
+   // FIXME: handle alloc failure
    info = calloc(1,sizeof(struct Evas_Filter_Info));
    info->dirty = 1;
    info->filter = EVAS_FILTER_NONE;
@@ -482,18 +497,18 @@ filter_alloc(Evas_Object *o)
 
 typedef int (*FilterH)(int, uint32_t *, int, uint32_t *);
 typedef int (*FilterV)(int, uint32_t *, int, int, uint32_t *);
-int gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out);
-int gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out);
-int gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out);
-int gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out);
-int gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out);
-int gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out);
-const uint32_t *gaussian_row_get(int row, int *npoints, uint32_t *weight);
-const uint64_t *gaussian_row_get64(int row, int *npoints, uint64_t *weight);
-const double *gaussian_row_getd(int row, int *npoints, double *weight);
-
-// FIXME: why not static?
-Eina_Bool
+
+static int gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out);
+static int gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out);
+static int gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out);
+static int gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out);
+static int gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out);
+static int gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out);
+static const uint32_t *gaussian_row_get(int row, int *npoints, uint32_t *weight);
+static const uint64_t *gaussian_row_get64(int row, int *npoints, uint64_t *weight);
+static const double *gaussian_row_getd(int row, int *npoints, double *weight);
+
+static Eina_Bool
 gaussian_filter(Evas_Filter_Info *filter, RGBA_Image *src, RGBA_Image *dst)
 {
    int i;
@@ -544,8 +559,7 @@ gaussian_filter(Evas_Filter_Info *filter, RGBA_Image *src, RGBA_Image *dst)
 }
 
 /* Blur only horizontally */
-// FIXME: why not static?
-int
+static int
 gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out)
 {
    const uint32_t *points;
@@ -577,8 +591,7 @@ gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out)
 }
 
 /* Blur only horizontally */
-// FIXME: why not static?
-int
+static int
 gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out)
 {
    const double *points;
@@ -611,8 +624,7 @@ gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out)
 
 
 /* Blur only horizontally */
-// FIXME: why not static?
-int
+static int
 gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out)
 {
    const uint64_t *points;
@@ -641,8 +653,7 @@ gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out)
    return 0;
 }
 
-// FIXME: why not static?
-int
+static int
 gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out)
 {
    const uint32_t *points;
@@ -676,8 +687,7 @@ gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out)
    return 0;
 }
 
-// FIXME: why not static?
-int
+static int
 gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out)
 {
    const uint64_t *points;
@@ -711,8 +721,7 @@ gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out)
    return 0;
 }
 
-// FIXME: why not static?
-int
+static int
 gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out)
 {
    const double *points;
@@ -746,8 +755,7 @@ gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out)
    return 0;
 }
 
-// FIXME: why not static?
-const uint32_t *
+static const uint32_t *
 gaussian_row_get(int row, int *npoints, uint32_t *weight)
 {
    static uint32_t *points = NULL;
@@ -786,8 +794,7 @@ gaussian_row_get(int row, int *npoints, uint32_t *weight)
    return points;
 }
 
-// FIXME: why not static?
-const uint64_t *
+static const uint64_t *
 gaussian_row_get64(int row, int *npoints, uint64_t *weight)
 {
    static uint64_t *points = NULL;
@@ -827,8 +834,7 @@ gaussian_row_get64(int row, int *npoints, uint64_t *weight)
    return points;
 }
 
-// FIXME: why not static?
-const double *
+static const double *
 gaussian_row_getd(int row, int *npoints, double *weight)
 {
    static double *points = NULL;
@@ -869,58 +875,10 @@ gaussian_row_getd(int row, int *npoints, double *weight)
    return points;
 }
 
-static Eina_Bool
-negation_filter(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
-{
-   uint32_t *in, *out;
-   int i,j;
-   int w,h;
-   uint32_t mask,a;
-
-   // FIXME: dont call if img has alpha
-   if (BUILD_NEON0 && evas_common_cpu_has_feature(CPU_FEATURE_NEON))
-      return negation_filter_neon(info, src, dst);
-
-   in = src->image.data;
-   out = dst->image.data;
-   w = src->cache_entry.w;
-   h = src->cache_entry.h;
-
-   if (src->cache_entry.flags.alpha)
-     {
-        for (i = 0; i < h; i++)
-          {
-             for (j = 0; j < w; j++)
-               {
-                  a = (*in >> 24) & 0xff;
-                  mask = a | (a << 8) | (a << 16);
-                  // FIXME: use *out = ARGB_JOIN(a, r, g, b);
-                  *out = (mask - (*in & 0xffffff)) | (a << 24);
-                  out++;
-                  in++;
-               }
-          }
-     }
-   else
-     {
-        for (i = 0; i < h; i++)
-          {
-             for (j = 0; j < w; j++)
-               {
-                  // FIXME: use *out = ARGB_JOIN(a, r, g, b);
-                  *out = ~(*in & ~0xff000000) | ((*in) & 0xff000000);
-                  out++;
-                  in++;
-               }
-          }
-     }
-   return EINA_TRUE;
-}
-
+#if BUILD_NEON0
 static Eina_Bool
 negation_filter_neon(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
 {
-#if BUILD_NEON0
    uint32_t tmp;
 
    if (src->cache_entry.flags.alpha)
@@ -971,9 +929,59 @@ negation_filter_neon(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
          );
 #undef AP
      }
+   return EINA_TRUE;
+}
+#endif
+
+static Eina_Bool
+negation_filter(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
+{
+   uint32_t *in, *out;
+   int i,j;
+   int w,h;
+   uint32_t mask,a;
+
+#if BUILD_NEON0
+   if (evas_common_cpu_has_feature(CPU_FEATURE_NEON) &&
+      (!src->cache_entry.flags.alpha))
+      return negation_filter_neon(info, src, dst);
 #endif
+   
+   in = src->image.data;
+   out = dst->image.data;
+   w = src->cache_entry.w;
+   h = src->cache_entry.h;
+
+   if (src->cache_entry.flags.alpha)
+     {
+        for (i = 0; i < h; i++)
+          {
+             for (j = 0; j < w; j++)
+               {
+                  a = (*in >> 24) & 0xff;
+                  mask = a | (a << 8) | (a << 16);
+                  // FIXME: use *out = ARGB_JOIN(a, r, g, b);
+                  *out = (mask - (*in & 0xffffff)) | (a << 24);
+                  out++;
+                  in++;
+               }
+          }
+     }
+   else
+     {
+        for (i = 0; i < h; i++)
+          {
+             for (j = 0; j < w; j++)
+               {
+                  // FIXME: use *out = ARGB_JOIN(a, r, g, b);
+                  *out = ~(*in & ~0xff000000) | ((*in) & 0xff000000);
+                  out++;
+                  in++;
+               }
+          }
+     }
    return EINA_TRUE;
-   info = NULL; src = NULL; dst = NULL;
+   info = NULL;
 }
 
 static Eina_Bool