本發(fā)明屬于圖像處理技術(shù)領(lǐng)域,尤其涉及一種圖像旋轉(zhuǎn)實現(xiàn)方法及裝置。
背景技術(shù):
隨著電子技術(shù)的發(fā)展,電子圖像的使用越來越廣泛,在電子圖像使用過程中,經(jīng)常會需要對圖像進行旋轉(zhuǎn)操作,以方便用戶瀏覽。
現(xiàn)有的圖像旋轉(zhuǎn)技術(shù)多用軟件實現(xiàn),通過軟件對圖像進行旋轉(zhuǎn)處理,改變圖像的顯示方向,這種方式由于需要處理的數(shù)據(jù)量比較大,通常響應(yīng)速度較慢,不能滿足圖像旋轉(zhuǎn)操作快速、及時性的處理要求。
而極少量用硬件來實現(xiàn)的方案,使用硬件處理的方式由于受限于硬件本身的性能導致其在現(xiàn)有技術(shù)中使用的比較少,其使用的隨機存儲貯存器(RAM)尺寸較大,從而增加芯片面積,這就對硬件本身提出了更高的要求。
可見,現(xiàn)有技術(shù)中的圖像旋轉(zhuǎn)實現(xiàn)方案,均不能滿足在不增加硬件投入的情況下,快速、高效完成圖像旋轉(zhuǎn)操作。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的一個目的是圖像旋轉(zhuǎn)實現(xiàn)方法及裝置。為了對披露的實施例的一些方面有一個基本的理解,下面給出了簡單的概括。該概括部分不是泛泛評述,也不是要確定關(guān)鍵/重要組成元素或描繪這些實施例的保護范圍。其唯一目的是用簡單的形式呈現(xiàn)一些概念,以此作為后面的詳細說明的序言。
本發(fā)明實施例提供一種圖像旋轉(zhuǎn)實現(xiàn)方法,包括:
根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度,確定圖像數(shù)據(jù)的讀取順序;
根據(jù)確定的讀取順序讀取圖像數(shù)據(jù)中的各旋轉(zhuǎn)單元,傳送給旋轉(zhuǎn)器;
旋轉(zhuǎn)器根據(jù)旋轉(zhuǎn)角度對將讀取到的旋轉(zhuǎn)單元中的像素進行像素旋轉(zhuǎn),重組像素旋轉(zhuǎn)后的旋轉(zhuǎn)單元,得到相應(yīng)旋轉(zhuǎn)角度的圖像。
在一些可選的實施例中,當旋轉(zhuǎn)角度為180度時:
所述確定圖像數(shù)據(jù)的讀取順序,具體包括:將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序進行反轉(zhuǎn);相應(yīng)的,
所述根據(jù)旋轉(zhuǎn)角度對將讀取到的旋轉(zhuǎn)單元中像素進行像素旋轉(zhuǎn),重組像素旋轉(zhuǎn)后的旋轉(zhuǎn)單元,得到相應(yīng)旋轉(zhuǎn)角度的圖像,具體包括:
將每個旋轉(zhuǎn)單元內(nèi)的像素順序進行反轉(zhuǎn);
將像素反轉(zhuǎn)后的旋轉(zhuǎn)單元按反轉(zhuǎn)后的地址順序進行重新組織,得到處理后的圖像數(shù)據(jù)。
在一些可選的實施例中,將每個旋轉(zhuǎn)單元內(nèi)的像素順序進行反轉(zhuǎn),具體包括:
將每個旋轉(zhuǎn)單元中包含的一行像素進行順序反轉(zhuǎn);進行順序反轉(zhuǎn)時,將所述一行像素分為指定數(shù)量的像素組,對像素組的順序進行反轉(zhuǎn),以及對像素組中的像素進行順序反轉(zhuǎn)。
在一些可選的實施例中,當旋轉(zhuǎn)角度為90或270度時:
所述確定圖像數(shù)據(jù)的讀取順序,具體包括:將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序按旋轉(zhuǎn)角度進行變換;相應(yīng)的,
所述根據(jù)旋轉(zhuǎn)角度對將讀取到的旋轉(zhuǎn)單元中像素進行像素旋轉(zhuǎn),重組像素旋轉(zhuǎn)后的旋轉(zhuǎn)單元,得到相應(yīng)旋轉(zhuǎn)角度的圖像,具體包括:
將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換;
將行列互換后的旋轉(zhuǎn)單元,按照變換后的地址順序以選定的旋轉(zhuǎn)單元組為單位進行重新組織,得到處理后的圖像數(shù)據(jù)。
在一些可選的實施例中,將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換,具體包括:
通過旋轉(zhuǎn)器將旋轉(zhuǎn)單元中的像素矩陣按照一列接一列的順序填充,再按照一行接一行的順序讀取,實現(xiàn)將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換。
本發(fā)明實施例還提供一種圖像旋轉(zhuǎn)實現(xiàn)裝置,包括:
確定模塊,用于根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度,確定圖像數(shù)據(jù)的讀取順序;
內(nèi)存存取模塊,用于根據(jù)確定的讀取順序讀取圖像數(shù)據(jù)中的各旋轉(zhuǎn)單元,傳送給旋轉(zhuǎn)器;
旋轉(zhuǎn)器,用于根據(jù)旋轉(zhuǎn)角度對將讀取到的旋轉(zhuǎn)單元中的像素進行像素旋轉(zhuǎn);
重組模塊,用于重組像素旋轉(zhuǎn)后的旋轉(zhuǎn)單元,得到相應(yīng)旋轉(zhuǎn)角度的圖像。
在一些可選的實施例中,所述確定模塊,具體用于當旋轉(zhuǎn)角度為180度時,將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序進行反轉(zhuǎn);相應(yīng)的,
所述旋轉(zhuǎn)器,具體用于將每個旋轉(zhuǎn)單元內(nèi)的像素順序進行反轉(zhuǎn);
所述重組單元,具體用于將像素反轉(zhuǎn)后的旋轉(zhuǎn)單元按反轉(zhuǎn)后的地址順序進行重新組織,得到處理后的圖像數(shù)據(jù)。
在一些可選的實施例中,所述旋轉(zhuǎn)器,具體用于將每個旋轉(zhuǎn)單元中包含的一行像素進行順序反轉(zhuǎn);進行順序反轉(zhuǎn)時,將所述一行像素分為指定數(shù)量的像素組,對像素組的順序進行反轉(zhuǎn),以及對像素組中的像素進行順序反轉(zhuǎn)。
在一些可選的實施例中,所述確定模塊,具體用于當旋轉(zhuǎn)角度為90或270度時,將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序按旋轉(zhuǎn)角度進行變換;相應(yīng)的,
所述旋轉(zhuǎn)器,具體用于將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換;
所述重組單元,具體用于將行列互換后的旋轉(zhuǎn)單元,按照變換后的地址順序以選定的旋轉(zhuǎn)單元組為單位進行重新組織,得到處理后的圖像數(shù)據(jù)。
在一些可選的實施例中,所述旋轉(zhuǎn)器,具體用于將旋轉(zhuǎn)單元中的像素矩陣按照一列接一列的順序填充,再按照一行接一行的順序讀取,實現(xiàn)將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換。
本發(fā)明實施例提供的圖像旋轉(zhuǎn)實現(xiàn)方法及裝置,根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度,確定圖像數(shù)據(jù)的讀取順序,通過硬件的方式,以改變讀取順序的形式實現(xiàn)圖像旋轉(zhuǎn)和數(shù)據(jù)重組,得到角度旋轉(zhuǎn)后的圖像數(shù)據(jù),采用硬件內(nèi)存存取的方式實現(xiàn),針對圖像數(shù)據(jù)的特點,充分復用內(nèi)存資源,降低對硬件性能的要求,減少硬件成本投入,同時,提高了處理速度和效率,即便是大數(shù)據(jù)量的圖像,也能夠處理的很及時。
為了上述以及相關(guān)的目的,一個或多個實施例包括后面將詳細說明并在權(quán)利要求中特別指出的特征。下面的說明以及附圖詳細說明某些示例性方面,并且其指示的僅僅是各個實施例的原則可以利用的各種方式中的一些方式。其它的益處和新穎性特征將隨著下面的詳細說明結(jié)合附圖考慮而變得明顯,所公開的實施例是要包括所有這些方面以及它們的等同。
附圖說明
附圖用來提供對本發(fā)明的進一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中:
圖1是本發(fā)明實施例一中圖像旋轉(zhuǎn)實現(xiàn)方法的流程圖;
圖2是本發(fā)明實施例一中圖像旋轉(zhuǎn)實現(xiàn)方法的原理示意圖;
圖3是本發(fā)明實施例二中圖像旋轉(zhuǎn)實現(xiàn)方法的一種具體實現(xiàn)流程圖;
圖4是本發(fā)明實施例二中原始圖像示意圖;
圖5是本發(fā)明實施例二中地址順尋反轉(zhuǎn)后的圖像示意圖;
圖6是本發(fā)明實施例三中圖像旋轉(zhuǎn)實現(xiàn)方法的一種具體實現(xiàn)流程圖;
圖7是本發(fā)明實施例三中原始圖像示意圖;
圖8是本發(fā)明實施例三中90度旋轉(zhuǎn)后的圖像示意圖;
圖9是本發(fā)明實施例三中270度旋轉(zhuǎn)后的圖像示意圖;
圖10是本發(fā)明實施例中旋轉(zhuǎn)器讀寫順序示意圖之一;
圖11是本發(fā)明實施例中旋轉(zhuǎn)器讀寫順序示意圖之二;
圖12是本發(fā)明實施例中旋轉(zhuǎn)器讀寫順序示意圖之三;
圖13是本發(fā)明實施例中第一輪讀取時塊的排列方式示意圖;
圖14是本發(fā)明實施例中第一輪讀取時的填充方式示意圖;
圖15是本發(fā)明實施例中第一輪讀取時的讀取順序示意圖;
圖16是本發(fā)明實施例中第二輪讀取時塊的排列方式示意圖;
圖17是本發(fā)明實施例中第二輪讀取時的填充方式示意圖;
圖18是本發(fā)明實施例中第二輪讀取時的讀取方式示意圖;
圖19是本發(fā)明實施例中第三輪讀取時塊的排列方式示意圖;
圖20是本發(fā)明實施例中圖像旋轉(zhuǎn)實現(xiàn)裝置的結(jié)構(gòu)示意圖。
具體實施方式
以下描述和附圖充分地示出本發(fā)明的具體實施方案,以使本領(lǐng)域的技術(shù)人員能夠?qū)嵺`它們。其他實施方案可以包括結(jié)構(gòu)的、邏輯的、電氣的、過程的以及其他的改變。實施例僅代表可能的變化。除非明確要求,否則單獨的組件和功能是可選的,并且操作的順序可以變化。一些實施方案的部分和特征可以被包括在或替換其他實施方案的部分和特征。本發(fā)明的實施方案的范圍包括權(quán)利要求書的整個范圍,以及權(quán)利要求書的所有可獲得的等同物。在本文中,本發(fā)明的這些實施方案可以被單獨地或總地用術(shù)語“發(fā)明”來表示,這僅僅是為了方便,并且如果事實上公開了超過一個的發(fā)明,不是要自動地限制該應(yīng)用的范圍為任何單個發(fā)明或發(fā)明構(gòu)思。
為了解決現(xiàn)有技術(shù)中存在的通過軟件旋轉(zhuǎn)圖像時,由于處理的數(shù)據(jù)量大,響應(yīng)速度慢,又受限于硬件本身性能,無法在不增加硬件投入的情況下快速、高效的完成圖像旋轉(zhuǎn)的問題,本發(fā)明實施例提供一種圖像旋轉(zhuǎn)實現(xiàn)方法,通過對硬件內(nèi)存存取的復用,通過一定的讀寫順序的變化,實現(xiàn)圖像的旋轉(zhuǎn),降低對硬件的要求,提高處理的速度和效率。
下面通過具體的實施例進行詳細描述。
實施例一
本發(fā)明實施例一提供一種圖像旋轉(zhuǎn)實現(xiàn)方法,其流程如圖1所示,其原理如圖2所示,該方法包括如下步驟:
步驟S101:根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度,確定圖像數(shù)據(jù)的讀取順序。
如圖2所示的,通過直接內(nèi)存存取(DMA),旋轉(zhuǎn)器(Rotator),隨機存儲貯存器控制器(RAM Controller)三個硬件模塊組合來實現(xiàn)圖像旋轉(zhuǎn)。比如選視屏旋轉(zhuǎn)角度或移動顯示屏時,導致的圖像顯示角度旋轉(zhuǎn)等。
DMA根據(jù)需要旋轉(zhuǎn)的角度和圖片源存儲格式以及圖片源數(shù)據(jù)格式,確定圖像數(shù)據(jù)的讀取順序。其中,需要旋轉(zhuǎn)的角度可以是90°、180°、270°等角度。圖片源存儲格式可以是線性的圖片存儲模式(linear mode),塊格式的圖片存儲模式(tile mode)等存儲格式。圖片源數(shù)據(jù)格式可以是32bpp,16bpp,8bpp等數(shù)據(jù)格式。
步驟S102:根據(jù)確定的讀取順序讀取圖像數(shù)據(jù)中的各旋轉(zhuǎn)單元,傳送給旋轉(zhuǎn)器。
DMA以確定出來的順序在雙倍速率同步動態(tài)隨機存儲器(ddr)中讀取圖像數(shù)據(jù),傳送給Rotator。
步驟S103:旋轉(zhuǎn)器根據(jù)旋轉(zhuǎn)角度對將讀取到的旋轉(zhuǎn)單元中的像素進行像素旋轉(zhuǎn)。
Rotator是一個行列轉(zhuǎn)換矩陣,將從DMA讀取來的原始圖片中的每一個旋轉(zhuǎn)單元進行行列轉(zhuǎn)換。使得各旋轉(zhuǎn)單元中所包含的圖像像素的順序改變,達到圖像旋轉(zhuǎn)顯示的效果。
步驟S104:重組像素旋轉(zhuǎn)后的旋轉(zhuǎn)單元,得到相應(yīng)旋轉(zhuǎn)角度的圖像。
RAM Controller是一個片上存儲器的讀寫控制器,它將Rotator以單元塊的順序發(fā)來的數(shù)據(jù),按照顯示器刷新的光柵掃描(Raster scan)順序輸出。從而實現(xiàn)數(shù)據(jù)的重組輸出,得到相應(yīng)旋轉(zhuǎn)角度的輸出圖像。
實施例二
本發(fā)明實施例二提供一種圖像旋轉(zhuǎn)實現(xiàn)方法的具體實現(xiàn)流程,針對180度旋轉(zhuǎn)地情況進行詳細描述,其流程如圖3所示,該方法包括如下步驟:
步驟S201:根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度180度,將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序進行反轉(zhuǎn)。
該步驟由DMA處理。180度旋轉(zhuǎn)時,實際上只要把各像素點的順序按照原來的存儲格式和數(shù)據(jù)格式進行像素點順序反轉(zhuǎn)即可,但由于內(nèi)存讀取一般不是一次只讀取一個像素點,因此需要以旋轉(zhuǎn)單元為單位進行地址順序的反轉(zhuǎn)處理。
步驟S202:將地址順序反轉(zhuǎn)后的旋轉(zhuǎn)單元,傳送給旋轉(zhuǎn)器。
步驟S203:將每個旋轉(zhuǎn)單元內(nèi)的像素順序進行反轉(zhuǎn)。
對旋轉(zhuǎn)單元進行地址順序的反轉(zhuǎn)處理后,還需要將旋轉(zhuǎn)單元中的每個像素點的順序進行反轉(zhuǎn)處理。即將每個旋轉(zhuǎn)單元中包含的一行像素進行順序反轉(zhuǎn);進行順序反轉(zhuǎn)時,將一行像素分為指定數(shù)量的像素組,對像素組的順序進行反轉(zhuǎn),以及對像素組中的像素進行順序反轉(zhuǎn)。
步驟S204:將像素反轉(zhuǎn)后的旋轉(zhuǎn)單元按反轉(zhuǎn)后的地址順序進行重新組織,得到處理后的圖像數(shù)據(jù)。
旋轉(zhuǎn)單元地址順序反轉(zhuǎn)和旋轉(zhuǎn)單元中的像素順序反轉(zhuǎn)后,進行重新組織,即可得到反轉(zhuǎn)后的圖像數(shù)據(jù),反轉(zhuǎn)后的圖像數(shù)據(jù)則對應(yīng)著旋轉(zhuǎn)180度后的圖像。
也就是說,要實現(xiàn)180°旋轉(zhuǎn)(rotation),需要以下2個主要步驟:
1>和0°相比,將向ddr取數(shù)的地址順序反轉(zhuǎn);
2>為了滿足實時性要求,DMA的突發(fā)長度(burst length)和ddr的burst length相同。以burst length=2為例,每個處理(transaction)取到256bit(8個32bpp像素)數(shù)據(jù)為例。那么需要將256比特(bit)中的兩個128bit的順序反轉(zhuǎn)過來;128bit中的四個32bit像素的順序也需要反轉(zhuǎn)過來。
以上1>由DMA實現(xiàn),2>由Rotator實現(xiàn)。在這個場景下,Rotator不需要做行列轉(zhuǎn)換,只需要將一個burst length的數(shù)據(jù)按照像素的順序重新整理。
如圖4所示為旋轉(zhuǎn)前的原始圖像,每一個實線方格代表256bit的旋轉(zhuǎn)單元。數(shù)字“0”代表一幀圖像的起始地址,介于0~64的數(shù)字i表示第i個地址。如圖5所示為1>地址順序反轉(zhuǎn)處理后的圖像。
在1>處理之后,數(shù)據(jù)的順序變?yōu)椋?/p>
63,62,61,…,56,
55,54,53,…,48,
47,46,45,…,40,
39,38,37,…,32,
31,30,29,…,24,
23,22,21,…,16,
15,14,13,…,8,
7,6,5,…,0。
實施例三
本發(fā)明實施例三提供一種圖像旋轉(zhuǎn)實現(xiàn)方法的具體實現(xiàn)流程,其流程如圖6所示,該方法包括如下步驟:
步驟S301:根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度90度或270度,將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序按旋轉(zhuǎn)角度進行變換。
該步驟由DMA處理。其中,90度和270度的變換方向不同。90度和270度度旋轉(zhuǎn)時,實際上只要把各像素點的順序按照原來的存儲格式和數(shù)據(jù)格式進行相應(yīng)角度的變換即可,由于內(nèi)存讀取一般不是一次只讀取一個像素點,因此需要以旋轉(zhuǎn)單元為單位進行地址順序的變換處理。
步驟S302:將地址順序變換后的旋轉(zhuǎn)單元,傳送給旋轉(zhuǎn)器。
步驟S303:將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換。
一個旋轉(zhuǎn)單元內(nèi)其實是一個像素點陣列,因此不僅旋轉(zhuǎn)單元的順序要進行相應(yīng)角度的變換,旋轉(zhuǎn)單元內(nèi)的像素點陣列中的各像素點也要進行相應(yīng)角度的變換。
步驟S304:將行列互換后的旋轉(zhuǎn)單元,按照變換后的地址順序以選定的旋轉(zhuǎn)單元組為單位進行重新組織,得到處理后的圖像數(shù)據(jù)。
通過旋轉(zhuǎn)器將旋轉(zhuǎn)單元中的像素矩陣按照一列接一列的順序填充,再按照一行接一行的順序讀取,實現(xiàn)將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換。
旋轉(zhuǎn)單元地址順序按角度變換后和旋轉(zhuǎn)單元中的像素也按角度變換后,進行重新組織,即可得到反轉(zhuǎn)后的圖像數(shù)據(jù),反轉(zhuǎn)后的圖像數(shù)據(jù)則對應(yīng)著旋轉(zhuǎn)90度或270度后的圖像。
也就是說,對于要實現(xiàn)90°、270°rotation,需要以下3個主要步驟:
1>和0°相比,將向ddr取數(shù)地址順序按照旋轉(zhuǎn)的角度進行變換;
2>將單元塊(block)中的行列進行互換;單元塊也就是上述的旋轉(zhuǎn)單元。
3>將各個block中的數(shù)據(jù)按照實際顯示的順序重新組織。
以上1>由DMA實現(xiàn),2>由Rotator實現(xiàn),3>由RAM Controller實現(xiàn)。
DMA實現(xiàn)的功能描述如下:
如圖7所示為旋轉(zhuǎn)前的原始圖像,每一個細實線方格代表一個block,它是Rotator能夠處理的最小矩陣單元。
經(jīng)過90°rotation后的圖像如圖8所示。但是,為了方便RAM Controller中的讀寫地址的生成,1>中的地址變換應(yīng)該以“cluster”(圖7中各粗實線框包圍的部分)為單位重新組織(在介紹RAM Controller時詳細描述)。在1>處理之后,數(shù)據(jù)的順序變?yōu)椋?/p>
56,24,48,16,40,8,32,0,
57,25,49,17,41,9,33,1,
58,26,50,18,42,10,34,2,
59,27,51,19,43,11,35,3,
60,28,52,20,44,12,36,4,
61,29,53,21,45,13,37,5,
62,30,54,22,46,14,38,6,
63,31,55,23,47,15,39,7。
經(jīng)過270°rotation后的圖像如圖9所示,數(shù)據(jù)的順序變?yōu)椋?/p>
7,39,15,47,23,55,31,63,
6,38,14,46,21,54,30,62,
5,37,13,45,20,53,29,61,
4,36,12,44,19,52,28,60,
3,35,11,43,18,51,27,59,
2,34,10,42,17,50,26,58,
1,33,9,41,16,49,25,57,
0,32,8,40,15,48,24,56。
Rotator實現(xiàn)的功能描述如下:
Rotator利用一個矩陣將一個旋轉(zhuǎn)單元(或說block)中的列順序轉(zhuǎn)換為行順序。也就是將旋轉(zhuǎn)單元中的像素矩陣按照一列接一列的順序填充,按照一行接一行的順序讀取。如圖10、圖11、圖12為旋轉(zhuǎn)器讀寫順序的示意圖。每一個單元代表一個像素,可以是32bpp,16bpp,8bpp等。
以DMA輸出位寬是256bit,Rotator輸出是128bit為例,最小的重復利用的旋轉(zhuǎn)單元(block)參見圖10、圖11、圖12,其表示出了90°、270°rotation的block。其中,w0~wn表示按照一列接一列的順序填充,r0~rn表示按照一行接一行的順序讀取。
圖10、圖11和圖12分別示意出了以4比特/像素(byte/pixel)、2比特/像素(byte/pixel)、1比特/像素(byte/pixel)為最小像素單位進行一列接一。列的順序填充和一行接一行的順序讀取的情況。
其中,圖10中從w0~w3進行一列接一列的順序填充,每行包括8列,然后從r0~r7進行一行接一行的順序讀取。圖11中從w0~w7進行一列接一列的順序填充,每行包括16列,然后從r0~r15進行一行接一行的順序讀取。圖12中從w0~w15進行一列接一列的順序填充,每行包括32列,然后從r0~r31進行一行接一行的順序讀取。
RAM Controller實現(xiàn)的功能描述如下:
Rotator輸出的數(shù)據(jù)是以block為順序的,但RAM Controller輸出的數(shù)據(jù)是按照光柵掃描也就是從上到下從左到右的屏幕刷新順序。因此,RAM controller的作用就是將block的順序轉(zhuǎn)換為光柵掃描順序。根據(jù)原始圖像數(shù)據(jù)格式和類型不同,一個block一般會跨越4~32行像素。而整幀圖像的一整行會跨越多個block。RAM Controller所控制的片上RAM,以一個block接一個block的順序進行填充,以一行接一行的屏幕刷新順序進行取數(shù)。因此,最直觀的想法就是使用一個乒乓存儲器,同時進行讀寫。
同時,為了減少RAM尺寸,且要解決讀寫地址順序不一致的問題,引入了以一種巧妙的讀寫地址控制方法。如圖13至圖17示意出了讀寫順序的一個內(nèi)存使用循環(huán)過程。為了簡化讀寫地址的計算方法,RAM中重復使用的區(qū)域應(yīng)該是越小越好。這個重復使用區(qū)域包含若干個block,這若干block可以稱其為“簇”(cluster)。通過內(nèi)存的復用可以降低對內(nèi)存大小的要求,巧妙的內(nèi)存復用也提高了內(nèi)存的利用率。
cluster中像素的讀取過程描述如下:
以32bpp,linear mode數(shù)據(jù)為例,一個經(jīng)過矩陣轉(zhuǎn)換后的block包含4x8像素,一個cluster包含8個block。
RAM存取的具體過程如下:
1>如圖13示例了一個cluster中包含的block的排列方式。一個cluster中的各個block以圖13所示的方式進行排列;如圖13中從左到右分別為block0、block1、block2、block3、block4、block5、block6、block7共8個block,以block0為例包含4x8pixel,其他block類似。
2>如圖14所示為一個cluster中填充順序示意。每個cluster包含8個block,如圖14中從左到右分別為block0、block1、block2、block3、block4、block5、block6、block7共8個block。RAM以W0.0,W0.1,……,W0.7;W1.0,W1.1,……,W1.7;……;W7.0,W7.1,…….W7.7的順序進行填充,即一列一列的進行填充。每個block需要8次寫動作,所以一個cluster共需要64個寫動作,具體參見如圖14所示的。
3>如圖15所示為一個cluster中讀取順序示意。當一個cluster中所有的block都填充完畢后,可以開始以R0.0,R0.1,……,R0.7;R1.0,R1.1,……,R1.7;……;R7.0,R7.1,……,R7.7的順序進行讀取了。如圖15所示的,以這個順序讀取,那么像素就是按照光柵掃描的順序輸出了。
4>如圖16所示為讀取第一個cluster后,第二個cluster中block的排列方式。在讀取的過程中,因讀出而變?yōu)榭臻e的區(qū)域可以用來進行第二輪的填充,即第二個cluster的填充。第二個cluster中的各個block以圖16所示的方式進行排列,如圖16中從上到下分別為block0、block1、block2、block3、block4、block5、block6、block7共8個block。
5>如圖17所示為第二個cluster中填充順序示意。第二輪的填充順序為W0.0,W0.1,……,W0.7;W1.0,W1.1,……,W1.7;……;W7.0,W7.1,…….W7.7,這和第一輪的讀取順序一樣。如圖17所示的,因此,從第一輪讀取完畢到第二輪填充完畢不需要很長的等待時間。
6>如圖18所示為第二個cluster中讀取順序示意。當RAM通過第二輪的填充再一次被寫滿后,第二輪的讀取開始了。如圖18所示的,讀順序是R0.0,R0.1,……,R0.7;R1.0,R1.1,……,R1.7;……;R7.0,R7.1,……,R7.7。
7>如圖19所示為讀取第二個cluster后,第三個cluster中block的排列方式。如圖19所示的,在讀取過程中,空出來的區(qū)域可以用來填充新一輪的cluster像素。這樣clsuter中塊的排列方式就又回到了第一輪(如圖13所示)的排列方式,進入內(nèi)存的下一個循環(huán)使用過程。
以上過程一直循環(huán),直至所有的cluster都轉(zhuǎn)換完成。
讀寫地址可以很直觀地用三個計數(shù)器(counter)來計算和表示出來。計數(shù)每個block跨越的行數(shù)的counter稱為單元計數(shù)器(unit counter);計數(shù)每個cluster包含的block個數(shù)的counter稱為塊計數(shù)器(block counter);計數(shù)每個lane(芯片上的一條流通槽)包含的cluster個數(shù)的counter稱為簇計數(shù)器(cluster counter)。每個counter的計數(shù)范圍如下,當這些counter計數(shù)到各自的上限后,復位到0:
unit_counter={0,line_per_block};
block_counter={0,block_per_cluster};
cluster_counter={0,cluster_per_lane}。
上述分別表示:
單元計數(shù)={0,每塊的行數(shù)};
塊計數(shù)={0,每簇的塊數(shù)};
簇計數(shù)={0,每條流通槽的簇數(shù)}。
如果需要旋轉(zhuǎn)的圖像比較小,整個圖像只包含一個block的話,block_counter和cluster_counter都為0。這種特例情況下只需要對塊內(nèi)的像素進行旋轉(zhuǎn)即可,可以省去反轉(zhuǎn)或變換block的地址順序的步驟。
上邊圖13至圖19圖中,第一輪的寫地址w0,第一輪的讀地址r0,第二輪的寫地址w1,第二輪的讀地址r1公式如下,通過三個計數(shù)器的計數(shù)來表征:
w0={unit_counter,cluster_counter,block_counter};
r0={block_counter,cluster_counter,unit_counter};
w1={block_counter,cluster_counter,unit_counter};
r1={unit_counter,cluster_counter,block_counter}。
上述分別表示:
第一輪的寫地址w0={單元計數(shù),簇計數(shù),塊計數(shù)};
第一輪的讀地址r0={塊計數(shù),簇計數(shù),單元計數(shù)};
第二輪的寫地址w1={塊計數(shù),簇計數(shù),單元計數(shù)};
第二輪的讀地址r1={單元計數(shù),簇計數(shù),塊計數(shù)}。
通過芯片內(nèi)存存取的復用,提高了芯片利用率,利用讀取完后的空閑部分,及時進行下一輪填充,提高了填充讀取的處理速度,減少了處理等待時間。
基于同一發(fā)明構(gòu)思,本發(fā)明實施例還提供一種圖像旋轉(zhuǎn)實現(xiàn)裝置,其結(jié)構(gòu)如圖20所示,包括:確定模塊201、內(nèi)存存取模塊202、旋轉(zhuǎn)器203和重組模塊204。
確定模塊201,用于根據(jù)待旋轉(zhuǎn)圖像的源存儲格式和源數(shù)據(jù)格式、圖像的旋轉(zhuǎn)角度,確定圖像數(shù)據(jù)的讀取順序;
內(nèi)存存取模塊202,用于根據(jù)確定的讀取順序讀取圖像數(shù)據(jù)中的各旋轉(zhuǎn)單元,傳送給旋轉(zhuǎn)器;
旋轉(zhuǎn)器203,用于根據(jù)旋轉(zhuǎn)角度對將讀取到的旋轉(zhuǎn)單元中的像素進行像素旋轉(zhuǎn);
重組模塊204,用于重組像素旋轉(zhuǎn)后的旋轉(zhuǎn)單元,得到相應(yīng)旋轉(zhuǎn)角度的圖像。
優(yōu)選的,上述確定模塊201,具體用于當旋轉(zhuǎn)角度為180度時,將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序進行反轉(zhuǎn);相應(yīng)的,
優(yōu)選的,上述旋轉(zhuǎn)器203,具體用于將每個旋轉(zhuǎn)單元內(nèi)的像素順序進行反轉(zhuǎn);
優(yōu)選的,上述重組單元204,具體用于將像素反轉(zhuǎn)后的旋轉(zhuǎn)單元按反轉(zhuǎn)后的地址順序進行重新組織,得到處理后的圖像數(shù)據(jù)。
優(yōu)選的,上述旋轉(zhuǎn)器203,具體用于將每個旋轉(zhuǎn)單元中包含的一行像素進行順序反轉(zhuǎn);進行順序反轉(zhuǎn)時,將所述一行像素分為指定數(shù)量的像素組,對像素組的順序進行反轉(zhuǎn),以及對像素組中的像素進行順序反轉(zhuǎn)。
優(yōu)選的,上述確定模塊201,具體用于當旋轉(zhuǎn)角度為90或270度時,將內(nèi)存存取時的旋轉(zhuǎn)單元的地址順序按旋轉(zhuǎn)角度進行變換;相應(yīng)的,
優(yōu)選的,上述旋轉(zhuǎn)器203,具體用于將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換;
優(yōu)選的,上述重組單元204,具體用于將行列互換后的旋轉(zhuǎn)單元,按照變換后的地址順序以選定的旋轉(zhuǎn)單元組為單位進行重新組織,得到處理后的圖像數(shù)據(jù)。
優(yōu)選的,上述旋轉(zhuǎn)器203,具體用于將旋轉(zhuǎn)單元中的像素矩陣按照一列接一列的順序填充,再按照一行接一行的順序讀取,實現(xiàn)將每個旋轉(zhuǎn)單元內(nèi)的像素進行行列互換。
本發(fā)明實施例的上述方法和裝置,使用可重復利用的矩陣做旋轉(zhuǎn)處理。在RAM使用上通過讀寫指針的巧妙設(shè)計,減少了尺寸,縮小了芯片面積。本發(fā)明使用的方法是用硬件來實現(xiàn),提高了旋轉(zhuǎn)的響應(yīng)速度。應(yīng)用范圍廣泛,可適用于手機,平板電腦等移動顯示芯片。
除非另外具體陳述,術(shù)語比如處理、計算、運算、確定、顯示等等可以指一個或更多個處理或者計算系統(tǒng)、或類似設(shè)備的動作和/或過程,所述動作和/或過程將表示為處理系統(tǒng)的寄存器或存儲器內(nèi)的物理(如電子)量的數(shù)據(jù)操作和轉(zhuǎn)換成為類似地表示為處理系統(tǒng)的存儲器、寄存器或者其他此類信息存儲、發(fā)射或者顯示設(shè)備內(nèi)的物理量的其他數(shù)據(jù)。信息和信號可以使用多種不同的技術(shù)和方法中的任何一種來表示。例如,在貫穿上面的描述中提及的數(shù)據(jù)、指令、命令、信息、信號、比特、符號和碼片可以用電壓、電流、電磁波、磁場或粒子、光場或粒子或者其任意組合來表示。
應(yīng)該明白,公開的過程中的步驟的特定順序或?qū)哟问鞘纠苑椒ǖ膶嵗??;谠O(shè)計偏好,應(yīng)該理解,過程中的步驟的特定順序或?qū)哟慰梢栽诓幻撾x本公開的保護范圍的情況下得到重新安排。所附的方法權(quán)利要求以示例性的順序給出了各種步驟的要素,并且不是要限于所述的特定順序或?qū)哟巍?/p>
在上述的詳細描述中,各種特征一起組合在單個的實施方案中,以簡化本公開。不應(yīng)該將這種公開方法解釋為反映了這樣的意圖,即,所要求保護的主題的實施方案需要清楚地在每個權(quán)利要求中所陳述的特征更多的特征。相反,如所附的權(quán)利要求書所反映的那樣,本發(fā)明處于比所公開的單個實施方案的全部特征少的狀態(tài)。因此,所附的權(quán)利要求書特此清楚地被并入詳細描述中,其中每項權(quán)利要求獨自作為本發(fā)明單獨的優(yōu)選實施方案。
本領(lǐng)域技術(shù)人員還應(yīng)當理解,結(jié)合本文的實施例描述的各種說明性的邏輯框、模塊、電路和算法步驟均可以實現(xiàn)成電子硬件、計算機軟件或其組合。為了清楚地說明硬件和軟件之間的可交換性,上面對各種說明性的部件、框、模塊、電路和步驟均圍繞其功能進行了一般地描述。至于這種功能是實現(xiàn)成硬件還是實現(xiàn)成軟件,取決于特定的應(yīng)用和對整個系統(tǒng)所施加的設(shè)計約束條件。熟練的技術(shù)人員可以針對每個特定應(yīng)用,以變通的方式實現(xiàn)所描述的功能,但是,這種實現(xiàn)決策不應(yīng)解釋為背離本公開的保護范圍。
結(jié)合本文的實施例所描述的方法或者算法的步驟可直接體現(xiàn)為硬件、由處理器執(zhí)行的軟件模塊或其組合。軟件模塊可以位于RAM存儲器、閃存、ROM存儲器、EPROM存儲器、EEPROM存儲器、寄存器、硬盤、移動磁盤、CD-ROM或者本領(lǐng)域熟知的任何其它形式的存儲介質(zhì)中。一種示例性的存儲介質(zhì)連接至處理器,從而使處理器能夠從該存儲介質(zhì)讀取信息,且可向該存儲介質(zhì)寫入信息。當然,存儲介質(zhì)也可以是處理器的組成部分。處理器和存儲介質(zhì)可以位于ASIC中。該ASIC可以位于用戶終端中。當然,處理器和存儲介質(zhì)也可以作為分立組件存在于用戶終端中。
對于軟件實現(xiàn),本申請中描述的技術(shù)可用執(zhí)行本申請所述功能的模塊(例如,過程、函數(shù)等)來實現(xiàn)。這些軟件代碼可以存儲在存儲器單元并由處理器執(zhí)行。存儲器單元可以實現(xiàn)在處理器內(nèi),也可以實現(xiàn)在處理器外,在后一種情況下,它經(jīng)由各種手段以通信方式耦合到處理器,這些都是本領(lǐng)域中所公知的。
上文的描述包括一個或多個實施例的舉例。當然,為了描述上述實施例而描述部件或方法的所有可能的結(jié)合是不可能的,但是本領(lǐng)域普通技術(shù)人員應(yīng)該認識到,各個實施例可以做進一步的組合和排列。因此,本文中描述的實施例旨在涵蓋落入所附權(quán)利要求書的保護范圍內(nèi)的所有這樣的改變、修改和變型。此外,就說明書或權(quán)利要求書中使用的術(shù)語“包含”,該詞的涵蓋方式類似于術(shù)語“包括”,就如同“包括,”在權(quán)利要求中用作銜接詞所解釋的那樣。此外,使用在權(quán)利要求書的說明書中的任何一個術(shù)語“或者”是要表示“非排它性的或者”。