JPEG解码
以开发板PD_AD102_APUS_V1.0为例说明
一 基础配置
以ad102p_nand_5.10_defconfig配置为例
1.1 LCD
添加外设屏幕及背光配置
lcd供电采用设备电源管理"GPIO-POWER0",因为触摸屏供电也用到这个io,防止io被重复申请
背光默认采用pwm控制
pwm驱动
1.2 fb配置
默认采用多fb叠加直通输出
fb配置建议fb0,强制最底层,解码显示缓冲帧数为0就行,节省内存
1.3 解码显示demo
建议使用直通模式,demo默认解码显示在fb0,源码位于libhardware2/src/cmds/jpegd_decode_preview_main.c
1.4 jpeg解码驱动
进入kernel配置jpeg解码驱动
bhu@bhu-PC:~/work/kernel/kernel$ make menuconfig
二 内存分配
rmem
说明:rmem的内存由libhardware2的rmem相关接口进行调用申请, 主要提供给一些需要申请大内存的驱动或场景使用
本文主要是lcd驱动及jpeg解码
配置方法:位于bootloader/uboot-x2000/boards.cfg中配置, 在所用uboot配置的options里加上RMEM_MB=XXX
以ad102p_nand_5.10_defconfig配置为例
bhu@bhu-PC:~/work/build$ grep -nr "uboot" configs/ad102p_nand_5.10_defconfig
3:APP_uboot_toolchain_dir=../tools/toolchains/mips-xburst2-gcc1210-glibc238
4:APP_uboot_dir=../bootloader/uboot-x2000
5:APP_uboot_config=ad102p_base_xImage_sfc_nand //uboot配置
bhu@bhu-PC:~/work/build$ grep -nr "ad102p_base_xImage_sfc_nand" ../bootloader/uboot-x2000/boards.cfg //uboot配置的rmem
954:ad102p_base_xImage_sfc_nand mips xburst2 ad100_base ingenic ad100 ad100_base:AD102P_DDR,SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,RMEM_MB=8
iconfig配置:需要选中两个,第一个是驱动的选项,第二个是驱动对应的调用
查看:烧录进入板子后可通过cat /proc/cmdline查看配置的rmem
计算方法:以下是lcd需要内存,实际使用应该尽量往高一点计算
lcd为720p的屏幕, 并且fb只配置一层, 然后为0个buffer时
(720 ×1280 × 4) × 0 = 0 (lcd的内存是按ARGB的32位申请的,因此需要乘4)
jpeg解码需要输入源和输出源
输入 1280 × 720 = 921600 (jpeg图片最大按宽 * 高计算)
输出 1280 × 720 × 3 / 2= 1382400 (demo默认是nv12,可修改输出格式)
总大小为 921600 + 1382400 = 2304000
三 验证
整体编译
bhu@bhu-PC:~/work/build$ make ad102p_nand_5.10_defconfig
bhu@bhu-PC:~/work/build$ make
# cmd_jpegd_decode_preview /usr/data/89442.jpg 1920 1280 & //解码jpeg图片为nv12格式并显示在fb0