[FL-3152] Screen streaming improvements (#2498)

* Rpc: reserve some bandwidth when screen streaming
* Move furi_hal_compress to toolbox/comporess
* Lib: heatshrink as external submodule, compile warnings fixes, better buffer management
* Lib: cleanup compressor definitions
* Rpc: add canvas orientation support
* Format Sources
This commit is contained in:
あく
2023-03-23 02:00:48 +09:00
committed by GitHub
parent 8b224ecb15
commit 7bf0a4786c
29 changed files with 242 additions and 1457 deletions

View File

@@ -17,6 +17,7 @@ const CanvasFontParameters canvas_font_params[FontTotalNumber] = {
Canvas* canvas_init() {
Canvas* canvas = malloc(sizeof(Canvas));
canvas->compress_icon = compress_icon_alloc();
// Setup u8g2
u8g2_Setup_st756x_flipper(&canvas->fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32);
@@ -35,6 +36,7 @@ Canvas* canvas_init() {
void canvas_free(Canvas* canvas) {
furi_assert(canvas);
compress_icon_free(canvas->compress_icon);
free(canvas);
}
@@ -218,7 +220,7 @@ void canvas_draw_bitmap(
x += canvas->offset_x;
y += canvas->offset_y;
uint8_t* bitmap_data = NULL;
furi_hal_compress_icon_decode(compressed_bitmap_data, &bitmap_data);
compress_icon_decode(canvas->compress_icon, compressed_bitmap_data, &bitmap_data);
u8g2_DrawXBM(&canvas->fb, x, y, width, height, bitmap_data);
}
@@ -233,7 +235,8 @@ void canvas_draw_icon_animation(
x += canvas->offset_x;
y += canvas->offset_y;
uint8_t* icon_data = NULL;
furi_hal_compress_icon_decode(icon_animation_get_data(icon_animation), &icon_data);
compress_icon_decode(
canvas->compress_icon, icon_animation_get_data(icon_animation), &icon_data);
u8g2_DrawXBM(
&canvas->fb,
x,
@@ -250,7 +253,7 @@ void canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, const Icon* icon) {
x += canvas->offset_x;
y += canvas->offset_y;
uint8_t* icon_data = NULL;
furi_hal_compress_icon_decode(icon_get_data(icon), &icon_data);
compress_icon_decode(canvas->compress_icon, icon_get_data(icon), &icon_data);
u8g2_DrawXBM(&canvas->fb, x, y, icon_get_width(icon), icon_get_height(icon), icon_data);
}

View File

@@ -7,6 +7,7 @@
#include "canvas.h"
#include <u8g2.h>
#include <toolbox/compress.h>
/** Canvas structure
*/
@@ -17,6 +18,7 @@ struct Canvas {
uint8_t offset_y;
uint8_t width;
uint8_t height;
CompressIcon* compress_icon;
};
/** Allocate memory and initialize canvas

View File

@@ -250,6 +250,7 @@ static void gui_redraw(Gui* gui) {
p->callback(
canvas_get_buffer(gui->canvas),
canvas_get_buffer_size(gui->canvas),
canvas_get_orientation(gui->canvas),
p->context);
}
} while(false);

View File

@@ -27,7 +27,11 @@ typedef enum {
} GuiLayer;
/** Gui Canvas Commit Callback */
typedef void (*GuiCanvasCommitCallback)(uint8_t* data, size_t size, void* context);
typedef void (*GuiCanvasCommitCallback)(
uint8_t* data,
size_t size,
CanvasOrientation orientation,
void* context);
#define RECORD_GUI "gui"