两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng)的制作方法

文檔序號:6516880閱讀:292來源:國知局
基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng)的制作方法
【專利摘要】本申請公開了一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng),該方法包括:創(chuàng)建本地窗口對象,將該本地窗口對象的圖像數(shù)據(jù)傳送至相對應(yīng)的底層接口,建立所述本地窗口對象與渲染線程的連接;所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù);實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,并在渲染完畢后銷毀所述本地窗口對象,結(jié)束所述渲染線程。本申請解決了移動設(shè)備的渲染線程運(yùn)行效率較低的問題。
【專利說明】基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請涉及圖像渲染處理領(lǐng)域,具體地說,涉及一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng)。
[0002]
【背景技術(shù)】
[0003]隨著移動設(shè)備功能的不斷豐富,人們通過移動設(shè)備進(jìn)行視頻渲染處理后便可在移動設(shè)備上方便地觀看視頻。視頻渲染,指的是將圖像數(shù)據(jù)按幀率在規(guī)定時(shí)間內(nèi)按順序輸入到顯存中,再輸出到屏幕上進(jìn)行顯示,從而呈現(xiàn)出動畫效果的過程。
[0004]目前,在谷歌公司的Android (安卓)平臺(系統(tǒng))運(yùn)行的移動應(yīng)用程序主要由java語言(一種高級程序設(shè)計(jì)語言)進(jìn)行開發(fā),安卓系統(tǒng)的SDK (Software Development Kit,軟件開發(fā)工具包)中提供了大量的使用系統(tǒng)硬件功能的API (Application ProgrammingInterface,應(yīng)用程序編程接口)讓開發(fā)者使用。然而,java語言編寫的程序在執(zhí)行效率上較C/C++(計(jì)算機(jī)程序編譯語言)開發(fā)的程序有明顯不足,系統(tǒng)SDK中的API雖然種類繁多,但無法普及日益增多且復(fù)雜化的開發(fā)需求。而視頻的渲染程序在開發(fā)過程中需要具備處理高吞吐量數(shù)據(jù)、實(shí)時(shí)性處理等特點(diǎn),即對視頻的渲染程序的運(yùn)行效率有極高的要求,那么,僅靠安卓系統(tǒng)自帶的SDK所提供的框架API難以實(shí)現(xiàn)在資源有限的移動設(shè)備中開發(fā)出滿足上述條件的應(yīng)用。
[0005]現(xiàn)有技術(shù)中,移動設(shè)備普遍采用Opengl ES(—種針對移動設(shè)備而設(shè)計(jì)的三維圖形編程接口)進(jìn)行圖像處理。針對該Opengl ES圖形化編程接口,安卓系統(tǒng)的SDK中提供了一個(gè)名為GLSurfaceView的java類(其中,類為java語言中狀態(tài)和行為的集合)來實(shí)現(xiàn)移動終端視窗系統(tǒng)與Opengl ES的通信。但是,采用這種方法開發(fā)視頻應(yīng)用仍然存在缺陷:1、由于該java類將移動終端視窗系統(tǒng)與Opengl ES的通信做了內(nèi)部封裝,使渲染線程的管理存在封閉性,不利于程序的靈活開發(fā);2、由于渲染線程的管理模塊采用谷歌特有的碎片化模塊的編寫方式,管理類中包含很多冗余操作,直接影響程序的執(zhí)行效率。
[0006]綜上所述,如何解決移動設(shè)備的渲染線程運(yùn)行效率較低的問題,便成為亟待解決的技術(shù)問題。
[0007]
【發(fā)明內(nèi)容】

