10.1屏播放测试程序
| bin | ||
| extern | ||
| include | ||
| lvgl | ||
| release | ||
| src | ||
| .gitignore | ||
| 02_fixed.gif | ||
| bk.jpg | ||
| build.sh | ||
| CMakeLists.txt | ||
| lv_conf.h | ||
| README.md | ||
| tag.gif | ||
| tag.png | ||
| toolchain-arm.cmake | ||
eplayer demo - FB+视频共存问题
问题与根因
FB 和视频无法共存:compress(TRUE) 下 render 阻塞,compress(FALSE) 下视频返回 VO_BUSY。
根因: rootfs_overlay/qua/ko/loadko.sh 中 insmod fhfb.ko fbc=0 禁用了 FB 压缩,且 fhfb.ko 是旧版不支持 fbc。
修改点
内核层
- 替换 fhfb.ko — 用 SDK 新版替换
rootfs_overlay/qua/ko/fhfb.ko(旧版 md5:96d321→ 新版 md5:58050d) - loadko.sh 启用 fbc —
fbc=0→fbc=3000,vram0_size=4000,fhfb0_fbc=1
应用层
- e_logger.c — 修复
log_print死锁(持有 mutex 后调用log_init再次加锁) - fbdev_10xd.c —
compress(TRUE)前加载bk.rgba全屏铺底 +tag.rgba底部 alpha 叠加 - fbdev.c — 跳过 LVGL memcpy,仅做挖洞 + render
- main.c — 视频区域改为顶部,LVGL root 设为透明
关键时序
mmap → 写入图片 → compress(TRUE) → VO enable → show(TRUE) → render → 挖洞 → 播视频
图片必须在
compress(TRUE)之前写入 FB buffer。
素材
素材需预转换(PNG/JPG → raw BGRA):
python3 -c " from PIL import Image import struct img = Image.open('/path/to/bk1.jpg').convert('RGBA') print(f'Size: {img.size}') with open('/path/to/bk1.rgba', 'wb') as f: for y in range(img.height): for x in range(img.width): r, g, b, a = img.getpixel((x, y)) f.write(struct.pack('BBBB', b, g, r, a)) print('Done') "
设备上 crc32 与 zlib 冲突,无法用 libpng,需预转换 raw 格式。