summaryrefslogtreecommitdiff
path: root/shared-module/_pixelbuf
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2021-02-24 16:27:09 -0600
committerJeff Epler <jepler@gmail.com>2021-02-24 16:27:09 -0600
commitdac4ac5d2a294efea12ad8cea6254a94fe4ec765 (patch)
treecacba389305dd9c6d70da17d0d2c60f39669445b /shared-module/_pixelbuf
parentb7f5c277ad61076848dfc2065bc254092f4dd4ce (diff)
_pixelbuf: Respond to review comments
* Comment on the reason for scaling by 256 * Divide by 256 instead of shifting * fix a cast; eliminate an unneeded roundf() to get a few bytes code back
Diffstat (limited to 'shared-module/_pixelbuf')
-rw-r--r--shared-module/_pixelbuf/PixelBuf.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/shared-module/_pixelbuf/PixelBuf.c b/shared-module/_pixelbuf/PixelBuf.c
index f11b03cbb..4cbf6dc21 100644
--- a/shared-module/_pixelbuf/PixelBuf.c
+++ b/shared-module/_pixelbuf/PixelBuf.c
@@ -112,7 +112,8 @@ void common_hal__pixelbuf_pixelbuf_set_brightness(mp_obj_t self_in, mp_float_t b
// Skip out if the brightness is already set. The default of self->brightness is 1.0. So, this
// also prevents the pre_brightness_buffer allocation when brightness is set to 1.0 again.
self->brightness = brightness;
- uint16_t new_scaled_brightness = (int)roundf(brightness * 256);
+ // Use 256 steps of brightness so that we can do integer math below.
+ uint16_t new_scaled_brightness = (uint16_t)(brightness * 256);
if (new_scaled_brightness == self->scaled_brightness) {
return;
}
@@ -130,7 +131,7 @@ void common_hal__pixelbuf_pixelbuf_set_brightness(mp_obj_t self_in, mp_float_t b
if (self->byteorder.is_dotstar && i % 4 == 0) {
continue;
}
- self->post_brightness_buffer[i] = (self->pre_brightness_buffer[i] * self->scaled_brightness) >> 8;
+ self->post_brightness_buffer[i] = (self->pre_brightness_buffer[i] * self->scaled_brightness) / 256;
}
if (self->auto_write) {
@@ -224,13 +225,13 @@ void _pixelbuf_set_pixel_color(pixelbuf_pixelbuf_obj_t* self, size_t index, uint
if (scaled_buffer) {
if (self->bytes_per_pixel == 4) {
if (!self->byteorder.is_dotstar) {
- w = (w * self->scaled_brightness) >> 8;
+ w = (w * self->scaled_brightness) / 256;
}
scaled_buffer[rgbw_order->w] = w;
}
- scaled_buffer[rgbw_order->r] = (r * self->scaled_brightness) >> 8;
- scaled_buffer[rgbw_order->g] = (g * self->scaled_brightness) >> 8;
- scaled_buffer[rgbw_order->b] = (b * self->scaled_brightness) >> 8;
+ scaled_buffer[rgbw_order->r] = (r * self->scaled_brightness) / 256;
+ scaled_buffer[rgbw_order->g] = (g * self->scaled_brightness) / 256;
+ scaled_buffer[rgbw_order->b] = (b * self->scaled_brightness) / 256;
}
}
@@ -331,23 +332,3 @@ void common_hal__pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t fill_color) {
common_hal__pixelbuf_pixelbuf_show(self_in);
}
}
-
-mp_int_t common_hal__pixelbuf_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
- pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in);
- bufinfo->buf = self->pre_brightness_buffer;
- if (self->pre_brightness_buffer) {
- // If we have a brightness setting, we must treat the buffer as
- // read-only (because we have no way to "fire" the
- // brightness-converting code as a side effect of mutation via the
- // buffer)
- if ((flags & MP_BUFFER_WRITE)) {
- return 1;
- }
- bufinfo->buf = self->pre_brightness_buffer;
- } else {
- bufinfo->buf = self->post_brightness_buffer;
- }
- bufinfo->typecode = 'B';
- bufinfo->len = self->bytes_per_pixel * common_hal__pixelbuf_pixelbuf_get_len(self_in);
- return 0;
-}