FHD : full high definition,1920 x 1080,全高清

vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/update  // 這隻檔主要負責將關機充電動畫所需要的全部小圖示及第1個開機logo(fhd_uboot.bmp)由 bmp_to_raw 做轉檔,從 .bmp 轉成 .raw,再使用 zpipe 將這些.raw 集結起來壓縮成一個檔 fhd.raw
1 #!/bin/bash                                                                                                                                                        2 if [ "$1" = "" ]; then    // 這個 project 使用的是 fhd。3         echo "Please input resolution,"4         echo "Such as: qvga, wqvga, wvga, hvga"5         exit6 fi7 p=$1    // ${p} = fhd8 ./tool/bmp_to_raw ./temp0.raw ./$p/"${p}_uboot".bmp9 ./tool/bmp_to_raw ./temp1.raw ./$p/"${p}_battery".bmp10 ./tool/bmp_to_raw ./temp2.raw ./$p/"${p}_low_battery".bmp11 ./tool/bmp_to_raw ./temp3.raw ./$p/"${p}_charger_ov".bmp12 ./tool/bmp_to_raw ./temp4.raw ./$p/"${p}_num_0".bmp13 ./tool/bmp_to_raw ./temp5.raw ./$p/"${p}_num_1".bmp14 ./tool/bmp_to_raw ./temp6.raw ./$p/"${p}_num_2".bmp15 ./tool/bmp_to_raw ./temp7.raw ./$p/"${p}_num_3".bmp16 ./tool/bmp_to_raw ./temp8.raw ./$p/"${p}_num_4".bmp17 ./tool/bmp_to_raw ./temp9.raw ./$p/"${p}_num_5".bmp18 ./tool/bmp_to_raw ./temp10.raw ./$p/"${p}_num_6".bmp19 ./tool/bmp_to_raw ./temp11.raw ./$p/"${p}_num_7".bmp20 ./tool/bmp_to_raw ./temp12.raw ./$p/"${p}_num_8".bmp21 ./tool/bmp_to_raw ./temp13.raw ./$p/"${p}_num_9".bmp22 ./tool/bmp_to_raw ./temp14.raw ./$p/"${p}_num_percent".bmp23 ./tool/bmp_to_raw ./temp15.raw ./$p/"${p}_bat_animation_01".bmp24 ./tool/bmp_to_raw ./temp16.raw ./$p/"${p}_bat_animation_02".bmp25 ./tool/bmp_to_raw ./temp17.raw ./$p/"${p}_bat_animation_03".bmp26 ./tool/bmp_to_raw ./temp18.raw ./$p/"${p}_bat_animation_04".bmp27 ./tool/bmp_to_raw ./temp19.raw ./$p/"${p}_bat_animation_05".bmp28 ./tool/bmp_to_raw ./temp20.raw ./$p/"${p}_bat_animation_06".bmp29 ./tool/bmp_to_raw ./temp21.raw ./$p/"${p}_bat_animation_07".bmp30 ./tool/bmp_to_raw ./temp22.raw ./$p/"${p}_bat_animation_08".bmp31 ./tool/bmp_to_raw ./temp23.raw ./$p/"${p}_bat_animation_09".bmp32 ./tool/bmp_to_raw ./temp24.raw ./$p/"${p}_bat_animation_10".bmp33 ./tool/bmp_to_raw ./temp25.raw ./$p/"${p}_bat_10_01".bmp34 ./tool/bmp_to_raw ./temp26.raw ./$p/"${p}_bat_10_02".bmp35 ./tool/bmp_to_raw ./temp27.raw ./$p/"${p}_bat_10_03".bmp36 ./tool/bmp_to_raw ./temp28.raw ./$p/"${p}_bat_10_04".bmp37 ./tool/bmp_to_raw ./temp29.raw ./$p/"${p}_bat_10_05".bmp38 ./tool/bmp_to_raw ./temp30.raw ./$p/"${p}_bat_10_06".bmp39 ./tool/bmp_to_raw ./temp31.raw ./$p/"${p}_bat_10_07".bmp40 ./tool/bmp_to_raw ./temp32.raw ./$p/"${p}_bat_10_08".bmp41 ./tool/bmp_to_raw ./temp33.raw ./$p/"${p}_bat_10_09".bmp42 ./tool/bmp_to_raw ./temp34.raw ./$p/"${p}_bat_10_10".bmp43 ./tool/bmp_to_raw ./temp35.raw ./$p/"${p}_bat_bg".bmp44 ./tool/bmp_to_raw ./temp36.raw ./$p/"${p}_bat_img".bmp45 ./tool/bmp_to_raw ./temp37.raw ./$p/"${p}_bat_100".bmp46 ./tool/bmp_to_raw ./boot_logo ./$p/"${p}_kernel".bmp47 ./tool/zpipe -l 9 ./"${p}.raw" temp0.raw temp1.raw temp2.raw temp3.raw temp4.raw temp5.raw temp6.raw temp7.raw temp8.raw temp9.raw temp10.raw temp11.raw temp12.raw temp13.raw temp14.raw temp15.raw temp16.raw temp17.raw temp18.raw temp19.raw temp20.raw temp21.raw temp22.raw temp23.raw temp24.raw temp25.raw temp26.raw temp27.r    aw temp28.raw temp29.raw temp30.raw temp31.raw temp32.raw temp33.raw temp34.raw temp35.raw temp36.raw temp37.raw48 rm -rf ./temp0.raw ./temp1.raw ./temp2.raw ./temp3.raw ./temp4.raw ./temp5.raw ./temp6.raw ./temp7.raw ./temp8.raw ./temp9.raw ./temp10.raw ./temp11.raw ./temp12.raw ./temp13.raw ./temp14.raw ./temp15.raw ./temp16.raw ./temp17.raw ./temp18.raw ./temp19.raw ./temp20.raw ./temp21.raw ./temp22.raw ./temp23.raw ./temp24.raw ./te    mp25.raw ./temp26.raw ./temp27.raw ./temp28.raw ./temp29.raw ./temp30.raw ./temp31.raw ./temp32.raw ./temp33.raw ./temp34.raw ./temp35.raw ./temp36.raw ./temp37.raw ./bootlogo.raw 49 echo "conversion finished"