[0008]有鑒于此,本申請所要解決的技術(shù)問題是提供了一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng),以解決移動設(shè)備的渲染線程運(yùn)行效率較低的問題。
[0009]為了解決上述技術(shù)問題,本申請公開了一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法,該方法包括:
創(chuàng)建本地窗口對象,將該本地窗口對象的圖像數(shù)據(jù)傳送至相對應(yīng)的底層接口,建立所述本地窗口對象與渲染線程的連接; 所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù);
實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,并在渲染完畢后銷毀所述本地窗口對象,結(jié)束所述渲染線程。
[0010]進(jìn)一步地,其中,當(dāng)所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,進(jìn)一步為,所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將預(yù)先生成的所述腳本信息數(shù)據(jù)發(fā)送至所述底層接口中與上一次保存的進(jìn)行渲染處理所執(zhí)行的所述腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動該渲染線程進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染。
[0011]進(jìn)一步地,其中,所述腳本信息數(shù)據(jù),進(jìn)一步為字符串形式的腳本信息通過相應(yīng)函數(shù)寫入顯存,編譯為二進(jìn)制碼進(jìn)行存儲的圖形處理器進(jìn)行渲染處理時(shí)的執(zhí)行數(shù)據(jù)。
[0012]進(jìn)一步地,其中,啟動所述渲染線程對所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù),進(jìn)一步為,啟動所述渲染線程,本地渲染接口函數(shù)以循環(huán)體的方式在該渲染線程中進(jìn)行輪詢監(jiān)測,在所述圖像數(shù)據(jù)傳輸至所述指定的資源存儲空間后,將該圖像數(shù)據(jù)傳遞到底層進(jìn)行圖像渲染,生成渲染數(shù)據(jù)。
[0013]進(jìn)一步地,其中,將所述圖像數(shù)據(jù)傳遞到底層進(jìn)行圖像渲染,進(jìn)一步為,將所述圖像數(shù)據(jù)以字節(jié)數(shù)組的方式傳遞到底層進(jìn)行圖像渲染。
[0014]為了解決上述技術(shù)問題,本申請還公開了一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),該系統(tǒng)包括:窗口對象創(chuàng)建模塊、渲染處理模塊以及窗口顯示處理模塊,其中,
所述窗口對象創(chuàng)建模塊,用于創(chuàng)建本地窗口對象,將所述本地窗口對象的圖像數(shù)據(jù)發(fā)送至所述渲染處理模塊;
所述渲染處理模塊,用于通過其內(nèi)部的所述渲染線程以外的數(shù)據(jù)線程接收所述圖像數(shù)據(jù),并在所述圖像數(shù)據(jù)傳輸?shù)皆撲秩咎幚砟K內(nèi)部指定的資源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)發(fā)送至所述窗口顯示處理模塊,以及用于接收所述窗口顯示處理模塊發(fā)送的終止指令結(jié)束所述渲染線程;所述窗口顯示處理模塊,用于實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,在渲染完畢后生成銷毀指令對所述本地窗口對象進(jìn)行銷毀,同時(shí)生成終止指令發(fā)送至所述渲染處理模塊。
[0015]進(jìn)一步地,其中,所述渲染處理模塊,進(jìn)一步用于,通過其內(nèi)部的所述渲染線程以外的數(shù)據(jù)線程接收所述圖像數(shù)據(jù),并在所述圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將預(yù)先生成的所述腳本信息數(shù)據(jù)與上一次保存的進(jìn)行渲染處理所執(zhí)行的所述腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動所述渲染線程對所述資源存儲空間中的進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染,生成渲染數(shù)據(jù)發(fā)送至所述窗口顯示處理模塊。
[0016]進(jìn)一步地,其中,所述腳本信息數(shù)據(jù),進(jìn)一步為字符串形式的腳本信息通過相應(yīng)函數(shù)寫入顯存,編譯為二進(jìn)制碼進(jìn)行存儲的圖形處理器進(jìn)行渲染處理時(shí)的執(zhí)行數(shù)據(jù)。
[0017]進(jìn)一步地,其中,所述渲染處理模塊,進(jìn)一步用于,啟動所述渲染線程后,預(yù)置的本地渲染接口函數(shù)以循環(huán)體的方式在所述渲染線程中進(jìn)行輪詢監(jiān)測,在所述圖像數(shù)據(jù)傳輸至所述指定的資源存儲空間后,對該圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)。[0018]進(jìn)一步地,其中,所述圖像數(shù)據(jù),進(jìn)一步以字節(jié)數(shù)組的方式從所述指定的資源存儲空間傳遞到所述渲染線程進(jìn)行圖像渲染。
[0019]與現(xiàn)有技術(shù)相比,本申請所述的一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法及系統(tǒng),達(dá)到了如下效果:
I)本申請將移動終端視窗系統(tǒng)通信以及渲染線程管理原生化,通過本地窗口對象與渲染線程的直接連接,極大提高了系統(tǒng)應(yīng)用程序編程接口中的渲染線程管理的開放性,同時(shí)消除了渲染線程結(jié)構(gòu)存在冗余,有效提升了渲染線程的運(yùn)行效率。
[0020]2)采用本申請技術(shù)方案的移動應(yīng)用的程序性能得到大幅提高,明顯改善了視頻渲染性能,并提高了系統(tǒng)中應(yīng)用程序編程接口的擴(kuò)展性。
[0021]3)本申請通過通用的原生接口和系統(tǒng)接層相結(jié)合,極大提高了渲染引擎的移植性。
[0022]當(dāng)然,實(shí)施本申請的任一產(chǎn)品必不一定需要同時(shí)達(dá)到以上所述的所有技術(shù)效果。
[0023]
【專利附圖】

