本發(fā)明涉及圖形圖像處理領域,特別涉及一種用于包含多核處理器的嵌入式終端中播放Flash動畫的動畫播放方法及裝置。
背景技術:Flash是互聯(lián)網領域使用最為普遍的一種互動多媒體動畫。隨著Flash相關技術的不斷發(fā)展,F(xiàn)lash也在不斷復雜化和功能多樣化。目前,如何利用諸如手機或者平板電腦之類的嵌入式終端的有限系統(tǒng)資源流暢地播放Flash動畫文件是現(xiàn)代互聯(lián)網企業(yè)的熱門研究課題之在現(xiàn)有技術中,嵌入式終端中的CPU大多為單核心。在播放Flash動畫文件時需要完成加載、解析、渲染和播放等等一系列操作。當Flash動畫文件比較復雜和比較龐大時,CPU經常需要全速運行來完成整個播放過程。在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術至少存在以下問題:由于Flash動畫文件的不斷復雜化和功能多樣化,現(xiàn)有的Flash動畫的動畫播放方法通常需要全速占用CPU來處理數(shù)據(jù),對嵌入式終端的資源占用較大。即便是如此,F(xiàn)lash動畫的播放效果依然很差,播放速度較慢還容易卡頓,經發(fā)明人分析可知,整個Flash播放過程中,在渲染步驟中對CPU的占用尤為明顯,是造成現(xiàn)有Flash動畫的動畫播放方法的播放效果差的主要原因之一。
技術實現(xiàn)要素:為了在嵌入式終端中獲得更好的Flash動畫播放效果,本發(fā)明實施例提供了一種適用于包含多核處理器的嵌入式終端中的動畫播放方法及裝置。所述技術方案如下:根據(jù)本發(fā)明的一個方面,本發(fā)明實施例提供一種動畫播放方法,適用于包含多核處理器的終端中,所述多核處理器包含至少兩個處理核心,所述方法包括:獲取待播放動畫中當前幀的待渲染數(shù)據(jù);按照預定拆分方式,將所述當前幀的待渲染數(shù)據(jù)拆分為至少兩個子圖像數(shù)據(jù);將所述至少兩個子圖像數(shù)據(jù)分別交由各個處理核心進行并行渲染,得到渲染后的子圖像數(shù)據(jù);將所述渲染后的子圖像數(shù)據(jù)組合為所述當前幀的圖像數(shù)據(jù)進行播放。進一步地,所述將當前幀的待渲染數(shù)據(jù)拆分為至少兩個子圖像數(shù)據(jù),具體包括:所述預定拆分方式包括以下方式中的任一種:按照顯示區(qū)域拆分、按照處理核心個數(shù)拆分、按照包含對象的個數(shù)拆分、按照包含對象的類型拆分和按照包含對象所處的圖層拆分。進一步地,所述獲取每幀圖像的待渲染數(shù)據(jù),具體包括:加載所述待播放動畫的動畫文件;解析所述動畫文件,以獲取至少一個控制標簽和至少一個定義標簽;依次識別每個控制標簽的操作指令;根據(jù)每個控制標簽的操作指令來操作所述定義標簽以生成所述當前幀的待渲染數(shù)據(jù)。進一步地,所述加載所述待播放動畫的動畫文件,具體包括:識別待播放動畫的動畫文件的類型,所述類型包括主動畫文件和子動畫文件中的一種;如果識別到所述動畫文件的類型為主動畫文件,則由當前處理核心加載所述動畫文件;如果識別到所述動畫文件的類型為子動畫文件,則由空閑處理核心加載所述動畫文件。進一步地,所述解析所述動畫文件,以獲取至少一個控制標簽和至少一個定義標簽,具體包括:采用當前處理核心對所述主動畫文件進行解析,獲得所述主動畫文件中的至少一個控制標簽和至少一個定義標簽;和/或,采用空閑處理核心對所述子動畫文件進行解析,獲得所述子動畫文件中的至少一個控制標簽和至少一個定義標簽。進一步地,所述依次識別每個控制標簽的操作指令,具體包括:識別所述控制標簽的類型是否為腳本標簽;如果識別所述控制標簽的類型為腳本標簽,則將所述類型為腳本標簽的控制標簽交由空閑處理核心進行處理以獲得所述控制標簽的操作指令。根據(jù)本發(fā)明的另一方面,本發(fā)明實施例還提供一種動畫播放裝置,適用于包含多核處理器的終端中,所述多核處理器包含至少兩個處理核心,所述裝置包括:數(shù)據(jù)獲取模塊,用于獲取待播放動畫中當前幀的待渲染數(shù)據(jù);數(shù)據(jù)拆分模塊,用于按照預定拆分方式,將所述當前幀的待渲染數(shù)據(jù)拆分為至少兩個子圖像數(shù)據(jù);數(shù)據(jù)渲染模塊,用于將所述至少兩個子圖像數(shù)據(jù)分別輸入各個處理核心進行并行渲染,得到渲染后的子圖像數(shù)據(jù);數(shù)據(jù)播放模塊,用于將所述渲染后的子圖像數(shù)據(jù)組合為所述當前幀的圖像數(shù)據(jù)進行播放。進一步地,所述數(shù)據(jù)拆分模塊,具體包括:區(qū)域拆分單元、核心拆分單元、對象拆分單元、類型拆分單元和圖層拆分單元中的任一種;所述區(qū)域拆分單元,用于將所述當前幀的待渲染數(shù)據(jù)按照顯示區(qū)域拆分為至少兩個子圖像數(shù)據(jù);所述核心拆分單元,用于將所述當前幀的待渲染數(shù)據(jù)按照包含對象的個數(shù)拆分為至少兩個子圖像數(shù)據(jù);所述預定拆分單元,用于將所述當前幀的待渲染數(shù)據(jù)按照處理核心的個數(shù)拆分為至少兩個子圖像數(shù)據(jù);所述類型拆分單元,用于將所述當前幀的待渲染數(shù)據(jù)按照包含對象的類型拆分為至少兩個子圖像數(shù)據(jù);所述圖層拆分單元,用于將所述當前幀的待渲染數(shù)據(jù)按照包含對象所處的圖層拆分為至少兩個子圖像數(shù)據(jù)。進一步地,所述數(shù)據(jù)獲取模塊,具體包括:動畫文件加載單元、動畫文件解析單元、控制標簽識別單元和控制標簽執(zhí)行單元;所述動畫文件加載單元,用于加載所述待播放動畫的動畫文件;所述動畫文件解析單元,用于解析所述動畫文件,以獲取至少一個控制標簽和至少一個定義標簽;所述控制標簽識別單元,用于依次識別每個控制標簽的操作指令;所述控制標簽執(zhí)行單元,用于根據(jù)每個控制標簽的操作指令來操作所述定義標簽以生成所述當前幀的待渲染數(shù)據(jù)。進一步地,所述動畫文件加載單元,具體包括:文件類型識別子單元、主動畫文件加載子單元和子動畫文件加載子單元;所述文件類型識別子單元,用于識別待加載的動畫文件的類型,所述類型包括主動畫文件和子動畫文件中的一種;所述主動畫文件加載子單元,用于如果識別到所述動畫文件的類型為主動畫文件,則由當前處理核心加載所述動畫文件;所述子動畫文件加載子單元,用于如果識別到所述動畫文件的類型為子動畫文件,則由空閑處理核心加載所述動畫文件。進一步地,所述動畫文件解析單元,具體包括:主動畫文件解析子單元和子動畫文件解析子單元;所述主動畫文件解析子單元,用于采用當前處理核心對所述主動畫文件進行解析,以獲得所述主動畫文件中的至少一個控制標簽和至少一個定義標簽;所述子動畫文件解析子單元,用于采用空閑處理核心對所述子動畫文件進行解析,獲得所述子動畫文件中的至少一個控制標簽和至少一個定義標簽。進一步地,所述控制標簽識別單元,具體包括:類型識別子單元和腳本執(zhí)行子單元;所述類型識別子單元,用于識別所述控制標簽的類型是否為腳本標簽;所述腳本執(zhí)行子單元,用于如果識別所述控制標簽的類型為腳本標簽,則將所述類型為腳本標簽的控制標簽交由空閑處理核心進行處理以獲得所述控制標簽的操作指令。本發(fā)明實施例提供的技術方案帶來的有益效果是:通過將渲染過程中的待渲染數(shù)據(jù)拆分為多個部分,由多核處理器中的各個處理核心分別渲染而達到并行渲染的效果,使得Flash動畫的播放速度得到明顯提升,解決了Flash動畫播放時經常全速占用CPU的問題。附圖說明為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實施例一提供的動畫播放方法的方法流程圖;圖2是本發(fā)明實施例二提供的動畫播放方法的方法流程圖;圖3是本發(fā)明實施例三提供的動畫播放裝置的結構方框圖;圖4是本發(fā)明實施例三提供的動畫文件加載單元的結構方框圖;圖5是本發(fā)明實施例三提供的數(shù)據(jù)拆分模塊的結構方框圖;圖6是本發(fā)明實施例三提供的動畫文件解析單元的結構方框圖;圖7是本發(fā)明實施例三提供的控制標簽識別單元的結構方框圖。具體實施方式為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明實施方式作進一步地詳細描述。實施例一請參考圖1,其示出了實施例一提供的動畫播放方法的方法流程圖。該動畫播放方法適用于包含多核處理器的嵌入式設備中,該動畫播放方法包括:步驟101,獲取待播放動畫中當前幀的待渲染數(shù)據(jù);在需要播放一個動畫文件時,首先需要加載動畫文件,動畫文件通常也即ShockWaveFlash文件,簡稱SWF文件。SWF文件通常包括有一個文件頭部分和文件體部分,文件頭部分定義了Flash動畫的版本、大小、幀率和總幀數(shù)等信息,文件體部分通常包括有大量的標簽;然后,解析加載到的SWF文件可以獲得定義標簽和控制標簽,每個定義標簽用于定義動畫中的一個對象或者說一個對象的所有信息,在Flash動畫中常見的每個人、每個動物、每個樹木都可以認為是一個對象,每幀圖像都是由若干個對象組成;對象的信息通常包含有屬性、位置、類別和所處圖層等一系列信息??刂茦撕炗糜诳刂茖ο蟮睦L制和運動;根據(jù)對應于一幀圖像的定義標簽和控制標簽可以獲取到該幀圖像的待渲染數(shù)據(jù)。步驟102,按照預定拆分方式,將當前幀的待渲染數(shù)據(jù)拆分為至少兩個子圖像數(shù)據(jù);在獲取到一幀圖像的待渲染數(shù)據(jù)后,可以按照預定拆分方式將當前幀的待渲染數(shù)據(jù)拆分為至少兩個子圖像數(shù)據(jù)。該預定拆分方式可以有不同方式,比如一種方式為:按照該幀圖像在屏幕上顯示時的顯示區(qū)域劃分為若干塊顯示區(qū)域,然后將對應于每塊顯示區(qū)域的待渲染數(shù)據(jù)拆分為一個子圖像數(shù)據(jù)。具體地講,可以將該幀圖像在屏幕上顯示時的顯示區(qū)域劃分為6塊,將對應于每塊顯示區(qū)域的待渲染數(shù)據(jù)拆分為一個子圖像數(shù)據(jù)。步驟103,將至少兩個子圖像數(shù)據(jù)分別輸入各個處理核心進行并行渲染,得到渲染后的子圖像數(shù)據(jù);將拆分后的子圖像數(shù)據(jù)分別輸入各個處理核心進行并行渲染,比如嵌入式終端包括4個CPU核心:第一處理核心、第二處理核心、第三處理核心和第四處理核心,一幀圖像的待渲染數(shù)據(jù)拆分后包括6個子圖像數(shù)據(jù),則可以將拆分后的第1個至第4個子圖像數(shù)據(jù)分別輸入第一處理核心、第二處理核心、第三處理核心和第四處理核心進行并行渲染,然后各個處理核心可以將渲染后的每個子圖像數(shù)據(jù)放入緩沖區(qū);同時,在第1個至第4個子圖像數(shù)據(jù)中的任一個子圖像數(shù)據(jù)被渲染完畢后,也即存在空閑處理核心時,立刻將第5個子圖像數(shù)據(jù)輸入該空閑處理核心進行處理,第6個子圖像數(shù)據(jù)也可以采用同樣的處理方式,使得在很短時間內就可以將一幀圖像的待渲染數(shù)據(jù)渲染完畢。當然,也可以將待渲染數(shù)據(jù)根據(jù)嵌入式終端所包含的核心個數(shù)拆分為相應個數(shù)的子圖像數(shù)據(jù),比如嵌入式終端所包含的處理核心為4個,則將一幀圖像的待渲染數(shù)據(jù)也拆分為4個子圖像數(shù)據(jù),可以獲得更快的渲染速度。步驟104,將渲染后的子圖像數(shù)據(jù)組合為當前幀的圖像數(shù)據(jù)進行播放;在當前幀的每個子圖像數(shù)據(jù)都渲染完畢,也即渲染后獲得的每個子圖像數(shù)據(jù)都存入緩沖區(qū)時,可以將緩沖區(qū)中當前幀的所有子圖像數(shù)據(jù)組合為當前幀的圖像數(shù)據(jù)。播放器可以對當前幀的圖像數(shù)據(jù)進行播放。對于其它幀的處理過程,與當前幀的處理過程均相同。綜上所述,本發(fā)明實施例一提供的動畫播放方法通過將渲染過程中的待渲染數(shù)據(jù)拆分為多個部分,由多核處理器中的各個處理核心分別渲染而達到并行渲染的效果,使得Flash動畫的播放速度得到明顯提升,解決了Flash動畫播放時經常全速占用CPU的問題。更為詳細地講,現(xiàn)有技術中的每幀圖像的待渲染數(shù)據(jù)的渲染過程較長,可能超過了兩幀之間的間隔時間,所以容易出現(xiàn)卡頓現(xiàn)象。并且在此渲染過程中CPU被全速占用,甚至會影響到來電、短信等高優(yōu)先級的系統(tǒng)任務未能被及時處理。而本發(fā)明實施例一提供的動畫播放方法的渲染過程較為短暫,通常遠小于兩幀之間的間隔時間,使得CPU很快能夠被釋放,并且不會影響到來電、短信等高優(yōu)先級的其它系統(tǒng)任務的處理。實施例二請參考圖2,其示出了本發(fā)明實施例二提供的動畫播放方法的方法流程圖。該動畫播放方法適用于包含多核處理器的嵌入式設備中,該動畫播放方法包括:步驟201,加載待播放動畫的動畫文件;動畫文件也即SWF文件,在需要播放一個Flash動畫時,需要加載該Flash動畫的動畫文件。在簡單的Flash動畫中,可能只有一個動畫文件。在較為復雜的Flash動畫中,可能存在不止一個動畫文件,比如一個Flash游戲,可以包括一個主動畫文件和若干個子動畫文件,主動畫文件對應Flash游戲運行時必不可少的部分,每個子動畫文件可以對應Flash游戲的每一關的相應部分,子動畫文件不是必須加載的部分,只有在用戶玩游戲進入了該項關卡時,才會加載相應的子動畫文件以加載相應的道具和場景等。為了能夠獲得更為快速的加載過程,該加載動畫文件可以具體包括:第一,識別待播放動畫的動畫文件的類型,該類型包括主動畫文件和子動畫文件中的一種;動畫文件中可以存在有標識信息,用于標識該動畫文件是主動畫文件還是子動畫文件。在加載一個動畫文件時,可以首先識別動畫文件中的標識信息,以判別該動畫文件的類型。如果識別到是主動畫文件,則進入第二步驟;如果識別到是子動畫文件,則進入第三步驟。第二,如果識別到動畫文件的類型為主動畫文件,則由當前處理核心加載動畫文件;通常最開始加載的一個動畫文件是主動畫文件,如果識別到動畫文件的類型為主動畫文件,則由當前處理核心加載主動畫文件。第三,如果識別到動畫文件的類型為子動畫文件,則由空閑處理核心加載動畫文件。如果識別到動畫文件為子動畫文件,則可以將子動畫文件的加載任務交由空閑處理核心處理。在具體的實施例中,可以將子動畫文件的加載任務封裝成獨立的任務交由系統(tǒng)的操作系統(tǒng)調度,由操作系統(tǒng)將該任務交由空閑處理核心處理。同時子動畫文件也可以初始不加載,等接收到相應的加載觸發(fā)信號后再加載,該加載觸發(fā)信號可以是玩家通過某一關卡的信號。步驟202,解析動畫文件,以獲得至少一個定義標簽和至少一個控制標簽;動畫文件通常包括有一個文件頭部分和文件體部分,文件頭部分定義了Flash動畫的版本、大小、幀率和總幀數(shù)等信息,文件體部分通常包括有大量的標簽。這些標簽包括兩類標簽:用于定義動畫中每個對象的定義標簽和用于控制每個對象的繪制和運動的控制標簽。具體地講,定義標簽用于定義Flash動畫中的內容,如形狀、文字、位圖和聲音等等,這些形狀、文字、位圖和聲音可以認為是一個對象。換句話說,每個定義標簽定義了一個對象的所有信息,比如一個定義標簽可以定義一個對象的類別為矢量多邊形、形狀為小草型、顏色為綠色、初始空間位置為(xx,yy)、初始圖...