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