[gegl] gegl/buffer: use babl_process_rows



commit 52e28c101f0d908b7170352ef72541e3b3c1f007
Author: Øyvind Kolås <pippin gimp org>
Date:   Sun Jan 7 01:44:07 2018 +0100

    gegl/buffer: use babl_process_rows
    
    Addition of API that permits removing some call overhead for partial tiles
    when doing babl conversions.

 gegl/buffer/gegl-buffer-access.c |   54 ++++++++++++++++++++-----------------
 1 files changed, 29 insertions(+), 25 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 7a9b494..527912f 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -463,23 +463,21 @@ gegl_buffer_iterate_write (GeglBuffer          *buffer,
 
           if (fish)
             {
-              for (row = offsety;
-                   row < tile_height &&
-                     y < height &&
-                     buffer_y + y < abyss_y_total;
-                   row++, y++)
-                {
-
-                  if (buffer_y + y >= buffer_abyss_y &&
-                      buffer_y + y < abyss_y_total)
-                    {
-                      babl_process (fish, bp + lskip * bpx_size, tp + lskip * px_size,
-                                    pixels);
-                    }
-
-                  tp += tile_stride;
-                  bp += buf_stride;
-                }
+              int skip, rows = MIN(height - bufy, tile_height - offsety);
+              rows = MIN(abyss_y_total - bufy, rows);
+              skip = (buffer_abyss_y - bufy);
+              if (skip < 0) skip = 0;
+              rows-=skip;
+              if (rows==1)
+                babl_process (fish,bp + lskip * bpx_size, tp + lskip * px_size, pixels);
+              else
+                babl_process_rows (fish,
+                                   bp + lskip * bpx_size + skip * buf_stride,
+                                   buf_stride,
+                                   tp + lskip * px_size + skip * tile_stride,
+                                   tile_stride,
+                                   pixels,
+                                   rows);
             }
           else
             {
@@ -918,15 +916,21 @@ gegl_buffer_iterate_read_simple (GeglBuffer          *buffer,
 
           if (fish)
             {
-              for (row = offsety;
-                   row < tile_height && y < height;
-                   row++, y++)
-                {
-                  babl_process (fish, tp, bp, pixels);
+              int rows = MIN(height - bufy, tile_height - offsety);
+              if (rows == 1)
+              babl_process (fish,
+                            tp,
+                            bp,
+                            pixels);
+              else
+              babl_process_rows (fish,
+                                 tp,
+                                 tile_stride,
+                                 bp,
+                                 buf_stride,
+                                 pixels,
+                                 rows);
 
-                  tp += tile_stride;
-                  bp += buf_stride;
-                }
             }
           else
             {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]