Page 2 of 2

Re: LCD屏使用GIF驱动240*296时会导致语音对话超高延迟问题

Posted: 2025年 Nov 18日 18:00
by FRD13245278382
liujt@tuya.com 2025年 Nov 18日 16:32

请参考如下gif从文件加载方式("/fs/3.gif":你当前的实际文件及路径为主):

Code: Select all

/*
gif文件加载
*/
OPERATE_RET gif_img_load(char *filename, lv_img_dsc_t *img_dst)
{
    OPERATE_RET ret = OPRT_COM_ERROR;
    lv_fs_file_t file;
    lv_fs_res_t res;

res = lv_fs_open(&file, filename, LV_FS_MODE_RD);
if (res != LV_FS_RES_OK) {
    LV_LOG_ERROR("Failed to open file: %s\n", filename);
    return ret;
}

// 读取文件大小
lv_fs_seek(&file, 0, LV_FS_SEEK_END);  // 移动到文件末尾
uint32_t file_size;
lv_fs_tell(&file, &file_size);   // 获取文件大小
lv_fs_seek(&file, 0, LV_FS_SEEK_SET);   // 移动回文件开头

// 分配内存以存储文件内容
uint8_t *buffer = tkl_system_psram_malloc(file_size);
if (buffer == NULL) {
    LV_LOG_ERROR("Memory allocation failed\n");
    lv_fs_close(&file);
    return ret;
}

uint32_t bytes_read;
res = lv_fs_read(&file, buffer, file_size, &bytes_read);
if (res != LV_FS_RES_OK || bytes_read != file_size) {
    LV_LOG_ERROR("Failed to read file: %s\n", filename);
    tkl_system_psram_free(buffer);  // 释放内存
}
else {
    LV_LOG_WARN("------------------------gif file '%s' load successful !\r\n", filename);
    img_dst->data = buffer;
    img_dst->data_size = file_size;
    ret = OPRT_OK;
}
lv_fs_close(&file);
return ret;
}

void gif_load_test(void)
{
	static lv_img_dsc_t ui_img_gif = {0};
	
if (gif_img_load(("/fs/3.gif"), &ui_img_gif) == 0) {					//"/fs/3.gif":你当前的实际文件及路径
    lv_obj_t * gif_obj = lv_gif_create(switch_screen);					//switch_screen:你当前的屏幕对象

    lv_obj_align_to(gif_obj, switch_screen, LV_ALIGN_TOP_LEFT, 10, 30);    //放置屏幕左上角
    lv_gif_set_src(gif_obj, (const void *)&ui_img_gif);
    lv_gif_restart(gif_obj);
}

我的GIF图还没放在flash里,就在内存里


Re: LCD屏使用GIF驱动240*296时会导致语音对话超高延迟问题

Posted: 2025年 Nov 18日 18:06
by liujt@tuya.com

你好,可以参考类似的方式,申请内存,然后将gif的数组内容复制到这个内存地址,最后将内存指向ui_img_gif的成员data.