本發(fā)明實施例涉及通信技術(shù)領(lǐng)域,具體涉及一種視頻處理方法、裝置及計算機(jī)設(shè)備。
背景技術(shù):
隨著智能終端(例如手機(jī))的發(fā)展,在手機(jī)上錄制視頻已經(jīng)成為越來越多人的愛好,用戶希望對所錄制的視頻做特效處理以提升錄制視頻的趣味性。現(xiàn)有的對錄制視頻進(jìn)行特效處理的方法,通常需要將視頻數(shù)據(jù)輪流在中央處理器(Central Processing Unit,CPU)及圖形處理器(Graphics Processing Unit,GPU)內(nèi)呈現(xiàn),導(dǎo)致數(shù)據(jù)交互量及處理量較大,數(shù)據(jù)處理效率較低,因而現(xiàn)有技術(shù)只能對分辨率較低的視頻做特效處理,對于分辨率較高的視頻,目前還沒有有效的處理方法,這極大地影響了用戶錄制視頻的興趣。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供了一種視頻處理方法、裝置及計算機(jī)設(shè)備,能夠?qū)Ω叻直媛实囊曨l做特效處理,提高用戶錄制視頻的興趣。
本發(fā)明實施例提供的視頻處理方法,包括:
在圖形處理器GPU中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址;
對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù);
根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
本發(fā)明實施例提供的視頻處理裝置,包括:
創(chuàng)建單元,用于在圖形處理器GPU中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址;
解碼單元,用于對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù);
存儲單元,用于根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
編碼單元,用于在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
本發(fā)明實施例提供的計算機(jī)設(shè)備,包括中央處理器CPU和圖形處理器GPU,其中:
所述CPU用于,在所述GPU中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址,對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù),根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi);
所述GPU用于,對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
所述CPU還用于,在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
本發(fā)明實施例中,先在GPU中創(chuàng)建紋理緩存,所創(chuàng)建的紋理緩存具有緩存地址,在對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)之后,直接根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù),最后在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。即本發(fā)明實施例中,將所有的數(shù)據(jù)都在GPU內(nèi)呈現(xiàn),避免了將數(shù)據(jù)輪流在CPU及GPU內(nèi)呈現(xiàn)導(dǎo)致的大量數(shù)據(jù)交互及數(shù)據(jù)處理,因而能夠提高數(shù)據(jù)處理效率,從而能夠?qū)Ψ直媛瘦^高的視頻做特效處理,提高了用戶錄制視頻的興趣。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例所提供的視頻處理方法的一個場景示意圖;
圖2是本發(fā)明實施例所提供的視頻處理方法的一個流程示意圖;
圖3是本發(fā)明實施例所提供的視頻處理方法的另一流程示意圖;
圖4是本發(fā)明實施例所提供的視頻處理裝置的一個結(jié)構(gòu)示意圖;
圖5是本發(fā)明實施例所提供的計算機(jī)設(shè)備的一個結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
現(xiàn)有技術(shù)中,對視頻做特效處理的方法通常如下:
1)CPU解碼原視頻,從原視頻中取出一幀圖像,以字節(jié)byte數(shù)組的形式放到CPU的內(nèi)存里,圖像格式為YUV;
2)CPU把YUV格式的圖像數(shù)據(jù)傳送給GPU,GPU創(chuàng)建紋理緩存texture,并把圖像數(shù)據(jù)放到GPU內(nèi)部的texture里;
3)GPU對texture內(nèi)存儲的圖像數(shù)據(jù)做特效處理;
4)GPU把texture內(nèi)經(jīng)特效處理后的圖像數(shù)據(jù)轉(zhuǎn)化為RGBA格式,把RGBA格式的圖像數(shù)據(jù)傳送到CPU的內(nèi)存;
5)CPU把RGBA格式的圖像數(shù)據(jù),轉(zhuǎn)化為YUV格式;
6)CPU把YUV格式的圖像數(shù)據(jù)編碼壓縮;
一幀處理完之后,CPU再從原視頻中取出下一幀圖像,按步驟1)到6)進(jìn)行處理,直至處理完原視頻中的所有幀。
從上面的描述可以看出,整個處理過程中,視頻數(shù)據(jù)需要在CPU與GPU內(nèi)輪流呈現(xiàn),CPU與GPU均需要執(zhí)行圖像格式轉(zhuǎn)換的動作,導(dǎo)致數(shù)據(jù)交互量及數(shù)據(jù)處理量均較大,影響了數(shù)據(jù)處理效率,因而只能對分辨率較低(例如分辨率為640*480)的視頻做特效處理。因此,本發(fā)明實施例提供了一種視頻處理方法、裝置及計算機(jī)設(shè)備,能夠?qū)Ω叻直媛实囊曨l做特效處理。
如圖1所示,圖1為本發(fā)明視頻處理方法一個具體場景圖,本發(fā)明實施例提供的視頻處理方法可以應(yīng)用于視頻處理裝置中,視頻處理裝置可以為手機(jī)、筆記本電腦、平板電腦等終端。具體處理方法包括:視頻處理裝置的CPU首先在GPU中創(chuàng)建紋理緩存texture,所創(chuàng)建的紋理緩存具有緩存地址,然后解碼待處理視頻得到圖像幀數(shù)據(jù),由于預(yù)先創(chuàng)建了紋理緩存,所以接下來可以直接根據(jù)緩存地址將解碼得到的圖像幀數(shù)據(jù)存入GPU中創(chuàng)建的紋理緩存內(nèi),圖像幀數(shù)據(jù)不需要在其他設(shè)備內(nèi)緩存了,在GPU對其紋理緩存內(nèi)存儲的圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù)之后,CPU可以直接在GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻,由于直接在GPU內(nèi)對特效幀數(shù)據(jù)進(jìn)行編碼,所以不再需要進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,整個處理過程中,視頻數(shù)據(jù)都在GPU內(nèi)呈現(xiàn),避免了大量數(shù)據(jù)的交互和處理,提高了數(shù)據(jù)處理效率,因而本發(fā)明實施例提供的方法能夠?qū)Ω叻直媛实囊曨l做特效處理,例如可以對1280*720這樣分辨率的視頻進(jìn)行特效處理。
以下分別進(jìn)行詳細(xì)說明,需說明的是,以下實施例的序號不作為對實施例優(yōu)選順序的限定。
實施例一
如圖2所示,本實施例的視頻處理方法包括以下步驟:
步驟201、在圖形處理器GPU中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址;
具體實現(xiàn)中,CPU可以利用開放圖形庫OpenGL,調(diào)用應(yīng)用程序編程接口(Application Programming Interface,API)在GPU中創(chuàng)建一塊紋理緩存texture,所述紋理緩存具有緩存地址,與此同時,CPU就拿到了這塊紋理緩存的緩存地址。
步驟202、對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù);
待處理視頻即需要進(jìn)行特效處理的視頻,待處理視頻可以是用戶錄制的視頻,用戶可以提前錄制視頻,錄制完成后將視頻存儲在終端的內(nèi)存內(nèi),當(dāng)需要對該視頻進(jìn)行特效處理時,CPU從內(nèi)存中讀取該視頻。
具體實現(xiàn)中,CPU可以利用硬件解碼器對待處理視頻進(jìn)行解碼,硬件解碼器可以預(yù)先利用終端內(nèi)的mediacodec等硬件編碼接口來實現(xiàn),以mediacodec為例的硬件解碼器可以是硬件加速器,該解碼器設(shè)置終端的主板上,與CPU、GPU通過片上系統(tǒng)(System on Chip,SOC)內(nèi)部總線實現(xiàn)通信連接。
在CPU從內(nèi)存中取出待處理視頻之后,CPU可以將該視頻導(dǎo)入mediacodec實現(xiàn)的硬件解碼器中,利用mediacodec對視頻進(jìn)行解碼,解碼之后得到圖像幀數(shù)據(jù)。圖像幀數(shù)據(jù)即為一幀一幀的圖片,因此圖像幀數(shù)具有圖片格式,一般情況下,視頻解碼得到的圖像幀數(shù)據(jù)為YUV格式。
步驟203、根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
具體實現(xiàn)中,CPU可以先取出一幀圖像數(shù)據(jù),利用硬件解碼器將取出的圖像幀數(shù)據(jù)存入GPU中的所述紋理緩存內(nèi)。即CPU可以先將在GPU中創(chuàng)建的紋理緩存的緩存地址發(fā)送給硬件解碼器,硬件解碼器在解碼視頻之后,直接根據(jù)所述緩存地址將圖像幀數(shù)據(jù)存入所述緩存地址所指示的所述GPU中的紋理緩存內(nèi),這樣圖像幀數(shù)據(jù)就不再需要先緩存在CPU中,再由CPU將圖像幀數(shù)據(jù)傳遞給GPU了。
將圖像幀數(shù)據(jù)存入GPU中的紋理緩存內(nèi)之后,GPU可以對該圖像幀數(shù)據(jù)做特效處理。具體地,GPU可以使用OpenGL對紋理緩存內(nèi)存儲的圖像幀數(shù)據(jù)做特效處理。OpenGL是圖形硬件的一種軟件接口,它本質(zhì)上是一個3D圖形和模型庫,具有高度的可移植性和渲染速度,OpenGL已成為高性能圖形和交互性場景處理的行業(yè)標(biāo)準(zhǔn),當(dāng)然GPU也可以采用其他方式對紋理緩存內(nèi)存儲的圖像幀數(shù)據(jù)做特效處理,此處不做具體限定。
特效是設(shè)計人員給出的樣式,包括但不限于旋轉(zhuǎn)、平移,鏡像等??梢岳斫獾氖?,圖像幀數(shù)據(jù)即為一個與二維坐標(biāo)相關(guān)的像素值數(shù)組,在選擇要添加的特效之后,可以根據(jù)特效項目及對應(yīng)的特效參數(shù)來修改某些二維坐標(biāo)對應(yīng)的像素值數(shù)組,以添加特效。
例如平移,即將圖像所有的像素坐標(biāo)分別加上指定的水平偏移量和垂直偏移量。再例如鏡像,鏡像變換分為兩種:水平鏡像和垂直鏡像,水平鏡像以圖像垂直中線為軸,將圖像的像素進(jìn)行對換,也就是將圖像的左半部和右半部對調(diào);垂直鏡像則是以圖像的水平中線為軸,將圖像的上半部分和下班部分對調(diào)。GPU對所述圖像幀數(shù)據(jù)做特效處理后生成特效幀數(shù)據(jù)。
步驟204、在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
具體地,CPU可以利用硬件編碼器在GPU內(nèi)對所述特效幀數(shù)據(jù)進(jìn)行編碼,硬件編碼器可以預(yù)先利用終端內(nèi)的mediacodec等硬件編碼接口來實現(xiàn),該編碼器設(shè)置終端的主板上,與CPU、GPU通過片上系統(tǒng)(System on Chip,SOC)內(nèi)部總線實現(xiàn)通信連接。
CPU可以將GPU中存儲所述特效幀數(shù)據(jù)的紋理緩存的緩存地址發(fā)送給硬件編碼器,硬件編碼器直接在GPU中找到所述緩存地址所指示的紋理緩存,對所述紋理緩存內(nèi)存儲的所述特效幀數(shù)據(jù)進(jìn)行編碼,這樣視頻數(shù)據(jù)在GPU中就不需要進(jìn)行格式轉(zhuǎn)換,且GPU不需要再將視頻數(shù)據(jù)回傳給CPU,CPU側(cè)也不需要進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換了,這樣就大大提高了數(shù)據(jù)處理效率。
按照上面的方法,CPU依次取待處理視頻中的每一幀圖像進(jìn)行處理,最終得到特效視頻。
可以理解的是,視頻解碼可以將一個視頻處理成多個圖像幀,而視頻編碼則可以將多個圖像幀處理成一個視頻。視頻解碼與視頻編碼都可以有軟件實現(xiàn)和硬件實現(xiàn)這兩種方式。例如在計算機(jī)中,可以使用計算機(jī)強(qiáng)大的CPU來執(zhí)行相應(yīng)軟件算法來進(jìn)行視頻解碼和視頻編碼,而本發(fā)明的方法主要用于手機(jī)、平板電腦等移動終端中,由于這些終端的CPU處理能力相對較差,因此通過軟件來實現(xiàn)視頻解碼和視頻編碼會給終端的CPU帶來較大的負(fù)擔(dān),產(chǎn)生運行緩慢、死機(jī)甚至燒毀等問題,因而,本實施例中,在終端內(nèi)設(shè)置有硬件解碼器和硬件編碼器,利用硬件實現(xiàn)視頻解碼和視頻編碼,從而降低了CPU的運行負(fù)擔(dān),也使得視頻編解碼的過程更加順暢。
本實施例中,解碼操作及編碼操作均由相應(yīng)的硬件解碼器、硬件編碼器完成的,該硬件解碼器和硬件編碼器可以集成在同一芯片中,該芯片可以稱為編解碼器。
本實施例中,先在GPU中創(chuàng)建紋理緩存,所創(chuàng)建的紋理緩存具有緩存地址,在對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)之后,直接根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù),最后在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。即本實施例中,將所有的數(shù)據(jù)都在GPU內(nèi)呈現(xiàn),避免了將數(shù)據(jù)輪流在CPU及GPU內(nèi)呈現(xiàn)導(dǎo)致的大量數(shù)據(jù)交互及數(shù)據(jù)處理,因而能夠提高數(shù)據(jù)處理效率,從而能夠?qū)Ψ直媛瘦^高的視頻做特效處理。目前的智能終端已具備錄制高分辨視頻的能力,采用本發(fā)明的方法,將提高用戶錄制視頻的興趣,提高產(chǎn)品的競爭力。
實施例二
實施例一所描述的方法,本實施例將舉例作進(jìn)一步詳細(xì)說明,如圖3所示,本實施例的方法包括:
步驟301、在圖形處理器GPU中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址;
具體實現(xiàn)中,CPU可以利用開放圖形庫OpenGL,調(diào)用應(yīng)用程序編程接口(Application Programming Interface,API)在GPU中創(chuàng)建一塊紋理緩存texture,所述紋理緩存具有緩存地址,與此同時,CPU就拿到了這塊紋理緩存的緩存地址。
步驟302、利用硬件解碼器對所述待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù);
硬件解碼器可以預(yù)先利用終端內(nèi)的mediacodec等硬件編碼接口來實現(xiàn),以mediacodec為例的硬件解碼器可以是硬件加速器,該解碼器設(shè)置終端的主板上,與CPU、GPU通過片上系統(tǒng)(System on Chip,SOC)內(nèi)部總線實現(xiàn)通信連接。
待處理視頻即需要進(jìn)行特效處理的視頻,待處理視頻可以是用戶錄制的視頻,用戶可以提前錄制視頻,錄制完成后將視頻存儲在終端的內(nèi)存內(nèi),當(dāng)需要對該視頻進(jìn)行特效處理時,CPU從內(nèi)存中讀取該視頻。
在CPU從內(nèi)存中取出待處理視頻之后,可以將該視頻導(dǎo)入mediacodec實現(xiàn)的硬件解碼器中,利用mediacodec對視頻進(jìn)行解碼,解碼之后得到圖像幀數(shù)據(jù)。圖像幀數(shù)據(jù)即為一幀一幀的圖片,因此圖像幀數(shù)具有圖片格式,一般情況下,視頻解碼得到的圖像幀數(shù)據(jù)為YUV格式。
步驟303、將所述紋理緩存的緩存地址發(fā)送給所述硬件解碼器;
步驟304、通過所述硬件解碼器將所述圖像幀數(shù)據(jù)存入所述緩存地址所指示的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
具體實現(xiàn)中,硬件編碼器解碼得到圖像幀數(shù)據(jù)之后,可以取出一幀圖像,根據(jù)CPU發(fā)送的緩存地址,將圖像幀數(shù)據(jù)存入所述緩存地址所指示的所述GPU中的紋理緩存內(nèi),這樣圖像幀數(shù)據(jù)就不再需要先緩存在CPU中,再由CPU將圖像幀數(shù)據(jù)傳遞給GPU了。
將圖像幀數(shù)據(jù)存入GPU中的紋理緩存內(nèi)之后,GPU可以對該圖像幀數(shù)據(jù)做特效處理。具體地,GPU可以使用OpenGL對紋理緩存內(nèi)存儲的圖像幀數(shù)據(jù)做特效處理。OpenGL是圖形硬件的一種軟件接口,它本質(zhì)上是一個3D圖形和模型庫,具有高度的可移植性和渲染速度,OpenGL已成為高性能圖形和交互性場景處理的行業(yè)標(biāo)準(zhǔn),當(dāng)然GPU也可以采用其他方式對紋理緩存內(nèi)存儲的圖像幀數(shù)據(jù)做特效處理,此處不做具體限定。
特效是設(shè)計人員給出的樣式,包括但不限于旋轉(zhuǎn)、平移,鏡像等??梢岳斫獾氖牵瑘D像幀數(shù)據(jù)即為一個與二維坐標(biāo)相關(guān)的像素值數(shù)組,在選擇要添加的特效之后,可以根據(jù)特效項目及對應(yīng)的特效參數(shù)來修改某些二維坐標(biāo)對應(yīng)的像素值數(shù)組,以添加特效。
例如平移,即將圖像所有的像素坐標(biāo)分別加上指定的水平偏移量和垂直偏移量。再例如鏡像,鏡像變換分為兩種:水平鏡像和垂直鏡像,水平鏡像以圖像垂直中線為軸,將圖像的像素進(jìn)行對換,也就是將圖像的左半部和右半部對調(diào);垂直鏡像則是以圖像的水平中線為軸,將圖像的上半部分和下班部分對調(diào)。GPU對所述圖像幀數(shù)據(jù)做特效處理后生成特效幀數(shù)據(jù)。
步驟305、將所述紋理緩存的緩存地址發(fā)送給所述硬件編碼器;
步驟306、利用所述硬件編碼器在所述GPU內(nèi)對所述緩存地址所指示的所述紋理緩存內(nèi)存儲的所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
硬件編碼器可以預(yù)先利用終端內(nèi)的mediacodec等硬件編碼接口來實現(xiàn),該編碼器設(shè)置終端的主板上,與CPU、GPU通過片上系統(tǒng)(System on Chip,SOC)內(nèi)部總線實現(xiàn)通信連接。
具體實現(xiàn)中,在CPU將GPU中存儲所述特效幀數(shù)據(jù)的紋理緩存的緩存地址發(fā)送給硬件編碼器之后,硬件編碼器可以直接在GPU中找到所述緩存地址所指示的紋理緩存,對所述紋理緩存內(nèi)存儲的所述特效幀數(shù)據(jù)進(jìn)行編碼,這樣視頻數(shù)據(jù)在GPU中就不需要進(jìn)行格式轉(zhuǎn)換,且GPU不需要再將視頻數(shù)據(jù)回傳給CPU,CPU側(cè)也不需要進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換了,這樣就大大提高了數(shù)據(jù)處理效率。
按照上面的方法,CPU依次取待處理視頻中的每一幀圖像進(jìn)行處理,最終得到特效視頻。
可以理解的是,視頻解碼可以將一個視頻處理成多個圖像幀,而視頻編碼則可以將多個圖像幀處理成一個視頻。視頻解碼與視頻編碼都可以有軟件實現(xiàn)和硬件實現(xiàn)這兩種方式。例如在計算機(jī)中,可以使用計算機(jī)強(qiáng)大的CPU來執(zhí)行相應(yīng)軟件算法來進(jìn)行視頻解碼和視頻編碼,而本發(fā)明的方法主要用于手機(jī)、平板電腦等移動終端中,由于這些終端的CPU處理能力較差,因此通過軟件來實現(xiàn)視頻解碼和視頻編碼會給終端的CPU帶來較大的負(fù)擔(dān),產(chǎn)生運行緩慢、死機(jī)甚至燒毀等問題,因而,本實施例中,在終端內(nèi)設(shè)置有硬件解碼器和硬件編碼器,利用硬件實現(xiàn)視頻解碼和視頻編碼,從而降低了CPU的運行負(fù)擔(dān),也使得視頻編解碼的過程更加順暢。
本實施例中,解碼操作及編碼操作均由相應(yīng)的硬件解碼器、硬件編碼器完成的,該硬件解碼器和硬件編碼器可以集成在同一芯片中,該芯片可以稱為編解碼器。
本實施例中,先在GPU中創(chuàng)建紋理緩存,所創(chuàng)建的紋理緩存具有緩存地址,在對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)之后,直接根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù),最后在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。即本實施例中,將所有的數(shù)據(jù)都在GPU內(nèi)呈現(xiàn),避免了將數(shù)據(jù)輪流在CPU及GPU內(nèi)呈現(xiàn)導(dǎo)致的大量數(shù)據(jù)交互及數(shù)據(jù)處理,因而能夠提高數(shù)據(jù)處理效率,從而能夠?qū)Ψ直媛瘦^高的視頻做特效處理。目前的智能終端已具備錄制高分辨視頻的能力,采用本發(fā)明的方法,將提高用戶錄制視頻的興趣,提高產(chǎn)品的競爭力。
實施例三
為了更好地實施以上方法,本發(fā)明實施例還提供一種視頻處理裝置,如圖4所示,本實施例的視頻處理裝包括創(chuàng)建單元401、解碼單元402、存儲單元403及編碼單元404,如下:
(1)創(chuàng)建單元401;
創(chuàng)建單元401,用于在圖形處理器GPU中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址;
具體地,可以利用開放圖形庫OpenGL,調(diào)用應(yīng)用程序編程接口(Application Programming Interface,API)在GPU中創(chuàng)建一塊紋理緩存texture,所述紋理緩存具有緩存地址,與此同時,創(chuàng)建單元401就拿到了這塊紋理緩存的緩存地址。
(2)解碼單元402;
解碼單元402,用于對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù);
待處理視頻,即需要進(jìn)行特效處理的視頻,待處理視頻可以是用戶錄制的視頻,用戶可以提前錄制視頻,錄制完成后將視頻存儲在終端的內(nèi)存內(nèi),當(dāng)需要對該視頻進(jìn)行特效處理時,解碼單元402從內(nèi)存中讀取該視頻。
具體實現(xiàn)中,解碼單元402可以利用硬件解碼器對待處理視頻進(jìn)行解碼,該硬件解碼器設(shè)置終端的主板上,與CPU、GPU通過片上系統(tǒng)(System on Chip,SOC)內(nèi)部總線實現(xiàn)通信連接。
在解碼單元402從內(nèi)存中取出待處理視頻之后,可以將該視頻導(dǎo)入硬件解碼器中,利用硬件解碼器對視頻進(jìn)行解碼,解碼之后得到圖像幀數(shù)據(jù)。圖像幀數(shù)據(jù)即為一幀一幀的圖片,因此圖像幀數(shù)具有圖片格式,一般情況下,視頻解碼得到的圖像幀數(shù)據(jù)為YUV格式。
(3)存儲單元403;
存儲單元403,用于根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
具體地,視頻處理裝置還可以包括發(fā)送單元,發(fā)送單元用于將創(chuàng)建單元402在GPU中創(chuàng)建的紋理緩存的緩存地址發(fā)送給硬件解碼器,存儲單元403利用硬件解碼器將圖像幀數(shù)據(jù)存入GPU中的所述紋理緩存內(nèi),即硬件解碼器在解碼視頻之后,直接根據(jù)所述緩存地址將圖像幀數(shù)據(jù)存入所述緩存地址所指示的所述GPU中的紋理緩存內(nèi),這樣圖像幀數(shù)據(jù)就不再需要先緩存在CPU中,再由CPU將圖像幀數(shù)據(jù)傳遞給GPU了。
特效是設(shè)計人員給出的樣式,包括但不限于旋轉(zhuǎn)、平移,鏡像等。可以理解的是,圖像幀數(shù)據(jù)即為一個與二維坐標(biāo)相關(guān)的像素值數(shù)組,在選擇要添加的特效之后,GPU可以根據(jù)特效項目及對應(yīng)的特效參數(shù)來修改某些二維坐標(biāo)對應(yīng)的像素值數(shù)組,以添加特效。
(4)編碼單元404;
編碼單元404,用于在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
另外,發(fā)送單元還可以將在GPU中創(chuàng)建的紋理緩存的緩存地址發(fā)送給硬件編碼器,編碼單元404可以利用硬件編碼器在GPU內(nèi)對所述特效幀數(shù)據(jù)進(jìn)行編碼,即硬件編碼器直接在GPU中找到所述緩存地址所指示的紋理緩存,對所述紋理緩存內(nèi)存儲的所述特效幀數(shù)據(jù)進(jìn)行編碼,這樣視頻數(shù)據(jù)在GPU中就不需要進(jìn)行格式轉(zhuǎn)換,且GPU不需要再將視頻數(shù)據(jù)回傳給CPU,CPU側(cè)也不需要進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換了,這樣就大大提高了數(shù)據(jù)處理效率。
以上各個單元依次處理完待處理視頻中的每一幀圖像,最終可以得到特效視頻。
可以理解的是,視頻解碼可以將一個視頻處理成多個圖像幀,而視頻編碼則可以將多個圖像幀處理成一個視頻。視頻解碼與視頻編碼都可以有軟件實現(xiàn)和硬件實現(xiàn)這兩種方式。例如在計算機(jī)中,可以使用計算機(jī)強(qiáng)大的CPU來執(zhí)行相應(yīng)軟件算法來進(jìn)行視頻解碼和視頻編碼,而本發(fā)明主要用于手機(jī)、平板電腦等移動終端中,由于這些終端的CPU處理能力較差,因此通過軟件來實現(xiàn)視頻解碼和視頻編碼會給終端的CPU帶來較大的負(fù)擔(dān),產(chǎn)生運行緩慢、死機(jī)甚至燒毀等問題,因而,本實施例中,在終端內(nèi)設(shè)置有硬件解碼器和硬件編碼器,利用硬件實現(xiàn)視頻解碼和視頻編碼,從而降低了CPU的運行負(fù)擔(dān),也使得視頻編解碼的過程更加順暢。
本實施例中,解碼操作及編碼操作均由相應(yīng)的硬件解碼器、硬件編碼器完成的,該硬件解碼器和硬件編碼器可以集成在同一芯片中,該芯片可以稱為編解碼器。
需要說明的是,上述實施例提供的視頻處理裝置在處理視頻時,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將設(shè)備的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的視頻處理裝置與視頻處理方法屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,此處不再贅述。
本實施例中,創(chuàng)建單元先在GPU中創(chuàng)建紋理緩存,所創(chuàng)建的紋理緩存具有緩存地址,在解碼單元對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)之后,存儲單元直接根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù),最后編碼單元在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。即本發(fā)明實施例中,將所有的數(shù)據(jù)都在GPU內(nèi)呈現(xiàn),避免了將數(shù)據(jù)輪流在CPU及GPU內(nèi)呈現(xiàn)導(dǎo)致的大量數(shù)據(jù)交互及數(shù)據(jù)處理,因而能夠提高數(shù)據(jù)處理效率,從而能夠?qū)Ψ直媛瘦^高的視頻做特效處理。目前的智能終端已具備錄制高分辨視頻的能力,采用本發(fā)明的方法,將提高用戶錄制視頻的興趣,提高產(chǎn)品的競爭力。
實施例四
下面介紹本發(fā)明實施例提供的計算機(jī)設(shè)備,請參閱圖5,計算機(jī)設(shè)備500包括可以包括RF(Radio Frequency,射頻)電路510、包括有一個或一個以上計算機(jī)可讀存儲介質(zhì)的存儲器520、輸入單元530、顯示單元540、傳感器550、音頻電路560、WiFi(wireless fidelity,無線保真)模塊570、包括有一個或者一個以上處理核心的處理器580、以及電源590等部件。
本領(lǐng)域技術(shù)人員可以理解,圖5中示出的計算機(jī)設(shè)備結(jié)構(gòu)并不構(gòu)成對計算機(jī)設(shè)備的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。其中:
RF電路510可用于收發(fā)消息或通話過程中,信號的接收和發(fā)送,特別地,將基站的下行信息接收后,交由一個或者一個以上處理器580處理;另外,將涉及上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路510包括但不限于天線、至少一個放大器、調(diào)諧器、一個或多個振蕩器、用戶身份模塊(SIM)卡、收發(fā)信機(jī)、耦合器、LNA(Low Noise Amplifier,低噪聲放大器)、雙工器等。此外,RF電路510還可以通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。所述無線通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于GSM(Global System of Mobile communication,全球移動通訊系統(tǒng))、GPRS(General Packet Radio Service,通用分組無線服務(wù))、CDMA(Code Division Multiple Access,碼分多址)、WCDMA(Wideband Code Division Multiple Access,寬帶碼分多址)、LTE(Long Term Evolution,長期演進(jìn))、電子郵件、SMS(Short Messaging Service,短消息服務(wù))等。
存儲器520可用于存儲軟件程序以及模塊,處理器580通過運行存儲在存儲器520的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器520可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)計算機(jī)設(shè)備500的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器520可以包括高速隨機(jī)存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。相應(yīng)地,存儲器520還可以包括存儲器控制器,以提供處理器580和輸入單元530對存儲器520的訪問。
輸入單元530可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與用戶設(shè)置以及功能控制有關(guān)的鍵盤、鼠標(biāo)、操作桿、光學(xué)或者軌跡球信號輸入。具體地,輸入單元530可包括觸敏表面531以及其他輸入設(shè)備532。觸敏表面531,也稱為觸摸顯示屏或者觸控板,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸敏表面531上或在觸敏表面331附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動相應(yīng)的連接裝置??蛇x的,觸敏表面531可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標(biāo),再送給處理器580,并能接收處理器580發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸敏表面531。除了觸敏表面531,輸入單元530還可以包括其他輸入設(shè)備532。具體地,其他輸入設(shè)備532可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。
顯示單元540可用于顯示由用戶輸入的信息或提供給用戶的信息以及計算機(jī)設(shè)備500的各種圖形用戶接口,這些圖形用戶接口可以由圖形、文本、圖標(biāo)、視頻和其任意組合來構(gòu)成。顯示單元540可包括顯示面板541,可選的,可以采用LCD(Liquid Crystal Display,液晶顯示器)、OLED(Organic Light-Emitting Diode,有機(jī)發(fā)光二極管)等形式來配置顯示面板541。進(jìn)一步的,觸敏表面531可覆蓋顯示面板541,當(dāng)觸敏表面531檢測到在其上或附近的觸摸操作后,傳送給處理器580以確定觸摸事件的類型,隨后處理器580根據(jù)觸摸事件的類型在顯示面板541上提供相應(yīng)的視覺輸出。雖然在圖5中,觸敏表面531與顯示面板541是作為兩個獨立的部件來實現(xiàn)輸入和輸入功能,但是在某些實施例中,可以將觸敏表面531與顯示面板541集成而實現(xiàn)輸入和輸出功能。
計算機(jī)設(shè)備500還可包括至少一種傳感器550,比如光傳感器、運動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板541的亮度,接近傳感器可在計算機(jī)設(shè)備500移動到耳邊時,關(guān)閉顯示面板541和/或背光。作為運動傳感器的一種,重力加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別計算機(jī)設(shè)備姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準(zhǔn))、振動識別相關(guān)功能(比如計步器、敲擊)等;至于計算機(jī)設(shè)備500還可配置的陀螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。
音頻電路560、揚(yáng)聲器561,傳聲器562可提供用戶與計算機(jī)設(shè)備500之間的音頻接口。音頻電路560可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P(yáng)聲器561,由揚(yáng)聲器561轉(zhuǎn)換為聲音信號輸出;另一方面,傳聲器562將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路560接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器580處理后,經(jīng)RF電路510以發(fā)送給比如另一終端,或者將音頻數(shù)據(jù)輸出至存儲器520以便進(jìn)一步處理。音頻電路560還可能包括耳塞插孔,以提供外設(shè)耳機(jī)與計算機(jī)設(shè)備500的通信。
WiFi屬于短距離無線傳輸技術(shù),計算機(jī)設(shè)備500通過WiFi模塊570可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖5示出了WiFi模塊570,但是可以理解的是,其并不屬于計算機(jī)設(shè)備500的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。
處理器580是計算機(jī)設(shè)備500的控制中心,利用各種接口和線路連接整個計算機(jī)設(shè)備的各個部分,通過運行或執(zhí)行存儲在存儲器520內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器520內(nèi)的數(shù)據(jù),執(zhí)行計算機(jī)設(shè)備500的各種功能和處理數(shù)據(jù),從而對計算機(jī)設(shè)備進(jìn)行整體監(jiān)控??蛇x的,處理器580可包括一個或多個處理核心;優(yōu)選的,處理器580可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信??梢岳斫獾氖牵鲜稣{(diào)制解調(diào)處理器也可以不集成到處理器580中。
計算機(jī)設(shè)備500還包括給各個部件供電的電源590(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器580邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。電源590還可以包括一個或一個以上的直流或交流電源、再充電系統(tǒng)、電源故障檢測電路、電源轉(zhuǎn)換器或者逆變器、電源狀態(tài)指示器等任意組件。
盡管未示出,計算機(jī)設(shè)備500還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。
具體在本發(fā)明的一些實施例中,處理器580包括CPU581及GPU582,計算機(jī)設(shè)備還包括有存儲器,以及一個或者一個以上的程序,其中一個或者一個以上程序存儲于存儲器中,且經(jīng)配置以由CPU581執(zhí)行所述一個或者一個以上程序包含用于進(jìn)行以下操作的指令:
在圖形處理器GPU582中創(chuàng)建紋理緩存,所述紋理緩存具有緩存地址;
對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù);
根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU582中的所述紋理緩存內(nèi),以使得所述GPU582對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù);
在所述GPU582內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
可選地,CPU581可以通過開放圖形庫OpenGL的應(yīng)用程序編程接口API調(diào)用在所述GPU582中創(chuàng)建所述紋理緩存。
可選地,CPU581可以利用硬件解碼器對所述待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)。
可選地,在CPU581利用硬件解碼器對所述待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)之前,CPU581可以將所述紋理緩存的緩存地址發(fā)送給所述硬件解碼器;
CPU581可以通過所述硬件解碼器將所述圖像幀數(shù)據(jù)存入所述緩存地址所指示的所述紋理緩存內(nèi)。
可選地,CPU581可以利用硬件編碼器在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
可選地,在CPU581利用硬件編碼器在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻之前,CPU581可以將所述紋理緩存的緩存地址發(fā)送給所述硬件編碼器;
CPU581可以利用所述硬件編碼器在所述GPU內(nèi)對所述緩存地址所指示的所述紋理緩存內(nèi)存儲的所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。
可選地,所述硬件解碼器與所述硬件編碼器可以通過片上系統(tǒng)SOC內(nèi)部總線與所述CPU581及所述GPU582相連。
本實施例中,CPU先在GPU中創(chuàng)建紋理緩存,所創(chuàng)建的紋理緩存具有緩存地址,在對待處理視頻進(jìn)行解碼得到圖像幀數(shù)據(jù)之后,直接根據(jù)所述緩存地址將所述圖像幀數(shù)據(jù)存入所述GPU中的所述紋理緩存內(nèi),以使得所述GPU對所述圖像幀數(shù)據(jù)做特效處理生成特效幀數(shù)據(jù),最后CPU在所述GPU內(nèi)根據(jù)所述緩存地址對所述特效幀數(shù)據(jù)進(jìn)行編碼得到特效視頻。即本實施例中,將所有的數(shù)據(jù)都在GPU內(nèi)呈現(xiàn),避免了將數(shù)據(jù)輪流在CPU及GPU內(nèi)呈現(xiàn)導(dǎo)致的大量數(shù)據(jù)交互及數(shù)據(jù)處理,因而能夠提高數(shù)據(jù)處理效率,從而能夠?qū)Ψ直媛瘦^高的視頻做特效處理。目前的智能終端已具備錄制高分辨視頻的能力,采用本發(fā)明的方法,將提高用戶錄制視頻的興趣,提高產(chǎn)品的競爭力。
另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,單元之間的連接關(guān)系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當(dāng)然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機(jī)程序完成的功能都可以很容易地用相應(yīng)的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結(jié)構(gòu)也可以是多種多樣的,例如模擬電路、數(shù)字電路或?qū)S秒娐返?。但是,對本發(fā)明而言更多情況下軟件程序?qū)崿F(xiàn)是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機(jī)的軟盤,U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上對本發(fā)明實施例所提供的一種視頻處理方法、裝置及計算機(jī)設(shè)備進(jìn)行了詳細(xì)介紹,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實施例的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,因此,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。