JPEG解码
以开发板PD_X2600E_VAST_V2.0为例说明
一 基础配置
以x2600e_vast_v20_nand_5.10_defconfig配置为例
1.1 LCD
添加外设屏幕及背光配置
lcd供电采用设备电源管理"GPIO-POWER0",因为触摸屏供电也用到这个io,防止io被重复申请
背光默认采用gpio控制
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
以x2600e_vast_v20_nand_5.10_defconfig配置为例
bhu@bhu-PC:~/work/build$ grep -nr "uboot" configs/x2600e_vast_v20_nand_5.10_defconfig
3:APP_uboot_toolchain_dir=../tools/toolchains/mips-gcc720-glibc229
4:APP_uboot_dir=../bootloader/uboot-x2000
5:APP_uboot_config=x2600e_base_xImage_sfc_nand //uboot配置
bhu@bhu-PC:~/work/build$ grep -nr "x2600e_base_xImage_sfc_nand" ../bootloader/uboot-x2000/boards.cfg //uboot配置的rmem
798:x2600e_base_xImage_sfc_nand mips xburst2 x2600_base ingenic x2600 x2600_base:SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,X2600E_DDR,RMEM_MB=16,LPJ="11476992"
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 x2600e_vast_v20_nand_5.10_defconfig
bhu@bhu-PC:~/work/build$ make
# cmd_jpegd_decode_preview /usr/data/89442.jpg 1920 1280 & //解码jpeg图片为nv12格式并显示在fb0