[gegl] buffer: refactor boxfilter workfuns to have same prototype
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: refactor boxfilter workfuns to have same prototype
- Date: Sun, 2 Jun 2019 12:59:24 +0000 (UTC)
commit 8efc7a719d3bf68464be5b5d38618af555edea1a
Author: Øyvind Kolås <pippin gimp org>
Date: Fri May 17 21:15:14 2019 +0200
buffer: refactor boxfilter workfuns to have same prototype
Reformulated this way - we could distribute the work over multiple cores.
gegl/buffer/gegl-algorithms-boxfilter.inc | 1 +
gegl/buffer/gegl-algorithms.c | 51 +++++++++++++++++--------------
gegl/buffer/gegl-algorithms.h | 5 +++
3 files changed, 34 insertions(+), 23 deletions(-)
---
diff --git a/gegl/buffer/gegl-algorithms-boxfilter.inc b/gegl/buffer/gegl-algorithms-boxfilter.inc
index 778bee844..1c6f46c7a 100644
--- a/gegl/buffer/gegl-algorithms-boxfilter.inc
+++ b/gegl/buffer/gegl-algorithms-boxfilter.inc
@@ -5,6 +5,7 @@ BOXFILTER_FUNCNAME (guchar *dest_buf,
const GeglRectangle *src_rect,
const gint s_rowstride,
const gdouble scale,
+ const Babl *format,
const gint bpp,
const gint d_rowstride)
{
diff --git a/gegl/buffer/gegl-algorithms.c b/gegl/buffer/gegl-algorithms.c
index 6a9be8070..90fb41f14 100644
--- a/gegl/buffer/gegl-algorithms.c
+++ b/gegl/buffer/gegl-algorithms.c
@@ -150,6 +150,7 @@ gegl_boxfilter_u8_nl (guchar *dest_buf,
const GeglRectangle *src_rect,
const gint s_rowstride,
const gdouble scale,
+ const Babl *format,
const gint bpp,
const gint d_rowstride)
{
@@ -312,6 +313,7 @@ gegl_boxfilter_u8_nl_alpha (guchar *dest_buf,
const GeglRectangle *src_rect,
const gint s_rowstride,
const gdouble scale,
+ const Babl *format,
const gint bpp,
const gint d_rowstride)
{
@@ -1013,6 +1015,7 @@ gegl_resample_boxfilter_generic (guchar *dest_buf,
gint s_rowstride,
gdouble scale,
const Babl *format,
+ gint bpp,
gint d_rowstride)
{
const Babl *tmp_format = babl_format_with_space ("RGBA float", format);
@@ -1044,7 +1047,7 @@ gegl_resample_boxfilter_generic (guchar *dest_buf,
src_rect->width, src_rect->height);
gegl_resample_boxfilter_float (out_tmp, in_tmp, dst_rect, src_rect,
- in_tmp_rowstride, scale, tmp_bpp, out_tmp_rowstride);
+ in_tmp_rowstride, scale, tmp_format, tmp_bpp, out_tmp_rowstride);
babl_process_rows (to_fish,
out_tmp, out_tmp_rowstride,
@@ -1067,51 +1070,53 @@ void gegl_resample_boxfilter (guchar *dest_buf,
const Babl *format,
gint d_rowstride)
{
+ void (*func) (guchar *dest_buf,
+ const guchar *source_buf,
+ const GeglRectangle *dst_rect,
+ const GeglRectangle *src_rect,
+ gint s_rowstride,
+ gdouble scale,
+ const Babl *format,
+ gint bpp,
+ gint d_rowstride) = gegl_resample_boxfilter_generic;
+
+
const Babl *model = babl_format_get_model (format);
const Babl *comp_type = babl_format_get_type (format, 0);
const gint bpp = babl_format_get_bytes_per_pixel (format);
BablModelFlag model_flags = babl_get_model_flags (model);
+ if (func);
+
if ((model_flags & BABL_MODEL_FLAG_LINEAR)||
(model_flags & BABL_MODEL_FLAG_CMYK))
{
if (comp_type == gegl_babl_float())
- gegl_resample_boxfilter_float (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
+ func = gegl_resample_boxfilter_float;
else if (comp_type == gegl_babl_u8())
- gegl_resample_boxfilter_u8 (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
+ func = gegl_resample_boxfilter_u8;
else if (comp_type == gegl_babl_u16())
- gegl_resample_boxfilter_u16 (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
+ func = gegl_resample_boxfilter_u16;
else if (comp_type == gegl_babl_u32())
- gegl_resample_boxfilter_u32 (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
+ func = gegl_resample_boxfilter_u32;
else if (comp_type == gegl_babl_double())
- gegl_resample_boxfilter_double (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
- else
- gegl_resample_boxfilter_generic (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, format, d_rowstride);
+ func = gegl_resample_boxfilter_double;
}
else
{
if (comp_type == gegl_babl_u8())
{
if (babl_format_has_alpha (format))
- gegl_boxfilter_u8_nl_alpha (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
+ func = gegl_boxfilter_u8_nl_alpha;
else
- gegl_boxfilter_u8_nl (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, bpp, d_rowstride);
- }
- else
- {
- gegl_resample_boxfilter_generic (dest_buf, source_buf, dst_rect, src_rect,
- s_rowstride, scale, format, d_rowstride);
+ func = gegl_boxfilter_u8_nl;
}
}
+
+ func (dest_buf, source_buf, dst_rect, src_rect,
+ s_rowstride, scale, format, bpp, d_rowstride);
+
}
static void
diff --git a/gegl/buffer/gegl-algorithms.h b/gegl/buffer/gegl-algorithms.h
index 695130972..a057f9c36 100644
--- a/gegl/buffer/gegl-algorithms.h
+++ b/gegl/buffer/gegl-algorithms.h
@@ -108,6 +108,7 @@ void gegl_resample_boxfilter_double (guchar *dest_buf,
const GeglRectangle *src_rect,
gint s_rowstride,
gdouble scale,
+ const Babl *format,
gint bpp,
gint d_rowstride);
@@ -117,6 +118,7 @@ void gegl_resample_boxfilter_float (guchar *dest_buf,
const GeglRectangle *src_rect,
gint s_rowstride,
gdouble scale,
+ const Babl *format,
gint bpp,
gint d_rowstride);
@@ -126,6 +128,7 @@ void gegl_resample_boxfilter_u32 (guchar *dest_buf,
const GeglRectangle *src_rect,
gint s_rowstride,
gdouble scale,
+ const Babl *format,
gint bpp,
gint d_rowstride);
@@ -135,6 +138,7 @@ void gegl_resample_boxfilter_u16 (guchar *dest_buf,
const GeglRectangle *src_rect,
gint s_rowstride,
gdouble scale,
+ const Babl *format,
gint bpp,
gint d_rowstride);
@@ -144,6 +148,7 @@ void gegl_resample_boxfilter_u8 (guchar *dest_buf,
const GeglRectangle *src_rect,
gint s_rowstride,
gdouble scale,
+ const Babl *format,
gint bpp,
gint d_rowstride);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]