不同分辨率的LCM进行兼容

来源:互联网 发布:360压缩mac版 编辑:程序博客网 时间:2024/05/18 18:19

1.读取不同LCM ID的时序不同,如何处理?

2.开机后android会自动resize图片资源的大小,但开机logo无法自行resize,如何操作?保证识别到不同分辨率的LCM后开机logo可以正常显示

[Analysis]

1. 关于时序

JB版本中,接口disp_drv_get_lcm_driver实现compare id并获取到lcm driver以及lcm param的动作,其工作流程如下


从上图可以看到,对于DSI,每次尝试读取id之前都会根据lcm driver中的设置重新设置时序,所以担心时序不同无法读取id的担心就显得多余了

 

2. 关于开机logo

我们默认的做法,在ProjectConfig.mk中会定义Macro BOOT_LOGO方便在目录\mediatek\custom\common\lk\logo中读取到相应的资源,作为开机logo显示。

这里的开机logo分为两种,分别为U-boot logo以及kernel logo。我们分别讨论这两种logo的显示原理

·         U-boot logo(and Battery logo)

U-boot logo是开机后的第一个界面,U-boot logo以及Battery logo会统一打包为logo.bin。对于JB版本,主要工作 流程如下

1. Little Kernel会在platform_early_init阶段首先会获取lcm params,其工作流程就是透过读id找到现在插入的LCM,根据LCM的分辨率申请相应大小的frame buffer并确定frame buffer起始地址

2. logo.bin预留4M Ram

3. 之后在platform_init阶段,直接将logo.bin载入到4M Ram

4, 完成载入后,在platform_initmt_disp_show_boot_logo();会调用show_logo(0);完成第一张logo显示。其中的index=0代表在logo.bin中压缩的第一张图片,logo.bin中的图片压缩顺序可以察看文件mediatek\custom\common\lk\logo\rules.mk,如下

RESOURCE_OBJ_LIST :=   \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_uboot.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_battery.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_low_battery.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_charger_ov.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_0.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_1.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_2.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_3.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_4.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_5.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_6.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_7.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_8.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_9.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_percent.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_01.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_02.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_03.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_04.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_05.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_06.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_07.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_08.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_09.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_10.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_01.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_02.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_03.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_04.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_05.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_06.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_07.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_08.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_09.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_10.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_bg.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_img.raw \

            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_100.raw \

·         Kernel logo

Kernel logo的工作方式与U-boot logo不同,是透过init.rc中注册的boot_logo_updater service完成读取raw data文件,进行绘画的,所以在kernel logo只是经过了bmpraw的转换,在目录mediatek\custom\common\lk\logo\下生成raw data 文件boot_logo。之后透过脚本文件将boot_logo文件搬移到out\target\product\xxxx\system\media\images下,打包为system.imgdownload到手机种,并存放于/system/media/images目录下。

 

[Solution]

对于U-boot logo,只需要将不同分辨率的图片压缩至logo.bin中,在读取时根据不同的索引显示相应的图片即可

而对于Kernel logo,我们需要将不同分辨率的boot_logo raw data文件生成出来并copy到手机中,boot_logo_updater根据不同的分辨率进行识别,读取相应的logo文件。

qhdhd720两种分辨率相互兼容为例,方案大致如下,注意,logo的对应需要贵司自行完成

  1. lcm driver中实现compare id接口
  2. U-boot logo压缩,在mediatek\custom\common\lk\logo\rules.mk中,修改RESOURCE_OBJ_LIST列表,使用期望的分辨率代替BOOT_LOGO变量,(makefileBOOT_LOGO的定义将无效)

RESOURCE_OBJ_LIST :=   \

            $(BOOT_LOGO_DIR)/$qhd/$qhd_uboot.raw \

                …

                …

         $(BOOT_LOGO_DIR)/$hd720/$hd720_uboot.raw \

                …

                …

 

  1. 记录每组分辨率插入的raw data个数
  2. mt_disp_show_boot_logo();函数中根据LCM的分辨率读取相应iduboot logo;对于ipo快速开机,请在目录mediatek\external\ipod\bootlogo.cpp中的mt65xx_disp_show_boot_logo();做同样的修改

5.此步骤在不同的SW版本上修改的文件不同。在JB上,修改mediatek\custom\common\lk\logo\rules.mk修改如下内容:

#########################################################

ifneq ($(strip $(MTK_PLATFORM)),)

include $(CLEAR_VARS)

 

LOCAL_MODULE :=boot_logo_qhd

LOCAL_MODULE_TAGS :=user

LOCAL_MODULE_CLASS := DATA

LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images

 

LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo

LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)

 

include $(BUILD_PREBUILT)

endif

  

#########################################################

ifneq ($(strip $(MTK_PLATFORM)),)

include $(CLEAR_VARS)

 

LOCAL_MODULE :=boot_logo_hd720

LOCAL_MODULE_TAGS :=user

LOCAL_MODULE_CLASS := DATA

LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images

 

LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo

LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)

 

include $(BUILD_PREBUILT)

endif

JB2上,在文件mediatek\external\boot_logo_updater\Android.mk中添加上述的内容,注意不要添加语句

LOCAL_MODULE_TAGS :=user,否则编译不通过。

6.此步骤在不同的SW版本上修改方法不同。在JB上,\build\core\user_tags.mkGRANDFATHERED_USER_MODULES增加boot_logo_qhd & boot_logo_hd720;在JB2上,\build\target\product\$Project.mk中PRODUCT_PACKAGES增加boot_logo_qhd & boot_logo_hd720

7. boot_logo_updater中首先定义两种raw data的路径,再在main函数中根据LCM的分辨率读取相应的raw data文件

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 半夜到南宁机场怎么办 得了水痘坐火车怎么办 香港账户被限制怎么办 司法拍卖车扣分怎么办 速递易已超期怎么办 e栈快递换微信怎么办 e栈快递柜打不开怎么办 小孩耳朵塞东西怎么办 把隐形眼镜吃了怎么办 街道分车位不公平怎么办 服务区修车被宰怎么办 2018高速逃费怎么办 高速不停车卡怎么办 独立显卡显存不够怎么办 rx470d买不到了怎么办? 南方避险基金到期怎么办 高铁票认证失败怎么办 高铁票三个小孩怎么办 12306取消三次后怎么办 外国人护照过期了怎么办 行李丢飞机上怎么办 学生票没次数了怎么办 去美国行李超重怎么办 12306密码找回失败怎么办 12306注册身份重复怎么办 12306身份信息重复怎么办 必修课没有选上怎么办 大学错过了选课怎么办 大学忘记选课了怎么办 火车网上购票儿童票怎么办 售票厅看见小偷怎么办 没赶上火车火车票怎么办 重庆到韩国签证怎么办 重庆去韩国签证怎么办 重庆办韩国签证怎么办 故宫网上预定后怎么办 坐游轮如果晕船怎么办 听听力反应慢怎么办? 毕业证照片丢了怎么办 离线网盘有违规内容怎么办 手机不能向下拉怎么办