日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

不同分辨率的LCM进行兼容

發(fā)布時間:2025/4/16 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不同分辨率的LCM进行兼容 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.讀取不同LCM ID的時序不同,如何處理?

2.開機后android會自動resize圖片資源的大小,但開機logo無法自行resize,如何操作?保證識別到不同分辨率的LCM后開機logo可以正常顯示

[Analysis]

1.?關(guān)于時序

JB版本中,接口disp_drv_get_lcm_driver實現(xiàn)compare id并獲取到lcm driver以及lcm param的動作,其工作流程如下


從上圖可以看到,對于DSI,每次嘗試讀取id之前都會根據(jù)lcm driver中的設(shè)置重新設(shè)置時序,所以擔(dān)心時序不同無法讀取id的擔(dān)心就顯得多余了

?

2.?關(guān)于開機logo

我們默認(rèn)的做法,在ProjectConfig.mk中會定義Macro BOOT_LOGO方便在目錄\mediatek\custom\common\lk\logo中讀取到相應(yīng)的資源,作為開機logo顯示。

這里的開機logo分為兩種,分別為U-boot logo以及kernel logo。我們分別討論這兩種logo的顯示原理

·?????????U-boot logo(and Battery logo)

U-boot logo是開機后的第一個界面,U-boot logo以及Battery logo會統(tǒng)一打包為logo.bin。對于JB版本,主要工作?流程如下

1. Little Kernel會在platform_early_init階段首先會獲取lcm params,其工作流程就是透過讀id找到現(xiàn)在插入的LCM,根據(jù)LCM的分辨率申請相應(yīng)大小的frame buffer并確定frame buffer起始地址

2.?logo.bin預(yù)留4M Ram

3.?之后在platform_init階段,直接將logo.bin載入到4M Ram

4,?完成載入后,在platform_initmt_disp_show_boot_logo();會調(diào)用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只是經(jīng)過了bmpraw的轉(zhuǎn)換,在目錄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中,在讀取時根據(jù)不同的索引顯示相應(yīng)的圖片即可

而對于Kernel logo,我們需要將不同分辨率的boot_logo raw data文件生成出來并copy到手機中,boot_logo_updater根據(jù)不同的分辨率進行識別,讀取相應(yīng)的logo文件。

qhdhd720兩種分辨率相互兼容為例,方案大致如下,注意,logo的對應(yīng)需要貴司自行完成

  • lcm driver中實現(xiàn)compare id接口
  • 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 \

    ??????????????? …

    ??????????????? …

    ?

  • 記錄每組分辨率插入的raw data個數(shù)
  • mt_disp_show_boot_logo();函數(shù)中根據(jù)LCM的分辨率讀取相應(yīng)iduboot logo;對于ipo快速開機,請在目錄mediatek\external\ipod\bootlogo.cpp中的mt65xx_disp_show_boot_logo();做同樣的修改
  • 5.此步驟在不同的SW版本上修改的文件不同。在JB上,修改mediatek\custom\common\lk\logo\rules.mk修改如下內(nèi)容:

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

    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中添加上述的內(nèi)容,注意不要添加語句

    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函數(shù)中根據(jù)LCM的分辨率讀取相應(yīng)的raw data文件

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的不同分辨率的LCM进行兼容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。