华芯微特开发论坛

 找回密码
 立即注册
搜索
热搜: SWM341 资料
查看: 219|回复: 2

使用jpeg硬解码,用sdram做缓冲区,导致屏幕抖动

[复制链接]

4

主题

9

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2025-11-10 11:43:11 | 显示全部楼层 |阅读模式
void Showjpg(unsigned int x, unsigned int y, const char *p, uint16_t *displaybuf)
{
    FIL file;
    FRESULT fr;
    UINT br;
    uint8_t *jpeg_data = JPEG_Decoder_Buff;  // 指向预分配的 SDRAM 输入缓冲
    UINT jpeg_size;
    jpeg_outset_t jpeg_outset;
    jfif_info_t jfif_info;

    // --- 1. 加载 JPEG 文件 ---
    fr = f_open(&file, p, FA_READ);
    if (fr != FR_OK) {
        LOG_INFO("Open failed: %s\n", p);
        return;
    }

    jpeg_size = f_size(&file);

    fr = f_read(&file, jpeg_data, jpeg_size, &br);
    f_close(&file);

    if (fr != FR_OK || br != jpeg_size) {
        LOG_INFO("Read failed!\n");
        return;
    }

    // 解析 JFIF 信息时应传递正确的数据长度
    if(jfif_parse(jpeg_data, jpeg_size, &jfif_info) != 0) {
        LOG_INFO("JFIF parse failed!\n");
        return;
    }

    jpeg_outset.format = JPEG_OUT_RGB565;
    jpeg_outset.dither = 0;
    jpeg_outset.RGBAddr = (uint32_t)JPEG_Decoder_Buff2;
    // 使用实际解析得到的宽高进行解码
    JPEG_Decode(JPEG, &jfif_info, &jpeg_outset);
    while(JPEG_DecodeBusy(JPEG)) __NOP();

    // 3. 复制到 framebuffer,考虑行偏移
    uint16_t *fb = (uint16_t *)displaybuf;
    uint16_t *src = (uint16_t *)JPEG_Decoder_Buff2;
    uint16_t *dst = fb + y * 800 + x;

    for(int i = 0; i < jfif_info.Height; i++) { // 使用从 JFIF 解析出的高度
        memcpy(dst, src, jfif_info.Width * sizeof(uint16_t)); // 使用宽度*每个像素的字节数
        src += jfif_info.Width; // 移动到下一行的开始
        dst += 800; // 目标 buffer 中的下一行开始位置,根据屏幕宽度调整
    }

}这是代码,jpeg的缓冲区和显示的缓冲区不是同一块,怀疑是屏幕显示过程中,解码占用大量的sdram的带宽导致屏幕抖动,有人知道如何解决吗
回复

使用道具 举报

14

主题

72

帖子

1055

积分

超级版主

Rank: 8Rank: 8

积分
1055
发表于 2025-11-10 17:18:51 | 显示全部楼层

最后的复制改用 DMA2D_PixelMove() 试试,,硬件搬移比软件拷贝效率高
回复

使用道具 举报

4

主题

9

帖子

46

积分

新手上路

Rank: 1

积分
46
 楼主| 发表于 2025-11-12 15:11:21 | 显示全部楼层
用官方的lvgl历程的底层来用会抖,用lib里的历程就抖的不是很明显,完全移植过去,也没用,怀疑是某个底层修改了,不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|华芯微特开发论坛

GMT+8, 2026-9-17 18:36 , Processed in 0.029264 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表