專利名稱:一種yuv420圖像轉(zhuǎn)換成rgb565圖像的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻播放領(lǐng)域,尤其涉及一種YUV420圖像轉(zhuǎn)換成RGB565圖像的方法 和系統(tǒng)。
背景技術(shù):
現(xiàn)有技術(shù)中視頻解碼器直接解碼生成的YUV420圖像文件在許多移動終端中是不 能直接顯示的,必須經(jīng)過YUV420轉(zhuǎn)換成RGB565才能顯示,另外,許多的移動終端屏幕像 素與視頻圖像的尺寸不一致,導(dǎo)致移動終端在顯示RGB565時會出現(xiàn)很多空白區(qū)域,降低 了用戶的體驗(yàn)效果,例如視頻圖像的尺寸的像素為MOxlSO,而移動終端屏幕為M0x320, 那么導(dǎo)致移動終端在顯示RGB565格式的視頻文件時會在上、下兩端出現(xiàn)很多空白區(qū)域, 這就需要在移動終端顯示視頻之前做縮放、旋轉(zhuǎn)、顏色轉(zhuǎn)換(即計(jì)算rgb值)的操作步 驟,因YUV420圖像在做縮放、旋轉(zhuǎn)和顏色轉(zhuǎn)換時,每個操作步驟都需要經(jīng)過2次循環(huán),這 樣累計(jì)下來的循環(huán)次數(shù)比較多,而且每步的循環(huán)都需要重新訪問內(nèi)存,效率低,以像素為 240xl80YUV420圖像轉(zhuǎn)換成像素為320x240RGB565圖像為例,通常需要32(^240*5/4 = 115200字節(jié)內(nèi)存。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提出一種YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,旨在 解決現(xiàn)有技術(shù)中視頻解碼器直接解碼生成的YUV420圖像文件在許多移動終端中是不能直 接顯示的,必須經(jīng)過YUV420圖像轉(zhuǎn)換成RGB565圖像,而且直接轉(zhuǎn)換成RGB565圖像后在移 動終端顯示時會有空白區(qū)域,降低了用戶的體驗(yàn)效果,必須在YUV420圖像轉(zhuǎn)換成RGB565圖 像之前做縮放、旋轉(zhuǎn)、顏色轉(zhuǎn)換(即計(jì)算rgb值)的操作步驟,因YUV420圖像在做縮放、旋 轉(zhuǎn)和顏色轉(zhuǎn)換時,每個操作步驟都需要經(jīng)過2次循環(huán),這樣累計(jì)下來的循環(huán)次數(shù)較多,訪問 內(nèi)存量增加,資源浪費(fèi),且效率低。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,包括以 下步驟將原始的YUV420圖像等分為一個或一個以上的原始YUV420圖像塊;預(yù)置原始 YUV420圖像水平和垂直方向的縮放倍數(shù);根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生成縮放 后的YUV420圖像塊;獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根據(jù)縮放后 的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址。本發(fā)明實(shí)施例的另一目的在于提出一種YUV420圖像轉(zhuǎn)換成RGB565圖像的系統(tǒng), 所述系統(tǒng)包括初始模塊,與縮放模塊相連,用于將原始的YUV420圖像等分為一個或一個以上的 原始YUV420圖像塊;預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù);
縮放模塊,與初始模塊和輸出模塊相連,用于根據(jù)所述預(yù)置原始YUV420圖像水平 和垂直方向的縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊;輸出模塊,與縮放模塊相連,用于獲取縮放后的YUV420圖像塊的Y分量、U分量和 V分量,計(jì)算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn) 并分別將rgb值寫入目標(biāo)地址。本發(fā)明的有益效果通過把原始YUV420圖像等分為原始YUV420圖像塊,對原始YUV420圖像塊進(jìn)行縮 放,獲取YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值(即顏色轉(zhuǎn)換),根據(jù)YUV420 圖像的尺寸與移動終端屏幕尺寸確定是否旋轉(zhuǎn)分別把rgb值寫入目標(biāo)地址,從而實(shí)現(xiàn)對每 個原始YUV420圖像塊連續(xù)做縮放、計(jì)算rgb值并輸出,減少了循環(huán)的次數(shù)和訪問內(nèi)存的 數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖像可以在不同像素的移動終端顯示,通過把原始 YUV420圖像等分為不同等分比例的原始YUV420圖像塊和不同的縮放比例,達(dá)到最佳的顯 示效果,減少內(nèi)存使用量,同時保持?jǐn)?shù)據(jù)的局部性,加速內(nèi)存訪問速度。
圖1為本發(fā)明實(shí)施例中原始YUV420圖像的結(jié)構(gòu)圖;圖2為圖1中的原始YUV420圖像塊A縮放后的YUV420圖像塊的結(jié)構(gòu)圖;圖3為圖2中縮放后的YUV420圖像塊的前兩個像素包含的4個Y分量、1個U分 量和1個V分量的結(jié)構(gòu)圖;圖4為圖3中YUV420對應(yīng)的RGB565圖像塊旋轉(zhuǎn)輸出的目標(biāo)位置的結(jié)構(gòu)圖;圖5為圖3中YUV420對應(yīng)的RGB565圖像塊非旋轉(zhuǎn)輸出目標(biāo)位置的結(jié)構(gòu)圖;圖6為本發(fā)明實(shí)施例的一種YUV420圖像轉(zhuǎn)換成RGB565圖像方法的總體流程圖;圖7為本發(fā)明實(shí)施例的一種YUV420圖像轉(zhuǎn)換成RGB565圖像方法的具體流程圖;圖8為本發(fā)明實(shí)施例的一種YUV420圖像轉(zhuǎn)換成RGB565圖像系統(tǒng)的總體結(jié)構(gòu)圖;圖9為本發(fā)明實(shí)施例的一種YUV420圖像轉(zhuǎn)換成RGB565圖像系統(tǒng)的具體結(jié)構(gòu)圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖和實(shí)施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。應(yīng)當(dāng)理 解,此處所描寫的具體實(shí)施例,僅僅用于解釋本發(fā)明,并不用以限制本發(fā)明。本發(fā)明通過把原始YUV420圖像等分為原始YUV420圖像塊,對原始YUV420圖像塊 進(jìn)行縮放,獲取YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值(即顏色轉(zhuǎn)換),根據(jù) YUV420圖像的尺寸與移動終端屏幕尺寸確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址,從而 實(shí)現(xiàn)對每個原始YUV420圖像塊連續(xù)做縮放、計(jì)算rgb值并輸出(包括旋轉(zhuǎn)),減少了循環(huán)的 次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖像可以在不同像素的移動終端 顯示,通過把原始YUV420圖像等分為不同等分比例的原始YUV420圖像塊和不同的縮放比 例,達(dá)到最佳的顯示效果,減少內(nèi)存使用量,同時保持?jǐn)?shù)據(jù)的局部性,加速內(nèi)存訪問速度。實(shí)施例一圖6是本發(fā)明實(shí)施例一種YUV420圖像轉(zhuǎn)換成RGB565圖像方法的總體流程圖。所述方法包括以下步驟S601,將原始的YUV420圖像等分為一個或一個以上的原始YUV420圖像塊;預(yù)置原 始YUV420圖像水平和垂直方向的縮放倍數(shù);所述的YUV420圖像的水平和垂直方向縮放倍數(shù)!7X = Ns_x/Ds_x,Fy = Ns_y/Ds_ y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整數(shù),同時, (2*Ds_x)*(Ns_x/Ds_x)等于縮放后的 YUV420 圖像塊的寬度 tx,(2*Ds_y)*(Ns_y/Ds_y)等 于縮放后的YUV420圖像塊的高度ty?;诳s放倍數(shù)和需要縮放呈現(xiàn)的效果把YUV420圖像 分成一個或一個以上YUV420圖像塊,每個YUV420圖像塊由像素組成;為便于理解,以放大2倍為例說明,如圖1所示為原始YUV420圖像,原始YUV420 圖像的高度和寬度分別為H、W,原始YUV420圖像分成一個以上原始YUV420圖像塊,如圖1 中的原始YUV420圖像塊A、B、C,預(yù)置每個原始YUV420圖像塊的像素為虹4,即原始YUV420 圖像塊的高度和寬度都為4,每個圖像塊都為一個Y分量k,其中4個Y分量對應(yīng)1個U分 量 Us 和一個 V 分量 Vs ;預(yù)置 Ns_x = 4,Ds_x = 2,Ns_y = 4,Ds_y = 2,F(xiàn)x 禾口 Fy 都為 2 ;S602,根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生成 縮放后的YUV420圖像塊; 所述的插值濾波,例如把4個點(diǎn)的圖像變成8個點(diǎn)的圖像,那么每個點(diǎn)如何取值變 成8個點(diǎn)效果最佳的過程叫插值濾波;為便于理解,以放大2倍為例說明,圖2所示為原始YUV420圖像塊A,把原始 YUV420圖像塊A放大2倍后像素為8x8,如圖2所示,包括Y分量1_64,其中縮放后的圖像 塊的寬度為tx,縮放后的圖像塊的高度ty ;S603,獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根據(jù) 縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo) 地址;如果旋轉(zhuǎn),則RGB565圖像的寬度等于原始YUV420圖像塊的高度,縮放后的YUV420 圖像的高度成為RGB565圖像的寬度;所述的rgb值是通過外部函數(shù)做顏色轉(zhuǎn)換的值,所述的外部函數(shù)為get_rgbl6_ value_clip_rgb ()。本實(shí)施例中通過把原始YUV420圖像等分為一個或一個以上的原始YUV420圖像 塊,對原始YUV420圖像塊進(jìn)行縮放,獲取YUV420圖像塊的Y分量、U分量和V分量,計(jì)算 rgb值(即計(jì)算rgb值),根據(jù)YUV420圖像的尺寸與移動終端屏幕尺寸確定是否旋轉(zhuǎn)分別 將rgb值寫入目標(biāo)地址,從而實(shí)現(xiàn)對每個原始YUV420圖像塊連續(xù)做縮放、計(jì)算rgb值并輸 出(包括旋轉(zhuǎn)),減少了循環(huán)的次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖 像可以在不同像素的移動終端顯示,通過把原始YUV420圖像等分為不同等分比例的原始 YUV420圖像塊和不同的縮放比例,達(dá)到最佳的顯示效果,減少內(nèi)存使用量,同時保持?jǐn)?shù)據(jù)的 局部性,加速內(nèi)存訪問速度。實(shí)施例二圖7是本發(fā)明實(shí)施例一種YUV420圖像轉(zhuǎn)換成RGB565圖像方法的具體流程圖。所 述方法包括以下步驟S701,預(yù)置原始YUV420圖像的Y、U、V分量,原始YUV420圖像等分為一個或一個以上的YUV420圖像塊;預(yù)置YUV420圖像的水平方向縮放倍數(shù)h和垂直方向縮放倍數(shù)Fy ;預(yù) 置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針p, 都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后的YUV420圖像塊的Y分量、U分 量和V分量,分別由變量^、Ut和Vt引用;預(yù)置循環(huán)變量1、7、11、71、1、」,初始為0;預(yù)置 RGB565圖像塊輸出坐標(biāo)變量x2、y2 ;所述的YUV420圖像的水平和垂直方向縮放倍數(shù)!7X = Ns_x/Ds_x,Fy = Ns_y/Ds_ y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整數(shù),同時, (2*Ds_x)*(Ns_x/Ds_x)等于縮放后的 YUV420 圖像塊的寬度 tx,(2*Ds_y)*(Ns_y/Ds_y)等 于縮放后的YUV420圖像塊的高度ty?;诳s放倍數(shù)和需要縮放呈現(xiàn)的效果把YUV420圖像 分成一個或一個以上的YUV420圖像塊;所述的首地址指針rgb記錄RGB565圖像塊需要存放的目標(biāo)地址的首地址,所述的 當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ記錄當(dāng)前RGB565圖像塊存放的目標(biāo)地址;為便于理解,以放大2倍為例說明,如圖1所示為原始YUV420圖像,原始YUV420圖 像的高度和寬度分別為H、W,原始YUV420圖像分成一個以上的原始YUV420圖像塊,如圖1 中的原始YUV420圖像塊A、B、C,預(yù)置每個原始YUV420圖像塊的像素為虹4,即原始YUV420 圖像塊的高度和寬度都為4,每個圖像塊都為一個Y分量k,其中4個Y分量對應(yīng)1個U分 量 Us 和一個 V 分量 Vs,這里預(yù)置 Ns_x = 4,Ds_x = 2,Ns_y = 4,Ds_y = 2,F(xiàn)x 禾口 Fy 都為 2 ;圖2所示為原始YUV420圖像塊A,把原始YUV420圖像塊A放大2倍后像素為8x8,如圖 2所示,包括Y分量1-64,其中縮放后的圖像塊的寬度為tx,縮放后的圖像塊的高度ty ;所 述的預(yù)置縮放緩沖區(qū)的為char YUV420_zoom_tmp [3] [ (2*Ns_x) * (2*Ns_y)]內(nèi)存;所述的循環(huán)變量x、y表示原始圖像的水平和垂直方向的坐標(biāo),在循環(huán)過程中,x、y 分別以2*Ds_X、2*Ds_y為步進(jìn)值步進(jìn)。所述的循環(huán)變量xl、yl表示縮放后的YUV420圖像 的水平和垂直方向坐標(biāo),在循環(huán)過程中,xl、yl分別以2*Ns_X、2*Ns_y為步進(jìn)值步進(jìn);所述的RGB565圖像塊輸出坐標(biāo)變量x2、y2,表示的是RGB565圖像塊輸出的水平 坐標(biāo)和垂直坐標(biāo);為便于理解,以放大2倍為例說明,x、y分別以2*Ds_x = 2*2 = 4步進(jìn)、2*Ds_y = 2*2 = 4步進(jìn),即每次處理4個像素的Y分量、1個像素的U分量和1個像素的V分量,如圖 2所示,先處理前2個像素,對應(yīng)的Y分量為1、2、9、10 (其中包含1個像素的U分量和1個 像素的V分量),再處理后2個像素,對應(yīng)的Y分量為3、4、11、12 (其中包含1個像素的U分 量和1個像素的V分量),第二次還是處理4個像素,即首先處理前2個像素,對應(yīng)的Y分量 為5、6、13、14 (其中包含1個像素的U分量和1個像素的V分量)和再處理后2個像素,對 應(yīng)的Y分量為7、8、15、16 (其中包含1個像素的U分量和1個像素的V分量),把4*4大小 的分塊進(jìn)入縮放、rgb轉(zhuǎn)換、旋轉(zhuǎn)輸出,直到處理完畢。S702,計(jì)算縮放后的YUV420圖像的寬度W1、高度HI、縮放后的YUV420圖像塊的高 度ty和寬度tx、Y分量行距stride_s、U分量行距和V分量行距;計(jì)算RGB565圖像的寬度 W2和目標(biāo)地址的首地址rgb ;計(jì)算RGB565圖像塊的行距stride_d、偏移量offset和當(dāng)前 RGB565圖像塊寫入的目標(biāo)地址ρ ;所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ;為便于理解,以放大2倍為例說明,如圖1所示的原始YUV420圖像放大2倍后,縮放后的YUV420圖像的高度和寬度分別為2H和2W ;所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)來,即 每行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides的 二分之一;以放大2倍為例說明,Y分量行距Stride_S = 8,U分量行距和V分量行距為 stride_s的二分之一,即都為4 ;所述的計(jì)算RGB565圖像的寬度W2的方法為如果旋轉(zhuǎn),則W2 = HLRGB565圖像的寬度等于原始YUV420圖像塊的高度,縮放后 的YUV420圖像的高度成為RGB565圖像的寬度;如果不旋轉(zhuǎn),則W2 = Wl ;所述的RGB565圖像塊的行距stride_d的計(jì)算方法為stride_d = W2 ;為便于理 解,以放大2倍為例說明,Y分量行距strides = 8 ;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的 垂直方向和水平方向像素的個數(shù);所述的計(jì)算RGB565圖像的當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量offset具體 為如果旋轉(zhuǎn),offset= 0*W2+(W2_1);如果不旋轉(zhuǎn),則=Offset = 0 ;所述的offset為當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針p+ = offset*2 ;所述的RGB565圖像的目標(biāo)地址的首地址rgb、RGB565圖像塊地址偏移量offset 和當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ這三者的關(guān)系是rgb是輸出的RGB565圖 像的首地址,只需要計(jì)算一次,offset是以像素為單位做偏移,rgb+offse討2就得到了以 字節(jié)為偏移的當(dāng)前RGB565圖像塊的輸出地址P。每輸出一個RGB565圖像塊,當(dāng)前RGB565 圖像塊存放的目標(biāo)地址的指針P都需要做偏移,即rgb+offse討2 ;S703,判斷是否7 <H,如果是,則進(jìn)入步驟S704,如果否,則進(jìn)入步驟S720 ;S704,判斷是否1 < W,如果是,則進(jìn)入步驟S706,如果否,則進(jìn)入步驟S705 ;S705, y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,進(jìn)入步驟 S703 ;S706,根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生成 縮放后的YUV420圖像塊,并存到縮放緩沖區(qū);其中縮放后YUV420圖像塊的寬度為tx,縮放后YUV420圖像塊的高度為ty ;為便于理解,以放大2倍為例說明,如圖1,原始YUV420圖像塊A像素為虹4,如圖 2所示,放大2倍后像素為8x8,y和yl以步進(jìn)值y+= 4,yl+= 8步進(jìn),縮放后的數(shù)據(jù)存 在 YUV420_zoom_tmp [3]中,Yt = YUV420_zoom_tmp
,Ut = YUV420_zoom_tmp [1],Vt = YUV420_zoom_tmp [2],分別以^、Ut和Vt分別引用縮放緩沖區(qū)中的Y分量、U分量、V分量; 此時的tx和ty分別為8 ;S707, i = ty/2, j = tx/4 ;所述的i = ty/2,表示垂直方向一次跳轉(zhuǎn)2行,所以ty除以2,以放大2倍為例說 明,i = 4;
所述的j = tx/4,表示水平方向一次處理4個像素,所以tx除以4,以放大2倍為 例說明,j = 2 ;S708,判斷是否旋轉(zhuǎn),如果是,則進(jìn)入步驟S709,如果否,則進(jìn)入步驟S714 ;所述的判斷是根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸確定是否旋 轉(zhuǎn)寫入rgb值;S709, x2 = -yl, y2 = xl, ρ = & rgb [ (y2氺stride_d+x2)氺2];因?yàn)橐D(zhuǎn),縮放后的水平的YUV420圖像塊計(jì)算rgp值后按照垂直方向輸出,縮 放后的垂直方向的YUV420圖像塊計(jì)算rgp值后按照水平方向輸出,所以需要交換xl、yl ;為便于理解,以放大2倍為例說明,如圖3為縮放后的YUV420圖像塊的前兩個像 素包含的4個Y分量、1個U分量和1個V分量;S710,獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入p, y+ = 2,ρ+ = 2*stride_d, Ut++, Vt++ ;獲取后兩個像素的U分量和V分量,計(jì)算后兩個像 素的 rgb 值,分別寫入 p, y+ = 2, ρ+ = 2*stride_d,j = j—, Ut++, Vt++ ;為便于理解,以放大2倍為例說明,如圖3所示,這里獲取的U分量和V分量為Y 分量Yl、Y2、Y9、YlO所對應(yīng)的Ul分量和Vl分量;所述的計(jì)算前兩個像素的rgb值,寫入ρ的方法具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的get_rgbl6_value_clip_rgb()為外部函數(shù),該外部函數(shù)完成YUV420到 rgb565的轉(zhuǎn)換;為便于理解,以放大2倍為例說明,附、1 2、1 9、1 10輸出的目標(biāo)位置如圖4所示,為 圖3中YUV420對應(yīng)的RGB565圖像塊旋轉(zhuǎn)輸出的目標(biāo)位置;所述的y+ = 2 ;ρ+ = 2*stride_d 是 y 禾Π ρ 做偏移;所述的獲取后2個像素的U分量和V分量,為便于理解,以放大2倍為例說明,如 圖2所示,此時獲取的U分量和V分量為Y分量TO、Y4、Y11、Y12所對應(yīng)的U2分量和V2分 量;
位置;
15
所述的計(jì)算后兩個像素的rgb值,分別寫入ρ的過程為 ρ
= get_rgbl6_value_clip_rgb(u, ν, y
); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]); 為便于理解,以放大2倍為例說明,如圖4所示R3、R4、RlU R12寫入目標(biāo)地址的
S711,判斷j是否等于0,如果是,則進(jìn)入步驟S712,如果否,則進(jìn)入步驟S710 ; S712, Yt+ = -tx+2*t_stride, ρ+ = -2-ff*stride_d, i = i—, j = tx/4 ; S713,判斷i是否等于0,如果是,則進(jìn)入步驟S719,如果否,則進(jìn)入步驟S710 ; S714, x2 = xl, y2 = yl, ρ = & rgb [ (y2*stride_d+x2) *2];
S715,獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入p, y+ = 2,p+ = 2, Ut++, Vt++ ;獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值, y+ = 2, ρ+ = 2, j = j—, Ut++, Vt++ ;為便于理解,以放大2倍為例說明,如圖2所示,這里獲取的U分量和V分量為Y 分量Y1、Y2、Y9、Y10所對應(yīng)的Ul分量和Vl分量,計(jì)算后兩個像素的rgb值,分別寫入ρ ;圖 5為圖3中YUV420對應(yīng)的RGB565圖像塊非旋轉(zhuǎn)寫入目標(biāo)地址的結(jié)構(gòu)圖;所述的計(jì)算前兩個像素的rgb值,分別寫入p,具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);為便于理解,以放大2倍為例說明,如圖5為圖3中YUV420對應(yīng)的RGB565圖像塊 Rl、R2、R9、RlO非旋轉(zhuǎn)寫入目標(biāo)地址的位置;所述的獲取后兩個像素的U分量和V分量,為便于理解,以放大2倍為例說明,如 圖2所示,此時獲取的U分量和V分量為Y分量TO、Y4、Y11、Y12所對應(yīng)的U2分量和V2分 量;所述的計(jì)算后兩個像素的rgb值,分別寫入P,具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);為便于理解,以放大2倍為例說明,如圖5為圖3中YUV420對應(yīng)的RGB565圖像塊 R3、R4、Rl 1、R12非旋轉(zhuǎn)寫入目標(biāo)地址的位置;S716,判斷j = 0 ?如果是,則進(jìn)入步驟S717,如果否,則進(jìn)入步驟S715 ;S717, Yt+ = -tx+2*t_stride, ρ+ = -tx+2*stride_d, i = i—, j = tx/4 ;S718,判斷i=0 如果是,則進(jìn)入步驟S719,如果否,則進(jìn)入步驟S715 ;S719, χ = x+(2*Ds_x),xl = xl+Q*Ns_x),進(jìn)入步驟 S704 ;S720, RGB565圖像輸出結(jié)束。本實(shí)施例中通過預(yù)置六個循環(huán)變量和計(jì)算步進(jìn)值,在一個相同的循環(huán)周期完成整 個原始YUV420圖像轉(zhuǎn)換成RGB565圖像的過程,其中在轉(zhuǎn)換過程中是通過先把原始YUV420 圖像等分為原始YUV420圖像塊,對每個原始YUV420圖像塊進(jìn)行縮放、顏色轉(zhuǎn)換(即計(jì)算 rgb值),分別寫入目標(biāo)地址(包括旋轉(zhuǎn)),減少了循環(huán)的次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn) 換效率,輸出的RGB565圖像可以在不同像素的移動終端顯示,通過把原始YUV420圖像等分 為不同等分比例的原始YUV420圖像塊和不同的縮放比例,達(dá)到最佳的顯示效果,減少內(nèi)存 使用量,同時保持?jǐn)?shù)據(jù)的局部性,加速內(nèi)存訪問速度。實(shí)施例三圖8是本發(fā)明實(shí)施例一種YUV420圖像轉(zhuǎn)換成RGB565圖像系統(tǒng)的總體結(jié)構(gòu)示意 圖。所述的系統(tǒng)包括初始模塊、縮放模塊、輸出模塊;
初始模塊,與縮放模塊相連,用于將原始的YUV420圖像等分為一個或一個以上的 原始YUV420圖像塊;預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù);所述的YUV420圖像的水平和垂直方向縮放倍數(shù)!7X = Ns_x/Ds_x,Fy = Ns_y/Ds_ y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整數(shù),同時, (2*Ds_x)*(Ns_x/Ds_x)等于縮放后的 YUV420 圖像塊的寬度 tx,(2*Ds_y)*(Ns_y/Ds_y)等 于縮放后的YUV420圖像塊的高度ty?;诳s放倍數(shù)和需要縮放呈現(xiàn)的效果把YUV420圖像 分成一個或一個以上的YUV420圖像塊,每個YUV420圖像塊由像素組成;為便于理解,以放大2倍為例說明,如圖1所示為原始YUV420圖像,原始YUV420 圖像的高度和寬度分別為H、W,原始YUV420圖像分成一個以上的原始YUV420圖像塊,如圖 1中的原始YUV420圖像塊A、B、C,每個原始YUV420圖像塊的像素為虹4,即原始YUV420圖 像塊的高度和寬度都為4,每個圖像塊都為一個Y分量k,其中4個Y分量對應(yīng)1個U分量 Us 和一個 V 分量 Vs ;預(yù)置 Ns_x = 4,Ds_x = 2,Ns_y = 4,Ds_y = 2,F(xiàn)x 和 Fy 都為 2 ;縮放模塊,與初始模塊和輸出模塊相連,用于根據(jù)所述預(yù)置原始YUV420圖像水平 和垂直方向的縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊;為便于理解,以放大2倍為例說明,圖2所示為原始YUV420圖像塊A,把原始 YUV420圖像塊A放大2倍后像素為8x8,如圖2所示,包括Y分量1_64,其中縮放后的圖像 塊的寬度為tx,縮放后的圖像塊的高度ty ;輸出模塊,與縮放模塊相連,用于獲取縮放后的YUV420圖像塊的Y分量、U分量和 V分量,計(jì)算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn) 并分別將rgb值寫入目標(biāo)地址;所述的是否旋轉(zhuǎn)是根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸確定是 否需要旋轉(zhuǎn)寫入rgb值,即RGB565圖像的寬度等于原始YUV420圖像塊的高度,縮放后的 YUV420圖像的高度成為RGB565圖像的寬度;所述的rgb值是通過外部函數(shù)做顏色轉(zhuǎn)換的值,所述的外部函數(shù)為get_rgbl6_ value_clip_rgb ();本實(shí)施例中通過初始模塊把原始YUV420圖像等分為原始YUV420圖像塊,縮放模 塊對原始YUV420圖像塊進(jìn)行縮放,輸出縮放后的YUV420圖像塊,輸出模塊先顏色轉(zhuǎn)換(即 計(jì)算rgb值),然后根據(jù)YUV420圖像的尺寸與移動終端屏幕尺寸確定是否旋轉(zhuǎn)分別將rgb 值寫入目標(biāo)地址,從而實(shí)現(xiàn)對每個原始YUV420圖像塊連續(xù)做縮放、計(jì)算rgb值并輸出(包 括旋轉(zhuǎn)),減少了循環(huán)的次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖像可以 在各種像素移動終端顯示,通過把原始YUV420圖像等分為不同等分比例的原始YUV420圖 像塊和不同的縮放比例,達(dá)到最佳的顯示效果,減少內(nèi)存使用量,同時保持?jǐn)?shù)據(jù)的局部性, 加速內(nèi)存訪問速度。實(shí)施例四圖9是本發(fā)明實(shí)施例一種YUV420圖像轉(zhuǎn)換成RGB565圖像系統(tǒng)的具體結(jié)構(gòu)圖,本 實(shí)施例中的需要做旋轉(zhuǎn)操作。所述系統(tǒng)包括初始模塊、第一判斷模塊、第二判斷模塊、縮放模塊、輸出模塊、第 三判斷模塊、第四判斷模塊、步進(jìn)模塊;初始模塊,與第一判斷模塊相連,用于預(yù)置原始YUV420圖像的Y、U、V分量,原始YUV420圖像等分為一個或一個以上的YUV420圖像塊;預(yù)置YUV420圖像的水平方向縮放倍 數(shù)h和垂直方向縮放倍數(shù)Fy ;預(yù)置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565 圖像塊存放的目標(biāo)地址的指針P,都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后 的YUV420圖像塊的Y分量、U分量和V分量,分別由變量Yt、Ut和Vt引用;預(yù)置循環(huán)變量 乂、又、11、71、丨、」,初始為0;預(yù)置1 8565圖像塊輸出坐標(biāo)變量x2、y2 ;計(jì)算縮放后的YUV420 圖像的寬度W1、高度HI、縮放后的YUV420圖像塊的高度ty和寬度tx、Y分量行距stride_ s、U分量行距和V分量行距;計(jì)算RGB565圖像的寬度W2和目標(biāo)地址的首地址rgb ;計(jì)算 RGB565圖像塊的行距stride_d、偏移量offset和當(dāng)前RGB565圖像塊寫入的目標(biāo)地址ρ ;所述的YUV420圖像的水平和垂直方向縮放倍數(shù)!7X = Ns_x/Ds_x,Fy = Ns_y/Ds_ y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整數(shù),同時, (2*Ds_x)*(Ns_x/Ds_x)等于縮放后的 YUV420 圖像塊的寬度 tx,(2*Ds_y)*(Ns_y/Ds_y)等 于縮放后的YUV420圖像塊的高度ty?;诳s放倍數(shù)和需要縮放呈現(xiàn)的效果把YUV420圖像 分成一個或一個以上的YUV420圖像塊,每個YUV420圖像塊由像素組成;所述的首地址指針rgb記錄RGB565圖像塊需要存放的目標(biāo)地址的首地址,所述的 當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ記錄當(dāng)前RGB565圖像塊存放的目標(biāo)地址;所述的循環(huán)變量x、y表示原始圖像的水平和垂直方向的坐標(biāo),在循環(huán)過程中,x、y 分別以2*Ds_X、2*Ds_y為步進(jìn)值步進(jìn)。所述的循環(huán)變量xl、yl表示縮放后的YUV420圖像 的水平和垂直方向坐標(biāo),在循環(huán)過程中,xl、yl分別以2*Ns_X、2*Ns_y為步進(jìn)值步進(jìn);所述的RGB565圖像塊輸出坐標(biāo)變量x2、y2,表示的是RGB565圖像塊輸出的水平 坐標(biāo)和垂直坐標(biāo);所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ;所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)來,即 每行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides的 二分之一;以放大2倍為例說明,Y分量行距Stride_S = 8,U分量行距和V分量行距為 stride_s的二分之一,即都為4 ;所述的RGB565圖像的寬度W2 = Hl,RGB565圖像的寬度等于原始YUV420圖像塊 的高度,縮放后的YUV420圖像的高度成為RGB565圖像的寬度;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的 垂直方向和水平方向像素的個數(shù);所述的RGB565圖像塊的當(dāng)前目標(biāo)地址相對于RGB565圖像首地址的偏移量offset =0*W2+(W2-1);所述的offset為當(dāng)前目標(biāo)地址相對于RGB565圖像首地址的偏移量;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針p+ = offset*2 ;所述的RGB565圖像的目標(biāo)地址的首地址rgb、RGB565圖像塊的地址偏移量offset 和當(dāng)前RGB圖像塊存放的目標(biāo)地址的指針ρ這三者的關(guān)系是rgb是輸出的RGB565圖像的 首地址,只需要計(jì)算一次,offset是以像素為單位做偏移,rgb+offse討2就得到了以字節(jié) 為偏移的當(dāng)前RGB565圖像塊的輸出地址P。每輸出一個RGB565圖像塊,當(dāng)前RGB565圖像 塊存放的目標(biāo)地址的指針P都需要做偏移,即rgb+offse討2 ;
第一判斷模塊,與初始模塊、第二判斷模塊和步進(jìn)模塊相連,用于判斷是否y < H, 如果是,則通知第二判斷模塊,如果否,則RGB565圖像輸出結(jié)束;第二判斷模塊,與第一判斷模塊、步進(jìn)模塊和縮放模塊相連,用于判斷是否χ < W, 如果是,則通知縮放模塊進(jìn)行縮放,如果否,則通知步進(jìn)模塊;縮放模塊,與第二判斷模塊、輸出模塊相連,用于根據(jù)所述預(yù)置原始YUV420圖像 水平和垂直方向的縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊,并存到縮放緩沖區(qū),i =ty/2,j = tx/4,并通知輸出模塊;其中縮放后YUV420圖像塊的寬度為tx,縮放后YUV420圖像塊的高度為ty ;輸出模塊,與縮放模塊、第三判斷模塊和第四判斷模塊相連,用于接收縮放模塊發(fā) 送的通知、第三判斷模塊發(fā)送的通知和第四判斷模塊發(fā)送的通知,獲取前兩個像素的U分 量和V分量,計(jì)算前兩個像素的rgb值,分別寫入P,y+ = 2,P+ = 2*stride_d, Ut++, Vt++, 獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入p,y+ = 2,ρ+ = 2*stride_d, j = j-, Ut++, Vt++,并通知第三判斷模塊進(jìn)行判斷;所述的輸出模塊在所述 的“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根據(jù)縮放后的 YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址”之 前還用于如果旋轉(zhuǎn),則 x2 = -yl, y2 = χ ,ρ = & rgb [ (y2*stride_d+x2) *2];所述的i = ty/2,表示垂直方向一次跳轉(zhuǎn)2行,所以ty除以2,以放大2倍為例說 明,i = 4;所述的j = tx/4,表示水平方向一次處理4個像素,所以tx除以4,以放大2倍為 例說明,j = 2 ;所述的計(jì)算前兩個像素的rgb值并分別寫入P,具體為ρ
= get—rgbl6_value_clip—rgb (u,v,y
);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的計(jì)算后兩個像素的rgb值,并分別寫入ρ具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的get_rgbl6_value_clip_rgb()為外部函數(shù),該外部函數(shù)完成YUV420到 rgb565的轉(zhuǎn)換;第三判斷模塊,與輸出模塊和第四判斷模塊相連,用于判斷j是否等于0,如果是, 則 Yt+ = -tx+2*t_stride,ρ+ = -2_W*stride_d,i = i—,j = tx/4 ;并通知第四判斷模 塊;如果否,通知輸出模塊;第四判斷模塊,與第三判斷模塊、輸出模塊和步進(jìn)模塊相連,用于判斷i是否等于 0,如果是,則通知步進(jìn)模塊,并通知第二判斷模塊;如果否,則通知輸出模塊;步進(jìn)模塊,與第一判斷模塊、第二判斷模塊和第四判斷模塊相連,用于接收第二判 斷模塊的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判斷模塊;還用于接收第四判斷模塊發(fā)送的通知并χ = x+(2*Ds_x),Xl = xl+(2*Ns_x)。本實(shí)施例中通過第二判斷模塊和第四判斷模塊的判斷結(jié)果,通知步進(jìn)模塊對循環(huán) 變量X、XI、1、Il進(jìn)行步進(jìn),從而獲取下一個原始YUV420圖像塊;通過第三判斷模塊和第 四判斷模塊的判斷結(jié)果,通知輸出模塊計(jì)算當(dāng)前兩行的RGB圖像塊的rgb值并輸出(包括 旋轉(zhuǎn));實(shí)現(xiàn)了在需要旋轉(zhuǎn)的情況下,在同一個循環(huán)周期內(nèi)完成整個YUV420圖像到RGB565 圖像的轉(zhuǎn)換,減少了循環(huán)的次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖像 可以在不同像素的移動終端顯示,通過把原始YUV420圖像等分為不同等分比例的原始 YUV420圖像塊和不同的縮放比例,達(dá)到最佳的顯示效果,減少內(nèi)存使用量,同時保持?jǐn)?shù)據(jù)的 局部性,加速內(nèi)存訪問速度。實(shí)施例五圖9是本發(fā)明實(shí)施例一種YUV420圖像轉(zhuǎn)換成RGB565圖像系統(tǒng)的具體結(jié)構(gòu)圖,本 實(shí)施例中的不需要做旋轉(zhuǎn)操作。所述系統(tǒng)包括初始模塊、第一判斷模塊、第二判斷模塊、縮放模塊、輸出模塊、第 三判斷模塊、第四判斷模塊、步進(jìn)模塊;初始模塊,與第一判斷模塊相連,用于預(yù)置原始YUV420圖像的Y、U、V分量,原始 YUV420圖像等分為一個或一個以上的YUV420圖像塊;預(yù)置YUV420圖像的水平方向縮放倍 數(shù)h和垂直方向縮放倍數(shù)Fy ;預(yù)置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565 圖像塊存放的目標(biāo)地址的指針P,都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后 的YUV420圖像塊的Y分量、U分量和V分量,分別由變量Yt、Ut和Vt引用;預(yù)置循環(huán)變量 乂、又、11、71、丨、」,初始為0;預(yù)置1 8565圖像塊輸出坐標(biāo)變量x2、y2 ;計(jì)算縮放后的YUV420 圖像的寬度W1、高度HI、縮放后的YUV420圖像塊的高度ty和寬度tx、Y分量行距stride_ s、U分量行距和V分量行距;計(jì)算RGB565圖像的寬度W2和目標(biāo)地址的首地址rgb ;計(jì)算 RGB565圖像塊的行距stride_d、偏移量offset和當(dāng)前RGB565圖像塊寫入的目標(biāo)地址ρ ;所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ;所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)確定, 即每行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides 的二分之一;所述的RGB565圖像的寬度W2 = Wl ;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的RGB565圖像塊的行距stride_d = W2 ;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的 垂直方向和水平方向像素的個數(shù);所述的RGB565圖像塊的當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量offset = 0 ;所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針p+ = offset*2 ;第一判斷模塊,與初始模塊、第二判斷模塊和步進(jìn)模塊相連,用于判斷是否y < H, 如果是,則通知第二判斷模塊,如果否,則RGB565圖像輸出結(jié)束;第二判斷模塊,與第一判斷模塊、步進(jìn)模塊和縮放模塊相連,用于判斷是否χ < W, 如果是,則通知縮放模塊進(jìn)行縮放,如果否,則通知步進(jìn)模塊;縮放模塊,與第二判斷模塊和輸出模塊相連,用于根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊,并存到縮放緩沖區(qū),i =ty/2,j = tx/4,并通知輸出模塊;輸出模塊,與縮放模塊、第三判斷模塊和第四判斷模塊相連,用于接收縮放模塊發(fā) 送的通知、第三判斷模塊發(fā)送的通知和第四判斷模塊發(fā)送的通知,獲取前兩個像素的U分 量和V分量,計(jì)算前兩個像素的rgb值,分別寫入p,y+ = 2,ρ+ = 2,Ut++, Vt++,獲取后兩 個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,y+ = 2,p+ = 2,j = j-, Ut++, Vt++, 并通知第三判斷模塊進(jìn)行判斷;所述的輸出模塊在所述的“獲取縮放后的YUV420圖像塊的 Y分量、U分量和V分量,計(jì)算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺 寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址”之前還用于如果不旋轉(zhuǎn),則x2 = xl,y2 = yl,ρ = & rgb[(y2*stride_d+x2)*2];所述的計(jì)算前兩個像素的rgb值,并分別寫入ρ具體為ρ
= get—rgbl6_value_clip—rgb (u,v,y
);ρ [1] = get—rgbl6_value_clip—rgb (u,v,y [1]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的計(jì)算后兩個像素的rgb值,并分別寫入ρ具體為ρ
= get—rgbl6_value_clip—rgb (u,v,y
);ρ [1] = get—rgbl6_value_clip—rgb (u,v,y [1]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);第三判斷模塊,與輸出模塊和第四判斷模塊相連,用于判斷j是否等于0,如果是, 則 Yt+ = -tx+2*t_stride,ρ+ = -tx+2*stride_d,i = i—,j = tx/4 ;并通知第四判斷模 塊;如果否,通知輸出模塊;第四判斷模塊,與第三判斷模塊、輸出模塊和步進(jìn)模塊相連,用于判斷i是否等于 0,如果是,則通知步進(jìn)模塊,并通知第二判斷模塊;如果否,則通知輸出模塊;步進(jìn)模塊,與第一判斷模塊、第二判斷模塊和第四判斷模塊相連,用于接收第二判 斷模塊的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判斷模塊;還用于接 收第四判斷模塊發(fā)送的通知并χ = x+(2*Ds_x),xl = xl+(2*Ns_x)。本實(shí)施例中通過第二判斷模塊和第四判斷模塊的判斷結(jié)果,通知步進(jìn)模塊對循環(huán) 變量x、xl、y、yl進(jìn)行步進(jìn),從而獲取下一個原始YUV420圖像塊;通過第三判斷模塊和第四 判斷模塊的判斷結(jié)果,通知輸出模塊計(jì)算當(dāng)前兩行的RGB圖像塊的rgb值并輸出;實(shí)現(xiàn)了在 不需要旋轉(zhuǎn)的情況下,在同一個循環(huán)周期內(nèi)完成整個YUV420圖像到RGB565圖像的轉(zhuǎn)換,減 少了循環(huán)的次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖像可以在不同像素 的移動終端顯示,通過把原始YUV420圖像等分為不同等分比例的原始YUV420圖像塊和不 同的縮放比例,達(dá)到最佳的顯示效果,減少內(nèi)存使用量,同時保持?jǐn)?shù)據(jù)的局部性,加速內(nèi)存 訪問速度。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述方法包括以下步驟 將原始的YUV420圖像等分為一個或一個以上的原始YUV420圖像塊;預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù);根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生成縮放后的 YUV420圖像塊;獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根據(jù)縮放后的 YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址。
2.如權(quán)利要求1所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述的步驟“根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生 成縮放后的YUV420圖像塊”之前還包括步驟“預(yù)置原始YUV420圖像的Y、U、V分量,以及原始YUV420圖像的寬度W和高度H ; 預(yù)置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565圖像塊存放的目標(biāo)地址的 指針P,都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后的YUV420圖像的Y分量、U分量和V分量,分別由變 量Yt、Ut和Vt引用;預(yù)置循環(huán)變量X、y、XI、yi、i、j,初始為0 ; 預(yù)置RGB565圖像塊輸出坐標(biāo)變量x2、y2 ;計(jì)算縮放后的YUV420圖像的寬度W1、高度HI、縮放后的YUV420圖像塊的高度ty和寬 度tx、Y分量行距Stride一S、U分量行距和V分量行距;計(jì)算RGB565圖像的寬度W2和目 標(biāo)地址的首地址rgb ;計(jì)算RGB565圖像塊的行距stride_d、偏移量offset和當(dāng)前RGB565 圖像塊寫入的目標(biāo)地址P;如果y < H且χ < W,則進(jìn)入步驟“根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的 縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊”;所述的步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根 據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目 標(biāo)地址”中旋轉(zhuǎn)時寫入目標(biāo)地址的方法具體為所述的步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根 據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目 標(biāo)地址”之前還包括步驟 "i = ty/2,j = tx/4 ;x2 = -yl, y2 = xl, ρ = & rgb [ (y2*stride_d+x2) *2],,;所述的步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根 據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目 標(biāo)地址”分為兩個步驟為“獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入目標(biāo)地址,y+ =2, ρ+ = 2*stride_d, Ut++, Vt++ ;獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入目標(biāo)地址,y+ =2,ρ+ = 2氺stride_d,j = j—, Ut++, Vt++";所述的步驟“獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入目標(biāo)地址,y+ = 2,ρ+ = 2*stride_d,j = j—,Ut++, Vt++” 之后包括步驟“如果 j 等于 0,則 Yt+ = -tx+2*t_stride,ρ+ = -2_W*stride_d,i = i—,j = tx/4 ; 如果 i 等于 0,則 χ = x+(2*Ds_x),xl = xl+(2*Ns_x); 如果 χ 不小于 W,則 y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0 ; 如果y不小于H,則RGB565圖像輸出結(jié)束”;其中所述的Ns_x和Ds_x、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整 數(shù),同時,(2*DS_X)*(NS_X/DS_X)等于縮放后的YUV420圖像塊的寬度,(2*Ds_y)*(Ns_y/ Ds_y)等于縮放后的YUV420圖像塊的高度。
3.如權(quán)利要求2所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述的步驟“獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入 目標(biāo)地址”具體為ρ
= get—rgbl6—value—clip—rgb (u,ν, y
); ρ [stride_d] = get—rgbl6_value_clip—rgb (u,v,y [1]); ρ [-1] = get—rgbl6_value_clip—rgb (u,v,y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]); 所述的步驟“獲取后兩個像素的υ分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入 目標(biāo)地址”具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l])。
4.如權(quán)利要求2所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述的步驟“如果 j 等于 0,則 Yt+ = -tx+2*t_stride,p+ = -2-ff*stride_d, i = i—, j = tx/4”之后還包括步驟“如果j不等于0,則進(jìn)入步驟“獲取縮放后的YUV420圖像塊的 Y分量、U分量和V分量,計(jì)算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺 寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址”;所述的步驟“如果i等于0,則χ = x+(2*Ds_x),xl = xl+(2*Ns_x) ”之后還包括步驟 “如果i不等于0,則進(jìn)入步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì) 算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將 rgb值寫入目標(biāo)地址”。
5.如權(quán)利要求1所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述的步驟“根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù),插值濾波生 成縮放后的YUV420圖像塊”之前還包括步驟“預(yù)置原始YUV420圖像的Y、U、V分量,以及原始YUV420圖像的寬度W和高度H ; 預(yù)置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565圖像塊存放的目標(biāo)地址的 指針P,都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后的YUV420圖像的Y分量、U分量和V分量,分別由變 量Yt、Ut和Vt引用;預(yù)置循環(huán)變量χ、y、xl、yl、i、j,初始為0 ;預(yù)置RGB565圖像塊輸出坐標(biāo)變量x2、y2 ;計(jì)算縮放后的YUV420圖像的寬度W1、高度HI、縮放后的YUV420圖像塊的高度ty和寬 度tx、Y分量行距stride_s、U分量行距和V分量行距;計(jì)算RGB565圖像的寬度W2和目標(biāo) 地址的首地址rgb ;計(jì)算RGB565圖像塊的行距stride_d、偏移量offset和當(dāng)前RGB565圖 像塊寫入的目標(biāo)地址P;如果y < H且χ < W,則進(jìn)入步驟“根據(jù)所述預(yù)置原始YUV420圖像水平和垂直方向的 縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊”;所述的步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根 據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目 標(biāo)地址”中不需要旋轉(zhuǎn)時寫入目標(biāo)地址的方法具體為所述的步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根 據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目 標(biāo)地址”之前還包括步驟 "i = ty/2,j = tx/4 ;x2 = xl, y2 = yl, ρ = & rgb [ (y2*stride_d+x2) *2],,;所述的步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb值,根 據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目 標(biāo)地址”分為兩個步驟為“獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入目標(biāo)地址,y+ =2, ρ+ = 2, Ut++, Vt++ ;獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入目標(biāo)地址,y+ =2,ρ+ = 2,j = j—, Ut++, Vt++";所述的步驟“獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入 目標(biāo)地址,y+ = 2,ρ+ = 2,j = j—, Ut++, Vt++”之后還包括步驟“如果 j 等于 0,則 Yt+ = -tx+2*t_stride,p+ = _tx+2*stride_d,i = i—,j = tx/4 ; 如果 i 等于 0,則 χ = x+(2*Ds_x),xl = xl+(2*Ns_x); 如果 χ 不小于 W,則 y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0 ; 如果y不小于H,則RGB565圖像輸出結(jié)束”;其中所述的Ns_x和Ds_x、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整 數(shù),同時,(2*DS_X)*(NS_X/DS_X)等于縮放后的YUV420圖像塊的寬度,(2*Ds_y)*(Ns_y/ Ds_y)等于縮放后的YUV420圖像塊的高度。
6.如權(quán)利要求5所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述的 步 驟“獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入目標(biāo)地址”具 體為ρ
= get—rgbl6—value—clip—rgb (u,ν, y
);ρ [1] = get—rgbl6—value—clip—rgb (u,v,y [1]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]);所述的步驟“獲取后兩個像素的υ分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入目標(biāo)地址”具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
)); ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l])); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l])。
7.如權(quán)利要求5所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于,所述的步驟“如果 j 等于 0,則 Yt+ = -tx+2*t_stride,p+ = _tx+2*stride_d,i = i—, j = tx/4”之后還包括步驟“如果j不等于0,則進(jìn)入步驟“獲取縮放后的YUV420圖像塊的 Y分量、U分量和V分量,計(jì)算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺 寸,確定是否旋轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址”;所述的步驟“如果i等于0,則χ = x+(2*Ds_x),xl = xl+(2*Ns_x) ”還包括步驟“如果 i不等于0,則進(jìn)入步驟“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb 值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值 寫入目標(biāo)地址”。
8.如權(quán)利要求2所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于, 所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ;所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)確定,即每 行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides的二 分之一;所述的RGB565圖像的寬度W2 = Hl ;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的RGB565圖像塊的行距stride_d = W2 ;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的垂直 方向和水平方向像素的個數(shù);所述的RGB565圖像塊的當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量offset = 0*W2+(W2-1);所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ+ = offse討2。
9.如權(quán)利要求5所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的方法,其特征在于, 所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ;所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)確定,即每 行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides的二 分之一;所述的RGB565圖像的寬度W2 = Wl ;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的RGB565圖像塊的行距stride_d = W2 ;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的垂直 方向和水平方向像素的個數(shù);所述的RGB565圖像塊的當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量offset = 0 ; 所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ+ = offse討2。
10.一種YUV420圖像轉(zhuǎn)換成RGB565圖像的系統(tǒng),其特征在于,所述系統(tǒng)包括初始模 塊、縮放模塊、輸出模塊;所述的初始模塊與縮放模塊相連,用于將原始的YUV420圖像等分為一個或一個以上 的原始YUV420圖像塊;預(yù)置原始YUV420圖像水平和垂直方向的縮放倍數(shù);所述的縮放模塊與初始模塊和輸出模塊相連,用于根據(jù)所述預(yù)置原始YUV420圖像水 平和垂直方向的縮放倍數(shù),插值濾波生成縮放后的YUV420圖像塊;所述的輸出模塊與縮放模塊相連,用于獲取縮放后的YUV420圖像塊的Y分量、U分量 和V分量,計(jì)算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋 轉(zhuǎn)并分別將rgb值寫入目標(biāo)地址。
11.如權(quán)利要求10所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的系統(tǒng),其特征在于,所述的 系統(tǒng)還包括第一判斷模塊、第二判斷模塊、第三判斷模塊、第四判斷模塊和步進(jìn)模塊;所述的初始模塊還用于預(yù)置原始YUV420圖像的Y、U、V分量,以及原始YUV420圖像 的寬度W和高度H ;預(yù)置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565圖像塊存 放的目標(biāo)地址的指針P,都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后的YUV420 圖像的Y分量、U分量和V分量,分別由變量Yt、Ut和Vt引用;預(yù)置循環(huán)變量χ、y、xl、yl、 i、j,初始為0 ;預(yù)置RGB565圖像塊輸出坐標(biāo)變量x2、y2 ;計(jì)算縮放后的YUV420圖像的寬度 W1、高度HI、縮放后的YUV420圖像塊的高度ty和寬度tx、Y分量行距stride_s、U分量行 距和V分量行距;計(jì)算RGB565圖像的寬度W2和目標(biāo)地址的首地址rgb ;計(jì)算RGB565圖像 塊的行距stride_d、偏移量offset和當(dāng)前RGB565圖像塊寫入的目標(biāo)地址ρ ;所述的第一判斷模塊與初始模塊、第二判斷模塊和步進(jìn)模塊相連,用于判斷是否y<H,如果是,則通知第二判斷模塊,如果否,則RGB565圖像輸出結(jié)束;所述的第二判斷模塊與第一判斷模塊、步進(jìn)模塊和縮放模塊相連,用于判斷是否χ<W,如果是,則通知縮放模塊進(jìn)行縮放,如果否,則通知步進(jìn)模塊;所述的縮放模塊還用于i = ty/2,j = tx/4,并通知輸出模塊; 所述的輸出模塊在“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb 值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb 值寫入目標(biāo)地址”之前還用于如果旋轉(zhuǎn),則x2 = -yl, y2 = xl, ρ = & rgb [ (y2*stride_ d+x2)*2];所述的輸出模塊中所述的“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì) 算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將 rgb值寫入目標(biāo)地址”具體為獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入目標(biāo)地址,具 體為ρ
= get—rgbl6—value—clip—rgb (u,ν, y
); ρ [stride_d] = get—rgbl6_value_clip—rgb (u,v,y [1]); ρ [-1] = get—rgbl6_value_clip—rgb (u,v,y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]); y+ = 2,ρ+ = 2*stride_d,Ut++, Vt++ ;獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入目標(biāo)地址,具體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]); y+ = 2, ρ+ = 2氺stride_d, j = j—, Ut++, Vt++ ;所述的第三判斷模塊與輸出模塊和第四判斷模塊相連,用于判斷j是否等于0,如果 是,貝丨J Yt+ = -tx+2*t_stride,ρ+ = -2_W*stride_d,i = i—,j = tx/4 ;并通知第四判斷 模塊;如果否,通知輸出模塊;所述的第四判斷模塊與第三判斷模塊、輸出模塊和步進(jìn)模塊相連,用于判斷i是否等 于0,如果是,則通知步進(jìn)模塊,并通知第二判斷模塊;如果否,則通知輸出模塊;所述的步進(jìn)模塊與第一判斷模塊、第二判斷模塊和第四判斷模塊相連,用于接收第二 判斷模塊的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判斷模塊;還用于 接收第四判斷模塊發(fā)送的通知并χ = x+(2*Ds_x),Xl = xl+(2*Ns_x);其中Ns_x和Ds_X、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整數(shù),同時, (2*Ds_x) * (Ns_x/Ds_x)等于縮放后的 YUV420 圖像塊的寬度,(2*Ds_y) * (Ns_y/Ds_y)等于 縮放后的YUV420圖像塊的高度。
12.如權(quán)利要求10所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的系統(tǒng),其特征在于,所述的 系統(tǒng)還包括第一判斷模塊、第二判斷模塊、第三判斷模塊、第四判斷模塊和步進(jìn)模塊;所述的初始模塊還用于預(yù)置原始YUV420圖像的Y、U、V分量,以及原始YUV420圖像 的寬度W和高度H ;預(yù)置RGB565圖像的目標(biāo)地址首地址指針rgb和當(dāng)前RGB565圖像塊存 放的目標(biāo)地址的指針P,都定義成short*類型;預(yù)置縮放緩沖區(qū),用于存放縮放后的YUV420 圖像的Y分量、U分量和V分量,分別由變量Yt、Ut和Vt引用;預(yù)置循環(huán)變量χ、y、xl、yl、 i、j,初始為0 ;預(yù)置RGB565圖像塊輸出坐標(biāo)變量x2、y2 ;計(jì)算縮放后的YUV420圖像的寬度 W1、高度HI、縮放后的YUV420圖像塊的高度ty和寬度tx、Y分量行距stride_s、U分量行 距和V分量行距;計(jì)算RGB565圖像的寬度W2和目標(biāo)地址的首地址rgb ;計(jì)算RGB565圖像 塊的行距stride_d、偏移量offset和當(dāng)前RGB565圖像塊寫入的目標(biāo)地址ρ ;所述的第一判斷模塊與初始模塊、第二判斷模塊和步進(jìn)模塊相連,用于判斷是否y<H,如果是,則通知第二判斷模塊,如果否,則RGB565圖像輸出結(jié)束;所述的第二判斷模塊與第一判斷模塊、步進(jìn)模塊和縮放模塊相連,用于判斷是否χ<W,如果是,則通知縮放模塊進(jìn)行縮放,如果否,則通知步進(jìn)模塊;所述的縮放模塊還用于i = ty/2,j = tx/4,并通知輸出模塊; 所述的輸出模塊在“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì)算rgb 值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將rgb值 寫入目標(biāo)地址”之前還用于如果不需要旋轉(zhuǎn),則x2 = xl,y2 = yl,p = & rgb [ (y2*stride_ d+x2)*2];所述的輸出模塊中所述的“獲取縮放后的YUV420圖像塊的Y分量、U分量和V分量,計(jì) 算rgb值,根據(jù)縮放后的YUV420圖像的尺寸與移動終端屏幕尺寸,確定是否旋轉(zhuǎn)并分別將 rgb值寫入目標(biāo)地址”具體為“獲取前兩個像素的U分量和V分量,計(jì)算前兩個像素的rgb值,分別寫入目標(biāo)地址”具 體為ρ
= get—rgbl6—value—clip—rgb (u,ν, y
); ρ [1] = get—rgbl6—value—clip—rgb (u,v,y [1]); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+0]); ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]); y+ = 2,ρ+ = 2,Ut++, Vt++ ;獲取后兩個像素的U分量和V分量,計(jì)算后兩個像素的rgb值,分別寫入目標(biāo)地址,具 體為ρ
= get_rgbl6_value_clip_rgb (u, ν, y
); ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]); y+ = 2, ρ+ = 2, j = j—, Ut++, Vt++ ;所述的第三判斷模塊與輸出模塊和第四判斷模塊相連,用于判斷j是否等于0,如果 是,則 Yt+ = -tx+2*t_stride,p+ = _tx+2*stride_d,i = i—,j = tx/4 ;并通知第四判斷 模塊;如果否,通知輸出模塊;所述的第四判斷模塊與第三判斷模塊和輸出模塊相連,用于判斷i是否等于0,如果 是,則通知步進(jìn)模塊,并通知第二判斷模塊;如果否,則通知輸出模塊;所述的步進(jìn)模塊與第一判斷模塊、第二判斷模塊和第四判斷模塊相連,用于接收第二 判斷模塊的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判斷模塊;還用于 接收第四判斷模塊的通知,并對χ = x+(2*Ds_x),Xl = xl+(2*Ns_x);其中Ns_x和Ds_X、Ns_y和Ds_y的取值滿足條件成縮放倍數(shù)關(guān)系,且為正整數(shù),同時, (2*Ds_x)*(Ns_x/Ds_x)等于縮放后的 YUV420 圖像塊的寬度,(2*Ds_y)*(Ns_y/Ds_y)等于 縮放后的YUV420圖像塊的高度。
13.如權(quán)利要求10所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的系統(tǒng),其特征在于, 所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ;所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)確定,即每 行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides的二 分之一;所述的RGB565圖像的寬度W2 = Hl ;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的RGB565圖像塊的行距stride_d = W2 ;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的垂直 方向和水平方向像素的個數(shù);所述的RGB565圖像塊的當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量offset = 0*W2+(W2-1);所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ+ = offse討2。
14.如權(quán)利要求12所述的YUV420圖像轉(zhuǎn)換成RGB565圖像的系統(tǒng),其特征在于,所述的縮放后的YUV420圖像的寬度Wl和高度Hl為W1 = ff*Fx, Hl = H*Fy ; 所述的縮放后的YUV420圖像的Y分量行距strides是根據(jù)具體縮放倍數(shù)確定,即每 行像素的個數(shù);所述的縮放后的YUV420圖像的U分量行距和V分量行距為strides的二 分之一;所述的RGB565圖像的寬度W2 = Wl ;所述的RGB565圖像的目標(biāo)地址的首地址rgb為offsets ;所述的RGB565圖像塊的行距stride_d = W2 ;所述的縮放后的YUV420圖像塊的高度ty和寬度tx為縮放后的YUV420圖像塊的垂直 方向和水平方向像素的個數(shù);所述的RGB565圖像塊的當(dāng)前目標(biāo)地址相對于圖像首地址的偏移量offset = 0 ; 所述的當(dāng)前RGB565圖像塊存放的目標(biāo)地址的指針ρ+ = offse討2。
全文摘要
本發(fā)明公開一種YUV420圖像轉(zhuǎn)換成RGB565圖像的方法和系統(tǒng),通過把原始YUV420圖像等分為原始YUV420圖像塊并進(jìn)行縮放,獲取縮放后的YUV420圖像塊的U分量和V分量,計(jì)算rgb值,根據(jù)YUV420圖像的尺寸與移動終端屏幕尺寸確定是否旋轉(zhuǎn)分別將rgb值寫入目標(biāo)地址,從而實(shí)現(xiàn)對每個原始YUV420圖像塊連續(xù)做縮放、計(jì)算rgb值并輸出(含旋轉(zhuǎn)),減少了循環(huán)的次數(shù)和訪問內(nèi)存的數(shù)量,提高了轉(zhuǎn)換效率,輸出的RGB565圖像可以在不同像素的移動終端顯示,通過把原始YUV420圖像等分為不同等分比例的原始YUV420圖像塊和不同的縮放比例,達(dá)到最佳的顯示效果,加速內(nèi)存訪問速度。
文檔編號G06T3/40GK102073987SQ20101061618
公開日2011年5月25日 申請日期2010年12月30日 優(yōu)先權(quán)日2010年12月30日
發(fā)明者張磊, 鄧鄒平 申請人:深圳市融創(chuàng)天下科技發(fā)展有限公司