[gegl] buffer: cache downscale 2x2 dispatch functions in zoom handler
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: cache downscale 2x2 dispatch functions in zoom handler
- Date: Thu, 18 Jan 2018 22:30:43 +0000 (UTC)
commit 08debafb0a7a919adc45f47551c1821e344150a0
Author: Øyvind Kolås <pippin gimp org>
Date: Thu Jan 18 19:22:21 2018 +0100
buffer: cache downscale 2x2 dispatch functions in zoom handler
gegl/buffer/gegl-tile-handler-zoom.c | 10 +++++++---
gegl/buffer/gegl-tile-handler-zoom.h | 16 +++++++++-------
gegl/gegl-algorithms.c | 11 ++---------
gegl/gegl-algorithms.h | 10 ++++++++++
4 files changed, 28 insertions(+), 19 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-handler-zoom.c b/gegl/buffer/gegl-tile-handler-zoom.c
index 40fa7ba..329a93b 100644
--- a/gegl/buffer/gegl-tile-handler-zoom.c
+++ b/gegl/buffer/gegl-tile-handler-zoom.c
@@ -60,7 +60,8 @@ static inline void set_blank (GeglTile *dst_tile,
}
}
-static inline void set_half (GeglTile * dst_tile,
+static inline void set_half (GeglTileHandlerZoom *zoom,
+ GeglTile * dst_tile,
GeglTile * src_tile,
gint width,
gint height,
@@ -75,7 +76,10 @@ static inline void set_half (GeglTile * dst_tile,
if (i) dst_data += bpp * width / 2;
if (j) dst_data += bpp * width * height / 2;
- gegl_downscale_2x2 (format, width, height, src_data, width * bpp, dst_data, width * bpp);
+ if (!zoom->downscale_2x2)
+ zoom->downscale_2x2 = gegl_downscale_2x2_get_fun (format);
+
+ zoom->downscale_2x2 (format, width, height, src_data, width * bpp, dst_data, width * bpp);
}
static GeglTile *
@@ -139,7 +143,7 @@ get_tile (GeglTileSource *gegl_tile_source,
{
if (source_tile[i][j])
{
- set_half (tile, source_tile[i][j], tile_width, tile_height, format, i, j);
+ set_half (zoom, tile, source_tile[i][j], tile_width, tile_height, format, i, j);
gegl_tile_unref (source_tile[i][j]);
}
else
diff --git a/gegl/buffer/gegl-tile-handler-zoom.h b/gegl/buffer/gegl-tile-handler-zoom.h
index 8624ca6..13906c4 100644
--- a/gegl/buffer/gegl-tile-handler-zoom.h
+++ b/gegl/buffer/gegl-tile-handler-zoom.h
@@ -39,18 +39,20 @@ G_BEGIN_DECLS
typedef struct _GeglTileHandlerZoom GeglTileHandlerZoom;
typedef struct _GeglTileHandlerZoomClass GeglTileHandlerZoomClass;
+typedef void (*GeglDownscale2x2Fun) (const Babl *format,
+ gint src_width,
+ gint src_height,
+ guchar *src_data,
+ gint src_rowstride,
+ guchar *dst_data,
+ gint dst_rowstride);
+
struct _GeglTileHandlerZoom
{
GeglTileHandler parent_instance;
GeglTileBackend *backend;
GeglTileStorage *tile_storage;
- void (*downscale_2x2) (gint bpp,
- gint src_width,
- gint dst_dst_width,
- guchar *src_data,
- gint src_rowstride,
- guchar *dst_data,
- gint dst_rowstride);
+ GeglDownscale2x2Fun downscale_2x2;
};
struct _GeglTileHandlerZoomClass
diff --git a/gegl/gegl-algorithms.c b/gegl/gegl-algorithms.c
index 2337616..0b0599a 100644
--- a/gegl/gegl-algorithms.c
+++ b/gegl/gegl-algorithms.c
@@ -41,15 +41,8 @@ gegl_downscale_2x2_generic (const Babl *format,
guchar *dst_data,
gint dst_rowstride);
-typedef void (*GeglDownscale2x2Fun) (const Babl *format,
- gint src_width,
- gint src_height,
- guchar *src_data,
- gint src_rowstride,
- guchar *dst_data,
- gint dst_rowstride);
-
-static GeglDownscale2x2Fun gegl_downscale_2x2_get_fun (const Babl *format)
+
+GeglDownscale2x2Fun gegl_downscale_2x2_get_fun (const Babl *format)
{
const Babl *comp_type = babl_format_get_type (format, 0);
const Babl *model = babl_format_get_model (format);
@@ -90,7 +83,7 @@ void gegl_downscale_2x2 (const Babl *format,
{
gegl_downscale_2x2_get_fun (format)(format, src_width, src_height,
src_data, src_rowstride,
- src_data, dst_rowstride);;
+ dst_data, dst_rowstride);;
}
#include <stdio.h>
diff --git a/gegl/gegl-algorithms.h b/gegl/gegl-algorithms.h
index f1887a7..0988313 100644
--- a/gegl/gegl-algorithms.h
+++ b/gegl/gegl-algorithms.h
@@ -31,6 +31,7 @@ void gegl_downscale_2x2 (const Babl *format,
guchar *dst_data,
gint dst_rowstride);
+
void gegl_downscale_2x2_double (const Babl *format,
gint src_width,
gint src_height,
@@ -47,6 +48,14 @@ void gegl_downscale_2x2_float (const Babl *format,
guchar *dst_data,
gint dst_rowstride);
+typedef void (*GeglDownscale2x2Fun) (const Babl *format,
+ gint src_width,
+ gint src_height,
+ guchar *src_data,
+ gint src_rowstride,
+ guchar *dst_data,
+ gint dst_rowstride);
+
void gegl_downscale_2x2_u32 (const Babl *format,
gint src_width,
gint src_height,
@@ -203,6 +212,7 @@ void gegl_resample_nearest (guchar *dst,
gint bpp,
gint dst_stride);
+GeglDownscale2x2Fun gegl_downscale_2x2_get_fun (const Babl *format);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]