S3C6410 Copybit Android 模組設計心得–轉載

來源:互聯網
上載者:User

首先再來回顧下Copybit的介面函數,雖然簡單,但功能一個都不少。


Copybit模組主要使用的硬體加速功能有:
bitBlit
Stretch
Rotate
Alpha blending
Color Transform

1、bit blit和stretch的實現
strctch並沒有特殊去實現,因為所有的座標資料都是Android的Surface和OpenGL ES層傳下來的,主要還是實現bit blit,即塊拷貝。
Android上層,主要是SurfaceFlinger,維護著幾塊重要的圖形緩衝區。
這些圖形緩衝區是通過Gralloc模組申請到的PMEM空間,因此都可以擷取物理地址,提供給2D加速引擎。
為什麼只有幾片緩衝區呢?我估計800x480的螢幕大約只要10MB的PMEM空間即可,這麼點的資料,如果連續傳給LCD,肯定是不夠的。
因此Android採用了部分更新策略,只更新螢幕是需要改變的部分,這一點很適合2D引擎,因為引擎可以只把改變的資料刷到螢幕上。
Copybit的上層會傳遞兩個參數,一個是當前緩衝(螢幕)的總大小,比如800x480,另外是需要更新的視窗大小(x,y,w,h)。
最後需要注意,將資料提供給S3C6410的blit引擎前,需要區分src和dst的資料是什麼(fb或者pmem),如果是fb,傳遞fb基址,否則傳遞pmem物理地址。

2、Rotate實現
Rotate很簡單,座標資料上層基本做好了,重新整理矩形框可以直接使用msm模組的set_rects,配置下2D引擎的旋轉模式即可。

3、Alpha blending實現
Alpha有兩種模式,一種是全屏Alpha數值,另外一種是Android提供的RGBA資料進行Alpha渲染。

第一種比較簡單,如果發現有全屏Alpha值,配置AMB寄存器為重新整理全屏alpha,並填上alpha資料,不過我因為三星0值為0x0,而上層為0xff,所以需要做下轉換,不過全屏alpha的機會很少,看不出。

第二種就是RGBA8888資料中帶有alpha值,這種情況較多,主要體現在介面上。
Android的介面基本是貼兩層圖,一層為背景圖片(RGB565),另外一層為表徵圖(RGBA8888)。
一開始我無論如何配置,螢幕上背景都是黑色,鬱悶了很長時間後才發現需要配置AMB寄存器為alpha with bitmap模式,但是驅動裡面並沒有寫這個寄存器

4、Color Format Transform
顏色格式轉換,因為screen是RGB565的,如果刷來RGBA8888資料,肯定要進行顏色格式轉換,這塊2D引擎肯定有支援。
可是,開始配置RGBA8888轉RGB565時,發現螢幕是紅色的?
調試了很長時間,發現Google Android的RGBA8888竟然是大印第安序的,也就是對應ARM的ABGR8888,這種顏色三星貌似不支援。
手動將色彩轉換配置為ARGB8888,發現白色正常,綠色和藍色反了呵呵,於是寫了一個顏色格式軟換的函數:
daddr[i] = ((saddr[i]) & 0xFF00FF00) | (((saddr[i])&0xFF)<<16) | (((saddr[i]) & 0xFF0000)>>16);
結果這個函數讓介面的效果有所減低,為了這個轉換我還用了另外一塊PMEM。
昨天看三星Android1.5的核心驅動代碼,竟然發現其操作了一個資料手冊沒有的地址(0x350)omg
在網上一搜,有的標頭檔將其標記位印第安序轉換寄存器,頓時欣喜若狂,這樣就支援ABGR顏色格式,不用再軟體轉換!
試過之後,果然有用,流暢感大升,三星你果然還留了一手啊,或許我看的資料手冊太老了。

5、Cache的一致性問題
因為PMEM分配的記憶體上層也要使用,如果不能被cache,效能會有損失。
但是6410的cache是write back的,也就是不同步在記憶體中更新。
這樣會導致如果映像快取資料被cache了,螢幕上會出現一些細小的顏色錯誤。
目前的解決方案是啟動2D引擎前flush下cache,不知道能夠將cache配置為wirte through,哪個效能損失小呢?

Rockie Cheng

最後是Copybit模組最新的測試視屏,真的很流暢

 

本文來自http://hi.baidu.com/aokikyon/blog/item/75cd002a680efb345343c199.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.