Hi, im trying to send a camera buffer to lcd with canvas lvgl 8.3.
This is my camera buffer
static uint32_t lcdBuffer[APP_LCD_FRAME_BUFFER_COUNT] [APP_BUFFER_HEIGHT][APP_BUFFER_WIDTH]
This is my LVGL task (FREERTOS)
static void GUITask(void *param) {
PRINTF("LVGL example start...\r\n");
#if LV_USE_LOG
lv_log_register_print_cb(print_cb);
#endif
lv_port_pre_init();
lv_init();
lv_port_disp_init();
// lv_port_indev_init();
// s_lvgl_initialized = true;
setup_ui(&guider_ui);
events_init(&guider_ui);
custom_init(&guider_ui);
for (;;) {
lv_task_handler();
vTaskDelay(5);
}
}
This is the task to get the image and send to lcd
static void CameraTask(void *pvParameters) {
PRINTF("CameraTask start...\r\n");
APP_InitPxp();
APP_InitCamera();
//APP_InitDisplay();
CAMERA_RECEIVER_Start(&cameraReceiver);
lv_draw_rect_dsc_t rect_dsc;
/*Create a buffer for the canvas*/
static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_INDEXED_4BIT(480, 272)];
lv_example_img_1();
for (int i = 0;; (i > 30 ? i = 0 : i++)) {
CameraAwaitFrame();
PxpConvertBufferToRgb();
lcdCallBack();
lv_obj_t *canvas = lv_canvas_create(lv_scr_act());
lv_obj_set_size(canvas, 480, 272);
lv_obj_set_pos(canvas, 0, 0);
for (int i = 0; i < 480 * 272; i++) {
uint32_t pixel_data =(uint32_t) lcdBuffer[lcdInactiveFbIdx] ;
// Extraer los componentes de color (en formato XRGB8888) del píxel
uint8_t pixel_r = (pixel_data >> 16) & 0xFF;
uint8_t pixel_g = (pixel_data >> 8) & 0xFF;
uint8_t pixel_b = pixel_data & 0xFF;
cbuf[i] = LV_COLOR_MAKE(pixel_r, pixel_g, pixel_b);
}
lv_canvas_fill_bg(canvas, lv_color_black(), LV_OPA_COVER);
lv_canvas_set_buffer(canvas, cbuf, 0, 0, LV_IMG_CF_INDEXED_2BIT);
lv_task_handler();
CameraSubmitEmptyBuffer();
PRINTF(" %d", i);
TickType_t dalay = 100 / portTICK_PERIOD_MS;
vTaskDelay(dalay);
}
}
The image is declare and send in this function
void lv_example_img_1(void) {
lv_obj_t * img1 = lv_img_create(lv_scr_act());
lv_img_set_src(img1, &img_cogwheel_argb);
lv_img_set_pivot(img1, 50, 50);
lv_img_set_angle(img1, 0);
}