[gegl] gegl/buffer: use a tempbuf for pix conversions when setting cols
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] gegl/buffer: use a tempbuf for pix conversions when setting cols
- Date: Wed, 27 Dec 2017 13:37:37 +0000 (UTC)
commit 267f9aa40272ec444ecbcc37af029769294b0f88
Author: Øyvind Kolås <pippin gimp org>
Date: Wed Dec 27 14:08:30 2017 +0100
gegl/buffer: use a tempbuf for pix conversions when setting cols
gegl/buffer/gegl-buffer-access.c | 29 +++++++++++++++++++++++++----
1 files changed, 25 insertions(+), 4 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 21b488c..d3b4ef3 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -1607,10 +1607,31 @@ gegl_buffer_set (GeglBuffer *buffer,
if (format == NULL)
format = buffer->soft_format;
- if (rect && (rect->width == 1 && rect->height == 1))
- _gegl_buffer_set_pixel (buffer, rect->x, rect->y, format, src,
- GEGL_BUFFER_SET_FLAG_LOCK|GEGL_BUFFER_SET_FLAG_NOTIFY);
- else
+ if (rect && (rect->width == 1))
+ {
+ if (rect->height == 1)
+ {
+ _gegl_buffer_set_pixel (buffer, rect->x, rect->y,
+ format, src,
+ GEGL_BUFFER_SET_FLAG_LOCK|
+ GEGL_BUFFER_SET_FLAG_NOTIFY);
+ return;
+ }
+ else
+ {
+ int bpp = babl_format_get_bytes_per_pixel (buffer->soft_format);
+ if (buffer->soft_format != format)
+ {
+ uint8_t tmp[rect->width * rect->height * bpp];
+ babl_process (babl_fish (format, buffer->soft_format),
+ src, &tmp[0], rect->height);
+ _gegl_buffer_set_with_flags (buffer, rect, level, buffer->soft_format, tmp, rowstride,
+ GEGL_BUFFER_SET_FLAG_LOCK|
+ GEGL_BUFFER_SET_FLAG_NOTIFY);
+ }
+ }
+ }
+
_gegl_buffer_set_with_flags (buffer, rect, level, format, src, rowstride,
GEGL_BUFFER_SET_FLAG_LOCK|
GEGL_BUFFER_SET_FLAG_NOTIFY);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]