本發(fā)明涉及多媒體技術(shù)領(lǐng)域,尤其涉及一種視頻處理方法、裝置及終端。
背景技術(shù):
視頻解碼是指對經(jīng)過編碼壓縮過的視頻數(shù)據(jù)進(jìn)行解壓縮的過程,主要有兩種解碼方式,一種是通過軟件方式來進(jìn)行解碼,即軟件解碼方式,另一種是通過硬件來進(jìn)行解碼,即硬件解碼方式,之后將解壓縮的視頻文件或者信號進(jìn)行顯示。
目前,一般在對一個(gè)視頻開始解碼時(shí),即視頻播放前,人為可主動(dòng)選擇解碼方式,硬件解碼或者軟件解碼,但是,一旦選擇了解碼方式,對于此次解碼來說,解碼方式就固定了,只能采用已選擇了的解碼方式來進(jìn)行解碼,進(jìn)而,在對這個(gè)視頻進(jìn)行解碼的過程中,解碼方式不可自動(dòng)切換,若想切換,則需要退出此次解碼,只能在視頻播放前手動(dòng)重新選擇解碼方式,從第一幀開始對這個(gè)視頻進(jìn)行重新解碼,效率低。另外,在對這個(gè)視頻進(jìn)行解碼的過程中,一旦解碼出現(xiàn)異常,只能退出此次解碼,解碼失敗,重新手動(dòng)選擇另外一個(gè)解碼方式進(jìn)行解碼,效率低,用戶體驗(yàn)差。
而雖然目前大部分的視頻解碼采用的是硬件解碼,但是受硬件的限制,遇到特殊情況時(shí),硬件解碼可能無法正常解碼,此時(shí),軟件解碼可能可以對特殊情況進(jìn)行正常解碼。同樣地,視頻解碼采用軟件解碼進(jìn)行解碼時(shí),隨著解碼的進(jìn)行,軟件解碼可能無法正常解碼,例如,隨著解碼的進(jìn)行,由于cpu負(fù)載過高或者內(nèi)存不足而導(dǎo)致的解碼速度慢,使得解碼完成的時(shí)間超過需要顯示的時(shí)間,進(jìn)而導(dǎo)致丟幀,畫面卡頓、黑屏或者卡住不動(dòng),視覺效果差,此時(shí),硬件解碼可能可以正常解碼,并且,硬件解碼功耗低、cpu負(fù)載相對較低。因而,在視頻解碼的過程中,需要自動(dòng)切換解碼方式,這樣可以提高解碼效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于,提供一種視頻處理方法、裝置及終端,解碼過程中可自動(dòng)切換解碼方式,以提高解碼效率。
本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案是提供了一種視頻處理方法,包括:接收視頻文件;采用第一解碼方式解碼所述視頻文件;以及當(dāng)檢測到所述第一解碼方式解碼出現(xiàn)解碼異常時(shí),將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式,并采用所述第二解碼方式繼續(xù)解碼所述視頻文件剩余的部分;其中,所述第一解碼方式和第二解碼方式的其中一個(gè)為硬件解碼方式,另一個(gè)為軟件解碼方式。
其中,所述采用所述第二解碼方式繼續(xù)解碼所述視頻文件剩余的部分的步驟包括:獲取出現(xiàn)所述解碼異常時(shí)的當(dāng)前解碼信息,其中,所述當(dāng)前解碼信息包括出錯(cuò)幀的位置以及所述出錯(cuò)幀的前一個(gè)關(guān)鍵幀的位置;以及采用所述第二解碼方式從所述前一個(gè)關(guān)鍵幀開始繼續(xù)解碼所述視頻文件剩余的部分。
其中,所述視頻處理方法還包括:在采用所述第一解碼方式解碼所述視頻文件時(shí),顯示所述視頻文件直至所述出錯(cuò)幀的位置;以及在采用所述第二解碼方式從所述前一個(gè)關(guān)鍵幀開始繼續(xù)解碼所述視頻文件剩余的部分時(shí),從所述出錯(cuò)幀的位置繼續(xù)開始顯示所述視頻文件。
其中,所述第一解碼方式為硬件解碼方式;以及所述解碼異常包括解碼時(shí)出現(xiàn)關(guān)鍵字段語法元素解析錯(cuò)誤、解碼時(shí)間超時(shí)、丟幀達(dá)到上限、硬件資源不足以及硬件解碼方式所支持的視頻類型與待解碼視頻文件的視頻類型不匹配中至少一種。
其中,所述采用第一解碼方式解碼所述視頻文件的步驟包括:加載對應(yīng)所述硬件解碼方式的第一組件;通過所述第一組件調(diào)用視頻驅(qū)動(dòng)對所述視頻文件進(jìn)行硬件解碼;所述將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式,包括:當(dāng)檢測到所述第一解碼方式解碼出現(xiàn)解碼異常時(shí),停止所述硬件解碼方式,并加載對應(yīng)所述軟件解碼方式的第二組件以及激活軟件解碼庫。
其中,所述停止所述硬件解碼方式,并加載對應(yīng)所述軟件解碼方式的第二組件以及激活軟件解碼庫包括:通過開放多媒體加速層的客戶端卸載對應(yīng)所述硬件解碼方式的第一組件或禁能所述視頻驅(qū)動(dòng)來停止所述硬件解碼方式,并通過開放多媒體加速層的客戶端加載對應(yīng)所述軟件解碼方式的第二組件以及激活軟件解碼庫。
其中,所述第一解碼方式為軟件解碼方式;所述解碼異常包括解碼時(shí)處理器負(fù)載超過預(yù)定值、丟幀數(shù)量超過預(yù)設(shè)值以及解碼完成時(shí)間比解碼顯示時(shí)間晚中的至少一種。
其中,所述采用第一解碼方式解碼所述視頻文件,包括:加載對應(yīng)所述軟件解碼方式的第二組件;通過所述第二組件調(diào)用軟件解碼庫對所述視頻文件進(jìn)行軟件解碼;所述將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式,包括:當(dāng)檢測到所述第一解碼方式解碼出現(xiàn)解碼異常時(shí),停止所述軟件解碼方式,并加載對應(yīng)所述硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng)。
其中,所述停止所述軟件解碼方式,并加載對應(yīng)所述硬件解碼方式的第一組件以及激活軟件解碼庫包括:通過開放多媒體加速層的客戶端卸載對應(yīng)所述軟件解碼方式的第二組件或禁能所述軟件解碼庫來停止所述軟件解碼方式,并通過開放多媒體加速層的客戶端加載對應(yīng)所述硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng)。
本發(fā)明解決上述技術(shù)問題所采用的另一技術(shù)方案是提供了一種視頻處理裝置,包括:接收模塊,用于接收視頻文件;第一解碼模塊,用于采用第一解碼方式解碼所述視頻文件;控制模塊,用于當(dāng)檢測到所述第一解碼方式解碼出現(xiàn)解碼異常時(shí),控制將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式;以及第二解碼模塊,用于在所述控制模塊將當(dāng)前解碼方式切換為所述第二解碼方式之后,采用所述第二解碼方式繼續(xù)解碼所述視頻文件剩余的部分;其中,所述第一解碼方式和第二解碼方式的其中一個(gè)為硬件解碼方式,另一個(gè)為軟件解碼方式。
其中,所述控制模塊還用于當(dāng)檢測到所述第一解碼方式解碼出現(xiàn)解碼異常時(shí),獲取出現(xiàn)所述解碼異常時(shí)的當(dāng)前解碼信息,其中,所述當(dāng)前解碼信息包括出錯(cuò)幀的位置以及所述出錯(cuò)幀的前一個(gè)關(guān)鍵幀的位置;所述第二解碼模塊具體用于采用所述第二解碼方式從所述前一個(gè)關(guān)鍵幀開始繼續(xù)解碼所述視頻文件剩余的部分。
其中,還包括:顯示模塊,用于在所述第一解碼模塊采用所述第一解碼方式解碼所述視頻文件時(shí),顯示所述視頻文件直至所述出錯(cuò)幀的位置,以及在所述第二解碼模塊采用所述第二解碼方式從所述前一個(gè)關(guān)鍵幀開始繼續(xù)解碼所述視頻文件剩余的部分時(shí),從所述出錯(cuò)幀的位置繼續(xù)開始顯示所述視頻文件。
其中,所述第一解碼方式為硬件解碼方式;所述第一解碼模塊包括:視頻驅(qū)動(dòng)單元,用于對所述視頻文件進(jìn)行硬件解碼;第一組件,用于調(diào)用所述視頻驅(qū)動(dòng)單元中的視頻驅(qū)動(dòng)對所述視頻文件進(jìn)行硬件解碼;所述控制模塊具體用于停止所述硬件解碼方式,并加載對應(yīng)所述軟件解碼方式的第二組件以及激活軟件解碼庫,以將當(dāng)前解碼方式自動(dòng)切換為所述軟件解碼方式。
其中,所述控制模塊包括開放多媒體加速層的客戶端,所述開放多媒體加速層的客戶端用于卸載對應(yīng)所述硬件解碼方式的第一組件或禁能所述視頻驅(qū)動(dòng)來停止所述硬件解碼方式,并加載對應(yīng)所述軟件解碼方式的第二組件以及激活軟件解碼庫,以將當(dāng)前解碼方式自動(dòng)切換為所述軟件解碼方式。
其中,所述第一解碼方式為軟件解碼方式;所述第一解碼模塊包括:軟件解碼庫,用于對所述視頻文件進(jìn)行軟件解碼;第二組件,用于調(diào)用所述軟件解碼庫對所述視頻文件進(jìn)行軟件解碼;所述控制模塊具體用于停止所述軟件解碼方式,并加載對應(yīng)所述硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng),以將當(dāng)前解碼方式自動(dòng)切換為所述硬件解碼方式。
其中,所述控制模塊包括開放多媒體加速層的客戶端,所述開放多媒體加速層的客戶端用于卸載對應(yīng)所述軟件解碼方式的第二組件或禁能所述軟件解碼庫來停止所述軟件解碼方式,并加載對應(yīng)所述硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng),以將當(dāng)前解碼方式自動(dòng)切換為所述硬件解碼方式。
本發(fā)明解決上述技術(shù)問題所采用的另一技術(shù)方案是提供了一種終端,包括存儲(chǔ)器、驅(qū)動(dòng)器以及處理器,其中:所述存儲(chǔ)器用于存儲(chǔ)被配置為被所述處理器執(zhí)行的指令;所述處理器執(zhí)行所述指令,用于:控制所述驅(qū)動(dòng)器采用上述的視頻處理方法對視頻文件進(jìn)行處理。
本發(fā)明上述視頻處理方法、裝置及終端,在視頻解碼過程中,若解碼出現(xiàn)異常,能自動(dòng)切換解碼方式,可提高解碼效率。
附圖說明
下面將結(jié)合附圖及實(shí)施方式對本發(fā)明作進(jìn)一步說明,附圖中:
圖1是本發(fā)明的視頻處理方法第一實(shí)施例的流程圖;
圖2是本發(fā)明的視頻處理方法第二實(shí)施例的流程圖;
圖3是本發(fā)明實(shí)施例中所采用的多媒體框架標(biāo)準(zhǔn)的結(jié)構(gòu)框圖;
圖4是本發(fā)明的視頻處理裝置實(shí)施例的結(jié)構(gòu)示意圖;
圖5是本發(fā)明的終端實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明的技術(shù)方案做進(jìn)一步詳細(xì)描述。
如圖1所示,是本發(fā)明的視頻處理方法第一實(shí)施例的流程圖,該方法包括:
步驟s102:接收視頻文件。
視頻文件包括數(shù)字視頻。當(dāng)然,在其他實(shí)施例中,若需要對音頻進(jìn)行解碼,則接收相應(yīng)的音頻文件,后續(xù)步驟也均相應(yīng)地是對音頻文件進(jìn)行相關(guān)處理。
步驟s104:采用第一解碼方式解碼視頻文件。
第一解碼方式為硬件解碼方式或者軟件解碼方式,在本領(lǐng)域技術(shù)人員的理解范圍內(nèi),硬件解碼方式解碼視頻文件,以及軟件解碼方式解碼視頻文件,均屬于現(xiàn)有技術(shù),在此不再贅述。
步驟s106:當(dāng)檢測到第一解碼方式解碼出現(xiàn)解碼異常時(shí),將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式,并采用第二解碼方式繼續(xù)解碼視頻文件剩余的部分。
第一解碼方式出現(xiàn)解碼異常,將解碼方式自動(dòng)切換到第二解碼方式,以繼續(xù)進(jìn)行解碼視頻文件剩余的部分,具體地,在一個(gè)實(shí)施例中,第一解碼方式解碼出現(xiàn)異常時(shí),判斷解碼異常是否達(dá)到預(yù)設(shè)范圍,若達(dá)到預(yù)設(shè)范圍,則將第一解碼方式切換為第二解碼方式,進(jìn)而繼續(xù)解碼,預(yù)設(shè)范圍可以是解碼異常的程度,例如,解碼過程中丟幀的數(shù)量等。其中,當(dāng)?shù)谝唤獯a方式為硬件解碼方式時(shí),第二解碼方式則為軟件解碼方式,類似地,當(dāng)?shù)谝唤獯a方式為軟件解碼方式時(shí),第二解碼方式則為硬件解碼方式。
在一個(gè)實(shí)施例中,第一解碼方式為硬件解碼方式,此時(shí),采用硬件解碼方式解碼視頻文件,期間出現(xiàn)的解碼異常包括解碼時(shí)出現(xiàn)關(guān)鍵字段語法元素解析錯(cuò)誤、解碼時(shí)間超時(shí)、丟幀達(dá)到上限、硬件資源不足、硬件解碼方式所支持的視頻類型與待解碼視頻文件的視頻類型不匹配、數(shù)據(jù)不完整以及數(shù)據(jù)沒有按照硬件要求對齊中至少一種。其中,解碼時(shí)間超時(shí)是由于屬性超出硬件(指驅(qū)動(dòng)器)所承受的范圍,例如,寬高、比特率、幀率或者數(shù)據(jù)完整性等;丟幀達(dá)到上限是由于特殊或者錯(cuò)誤視頻數(shù)據(jù)而導(dǎo)致的;硬件資源不足是驅(qū)動(dòng)器無法申請到足夠的硬件資源,例如內(nèi)存。在另一個(gè)實(shí)施例中,第一解碼方式為軟件解碼方式,此時(shí),采用軟件解碼方式解碼視頻文件,期間出現(xiàn)的解碼異常包括解碼時(shí)處理器負(fù)載超過預(yù)定值、丟幀數(shù)量超過預(yù)設(shè)值以及解碼完成時(shí)間比解碼顯示時(shí)間晚中的至少一種。其中,軟件解碼方式主要占用處理器,解碼時(shí)處理器負(fù)載超過預(yù)定值,表明處理器負(fù)載過高,此時(shí)出現(xiàn)解碼異常,顯示的畫面卡頓,視覺差;解碼完成時(shí)間比解碼顯示時(shí)間晚則表明該視頻幀可以丟掉,此時(shí)出現(xiàn)解碼異常,顯示的畫面一直卡,會(huì)持續(xù)一定時(shí)間,視覺差。
在一個(gè)實(shí)施例中,在采用第二解碼方式繼續(xù)解碼視頻文件剩余的部分的過程中,若檢測到第二解碼方式解碼出現(xiàn)異常,則表示第一解碼方式和第二解碼方式均出現(xiàn)解碼異常,此時(shí),停止解碼視頻文件。
本實(shí)施例中,在視頻解碼過程中,若解碼出現(xiàn)異常,能自動(dòng)切換解碼方式,以提高解碼效率,提升用戶體驗(yàn)。
在一個(gè)實(shí)施例中,采用第二解碼方式繼續(xù)解碼視頻文件剩余的部分,包括:獲取出現(xiàn)解碼異常時(shí)的當(dāng)前解碼信息,其中,當(dāng)前解碼信息包括出錯(cuò)幀的位置、出錯(cuò)幀的前一個(gè)關(guān)鍵幀的位置以及播放視頻文件的路徑;以及采用第二解碼方式從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分。
進(jìn)一步地,如圖2所示,是本發(fā)明的視頻處理方式第二實(shí)施例的流程圖,在上述第一實(shí)施例的基礎(chǔ)上,該視頻處理方法還包括:
步驟s208:在采用第一解碼方式解碼視頻文件時(shí),顯示視頻文件直至出錯(cuò)幀的位置。
在采用第一解碼方式解碼視頻文件出現(xiàn)解碼異常時(shí),顯示視頻文件到出現(xiàn)解碼異常的出錯(cuò)幀的位置,此時(shí),顯示的畫面停留在該出錯(cuò)幀的位置。
步驟s210:在采用第二解碼方式從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分時(shí),從出錯(cuò)幀的位置繼續(xù)開始顯示視頻文件。
在采用第一解碼方式解碼視頻出現(xiàn)解碼異常,自動(dòng)切換到第二解碼方式,此時(shí),采用第二解碼方式從出現(xiàn)解碼異常的前一個(gè)關(guān)鍵幀開始繼續(xù)解碼,直到解碼到出錯(cuò)幀的位置時(shí),不顯示前一個(gè)關(guān)鍵幀到出錯(cuò)幀的位置之間的解碼之后的視頻幀,之后,從出錯(cuò)幀的位置繼續(xù)顯示。
需要說明的是,在本領(lǐng)域技術(shù)人員的理解范圍內(nèi),步驟s202至步驟s206與上述第一實(shí)施例中的步驟s102至步驟s106相同,在此不再說明。步驟s204到步驟s210的執(zhí)行順序不作限定,其中,在一個(gè)實(shí)施例中,步驟s208的執(zhí)行順序可在步驟s204之后,同時(shí),步驟s210的執(zhí)行順序可在步驟s206之后,在其他實(shí)施例中,步驟s208和步驟s210的執(zhí)行順序可按照序號在步驟s202和步驟s204執(zhí)行之后。
另外,為后續(xù)清楚理解本發(fā)明采用開放多媒體加速層(openmediaacceleration,openmax)實(shí)現(xiàn)硬件解碼方式自動(dòng)切換到軟件解碼方式,或者軟件解碼方式自動(dòng)切換到硬件解碼方式,下面首先對openmax進(jìn)行說明。
如圖3所示,是本發(fā)明實(shí)施例中所采用的一種多媒體框架標(biāo)準(zhǔn)的結(jié)構(gòu)框圖,該多媒體框架標(biāo)準(zhǔn)是openmax,包括應(yīng)用層、集成層和開發(fā)層,其中,openmax集成層包括core和客戶端client,對應(yīng)硬件解碼方式的硬件組件和對應(yīng)軟件解碼方式的軟件組件,分別位于openmax集成層,并且分別由openmax集成層的客戶端client所加載或者卸載。core統(tǒng)一管理上述組件。
進(jìn)一步地,在一個(gè)實(shí)施例中,第一解碼方式為硬件解碼方式,采用第一解碼方式解碼視頻文件,即是采用硬件解碼方式解碼視頻文件,具體包括:加載對應(yīng)硬件解碼方式的第一組件,例如,openmax中對應(yīng)硬件解碼方式的硬件組件;通過第一組件調(diào)用視頻驅(qū)動(dòng)對視頻文件進(jìn)行硬件解碼。之后,出現(xiàn)上述的采用硬件解碼方式解碼時(shí)的解碼異常中的一種,將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式,即將硬件解碼方式自動(dòng)切換為軟件解碼方式,具體地,停止硬件解碼方式,并加載對應(yīng)軟件解碼方式的第二組件(例如,openmax中對應(yīng)軟件解碼方式的軟件組件)以及激活軟件解碼庫,進(jìn)而完成將當(dāng)前解碼方式自動(dòng)切換為軟件解碼方式。本實(shí)施例中,將硬件解碼方式自動(dòng)切換為軟件解碼方式采用openmax來實(shí)現(xiàn),此時(shí),切換的過程僅在openmax的客戶端中體現(xiàn),無需到應(yīng)用層中進(jìn)行切換。具體地,停止硬件解碼方式,并加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫,包括:通過開放多媒體加速層的客戶端卸載對應(yīng)硬件解碼方式的第一組件或禁能視頻驅(qū)動(dòng)來停止所述硬件解碼方式,并通過開放多媒體加速層的客戶端加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫。其中,禁能視頻驅(qū)動(dòng)是指將進(jìn)行硬件解碼的硬件(指驅(qū)動(dòng)器)中的視頻驅(qū)動(dòng)關(guān)閉或者使其停止工作。激活軟件解碼庫是指將軟解解碼庫處于工作狀態(tài)。
在另一個(gè)實(shí)施例中,第一解碼方式為軟件解碼方式,采用第一解碼方式解碼視頻文件,即是采用軟件解碼方式解碼視頻文件,具體包括:加載對應(yīng)軟件解碼方式的第二組件,例如,openmax中對應(yīng)軟件解碼方式的軟件組件;通過第二組件調(diào)用軟件解碼庫對視頻文件進(jìn)行軟件解碼。之后,出現(xiàn)上述的采用軟件解碼方式解碼時(shí)的解碼異常中的一種,將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式,即將軟件解碼方式自動(dòng)切換為硬件解碼方式,具體地,停止軟件解碼方式,并加載對應(yīng)硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng),進(jìn)而完成將當(dāng)前解碼方式自動(dòng)切換為硬件解碼方式。本實(shí)施例中,將軟件解碼方式自動(dòng)切換為硬件解碼方式采用openmax來實(shí)現(xiàn),此時(shí),切換的過程僅在openmax的客戶端中體現(xiàn),無需到應(yīng)用層中進(jìn)行切換。具體地,停止軟件解碼方式,并加載對應(yīng)硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng)包括:通過開放多媒體加速層的客戶端卸載對應(yīng)軟件解碼方式的第二組件或禁能軟件解碼庫來停止軟件解碼方式,并通過開放多媒體加速層的客戶端加載對應(yīng)硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng)。其中,禁能軟件解碼庫是指不使用軟件解碼庫,本領(lǐng)域的技術(shù)人員可根據(jù)軟件解碼方式來理解其含義。激活視頻驅(qū)動(dòng)是指將驅(qū)動(dòng)器處于工作狀態(tài),進(jìn)而打開其視頻驅(qū)動(dòng)。
如圖4所示,是本發(fā)明的視頻處理裝置實(shí)施例的結(jié)構(gòu)示意圖,該裝置400包括接收模塊410、第一解碼模塊420、第二解碼模塊430、控制模塊440以及顯示模塊450,其中:
接收模塊410用于接收視頻文件。
第一解碼模塊420用于采用第一解碼方式解碼該視頻文件。其中,第一解碼方式為硬件解碼方式或者軟件解碼方式。
控制模塊440用于當(dāng)檢測到第一解碼方式解碼出現(xiàn)解碼異常時(shí)控制將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式。具體地,在一個(gè)實(shí)施例中,可通過判斷是否達(dá)到預(yù)設(shè)范圍來實(shí)現(xiàn)自動(dòng)切換,若達(dá)到預(yù)設(shè)范圍,則將第一解碼方式切換為第二解碼方式,進(jìn)而繼續(xù)解碼,預(yù)設(shè)范圍可以是解碼異常的程度,例如,解碼過程中丟幀的數(shù)量等。其中,當(dāng)?shù)谝唤獯a方式為硬件解碼方式時(shí),第二解碼方式則為軟件解碼方式,類似地,當(dāng)?shù)谝唤獯a方式為軟件解碼方式時(shí),第二解碼方式則為硬件解碼方式。
第二解碼模塊430用于在控制模塊440將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式之后,采用第二解碼方式繼續(xù)解碼視頻文件剩余的部分。
進(jìn)一步地,控制模塊440還用于當(dāng)檢測到第一解碼方式解碼出現(xiàn)解碼異常時(shí),獲取出現(xiàn)解碼異常時(shí)的當(dāng)前解碼信息,其中,當(dāng)前解碼信息包括出錯(cuò)幀的位置、出錯(cuò)幀的前一個(gè)關(guān)鍵幀的位置以及視頻文件路徑。
在控制模塊440獲取出現(xiàn)解碼異常時(shí)的當(dāng)前解碼信息時(shí),此時(shí),第二解碼模塊430具體用于采用第二解碼方式從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分。
顯示模塊450用于在第一解碼模塊420采用第一解碼方式解碼視頻文件時(shí),顯示視頻文件直至出錯(cuò)幀的位置,以及在第二解碼模塊430采用第二解碼方式從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分時(shí),從出錯(cuò)幀的位置繼續(xù)開始顯示視頻文件。在其他實(shí)施例中,在控制模塊440控制將當(dāng)前解碼方式自動(dòng)切換為第二解碼方式的過程中,顯示模塊450還用于顯示提示信息,以提示用戶,例如“xx解碼異常自動(dòng)切換到xx解碼”,方便用戶實(shí)時(shí)了解解碼情況。
具體地,在一個(gè)實(shí)施例中,第一解碼方式為硬件解碼方式,此時(shí),第一解碼模塊420包括視頻驅(qū)動(dòng)單元和第一組件(圖中未示出),其中,視頻驅(qū)動(dòng)單元用于對視頻文件進(jìn)行硬件解碼;第一組件用于調(diào)用視頻驅(qū)動(dòng)單元中的視頻驅(qū)動(dòng)對視頻文件進(jìn)行硬件解碼。本實(shí)施例中,第一組件為openmax中對應(yīng)硬件解碼方式的硬件組件。
進(jìn)一步地,第一解碼模塊420采用硬件解碼方式解碼視頻文件,出現(xiàn)解碼異常時(shí),控制模塊440控制將當(dāng)前解碼方式自動(dòng)切換到軟件解碼方式,此時(shí)控制模塊440具體用于停止硬件解碼方式,并加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫,以將當(dāng)前解碼方式自動(dòng)切換為軟件解碼方式。本實(shí)施例中,控制模塊440采用如圖3所示的openmax來實(shí)現(xiàn)將當(dāng)前解碼方式自動(dòng)切換為軟件解碼方式,具體地,控制模塊440包括開放多媒體加速層的客戶端,該開放多媒體加速層的客戶端用于卸載對應(yīng)所述硬件解碼方式的第一組件或禁能所述視頻驅(qū)動(dòng)來停止硬件解碼方式,并加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫,進(jìn)而完成將當(dāng)前解碼方式自動(dòng)切換為軟件解碼方式。
在另一個(gè)實(shí)施例中,第一解碼方式為軟件解碼方式,此時(shí),第一解碼模塊420包括軟件解碼庫和第二組件(圖中未示出),其中,軟件解碼庫用于對視頻文件進(jìn)行軟件解碼;第二組件用于調(diào)用軟件解碼庫對視頻文件進(jìn)行軟件解碼。本實(shí)施例中,第二組件為openmax中對應(yīng)軟件解碼方式的軟件組件。
進(jìn)一步地,第一解碼模塊420采用軟件解碼方式解碼視頻文件,出現(xiàn)解碼異常,控制模塊440控制將當(dāng)前解碼方式自動(dòng)切換到硬件解碼方式,此時(shí)控制模塊440具體用于停止軟件解碼方式,并加載對應(yīng)硬件解碼方式的第一組件以及激活視頻驅(qū)動(dòng),以將當(dāng)前解碼方式自動(dòng)切換為硬件解碼方式。本實(shí)施例中,控制模塊440采用openmax來實(shí)現(xiàn)將當(dāng)前解碼方式自動(dòng)切換為硬件解碼方式,控制模塊440包括開放多媒體加速層的客戶端,該開放多媒體加速層的客戶端用于卸載對應(yīng)軟件解碼方式的第二組件或禁能軟件解碼庫來停止軟件解碼方式,并加載對應(yīng)硬件解碼方式的第一組件以及激活驅(qū)動(dòng)器中的視頻驅(qū)動(dòng),以將當(dāng)前解碼方式自動(dòng)切換為所述硬件解碼方式。
上述視頻處理裝置的模塊可對應(yīng)用于執(zhí)行上述方法實(shí)施例中的步驟,具體說明請參閱上述方法實(shí)施例的描述。
如圖5所示,是本發(fā)明的終端實(shí)施例的結(jié)構(gòu)示意圖,該終端用于視頻處理,包括存儲(chǔ)器510、驅(qū)動(dòng)器520、處理器530、顯示器540以及總線550。
存儲(chǔ)器510可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器530提供指令和數(shù)據(jù)。存儲(chǔ)器510的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器(nvram)。
存儲(chǔ)器510存儲(chǔ)了如下的元素,可執(zhí)行模塊或者數(shù)據(jù)結(jié)構(gòu),或者它們的子集,或者它們的擴(kuò)展集:
操作指令:包括各種操作指令,用于實(shí)現(xiàn)各種操作。
操作系統(tǒng):包括各種系統(tǒng)程序,用于實(shí)現(xiàn)各種基礎(chǔ)業(yè)務(wù)以及處理基于硬件的任務(wù)。
驅(qū)動(dòng)器520用于對視頻文件進(jìn)行硬件解碼。
具體的應(yīng)用中,終端的各個(gè)組件通過總線550耦合在一起,其中總線550除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號總線等。但是為了清楚說明起見,在圖中將各種總線都標(biāo)為總線550。
在本發(fā)明實(shí)施例中,處理器530通過調(diào)用存儲(chǔ)器510存儲(chǔ)的操作指令(該操作指令可存儲(chǔ)在操作系統(tǒng)中),執(zhí)行如下操作:
通過控制驅(qū)動(dòng)器520對視頻文件進(jìn)行硬件解碼或者采用軟件解碼方式對視頻文件進(jìn)行軟件解碼;
當(dāng)檢測到硬件解碼出現(xiàn)解碼異常時(shí),將當(dāng)前解碼方式自動(dòng)切換為軟件解碼方式,并采用軟件解碼方式繼續(xù)解碼視頻文件剩余的部分;
當(dāng)檢測到軟件解碼出現(xiàn)解碼異常時(shí),將當(dāng)前解碼方式自動(dòng)切換為硬件解碼方式,并通過控制驅(qū)動(dòng)器520繼續(xù)解碼視頻文件剩余的部分。
進(jìn)一步地,在硬件解碼出現(xiàn)解碼異常時(shí),處理器530執(zhí)行采用軟件解碼方式繼續(xù)解碼視頻文件剩余的部分,包括:獲取出現(xiàn)解碼異常時(shí)的當(dāng)前解碼信息,其中,當(dāng)前解碼信息包括出錯(cuò)幀的位置以及出錯(cuò)幀的前一個(gè)關(guān)鍵幀的位置;采用軟件解碼方式從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分。
在軟件解碼出現(xiàn)解碼異常時(shí),處理器530執(zhí)行通過控制驅(qū)動(dòng)器520繼續(xù)解碼視頻文件剩余的部分,包括:獲取出現(xiàn)解碼異常時(shí)的當(dāng)前解碼信息,其中,當(dāng)前解碼信息包括出錯(cuò)幀的位置以及出錯(cuò)幀的前一個(gè)關(guān)鍵幀的位置;控制驅(qū)動(dòng)器520從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分。
顯示器540用于在處理器530通過控制驅(qū)動(dòng)器520對視頻文件進(jìn)行硬件解碼或者采用軟件解碼方式對視頻文件進(jìn)行軟件解碼時(shí),顯示視頻文件直至出錯(cuò)幀的位置,以及在處理器530采用軟件解碼方式或者控制驅(qū)動(dòng)器520從前一個(gè)關(guān)鍵幀開始繼續(xù)解碼視頻文件剩余的部分時(shí),從出錯(cuò)幀的位置繼續(xù)開始顯示視頻文件。
進(jìn)一步地,本實(shí)施例中,處理器530使用如圖3所示的openmax對視頻文件進(jìn)行硬件解碼或者軟件解碼以及在其中一種解碼方式出現(xiàn)異常時(shí)自動(dòng)切換另一種解碼方式。其中,處理器530執(zhí)行通過驅(qū)動(dòng)器520對視頻文件進(jìn)行硬件解碼,包括:加載對應(yīng)的第一組件;通過第一組件調(diào)用驅(qū)動(dòng)器520中的視頻驅(qū)動(dòng),以對視頻文件進(jìn)行硬件解碼。本實(shí)施例中,第一組件為openmax中對應(yīng)硬件解碼方式的硬件組件。
當(dāng)前解碼方式為硬件解碼方式,出現(xiàn)解碼異常,處理器530執(zhí)行將當(dāng)前解碼方式自動(dòng)切換為軟件解碼方式,包括:停止驅(qū)動(dòng)器520,并加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫。本實(shí)施例中,處理器530使用openmax來實(shí)現(xiàn)解碼方式的自動(dòng)切換,具體地,停止驅(qū)動(dòng)器520,并加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫,包括:通過開放多媒體加速層的客戶端卸載對應(yīng)硬件解碼方式的第一組件或禁能驅(qū)動(dòng)器520中的視頻驅(qū)動(dòng)來使驅(qū)動(dòng)器520停止,并通過開放多媒體加速層的客戶端加載對應(yīng)軟件解碼方式的第二組件以及激活軟件解碼庫。
處理器530執(zhí)行采用軟件解碼方式對視頻文件進(jìn)行軟件解碼,包括:加載對應(yīng)軟件解碼方式的第二組件;通過第二組件調(diào)用軟件解碼庫,以對視頻文件進(jìn)行軟件解碼。本實(shí)施例中,第二組件為openmax中對應(yīng)軟件解碼方式的軟件組件。
當(dāng)前解碼方式為軟件解碼方式時(shí),出現(xiàn)解碼異常,處理器530執(zhí)行將當(dāng)前解碼方式自動(dòng)切換為硬件解碼方式,包括:停止軟件解碼方式,并加載對應(yīng)的第一組件以及控制驅(qū)動(dòng)器520激活視頻驅(qū)動(dòng)。本實(shí)施例中,處理器530使用openmax來實(shí)現(xiàn)解碼方式的自動(dòng)切換,具體地,停止軟件解碼方式,并加載對應(yīng)的第一組件以及控制驅(qū)動(dòng)器520激活視頻驅(qū)動(dòng),包括:通過開放多媒體加速層的客戶端卸載對應(yīng)軟件解碼方式的第二組件或禁能軟件解碼庫來停止軟件解碼方式,并通過開放多媒體加速層的客戶端加載對應(yīng)硬件解碼方式的第一組件以及控制驅(qū)動(dòng)器520激活視頻驅(qū)動(dòng)。
上述本發(fā)明實(shí)施例揭示的方法可以應(yīng)用于處理器530中,或者由處理器530實(shí)現(xiàn)。處理器530可能是一種集成電路芯片,具有信號的處理能力。在實(shí)現(xiàn)過程中,上述方法的各步驟可以通過處理器530中的硬件的集成邏輯電路或者軟件形式的指令完成。上述的處理器530可以是通用處理器、數(shù)字信號處理器(dsp)、專用集成電路(asic)、現(xiàn)成可編程門陣列(fpga)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件??梢詫?shí)現(xiàn)或者執(zhí)行本發(fā)明實(shí)施例中的公開的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。結(jié)合本發(fā)明實(shí)施例所公開的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機(jī)存儲(chǔ)器,閃存、只讀存儲(chǔ)器,可編程只讀存儲(chǔ)器或者電可擦寫可編程存儲(chǔ)器、寄存器等本領(lǐng)域成熟的存儲(chǔ)介質(zhì)中。該存儲(chǔ)介質(zhì)位于存儲(chǔ)器510,處理器530讀取存儲(chǔ)器510中的信息,結(jié)合其硬件完成上述方法的步驟。
以上所述僅為本發(fā)明的實(shí)施方式,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍。