extmod/modframebuf: Fix FrameBuffer get-buffer implementation.

This wasn't correctly accounting for the bits-per-pixel and was returning a
bufinfo struct with the incorrect length.  Instead, just forward directly
to the underlying buffer object.

Fixes issue #12563.

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
Jim Mussared 2023-10-04 22:33:14 +11:00 committed by Damien George
parent d040478d8a
commit 03a9fa227d
3 changed files with 8 additions and 5 deletions

View File

@ -336,12 +336,8 @@ STATIC void framebuf_args(const mp_obj_t *args_in, mp_int_t *args_out, int n) {
} }
STATIC mp_int_t framebuf_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) { STATIC mp_int_t framebuf_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
(void)flags;
mp_obj_framebuf_t *self = MP_OBJ_TO_PTR(self_in); mp_obj_framebuf_t *self = MP_OBJ_TO_PTR(self_in);
bufinfo->buf = self->buf; return mp_get_buffer(self->buf_obj, bufinfo, flags) ? 0 : 1;
bufinfo->len = self->stride * self->height * (self->format == FRAMEBUF_RGB565 ? 2 : 1);
bufinfo->typecode = 'B'; // view framebuf as bytes
return 0;
} }
STATIC mp_obj_t framebuf_fill(mp_obj_t self_in, mp_obj_t col_in) { STATIC mp_obj_t framebuf_fill(mp_obj_t self_in, mp_obj_t col_in) {

View File

@ -109,3 +109,9 @@ except ValueError:
fbuf = framebuf.FrameBuffer1(buf, w, h) fbuf = framebuf.FrameBuffer1(buf, w, h)
fbuf = framebuf.FrameBuffer1(buf, w, h, w) fbuf = framebuf.FrameBuffer1(buf, w, h, w)
print(framebuf.MVLSB == framebuf.MONO_VLSB) print(framebuf.MVLSB == framebuf.MONO_VLSB)
# test get-buffer (returns the original buffer)
fbuf = framebuf.FrameBuffer(bytearray(2), 8, 1, framebuf.MONO_HLSB)
fbuf.pixel(0, 0, 1)
fbuf.pixel(4, 0, 1)
print(bytearray(fbuf))

View File

@ -66,3 +66,4 @@ bytearray(b'\n\x15\n\x15\n\x15\n\x15\x00\x00\x00\x00\x00\x00\x00\x00')
ValueError ValueError
True True
bytearray(b'\x88\x00')