summaryrefslogtreecommitdiff
path: root/shared-module/_pixelbuf
diff options
context:
space:
mode:
authorRoy Hooper <rhooper@toybox.ca>2020-08-10 18:05:13 -0400
committerRoy Hooper <rhooper@toybox.ca>2020-08-10 18:42:05 -0400
commit1b7709f3250289ac746090306425734a5e4294a3 (patch)
tree3c47fabff0f9719fe35e0bf8adef1efb81c41fff /shared-module/_pixelbuf
parentef1782f85e9020a01658d28708b44444915f74b2 (diff)
use the stack
Diffstat (limited to 'shared-module/_pixelbuf')
-rw-r--r--shared-module/_pixelbuf/PixelBuf.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/shared-module/_pixelbuf/PixelBuf.c b/shared-module/_pixelbuf/PixelBuf.c
index 0dc2a5ab8..f3e679631 100644
--- a/shared-module/_pixelbuf/PixelBuf.c
+++ b/shared-module/_pixelbuf/PixelBuf.c
@@ -230,22 +230,21 @@ void _pixelbuf_set_pixel(pixelbuf_pixelbuf_obj_t* self, size_t index, mp_obj_t v
_pixelbuf_set_pixel_color(self, index, r, g, b, w);
}
-void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values, bool flattened) {
+void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values,
+ mp_obj_tuple_t *flatten_to)
+{
pixelbuf_pixelbuf_obj_t* self = native_pixelbuf(self_in);
mp_obj_iter_buf_t iter_buf;
mp_obj_t iterable = mp_getiter(values, &iter_buf);
mp_obj_t item;
size_t i = 0;
- mp_obj_tuple_t *tuple;
- uint bpp = self->bytes_per_pixel;
- if (flattened) {
- tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(bpp, NULL));
- }
+ bool flattened = flatten_to != mp_const_none;
+ if (flattened) flatten_to->len = self->bytes_per_pixel;
while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
if (flattened) {
- tuple->items[i % bpp] = item;
- if (++i % bpp == 0) {
- _pixelbuf_set_pixel(self, start, tuple);
+ flatten_to->items[i % self->bytes_per_pixel] = item;
+ if (++i % self->bytes_per_pixel == 0) {
+ _pixelbuf_set_pixel(self, start, flatten_to);
start+=step;
}
} else {