【附圖說明】
[0024]此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實(shí)施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1是本申請實(shí)施例一所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法的流程圖;
圖2是本申請實(shí)施例二所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法的流程圖;
圖3是本申請實(shí)施例四所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0025]如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同名詞來稱呼同一個(gè)組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包含”為一開放式用語,故應(yīng)解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮盏恼`差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題,基本達(dá)到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實(shí)施本申請的較佳實(shí)施方式,然所述描述乃以說明本申請的一般原則為目的,并非用以限定本申請的范圍。本申請的保護(hù)范圍當(dāng)視所附權(quán)利要求所界定者為準(zhǔn)。
[0026]實(shí)施例一
如圖1所示,為本申請實(shí)施例一所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法的方法流程,包括:
步驟101,創(chuàng)建本地窗口對象,將該本地窗口對象的圖像數(shù)據(jù)傳送至相對應(yīng)的底層接口,建立所述本地窗口對象與渲染線程的連接。
[0027]對于步驟101,移動終端系統(tǒng)中負(fù)責(zé)顯示功能的部分稱為視窗系統(tǒng),該視窗系統(tǒng)將可顯示的相應(yīng)數(shù)據(jù)反映至屏幕上,用戶便可以進(jìn)行觀看,當(dāng)用戶選擇觀看視頻時(shí),該視頻窗口界面作為所述本地窗口對象在移動終端系統(tǒng)的后臺創(chuàng)建。
[0028]進(jìn)一步地,在建立所述本地窗口對象與渲染線程的直接連接后,保證了渲染線程連接的原生性,所述圖像數(shù)據(jù)就是所述底層接口對所述本地窗口對象生成特定的窗口指針,以作為地址標(biāo)識,從而保證了后續(xù)數(shù)據(jù)傳送時(shí)的準(zhǔn)確性和對應(yīng)關(guān)系。
[0029]步驟102,所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)。
[0030]在步驟102中,所述圖像數(shù)據(jù)進(jìn)一步為幀圖像,即分隔的不連續(xù)的單幅影像畫面。在所述數(shù)據(jù)線程在所述本地窗口對象與渲染線程的建立連接后,將實(shí)時(shí)通過所述底層接口接收所述本地窗口對象傳送的所述幀圖像并傳輸至指定的資源存儲空間,其中,所述指定的資源存儲空間可以是內(nèi)存、緩存、顯存和/或移動終端內(nèi)置存儲器等。
[0031]所述渲染線程進(jìn)一步為由數(shù)據(jù)驅(qū)動運(yùn)轉(zhuǎn),即相應(yīng)的所述數(shù)據(jù)線程中有圖像數(shù)據(jù)進(jìn)行傳輸時(shí),則所述渲染線程激活啟動,并對所述所述數(shù)據(jù)線程中的數(shù)據(jù)進(jìn)行渲染處理。
[0032]在實(shí)際應(yīng)用中,所述渲染線程在所述本地窗口對象創(chuàng)建后再進(jìn)行創(chuàng)建,移動終端的本地渲染接口函數(shù)以循環(huán)體的方式在所述渲染線程中做輪詢監(jiān)測,在所述幀圖像傳輸至所述指定的資源存儲空間后,將該幀圖像以字節(jié)數(shù)組的方式傳遞至底層進(jìn)行圖像渲染。
[0033]步驟103,實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,并在渲染完畢后銷毀所述本地窗口對象,結(jié)束所述渲染線程。
[0034]在實(shí)際應(yīng)用中,當(dāng)不再有渲染需求的時(shí)候,即用戶關(guān)閉所述視頻窗口界面或視頻放映結(jié)束時(shí),銷毀創(chuàng)建的所述本地窗口對象,結(jié)束渲染線程。
[0035]實(shí)施例二
如圖2所示,為本申請實(shí)施例二所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法的方法流程,包括:
步驟201,創(chuàng)建本地窗口對象,將該本地窗口對象的圖像數(shù)據(jù)傳送至相對應(yīng)的底層接口,建立所述本地窗口對象與渲染線程的連接。
[0036]步驟202,所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將根據(jù)所述圖像數(shù)據(jù)預(yù)先生成的腳本信息數(shù)據(jù)發(fā)送至所述底層接口中與上一次保存的進(jìn)行渲染處理生成所執(zhí)行的腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動該渲染線程進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染;生成渲染數(shù)據(jù)。
[0037]對于步驟202,為了確定具體采用對所述幀圖像進(jìn)行渲染處理的所述渲染線程的類型,便可以對預(yù)先生成的所述腳本信息數(shù)據(jù)進(jìn)行比較,需要說明的是,所述腳本信息數(shù)據(jù)進(jìn)一步為字符串形式的腳本信息通過相應(yīng)函數(shù)寫入顯存,編譯為二進(jìn)制碼進(jìn)行存儲的腳本信息數(shù)據(jù),是GPU (Graphic Processing Unit,圖形處理器)進(jìn)行渲染處理時(shí)的執(zhí)行數(shù)據(jù)。在進(jìn)行渲染處理之前,所述腳本信息數(shù)據(jù)將通過所述底層接口傳輸至底層進(jìn)行判斷,所述底層接收到所述腳本信息數(shù)據(jù)后,與上一次保存的進(jìn)行渲染處理所執(zhí)行的所述腳本信息數(shù)據(jù)進(jìn)行比較,如果相同,則仍使用上一次的所述腳本信息數(shù)據(jù)對應(yīng)的所述渲染線程的處理方式進(jìn)行圖像渲染,否則重新初始化所述渲染線程進(jìn)行渲染處理。
[0038]步驟203,實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,并在渲染完畢后銷毀所述本地窗口對象,結(jié)束所述渲染線程。
[0039]在進(jìn)行渲染后,底層通過相應(yīng)的接口獲取GPU顯存內(nèi)存儲的渲染數(shù)據(jù),該接口先獲取一個(gè)與顯存內(nèi)圖像存儲地址相關(guān)聯(lián)的紋理指針,之后通過數(shù)據(jù)映射到內(nèi)存的方式得到GPU處理后的所述渲染數(shù)據(jù)。
[0040]實(shí)施例三
以下一個(gè)應(yīng)用實(shí)例來說明如何實(shí)現(xiàn)本申請的上述操作。
[0041 ] 首先,倉Il建本地窗口對象,創(chuàng)建的方式具體可以采用創(chuàng)建SurfaceView類(表面顯示系統(tǒng)集合)的對象,再通過安卓系統(tǒng)內(nèi)的API獲得該對象內(nèi)部的Surface類(表面集合)對象,該對象就是將要顯示的視窗系統(tǒng)的本地窗口對象。
[0042]在保證渲染線程管理原生化的前提下,建立所述本地窗口對象與渲染線程的連接,即可以將獲得的Surface類對象通過JNI (JAVA本地調(diào)用)封裝構(gòu)造函數(shù)傳入底層,使用安卓系統(tǒng)中得原生接口(具體可以是native_window_jn1.h文件,即本地窗口文件)中定義的函數(shù)(具體可以是ANativeWindow_fromSurface函數(shù))獲取視窗系統(tǒng)相應(yīng)本地窗口的指針,進(jìn)一步建立本地窗口對象和渲染線程的連接。
[0043]之后,所述渲染線程在相應(yīng)的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將根據(jù)所述圖像數(shù)據(jù)預(yù)先生成的腳本信息數(shù)據(jù)發(fā)送至所述底層接口中與上一次保存的進(jìn)行渲染處理生成所執(zhí)行的腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動該渲染線程進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染;生成渲染數(shù)據(jù)。
[0044]具體來說,由于所述渲染引擎是數(shù)據(jù)驅(qū)動運(yùn)轉(zhuǎn)的,所以會以外部java線程是否有圖像數(shù)據(jù)傳輸作為啟動條件,當(dāng)外部java線程有數(shù)據(jù)傳輸?shù)街付ǖ牡馁Y源存儲空間后,就啟動渲染線程,該渲染線程是通過創(chuàng)建java編程接口中線性線程類(Thread類)來實(shí)現(xiàn)的。在本實(shí)施例中,線性線程在SurfaceView子類中繼承可追捕接口(Runnable接口)實(shí)現(xiàn)一個(gè)渲染線程,然后將圖形化編程接口的本地渲染接口函數(shù)以循環(huán)體的方式在該線程中做輪詢監(jiān)測,當(dāng)有新的幀圖像傳送至指定的存儲空間后,將該幀圖像以字節(jié)數(shù)組的方式傳遞到底層,創(chuàng)建的所述渲染線程通過線性線程類的生命周期函數(shù)進(jìn)行管理。
[0045]為了確定采用何種渲染線程對幀圖像進(jìn)行處理,采用腳本信息數(shù)據(jù)傳遞入底層的方式進(jìn)行判斷。當(dāng)?shù)讓拥玫綌?shù)據(jù)后,通過與上次保存的所述腳本信息數(shù)據(jù)的序列值進(jìn)行比較,如果相同,就維持原來渲染線程的處理方式進(jìn)行圖像渲染,否則會重新初始化渲染線程后再進(jìn)入渲染流程。
[0046]進(jìn)一步地,所述腳本信息數(shù)據(jù)是以字符串的形式編寫的shader (渲染)腳本,通過圖形化編程接口庫函數(shù)寫入顯存,編譯為二進(jìn)制碼存儲后來執(zhí)行的。
[0047]然后,實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,并在渲染完畢后銷毀所述本地窗口對象,結(jié)束所述渲染線程。
具體地,底層通過獲取顯存內(nèi)圖像數(shù)據(jù)的本地接口,獲取一個(gè)與顯存內(nèi)圖像存儲地址相關(guān)聯(lián)的紋理指針,之后通過顯存數(shù)據(jù)映射到內(nèi)存的方式得到GPU計(jì)算后的圖像數(shù)據(jù)。由于GPU的浮點(diǎn)數(shù)運(yùn)算能力很強(qiáng),所以可以直接將YUV (顏色編碼)數(shù)據(jù)輸入到顯存中進(jìn)行矩陣變換得到顯示所需要的RGBA (色彩空間)數(shù)據(jù)。此時(shí),已經(jīng)完成了對所述幀圖像的渲染處理。銷毀創(chuàng)建的對象,結(jié)束渲染線程。
[0048]通過上述方式便完成了圖像渲染引擎的構(gòu)建,通過本地窗口對象與渲染線程的直接連接,極大提高了系統(tǒng)應(yīng)用程序編程接口中的渲染線程管理的開放性,同時(shí)消除了渲染線程結(jié)構(gòu)存在冗余,有效提升了渲染線程的運(yùn)行效率。
[0049]在本實(shí)施例中,采用上述渲染引擎可以結(jié)合臉部識別技術(shù)進(jìn)行臉部識別。進(jìn)行臉部識別處理可以使用0penCV(0pen Source Computer Vision Library,基于開源的跨平臺計(jì)算機(jī)視覺庫),臉部識別過程通過對圖像進(jìn)行一次遍歷后得到識別特征的像素點(diǎn)坐標(biāo)來進(jìn)行特征識別,在處理過程中可以直接調(diào)用渲染接口傳遞浮點(diǎn)數(shù)坐標(biāo),本方案采用的引擎會實(shí)時(shí)的進(jìn)行處理,對識別區(qū)域進(jìn)行圖像計(jì)算,如在臉部區(qū)域打上馬賽克。
[0050]在本實(shí)施例中,采用上述渲染引擎還可以應(yīng)用與以該渲染引擎為基礎(chǔ)的預(yù)覽頁面的應(yīng)用程序中,用戶可以在各個(gè)不同的濾鏡效果中自由切換,并實(shí)時(shí)的提取濾鏡處理后的圖像數(shù)據(jù)。
[0051]如圖3所示,為本申請實(shí)施例四所述的一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),該系統(tǒng)包括:窗口對象創(chuàng)建模塊301、渲染處理模塊302以及窗口顯示處理模塊303,其中,
所述窗口對象創(chuàng)建模塊301,與所述渲染處理模塊302相耦接,用于創(chuàng)建本地窗口對象,將所述本地窗口對象的圖像數(shù)據(jù)發(fā)送至所述渲染處理模塊302 ;
所述渲染處理模塊302,與所述窗口對象創(chuàng)建模塊301和窗口顯示處理模塊303相耦接,用于通過其內(nèi)部的所述渲染線程以外的數(shù)據(jù)線程接收所述圖像數(shù)據(jù),并在所述圖像數(shù)據(jù)傳輸?shù)皆撲秩咎幚砟K302內(nèi)部指定的資源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)發(fā)送至所述窗口顯示處理模塊303,以及用于接收所述窗口顯示處理模塊303發(fā)送的終止指令結(jié)束所述渲染線程;
進(jìn)一步地,所述渲染處理模塊302用于通過其內(nèi)部的所述渲染線程以外的數(shù)據(jù)線程接收所述圖像數(shù)據(jù),并在所述圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將預(yù)先生成的所述腳本信息數(shù)據(jù)與上一次保存的進(jìn)行渲染處理所執(zhí)行的所述腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動所述渲染線程對所述資源存儲空間中的進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染,生成渲染數(shù)據(jù)發(fā)送至所述窗口顯示處理模塊303。
[0052]其中,所述腳本信息數(shù)據(jù),進(jìn)一步為字符串形式的腳本信息通過相應(yīng)函數(shù)寫入顯存,編譯為二進(jìn)制碼進(jìn)行存儲的圖形處理器進(jìn)行渲染處理時(shí)的執(zhí)行數(shù)據(jù)。
[0053]再進(jìn)一步地,所述渲染處理模塊用于,啟動所述渲染線程后,預(yù)置的本地渲染接口函數(shù)以循環(huán)體的方式在所述渲染線程中進(jìn)行輪詢監(jiān)測,在所述圖像數(shù)據(jù)傳輸至所述指定的資源存儲空間后,對該圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)。
[0054]其中,所述圖像數(shù)據(jù),進(jìn)一步以字節(jié)數(shù)組的方式從所述指定的資源存儲空間傳遞到所述渲染線程進(jìn)行圖像渲染。
[0055]所述窗口顯示處理模塊303,與所述渲染處理模塊302相耦接,用于實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,在渲染完畢后生成銷毀指令對所述本地窗口對象進(jìn)行銷毀,同時(shí)生成終止指令發(fā)送至所述渲染處理模塊302。
[0056]由于方法部分已經(jīng)對本申請實(shí)施例進(jìn)行了詳細(xì)描述,這里對實(shí)施例中涉及的方法與系統(tǒng)對應(yīng)部分的展開描述省略,不再贅述。對于系統(tǒng)中具體內(nèi)容的描述可參考所述方法實(shí)施例的內(nèi)容,這里不再具體限定。
[0057]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、裝置、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0058]上述說明示出并描述了本申請的若干優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本申請并非局限于本文所披露的形式,不應(yīng)看作是對其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進(jìn)行改動。而本領(lǐng)域人員所進(jìn)行的改動和變化不脫離本申請的精神和范圍,則都應(yīng)在本申請所附權(quán)利要求的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法,其特征在于,該方法包括: 創(chuàng)建本地窗口對象,將該本地窗口對象的圖像數(shù)據(jù)傳送至相對應(yīng)的底層接口,建立所述本地窗口對象與渲染線程的連接; 所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù); 實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,并在渲染完畢后銷毀所述本地窗口對象,結(jié)束所述渲染線程。
2.如權(quán)利要求1所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法,其特征在于,當(dāng)所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,進(jìn)一步為,所述渲染線程以外的數(shù)據(jù)線程中有圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將預(yù)先生成的所述腳本信息數(shù)據(jù)發(fā)送至所述底層接口中與上一次保存的進(jìn)行渲染處理所執(zhí)行的所述腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動該渲染線程進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染。
3.如權(quán)利要求2所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法,其特征在于,所述腳本信息數(shù)據(jù),進(jìn)一步為字符串形式的腳本信息通過相應(yīng)函數(shù)寫入顯存,編譯為二進(jìn)制碼進(jìn)行存儲的圖形處理器進(jìn)行渲染處理時(shí)的執(zhí)行數(shù)據(jù)。
4.如權(quán)利要求1所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法,其特征在于,啟動所述渲染線程對所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù),進(jìn)一步為,啟動所述渲染線程,本地渲染接口函數(shù)以循環(huán)體的方式在該渲染線程中進(jìn)行輪詢監(jiān)測,在所述圖像數(shù)據(jù)傳輸至所述指定的資源存儲空間后,將該圖像數(shù)據(jù)傳遞到底層進(jìn)行圖像渲染,生成渲染數(shù)據(jù)。
5.如權(quán)利要求4所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建方法,其特征在于,將所述圖像數(shù)據(jù)傳遞到底層進(jìn)行圖像渲染,進(jìn)一步為,將所述圖像數(shù)據(jù)以字節(jié)數(shù)組的方式傳遞到底層進(jìn)行圖像渲染。
6.一種基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),其特征在于,該系統(tǒng)包括:窗口對象創(chuàng)建模塊、渲染處理模塊以及窗口顯示處理模塊,其中, 所述窗口對象創(chuàng)建模塊,用于創(chuàng)建本地窗口對象,將所述本地窗口對象的圖像數(shù)據(jù)發(fā)送至所述渲染處理模塊; 所述渲染處理模塊,用于通過其內(nèi)部的所述渲染線程以外的數(shù)據(jù)線程接收所述圖像數(shù)據(jù),并在所述圖像數(shù)據(jù)傳輸?shù)皆撲秩咎幚砟K內(nèi)部指定的資源存儲空間后,啟動所述渲染線程對所述資源存儲空間中的所述圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)發(fā)送至所述窗口顯示處理模塊,以及用于接收所述窗口顯示處理模塊發(fā)送的終止指令結(jié)束所述渲染線程; 所述窗口顯示處理模塊,用于實(shí)時(shí)獲取所述渲染數(shù)據(jù)進(jìn)行顯示,在渲染完畢后生成銷毀指令對所述本地窗口對象進(jìn)行銷毀,同時(shí)生成終止指令發(fā)送至所述渲染處理模塊。
7.如權(quán)利要求6所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),其特征在于,所述渲染處理模塊,進(jìn)一步用于,通過其內(nèi)部的所述渲染線程以外的數(shù)據(jù)線程接收所述圖像數(shù)據(jù),并在所述圖像數(shù)據(jù)傳輸?shù)街付ǖ馁Y源存儲空間后,將預(yù)先生成的所述腳本信息數(shù)據(jù)與上一次保存的進(jìn)行渲染處理所執(zhí)行的所述腳本信息數(shù)據(jù)進(jìn)行比較,若相同,則啟動所述渲染線程對所述資源存儲空間中的進(jìn)行圖像渲染;若不同,則進(jìn)行初始化處理生成相應(yīng)的渲染線程后再進(jìn)行圖像渲染,生成渲染數(shù)據(jù)發(fā)送至所述窗口顯示處理模塊。
8.如權(quán)利要求7所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),其特征在于,所述腳本信息數(shù)據(jù),進(jìn)一步為字符串形式的腳本信息通過相應(yīng)函數(shù)寫入顯存,編譯為二進(jìn)制碼進(jìn)行存儲的圖形處理器進(jìn)行渲染處理時(shí)的執(zhí)行數(shù)據(jù)。
9.如權(quán)利要求6所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),其特征在于,所述渲染處理模塊,進(jìn)一步用于,啟動所述渲染線程后,預(yù)置的本地渲染接口函數(shù)以循環(huán)體的方式在所述渲染線程中進(jìn)行輪詢監(jiān)測,在所述圖像數(shù)據(jù)傳輸至所述指定的資源存儲空間后,對該圖像數(shù)據(jù)進(jìn)行圖像渲染,生成渲染數(shù)據(jù)。
10.如權(quán)利要求9所述的基于安卓系統(tǒng)的圖像渲染引擎構(gòu)建系統(tǒng),其特征在于,所述圖像數(shù)據(jù),進(jìn)一步以字節(jié)數(shù)組的方式從所述指定的資源存儲空間傳遞到所述渲染線程進(jìn)行圖像渲染。
【文檔編號】G06F9/44GK103617027SQ201310519055
【公開日】2014年3月5日 申請日期:2013年10月29日 優(yōu)先權(quán)日:2013年10月29日
【發(fā)明者】張圣, 姚健, 潘柏宇, 盧述奇 申請人:合一網(wǎng)絡(luò)技術(shù)(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
临桂县| 华宁县| 临安市| 清原| 英山县| 民勤县| 麟游县| 洛南县| 井研县| 浑源县| 华蓥市| 桂平市| 乌兰察布市| 鲁山县| 镇康县| 仙游县| 木里| 洪泽县| 丰原市| 从化市| 镇坪县| 都江堰市| 九龙坡区| 高要市| 武邑县| 布拖县| 宁陵县| 榆树市| 石景山区| 滨海县| 曲阜市| 新龙县| 定兴县| 杭州市| 张家港市| 昌图县| 新化县| 惠水县| 博白县| 淮南市| 德安县|