以下是 bmp 轉成 raw 檔後,在 bin 檔的排列順序,之後需指定排列順序方可將圖片取出

...
...
...ifeq ($(strip $(SUPPORT_CARRIEREXPRESS_PACK)),yes)
RESOLUTION := $(word $(COUNT),$(TEMP))
RESOURCE_OBJ_LIST :=   \$(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_uboot.raw
else
RESOURCE_OBJ_LIST :=   \$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_uboot.raw
endif
ifneq ($(strip $(MACH_TYPE)), 2701)
ifneq ($(strip $(MTK_ALPS_BOX_SUPPORT)), yes)
RESOURCE_OBJ_LIST +=   \$(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_low_battery.raw \
$(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_low_power_no_charger.raw \
#            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_1_pixel.raw
#            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_kernel.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_charger_ov.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_0.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_1.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_2.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_3.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_4.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_5.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_6.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_7.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_8.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_9.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_percent.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_01.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_02.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_03.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_04.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_05.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_06.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_07.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_08.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_09.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_10.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_01.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_02.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_03.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_04.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_05.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_06.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_07.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_08.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_09.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_10.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_bg.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_img.raw \
#            $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_100.raw \
#            $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_kernel.raw \
endif
endif
...
...
...

alps/vendor/mediatek/proprietary/external/libshowlogo / show_animation_common.c...
...
...#if 0// original code
#else

// 整個電池容量分成 7 個圖片往上貼,讓其有往上充電的感覺// 以下這個 function 是自已寫的用來取得在當時的容量所對應的 scale base// ex: 若 capacity 在 54,則取得第3個動畫貼片,然後依序往上貼到第6個,再取得當時的 capacity 所對應的 scale base,再依序重復。// 此算法使用了二分法,讓比較次數限制在 3 次內,以優化整個顯示時間。
unsigned int check_animation_scale_base(unsigned int capacity)
{//// 100%       : 6//  84% ~ 99% : 5 //  67% ~ 83% : 4 //  50% ~ 66% : 3 //  33% ~ 49% : 2//  16% ~ 32% : 1 //   0% ~ 15% : 0//
if(capacity >= 50)if(capacity >= 84)if(capacity == 100)return 6;elsereturn 5;elseif(capacity >= 67)return 4;elsereturn 3;elseif(capacity >= 16)if(capacity >= 33)return 2;elsereturn 1;elsereturn 0;
}//// fill_addr : framebuffer address// dec_logo_addr : 解壓縮後的 logo address// logo_addr : logo 在壓縮檔內的 address,   您也可以將常用的小圖示如 number 先行壓縮成數據再直接 include 進來,則 logo_addr 就改成 壓縮後的數據的變數名。//
void fill_animation_battery_new_ex(unsigned int capacity,  void *fill_addr, void * dec_logo_addr, void * logo_addr,LCM_SCREEN_T phical_screen)
{unsigned int animation_scale_base = 0;static unsigned int animation_scale_offset = 0;if (capacity > 100) capacity = 100;
    // 底圖fill_animation_logo(ANIM_V0_BACKGROUND_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);RECT_REGION_T rect = {STATE_LEFT, STATE_TOP, STATE_RIGHT, STATE_BOTTOM};switch (g_batNotifyCode) {case 0x0002:  case 0x0020:  case 0x0040: case 0x0080: //Temperaturesfill_animation_dynamic(7, rect, fill_addr, dec_logo_addr, logo_addr, phical_screen);}//// display a digit in hundreds//
    if (capacity == 100) {fill_animation_number(NUMBER_PIC_START_0+1, -1, fill_addr, logo_addr, phical_screen);}//// display a digit in tens//
    if (capacity == 100) {fill_animation_number(NUMBER_PIC_START_0, 0, fill_addr, logo_addr, phical_screen);} else if (capacity >= 10) {fill_animation_number(NUMBER_PIC_START_0 + (capacity/10), 0, fill_addr, logo_addr, phical_screen);}//// display a digit in ones//
    fill_animation_number(NUMBER_PIC_START_0 + (capacity%10), 1, fill_addr, logo_addr, phical_screen);//// display % symbol//
    fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);//// scale animation position.//
    rect.left = BATTERY_LEFT;rect.top = BATTERY_TOP;rect.right = BATTERY_RIGHT;rect.bottom = BATTERY_BOTTOM;//// scale animation//
    animation_scale_base = check_animation_scale_base(capacity);if (animation_scale_base + animation_scale_offset > 6)animation_scale_offset = 0;fill_animation_dynamic(SCALE_PIC_START_0 + animation_scale_base + animation_scale_offset, rect, fill_addr, dec_logo_addr, logo_addr, phical_screen);animation_scale_offset++;}
#endif...
...
...

logo.bin

     1 0000000: 8816 8858 130d 3000 6c6f 676f 0000 0000  ...X..0.logo....                                                                                              2 0000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................3 0000020: 0000 0000 0000 0000 ffff ffff ffff ffff  ................4 0000030: 8916 8958 0002 0000 0100 0000 0000 0000  ...X............5 0000040: 0000 0000 1000 0000 0000 0000 0000 0000  ................6 0000050: ffff ffff ffff ffff ffff ffff ffff ffff  ................7 0000060: ffff ffff ffff ffff ffff ffff ffff ffff  ................8 0000070: ffff ffff ffff ffff ffff ffff ffff ffff  ................9 0000080: ffff ffff ffff ffff ffff ffff ffff ffff  ................10 0000090: ffff ffff ffff ffff ffff ffff ffff ffff  ................11 00000a0: ffff ffff ffff ffff ffff ffff ffff ffff  ................12 00000b0: ffff ffff ffff ffff ffff ffff ffff ffff  ................13 00000c0: ffff ffff ffff ffff ffff ffff ffff ffff  ................14 00000d0: ffff ffff ffff ffff ffff ffff ffff ffff  ................15 00000e0: ffff ffff ffff ffff ffff ffff ffff ffff  ................16 00000f0: ffff ffff ffff ffff ffff ffff ffff ffff  ................17 0000100: ffff ffff ffff ffff ffff ffff ffff ffff  ................18 0000110: ffff ffff ffff ffff ffff ffff ffff ffff  ................19 0000120: ffff ffff ffff ffff ffff ffff ffff ffff  ................20 0000130: ffff ffff ffff ffff ffff ffff ffff ffff  ................21 0000140: ffff ffff ffff ffff ffff ffff ffff ffff  ................22 0000150: ffff ffff ffff ffff ffff ffff ffff ffff  ................23 0000160: ffff ffff ffff ffff ffff ffff ffff ffff  ................24 0000170: ffff ffff ffff ffff ffff ffff ffff ffff  ................25 0000180: ffff ffff ffff ffff ffff ffff ffff ffff  ................26 0000190: ffff ffff ffff ffff ffff ffff ffff ffff  ................27 00001a0: ffff ffff ffff ffff ffff ffff ffff ffff  ................28 00001b0: ffff ffff ffff ffff ffff ffff ffff ffff  ................29 00001c0: ffff ffff ffff ffff ffff ffff ffff ffff  ................30 00001d0: ffff ffff ffff ffff ffff ffff ffff ffff  ................31 00001e0: ffff ffff ffff ffff ffff ffff ffff ffff  ................32 00001f0: ffff ffff ffff ffff ffff ffff ffff ffff  ................33 0000200: 3900 0000 130d 3000 ec00 0000 5e71 0000  9.....0.....^q..34 0000210: 3aa6 0c00 3558 0d00 b0d1 0e00 72d5 0e00  :...5X......r...35 0000220: 9cd6 0e00 1cda 0e00 86de 0e00 3ee1 0e00  ............>...36 0000230: 38e5 0e00 ece9 0e00 11ec 0e00 24f1 0e00  8...........$...37 0000240: eff5 0e00 85fb 0e00 8716 0f00 6833 0f00  ............h3..38 0000250: 4e50 0f00 3d6a 0f00 2182 0f00 7399 0f00  NP..=j..!...s...39 0000260: 2eb3 0f00 4ccf 0f00 f2eb 0f00 dd07 1000  ....L...........40 0000270: 51a3 1000 3e43 1100 62e3 1100 2d7e 1200  Q...>C..b...-~..41 0000280: 1c16 1300 e4ac 1300 8f46 1400 4ae4 1400  .........F..J...42 0000290: 7d83 1500 3b22 1600 2daa 1600 5fac 1600  }...;"..-..._...43 00002a0: 0d48 1700 0cbb 1700 a127 1b00 55dd 1d00  .H.......'..U...
    ...............................................................................................................................................................................................................
196847 0300ee0: 4551 1445 5114 4551 1445 5114 4551 1445 EQ.EQ.EQ.EQ.EQ.E
196848 0300ef0: 5114 4551 1445 5114 4551 1445 5114 4551 Q.EQ.EQ.EQ.EQ.EQ
196849 0300f00: 1445 5114 4551 1445 5114 4539 9a7f 0167 .EQ.EQ.EQ.E9...g
196850 0300f10: 0c47 cf00 0000 0000 0000 0000 0000 0000 .G..............
196851 0300f20: 0a

0x200 = 00000039,代表這個 logo.bin 由39 個圖片組成。

0x204 = 00300d13,代表這個 logo.bin 的 length,

0x300F20 代表 logo.bin 的 bytes size

但為什麼 300d13 和 300f20 不一致呢?

是否是因為加了其它資訊?

0x300F20 - 0x300d13 = 0x20D

待解決?

待續!


關機充電動畫如以下4張,

特地將會變動的水波紋獨立出來看較易理解。

下面是在描述 畫數字及電池容量圖案的 LCM 上的啟始點。

130 #if defined(FHD) || defined(CU_FHD) || defined(CMCC_FHD) || defined(CT_FHD) || defined(CMCC_LTE_FHD) || defined(CT_LTE_FHD) || defined(CU_LTE_FHD)
131         // fhd 1080*1920
132
133         // battery capacity rectangle
134         #define CAPACITY_LEFT                (387) // battery capacity center
135         #define CAPACITY_TOP                 (802)
136         #define CAPACITY_RIGHT               (691)
137         #define CAPACITY_BOTTOM              (1292)
138
139         // first number rectangle
140         #define NUMBER_LEFT                  (351+84) // number
141         #define NUMBER_TOP                   (479)
142         #define NUMBER_RIGHT                 (435+84)
143         #define NUMBER_BOTTOM                (600)
144
145         // %  rectangle
146         #define PERCENT_LEFT                 (519+84) // percent number_left + 2*number_width
147         #define PERCENT_TOP                  (479)
148         #define PERCENT_RIGHT                (627+84)
149         #define PERCENT_BOTTOM               (600)
150
151         // top animation part
152         // youchihwang
153         #define TOP_ANIMATION_LEFT           (387) // top animation
154         #define TOP_ANIMATION_TOP            (100)
155         #define TOP_ANIMATION_RIGHT          (691)
156         #define TOP_ANIMATION_BOTTOM         (152)

133         // battery capacity rectangle
134         #define CAPACITY_LEFT                (387) // battery capacity center
135         #define CAPACITY_TOP                 (802)
136         #define CAPACITY_RIGHT               (691)
137         #define CAPACITY_BOTTOM              (1292)

139         // first number rectangle
140         #define NUMBER_LEFT                  (351+84) // number
141         #define NUMBER_TOP                   (479)
142         #define NUMBER_RIGHT                 (435+84)
143         #define NUMBER_BOTTOM                (600)

145         // %  rectangle
146         #define PERCENT_LEFT                 (519+84) // percent number_left + 2*number_width
147         #define PERCENT_TOP                  (479)
148         #define PERCENT_RIGHT                (627+84)
149         #define PERCENT_BOTTOM               (600)

這是水波紋動畫的大小size,不是啟始點。

151         // top animation part
152         #define TOP_ANIMATION_LEFT           (387) // top animation
153         #define TOP_ANIMATION_TOP            (100)
154         #define TOP_ANIMATION_RIGHT          (691)
155         #define TOP_ANIMATION_BOTTOM         (152)

linux_repo/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

66 /*67  * Check logo.bin address if valid, and get logo related info68  *69  */70 int check_logo_index_valid(unsigned int index, void * logo_addr, LOGO_PARA_T * logo_info)71 {72     unsigned int *pinfo = (unsigned int*)logo_addr;73     logo_info->logonum = pinfo[0];74 75     SLOGD("[show_animation_common: %s %d]logonum =%d, index =%d\n", __FUNCTION__,__LINE__,logo_info->logonum, index);76     if (index >= logo_info->logonum)77     {78         SLOGE("[show_animation_common: %s %d]unsupported logo, index =%d\n", __FUNCTION__,__LINE__, index);79         return CHECK_LOGO_BIN_ERROR;80 81     }                                                                                                                                                              82    // SLOGD("show_animation_common, pinfo[1]=%d,  pinfo[2+index]=%d, pinfo[3+index]=%d, pinfo[3+index] - pinfo[2+index]= %d, pinfo[1] - pinfo[2+index] =%d \n",83    //            pinfo[1],pinfo[2+index],pinfo[3+index], pinfo[3+index] - pinfo[2+index],pinfo[1] - pinfo[2+index]);84 85     if(index < logo_info->logonum - 1)

            //            // ex:以第5張圖為例,            // logolen = pinfo[3+5] - pinfo[2+5]            // 以上算法是屬於相對的,            // 原先假設 pinfo[2+5] 是 壓縮檔裡picture 4 data 的 end address.            // 原先假設 pinfo[3+5] 是 壓縮檔裡picture 5 data 的 end address.            // 相減 為 壓縮檔裡picture 5 data 的長度,            // 但看了 90 行的code,推理 pinfo[2+5] 應是壓縮檔裡 picture 5 data 在 logo.bin 的相對啟始位置。            // 所以 pinfo[3+5] 則是 壓縮檔裡picture 5 data 在 logo.bin 的相對啟始位置。                        //86         logo_info->logolen = pinfo[3+index] - pinfo[2+index];87     else88         logo_info->logolen = pinfo[1] - pinfo[2+index];89         //        // 取出 picture 的 raw data,        // logo_addr                 :壓縮檔 logo.bin 在系統的啟始位置        // pinfo[2+index]            :第 index 圖在壓縮檔 logo.bin 的相對啟始位置        // logo_addr + pinfo[2+index]:第 index 圖在整個系統的啟始位置90     logo_info->inaddr = (unsigned int)logo_addr + pinfo[2+index];91     SLOGD("show_animation_common, in_addr=0x%08x,  logolen=%d\n",92                 logo_info->inaddr,  logo_info->logolen);93 94     return CHECK_LOGO_BIN_OK;95 }

linux_repo/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

98 /*99  * Fill a screen size buffer with logo content
100  *
101  */
102 void fill_animation_logo(unsigned int index, void *fill_addr, void * dec_logo_addr, void * logo_addr, LCM_SCREEN_T phical_screen)
103 {
104     LOGO_PARA_T logo_info;
105     int logo_width;
106     int logo_height;
107     int raw_data_size;
108     if(check_logo_index_valid(index, logo_addr, &logo_info) != CHECK_LOGO_BIN_OK)
109         return;
110         //        // decompress_logo (in, out, in_length, out_length)        //
111     raw_data_size = decompress_logo((void*)logo_info.inaddr, dec_logo_addr, logo_info.logolen, phical_screen.fb_size);
112     //RECT_REGION_T rect = {0, 0, phical_screen.width, phical_screen.height};
113     logo_width =phical_screen.width;
114     logo_height = phical_screen.height;
115     if (phical_screen.rotation == 270 || phical_screen.rotation == 90) {
116         logo_width =phical_screen.height;
117         logo_height = phical_screen.width;
118     }
119     if (0 == bits) {
120         if (raw_data_size == logo_width*logo_height*4) {
121             bits = 32;
122         } else if (raw_data_size == logo_width*logo_height*2) {
123             bits = 16;
124         } else {
125             SLOGE("[show_animation_common: %s %d]Logo data error\n",__FUNCTION__,__LINE__);
126             return;
127         }
128         SLOGD("[show_animation_common: %s %d]bits = %d\n",__FUNCTION__,__LINE__, bits);
129     }
130         //        // 以下代表,要填入的 rectangle 的長度與寬度,        // 因為 fill_animation_logo() 是將整張圖片顯示出來,        // 所以 起始點是從 0,0 開始到整個 panel 的寬度與長度。        // RECT_REGION_T rect = {左,上,右,下}        //
131     RECT_REGION_T rect = {0, 0, logo_width, logo_height};
132
133     fill_rect_with_content(fill_addr, rect, dec_logo_addr, phical_screen, bits);
134
135 }

繼續編輯

待續

转载于:https://www.cnblogs.com/youchihwang/p/6180171.html

charing animation相关推荐

  1. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  2. Android 属性动画(Property Animation) ObjectAnimator的介绍

    先说下属性动画与视图动画的区别: 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到.视图动画系统也存在一些限制,因为它仅公开 ...

  3. Android 属性动画(Property Animation) ValueAnimator 的介绍

    先说下属性动画与视图动画的区别: 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到.视图动画系统也存在一些限制,因为它仅公开 ...

  4. Android 补间动画(Tween Animation)

    Tween Animation(补间动画): Tween动画,通过对View的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可以采用XML来做也可以采用编 ...

  5. css3之transition、transform、animation比较

    css3动画多少都有些了解,但是对于transition.transform.animation这几个属性一直是比较模糊的,所以啊,这里做一个总结,也希望大家都可以对此有一个更好地理解.    其实, ...

  6. animation动画不生效_关于CSS3的animation使用的一些坑,需要注意下!

    CSS3的animation实在是让人爱不释手,越用越觉得离不开了.较高的性能以及和js的逻辑无关性,可以专注于动画效果本身,真的很不错,尤其在手机上,只需主要考虑webkit内核的,更是爽,但随着使 ...

  7. Blender赛车动画制作学习教程 Learn Race Car Animation with Blender

    使用Blender 2.93创建您自己的惊人汽车动画 你会学到什么 Blender的界面和导航 建模 UV制图 材料 动画 照明设备 渲染 合成 要求 下载并安装Blender.免费下载和免费用于任何 ...

  8. Blender3.0动画制作入门学习教程 Learn Animation with Blender (2021)

    要求 下载并安装Blender.免费下载和免费用于任何目的. 描述 加入我的动画课程. 在本课程中,我将从头开始讲述在Blender中创建动画场景的过程. 从第一步到最终渲染.在这个课程中,我们将使用 ...

  9. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals

    如何分类--动画产业基础 大小解压后:6.2G 含课程素材 1920X1080 mp4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 信息: 绘画技巧.解剖学.角色设计.透视和整体讲故事--这门 ...

最新文章

  1. 美多商城之用户登录(QQ登录)
  2. 审计署计算机培训心得体会,审计署计算机中级培训心得体会
  3. note同步不及时 one_高速路失灵/A柱断裂…理想ONE的自动驾驶还能信吗?
  4. 最简单jquery轮播图效果
  5. 用不好PPT模板的本质原因是什么,怎么办
  6. 五、操作系统——内存相关基础知识 和 进程运行的基本原理(详解)
  7. php数组如何去掉相同的元素,如何去掉php数组中的重复的元素
  8. 辽源a货翡翠,张掖a货翡翠
  9. 如何在C#中播放一些AVI短片,并且使背景透明
  10. 专访ThoughtWorks王磊:从单块架构到微服务架构
  11. Sumatra PDF——好用快捷工具介绍及使用
  12. Java扫码登录原理
  13. iPhone模拟器如何截图呢?
  14. 数学算法 湿度计算方法
  15. 医疗管理系统-项目概述和环境搭建
  16. JQuery dataTable 扩展+Ajax Post,Get一些基本操作(二)
  17. 代码管理 阿里云 云效 设置云效 SSH 公钥 下载代码到本地配置SSH
  18. IQueryable和IEnumerable学习
  19. [扩展阅读] EasyGUI 学习文档【超详细中文版】
  20. Flink教程(03)- Flink环境搭建

热门文章

  1. SP 2022论文泛读
  2. 荣耀8x手机换电池实战
  3. 视频剪辑工具,视频怎样批量加背景音乐和特效
  4. Python解决“鸡兔同笼”问题
  5. 国家司法考试真题模拟APP
  6. CR-Fill: Generative Image Inpainting with Auxiliary Contexutal Reconstruction
  7. 灰度图、黑白图,彩色图理解
  8. NANK南卡和明基护眼台灯,到底哪个好?全方位测评两款热门护眼台灯
  9. 安装linux系统提示acpi,ACPI引起linux系统无故重启
  10. 计算机网络基础肖盛文电子书,网络实用教程