本申請涉及虛擬化技術(shù)領(lǐng)域,特別涉及跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法、裝置、電子設(shè)備和計算機(jī)程序產(chǎn)品。
背景技術(shù):
移動終端已成為用戶日常工作生活的重要工具,在移動終端推動移動互聯(lián)網(wǎng)快速發(fā)展的同時,由于移動終端包含了豐富多樣化的信息(例如:企業(yè)數(shù)據(jù)的訪問、商務(wù)溝通、社交網(wǎng)絡(luò)、財務(wù)管理、游戲等等),移動終端成了網(wǎng)絡(luò)犯罪的新焦點。為了信息安全、保護(hù)隱私,移動虛擬化成為了移動終端未來的發(fā)展方向。
圖1示出了基于Qemu/KVM(Kernel-based Virtual Machine,基于內(nèi)核的虛擬機(jī))技術(shù)實現(xiàn)的虛擬化系統(tǒng)架構(gòu)示意圖,處于底層的是系統(tǒng)的硬件層,主要包括處理器、內(nèi)存和輸入輸出設(shè)備等。在硬件層之上為虛擬化層,運行的是虛擬機(jī)監(jiān)控器(縮寫為VMM或Hypervisor)。虛擬機(jī)監(jiān)控器的主要職能是:管理真實的物理硬件平臺,并為每個客戶虛擬機(jī)(即客戶機(jī))提供對應(yīng)的虛擬硬件平臺。虛擬化系統(tǒng)架構(gòu)中可以運行多個操作系統(tǒng),例如Linux操作系統(tǒng)或者Android操作系統(tǒng)等,其中通常包括一個主機(jī)操作系統(tǒng)(Host OS),以及一個或者多個客戶機(jī)操作系統(tǒng)(Guest OS),主機(jī)操作系統(tǒng)運行于宿主機(jī)(Host),在主機(jī)操作系統(tǒng)上運行一個或者多個客戶機(jī),各客戶機(jī)作為主機(jī)操作系統(tǒng)的應(yīng)用程序運行,其可以為運行于該客戶機(jī)上的客戶機(jī)操作系統(tǒng)模擬硬件設(shè)備以供客戶機(jī)操作系統(tǒng)使用,在各客戶機(jī)運行的客戶機(jī)操作系統(tǒng)中可運行各種應(yīng)用程序。在虛擬化系統(tǒng)架構(gòu)中,多個操作系統(tǒng)之間可共享硬件層提供的CPU,內(nèi)存和輸入輸出設(shè)備。
通過虛擬化技術(shù)帶來的隔離性可實現(xiàn)單一終端上多個操作系統(tǒng)的隔離,避免各操作系統(tǒng)上的進(jìn)程對其他操作系統(tǒng)產(chǎn)生不利影響,典型的應(yīng)用場景為通過虛擬化技術(shù)在手機(jī)等移動設(shè)備上實現(xiàn)企業(yè)系統(tǒng)和個人系統(tǒng)的分離,防范個人系統(tǒng)上的進(jìn)程給企業(yè)帶來的潛在危害,滿足一些具有安全要求的企業(yè)對“自帶設(shè)備”(BYOD,Bring Your Own Device)的需求。
隨著多媒體應(yīng)用在生活中運用的深入發(fā)展,終端的各個虛擬機(jī)都需要有多媒體編解碼器,現(xiàn)有技術(shù)中客戶機(jī)操作系統(tǒng)通常通過CPU來實現(xiàn)軟件編解碼,此種編解碼方式會占用當(dāng)前客戶機(jī)CPU的大量資源,功耗大;并且客戶機(jī)操作系統(tǒng)只能通過CPU實現(xiàn)軟件編解碼,導(dǎo)致很多格式的視頻文件無法支持、播放不流暢。當(dāng)某一客戶機(jī)操作系統(tǒng)需要其他客戶機(jī)操作系統(tǒng)或者主機(jī)操作系統(tǒng)協(xié)助完成多媒體數(shù)據(jù)編解碼處理時需要分別為各客戶機(jī)操作系統(tǒng)或者主機(jī)操作系統(tǒng)中的多媒體框架的緩沖區(qū)在內(nèi)存中分配對應(yīng)的物理存儲區(qū),并且在某一客戶機(jī)操作系統(tǒng)需要其他系統(tǒng)協(xié)助進(jìn)行跨系統(tǒng)的多媒體數(shù)據(jù)編解碼處理時,需要將該客戶機(jī)操作系統(tǒng)多媒體框架的緩沖區(qū)對應(yīng)的物理存儲區(qū)中的內(nèi)容拷貝到協(xié)助進(jìn)行編解碼處理的操作系統(tǒng)多媒體框架的緩沖區(qū)對應(yīng)的物理存儲區(qū)中,編解碼處理完成后需要將處理結(jié)果拷貝回發(fā)起編解碼處理請求的客戶機(jī)操作系統(tǒng)多媒體框架的緩沖區(qū)對應(yīng)的物理存儲區(qū)。
現(xiàn)有技術(shù)的不足在于:
跨系統(tǒng)進(jìn)行多媒體數(shù)據(jù)的編解碼處理時涉及大量數(shù)據(jù)在不同的物理存儲區(qū)間的拷貝,一方面占用大量虛擬化系統(tǒng)架構(gòu)的計算資源和存儲資源,導(dǎo)致虛擬化系統(tǒng)性能降低,另一方面延長了跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理時間。
技術(shù)實現(xiàn)要素:
本申請實施例提出了跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法、裝置、電子設(shè)備和計算機(jī)程序產(chǎn)品,主要用以提升虛擬化系統(tǒng)性能,縮短多媒體數(shù)據(jù)編解碼處理時間。
在一個方面,本申請實施例提供了一種跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法,其特征在于,所述方法包括:
在第一操作系統(tǒng)中,獲取對多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);
在所述第二操作系統(tǒng)中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。
在另一個方面,本申請實施例提供了一種跨系統(tǒng)多媒體數(shù)據(jù)編解碼裝置,其特征在于,所述裝置包括:前端模塊,用于在第一操作系統(tǒng)中,獲取對多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);
后端模塊,用于在所述第二操作系統(tǒng)中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。
在另一個方面,本申請實施例提供了一種電子設(shè)備,其特征在于,所述電子設(shè)備包括:存儲器,一個或多個處理器;以及一個或多個模塊,所述一個或多個模塊被存儲在所述存儲器中,并被配置成由所述一個或多個處理器執(zhí)行,所述一個或多個模塊包括用于執(zhí)行任一上述方法中各個步驟的指令。
在另一個方面,本申請實施例提供了一種與電子設(shè)備結(jié)合使用的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品包括內(nèi)嵌于計算機(jī)可讀的存儲介質(zhì)中的計算機(jī)程序,所述計算機(jī)程序包括用于使所述電子設(shè)備執(zhí)行任一上述方法中的各個步驟的指令。
本申請實施例的有益效果如下:
本申請中,在第一操作系統(tǒng)中,當(dāng)需要對多媒體數(shù)據(jù)進(jìn)行編解碼處理時,可將多媒體數(shù)據(jù)通過共享內(nèi)存發(fā)送至第二操作系統(tǒng),以在第二操作系統(tǒng)中完成所述多媒體數(shù)據(jù)的編解碼處理,本申請中,通過共享內(nèi)存實現(xiàn)跨系統(tǒng)多媒體數(shù)據(jù)編解碼過程中多媒體數(shù)據(jù)的傳遞,減少了數(shù)據(jù)拷貝次數(shù),一方面節(jié)約了虛擬化系統(tǒng)架構(gòu)的計算資源和存儲資源,提升虛擬化系統(tǒng)性能,另一方面縮短了跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理時間。
附圖說明
下面將參照附圖描述本申請的具體實施例,其中:
圖1示出了現(xiàn)有技術(shù)中虛擬化系統(tǒng)架構(gòu)示意圖;
圖2示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法的流程示意圖;
圖3示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法應(yīng)用的一種虛擬化系統(tǒng)架構(gòu)示意圖;
圖4示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法應(yīng)用的另一種虛擬化系統(tǒng)架構(gòu)示意圖;
圖5示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法應(yīng)用的另一種虛擬化系統(tǒng)架構(gòu)示意圖;
圖6示出了本申請實施例二中跨系統(tǒng)多媒體數(shù)據(jù)編解碼裝置的結(jié)構(gòu)示意圖;
圖7示出了本申請實施例三中電子設(shè)備的結(jié)構(gòu)示意圖。
具體實施方式
為了使本申請的技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖對本申請的示例性實施例進(jìn)行進(jìn)一步詳細(xì)的說明,顯然,所描述的實施例僅是本申請的一部分實施例,而不是所有實施例的窮舉。并且在不沖突的情況下,本說明中的實施例及實施例中的特征可以互相結(jié)合。
發(fā)明人在發(fā)明過程中注意到:跨系統(tǒng)進(jìn)行多媒體數(shù)據(jù)的編解碼處理時涉及大量數(shù)據(jù)在不同的物理存儲區(qū)間的拷貝,一方面占用大量虛擬化系統(tǒng)架構(gòu)的計算資源和存儲資源,導(dǎo)致虛擬化系統(tǒng)性能降低,另一方面延長了跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理時間。
針對上述不足,本申請?zhí)峁┝艘环N跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法,在第一操作系統(tǒng)中,當(dāng)需要對多媒體數(shù)據(jù)進(jìn)行編解碼處理時,可將多媒體數(shù)據(jù)通過共享內(nèi)存發(fā)送至第二操作系統(tǒng),以在第二操作系統(tǒng)中完成所述多媒體數(shù)據(jù)的編解碼處理,本申請中,通過共享內(nèi)存實現(xiàn)跨系統(tǒng)多媒體數(shù)據(jù)編解碼過程中多媒體數(shù)據(jù)的傳遞,減少了數(shù)據(jù)拷貝次數(shù),一方面節(jié)約了虛擬化系統(tǒng)架構(gòu)的計算資源和存儲資源,提升虛擬化系統(tǒng)性能,另一方面縮短了跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理時間。
為了便于本申請的實施,下面以實例進(jìn)行說明。
實施例一:
在虛擬化系統(tǒng)架構(gòu)啟動時,Qemu可在內(nèi)存中劃分一塊特定的地址空間,作為所述虛擬化架構(gòu)中各操作系統(tǒng)均可讀寫的共享內(nèi)存,例如可通過系統(tǒng)調(diào)用的方式創(chuàng)建所述共享內(nèi)存。進(jìn)一步的還可以對所述共享的內(nèi)存空間進(jìn)一步劃分以支持多個進(jìn)程或線程的訪問。所述共享內(nèi)存的大小可以由開發(fā)人員設(shè)置,并適配于所述虛擬化系統(tǒng)架構(gòu)中可能涉及的跨系統(tǒng)傳輸。
客戶機(jī)操作系統(tǒng)啟動時,其多媒體框架能夠從客戶機(jī)操作系統(tǒng)內(nèi)核層獲取所述相關(guān)配置信息進(jìn)行初始化,進(jìn)而獲得所述共享內(nèi)存的映射至客戶機(jī)操作系統(tǒng)的地址空間,此外還可與Qemu建立同步控制通道。
在主機(jī)操作系統(tǒng)中,Qemu可觸發(fā)主機(jī)操作系統(tǒng)中的多媒體框架進(jìn)行類似客戶機(jī)操作系統(tǒng)的初始化,以獲得所述共享內(nèi)存映射至主機(jī)操作系統(tǒng)的地址空間,進(jìn)而與跨系統(tǒng)共享內(nèi)存建立連接。
圖2示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法流程示意圖,如圖2所示,所述跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法包括:
步驟101,在第一操作系統(tǒng)中,獲取對多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);
步驟102,在所述第二操作系統(tǒng)中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài);
步驟103中,在第二操作系統(tǒng)中,將所述多媒體數(shù)據(jù)的編解碼處理結(jié)果反饋至所述共享內(nèi)存;在第一操作系統(tǒng)中,由所述共享內(nèi)存獲取所述編解碼處理結(jié)果。
在步驟101中,第一操作系統(tǒng)中的應(yīng)用程序發(fā)起多媒體數(shù)據(jù)編解碼處理的請求后,將所述請求中包括的需要進(jìn)行編解碼處理的多媒體數(shù)據(jù)存入第一操作系統(tǒng)和第二操作系統(tǒng)均能夠讀寫的共享內(nèi)存中。所述多媒體數(shù)據(jù)可以是實際需要進(jìn)行編解碼處理的多媒體數(shù)據(jù),例如視頻文件或者音頻文件中實際需要進(jìn)行編解碼處理的數(shù)據(jù)等,也可以是實際需要進(jìn)行編解碼處理的多媒體數(shù)據(jù)在內(nèi)存中的位置以及其它信息,例如數(shù)據(jù)格式、時間標(biāo)志、數(shù)據(jù)大小等。
在虛擬化系統(tǒng)架構(gòu)中,為第一操作系統(tǒng)分配了用于多媒體數(shù)據(jù)編解碼處理的緩沖區(qū)(Buffer),當(dāng)所述緩沖區(qū)對應(yīng)的物理內(nèi)存為第一操作系統(tǒng)和第二操作系統(tǒng)均能夠讀寫的共享內(nèi)存時,可直接基于地址映射將第一操作系統(tǒng)中的多媒體數(shù)據(jù)寫入為其分配的緩沖區(qū)。第一操作系統(tǒng)的kernel層可以把共享內(nèi)存映射至第一操作系統(tǒng)的用戶空間;第一操作系統(tǒng)可以對其寫入數(shù)據(jù)的共享內(nèi)存執(zhí)行偏移記錄,即記錄當(dāng)前寫入多媒體數(shù)據(jù)的內(nèi)存塊的首地址相對于整個共享內(nèi)存區(qū)的首地址的偏移地址。
此外根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令指示了需要第二操作系統(tǒng)對傳遞的多媒體數(shù)據(jù)進(jìn)行怎樣的編解碼處理,可以包括編解碼命令函數(shù)和相關(guān)參數(shù)等。并且,將所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址包含在所述編解碼指令中一同發(fā)送至第二操作系統(tǒng)。所述編解碼指令可基于QEMU PIPE、Socket或者共享內(nèi)存等跨系統(tǒng)通信方式發(fā)送至第二操作系統(tǒng)。
在一些實施方式中,所述編解碼指令基于共享內(nèi)存方式發(fā)送至第二操作系統(tǒng)。
因基于共享內(nèi)存的跨系統(tǒng)通信方式相較QEMU PIPE、Socket等方式更快速,因此基于共享內(nèi)存方式在第一操作系統(tǒng)和第二操作系統(tǒng)間傳遞編解碼指令更快,進(jìn)一步縮短了跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理的時間。
在一些實施方式中,所述將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存,包括:將所述多媒體數(shù)據(jù)發(fā)送至非共享內(nèi)存;將所述非共享內(nèi)存中的多媒體數(shù)據(jù)拷貝至共享內(nèi)存。
當(dāng)為第一操作系統(tǒng)分配的所述緩沖區(qū)對應(yīng)的物理內(nèi)存僅可由第一操作系統(tǒng)直接讀寫,而不能被第二操作系統(tǒng)讀寫時,即所述緩沖區(qū)對應(yīng)的物理內(nèi)存為非共享內(nèi)存時,將第一操作系統(tǒng)需要進(jìn)行編解碼處理的多媒體數(shù)據(jù)存入所述緩沖區(qū)對應(yīng)的物理內(nèi)存后,再將所述多媒體數(shù)據(jù)拷貝至第一操作系統(tǒng)和第二操作系統(tǒng)均能夠讀寫的共享內(nèi)存中。
應(yīng)當(dāng)理解,在這些情況下,若所述編解碼指令也通過共享內(nèi)存方式進(jìn)行跨系統(tǒng)傳輸,則也需要將所述編解碼指令先寫入第一操作系統(tǒng)的非共享內(nèi)存中,再將所述非共享內(nèi)存中的編解碼指令拷貝至共享內(nèi)存中,以供第二操作系統(tǒng)獲取。
在步驟102中,第二操作系統(tǒng)的kernel層可用把共享內(nèi)存映射至第二操作系統(tǒng)的用戶空間。當(dāng)?shù)诙僮飨到y(tǒng)在獲取所述編解碼指令之后,可根據(jù)所述編解碼指令中的偏移地址,到共享內(nèi)存的相應(yīng)位置讀取多媒體數(shù)據(jù),進(jìn)而根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,得到處理結(jié)果。具體的,在第二操作系統(tǒng)中,可以根據(jù)所述編解碼指令調(diào)用編解碼器的驅(qū)動程序以驅(qū)動相應(yīng)的編解碼器完成編解碼處理;可以根據(jù)所述編解碼指令加載編解碼器組件完成編解碼處理;還可以由第二操作系統(tǒng)中的OpenMAX集成層(OpenMAX IL,OpenMAX Integration Layer)根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。在上述各種不同情況中所述編解碼指令的格式和包含的具體內(nèi)容也可能會相應(yīng)不同。
應(yīng)當(dāng)理解,當(dāng)編解碼指令是基于共享內(nèi)存方式由第一操作系統(tǒng)傳遞至第二操作系統(tǒng)時,所述第一操作系統(tǒng)還需要向第二操作系統(tǒng)發(fā)送所述編解碼指令在共享內(nèi)存中的偏移地址,以使所述第二操作系統(tǒng)根據(jù)所述編解碼指令的偏移地址由共享內(nèi)存中獲取編解碼指令,再進(jìn)一步獲取多媒體數(shù)據(jù)。
在步驟103中,在第二操作系統(tǒng)中,根據(jù)所述編解碼指令進(jìn)行多媒體數(shù)據(jù)的編解碼處理后,得到處理結(jié)果,將所述處理結(jié)果同樣通過共享內(nèi)存?zhèn)鬟f至第一操作系統(tǒng)中。例如將所述編解碼處理結(jié)果寫入共享內(nèi)存中,并記錄所述處理結(jié)果在共享內(nèi)存中的位置(首地址偏移地址),將所述偏移地址基于QEMU PIPE、Socket或者共享內(nèi)存等跨系統(tǒng)通信方式發(fā)送至第一操作系統(tǒng)中,使第一操作系統(tǒng)可以通過所述處理結(jié)果的偏移地址到共享內(nèi)存的相應(yīng)位置讀取數(shù)據(jù)。所述處理結(jié)果可以是經(jīng)過編解碼處理后的多媒體數(shù)據(jù),例如解碼后的視頻文件或者壓縮后的音頻文件中的視頻或者音頻數(shù)據(jù)等,也可以是經(jīng)過編解碼處理后的多媒體數(shù)據(jù)在內(nèi)存中的位置以及其它信息,例如數(shù)據(jù)格式、時間標(biāo)志、數(shù)據(jù)大小等。
上述第一操作系統(tǒng)為虛擬化系統(tǒng)架構(gòu)中的客戶機(jī)操作系統(tǒng),所述第二操作系統(tǒng)為虛擬化系統(tǒng)架構(gòu)中的主機(jī)操作系統(tǒng)。
在一些實施方式中,所述步驟101為,在第一操作系統(tǒng)中,獲取多媒體框架調(diào)用編解碼器進(jìn)行多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述編解碼請求發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);所述步驟102為,在第二操作系統(tǒng)中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令調(diào)用所述編解碼器的驅(qū)動程序?qū)λ龆嗝襟w數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。
圖3示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法應(yīng)用的一種虛擬化系統(tǒng)架構(gòu)示意圖,其以所述虛擬化系統(tǒng)架構(gòu)中至少包括一個客戶機(jī)操作系統(tǒng),所述第一操作系統(tǒng)為客戶機(jī)操作系統(tǒng),所述第二操作系統(tǒng)為主機(jī)操作系統(tǒng)為例。在該客戶機(jī)操作系統(tǒng)中運行有多媒體應(yīng)用程序,例如視頻播放器等,當(dāng)所述多媒體應(yīng)用程序需要對某些多媒體數(shù)據(jù)進(jìn)行編解碼處理時,會向多媒體框架下發(fā)多媒體數(shù)據(jù)編解碼請求,例如在視頻播放器播放高清視頻時會向多媒體框架下發(fā)視頻數(shù)據(jù)解碼請求。
在步驟101中,客戶機(jī)操作系統(tǒng)中運行的多媒體應(yīng)用程序在需要對某些多媒體數(shù)據(jù)進(jìn)行編解碼處理時,會向多媒體框架下發(fā)多媒體數(shù)據(jù)編解碼請求,多媒體框架會根據(jù)多媒體數(shù)據(jù)的類型、格式或者分辨率等為其選擇適當(dāng)?shù)木幗獯a器進(jìn)行相應(yīng)處理。當(dāng)多媒體框架判斷所述多媒體數(shù)據(jù)需要由硬件編解碼器進(jìn)行相應(yīng)處理時,調(diào)用客戶機(jī)操作系統(tǒng)中的硬件編解碼器生成對所述多媒體數(shù)據(jù)進(jìn)行硬件編解碼的指令。本實施例中客戶機(jī)操作系統(tǒng)中的多媒體框架可以為OpenMAX或者其他現(xiàn)有的多媒體框架,當(dāng)所述多媒體框架為OpenMAX時,其具有一個或者多個硬件編解碼器組件Component,多媒體框架通過調(diào)用各硬件編解碼器組件生成對多媒體數(shù)據(jù)進(jìn)行硬件編解碼處理的指令。
在客戶機(jī)操作系統(tǒng)中不存在真實的硬件編解碼器,而是在客戶機(jī)操作系統(tǒng)內(nèi)核層中運行了硬件編解碼器驅(qū)動程序前端,當(dāng)硬件編解碼器驅(qū)動程序前端接收到多媒體框架調(diào)用硬件編解碼器組件以進(jìn)行對所述多媒體數(shù)據(jù)進(jìn)行硬件編解碼處理的指令后,將需要進(jìn)行硬件編解碼處理的多媒體數(shù)據(jù)寫入共享內(nèi)存,并將所述多媒體數(shù)據(jù)在共享內(nèi)存中的偏移地址包含在所述指令中,通過跨系統(tǒng)通信方式將所述指令傳遞至主機(jī)操作系統(tǒng)內(nèi)核層中運行的硬件編解碼器驅(qū)動程序后端。
在步驟102中,主機(jī)操作系統(tǒng)內(nèi)核層中運行的硬件編解碼器驅(qū)動程序后端,當(dāng)接收到客戶機(jī)操作系統(tǒng)中硬件編解碼器驅(qū)動程序前端發(fā)送的對多媒體數(shù)據(jù)進(jìn)行硬件編解碼處理的指令后,根據(jù)所述指令中包含的偏移地址,由共享內(nèi)存中獲取多媒體數(shù)據(jù),并在主機(jī)操作系統(tǒng)中運行硬件編解碼器的驅(qū)動程序,以由真正的硬件編解碼器完成對所述多媒體數(shù)據(jù)的硬件編解碼處理。所述硬件編解碼器驅(qū)動程序可以為V4L2Driver等。
在本實施方式中,在上述步驟102之后,還可以包括步驟103,將處理后的多媒體數(shù)據(jù)基于共享內(nèi)存反饋所述客戶機(jī)操作系統(tǒng);在客戶機(jī)操作系統(tǒng)中,將所述處理后的多媒體數(shù)據(jù)反饋所述多媒體框架。
在主機(jī)操作系統(tǒng)的硬件編解碼器對所述多媒體數(shù)據(jù)完成編解碼處理之后,主機(jī)操作系統(tǒng)中的硬件編解碼器驅(qū)動程序后端可以將進(jìn)行編解碼處理后的數(shù)據(jù)通過共享內(nèi)存?zhèn)鬟f至客戶機(jī)操作系統(tǒng)中的硬件編解碼器驅(qū)動程序前端??蛻魴C(jī)操作系統(tǒng)中的硬件編解碼器驅(qū)動程序前端在接收到編解碼處理后的數(shù)據(jù)后可將其反饋至多媒體框架,以便多媒體框架將編解碼處理后的數(shù)據(jù)反饋發(fā)起原編解碼請求的多媒體應(yīng)用程序。
在本實施方式中,以所述編解碼為硬件編解碼為例,即客戶機(jī)操作系統(tǒng)中的多媒體框架確定了所述編解碼請求為硬件編解碼請求,需要調(diào)用主機(jī)操作系統(tǒng)中硬件編解碼器的驅(qū)動程序以驅(qū)動硬件編解碼器進(jìn)行相應(yīng)硬件編解碼處理,應(yīng)當(dāng)理解,當(dāng)客戶機(jī)操作系統(tǒng)中的多媒體框架確定了所述編解碼請求為軟件編解碼請求時,同樣可以通過共享內(nèi)存由主機(jī)操作系統(tǒng)進(jìn)行相應(yīng)的軟件編解碼處理。
在一些實施方式中,所述步驟101為,在第一操作系統(tǒng)OpenMAX集成層中,獲取適配層發(fā)送的對多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);所述步驟102為,在第二操作系統(tǒng)OpenMAX集成層中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令加載編解碼器的組件對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。
圖4示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法應(yīng)用的另一種虛擬化系統(tǒng)架構(gòu)示意圖,本實施方式所提供的技術(shù)方案適用于采用OpenMAX多媒體框架的操作系統(tǒng)。其以所述虛擬化系統(tǒng)架構(gòu)中至少包括一個客戶機(jī)操作系統(tǒng),所述第一操作系統(tǒng)為客戶機(jī)操作系統(tǒng),所述第二操作系統(tǒng)為主機(jī)操作系統(tǒng)為例。在該客戶機(jī)操作系統(tǒng)中運行有多媒體應(yīng)用程序,例如視頻播放器等,當(dāng)所述多媒體應(yīng)用程序需要對某些多媒體數(shù)據(jù)進(jìn)行編解碼處理時,會向多媒體框架下發(fā)多媒體數(shù)據(jù)編解碼請求,例如在視頻播放器播放高清視頻時會向多媒體框架下發(fā)視頻數(shù)據(jù)解碼請求。
在步驟101中,當(dāng)客戶機(jī)操作系統(tǒng)中的多媒體應(yīng)用程序下發(fā)對多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼請求后,在所述客戶機(jī)操作系統(tǒng)的適配層可以根據(jù)多媒體數(shù)據(jù)的類型、格式或者分辨率等為其選擇適當(dāng)?shù)能浖蛘哂布幗獯a器。支持同一格式的編解碼器可以為多個,其中可以包括硬件編解碼器和軟件編解碼器,在適配編解碼器時可以根據(jù)預(yù)設(shè)規(guī)則選擇最適合的編解碼器,例如:為分辨率要求低的多媒體文件選擇軟件編解碼器、為分辨率要求高的多媒體文件選擇硬件編解碼器等??蛻魴C(jī)操作系統(tǒng)的OpenMAX集成層中接收適配層發(fā)送的編解碼請求后,生成所述編解碼請求對應(yīng)的編解碼指令,將多媒體數(shù)據(jù)寫入共享內(nèi)存,并將所述多媒體數(shù)據(jù)在共享內(nèi)存中的偏移地址包含在所述編解碼指令中,通過跨系統(tǒng)通信方式將所述編解碼指令傳遞至主機(jī)操作系統(tǒng)中。在本實施方式中,可以僅將適配了硬件編解碼器器的多媒體數(shù)據(jù)基于共享內(nèi)存?zhèn)鬟f給主機(jī)操作系統(tǒng),對適配了軟件編解碼器的多媒體數(shù)據(jù)仍然使用所述客戶機(jī)操作系統(tǒng)中的軟件編解碼器對所述多媒體文件進(jìn)行編解碼;也可以將所有編解碼請求的多媒體數(shù)據(jù)均基于共享內(nèi)存?zhèn)鬟f給主機(jī)操作系統(tǒng)。
在步驟102中,主機(jī)操作系統(tǒng)獲取客戶機(jī)操作系統(tǒng)發(fā)送的編解碼指令后,根據(jù)所述編解碼指令中包含的偏移地址由共享內(nèi)存獲得所述多媒體數(shù)據(jù),在主機(jī)操作系統(tǒng)的OpenMAX集成層中,根據(jù)所述編解碼指令加載編解碼器的組件對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
在一些實施方式中,在客戶機(jī)操作系統(tǒng)的OpenMAX集成層與主機(jī)操作系統(tǒng)的OpenMAX集成層中分別運行了OpenMAX前端和OpenMAX后端,在客戶機(jī)操作系統(tǒng)的適配層為應(yīng)用程序的編解碼請求匹配了適當(dāng)?shù)木幗獯a器后,由所述OpenMAX前端根據(jù)確定了適當(dāng)?shù)木幗獯a器的編解碼請求生成編解碼指令,將多媒體數(shù)據(jù)寫入共享內(nèi)存,并將所述多媒體數(shù)據(jù)在共享內(nèi)存中的偏移地址包含在所述編解碼指令中,通過跨系統(tǒng)通信方式將所述編解碼指令傳遞至主機(jī)操作系統(tǒng)中的OpenMAX后端。主機(jī)操作系統(tǒng)中的OpenMAX后端接收到OpenMAX前端發(fā)送的編解碼指令后,根據(jù)所述指令中包含的偏移地址,由共享內(nèi)存中獲取多媒體數(shù)據(jù),所述編解碼指令,在主機(jī)操作系統(tǒng)OpenMAX集成層中加載相應(yīng)的編解碼器對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
在本實施方式中,在上述步驟102之后,還可以包括步驟103,將處理后的多媒體數(shù)據(jù)基于共享內(nèi)存反饋所述客戶機(jī)操作系統(tǒng);在客戶機(jī)操作系統(tǒng)中,將所述處理后的多媒體數(shù)據(jù)反饋所述適配層。
在主機(jī)操作系統(tǒng)OpenMAX集成層加載軟件或者硬件編解碼器對所述多媒體數(shù)據(jù)完成編解碼處理之后,主機(jī)操作系統(tǒng)可以通過OpenMAX后端將進(jìn)行編解碼處理后的數(shù)據(jù)基于共享內(nèi)存?zhèn)鬟f至客戶機(jī)操作系統(tǒng)中的OpenMAX前端,客戶機(jī)操作系統(tǒng)的OpenMAX前端,在接收到編解碼處理后的數(shù)據(jù)后,可將其反饋至適配層,進(jìn)而反饋至發(fā)起原編解碼請求的多媒體應(yīng)用程序。此外,在主機(jī)操作系統(tǒng)OpenMAX集成層加載軟件或者硬件編解碼器對所述多媒體數(shù)據(jù)完成編解碼處理之后,也可以將處理結(jié)果直接發(fā)送至主機(jī)操作系統(tǒng)中的多媒體應(yīng)用程序進(jìn)行后續(xù)操作。
在一些實施方式中,所述步驟101為,在第一操作系統(tǒng)中,獲取多媒體應(yīng)用程序進(jìn)行多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);所述步驟102為,在第二操作系統(tǒng)中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);將所述編解碼指令和所述多媒體數(shù)據(jù)發(fā)送至第二操作系統(tǒng)中的OpenMAX集成層,以使所述第二操作系統(tǒng)中的OpenMAX集成層根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
圖5示出了本申請實施例一中跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法應(yīng)用的另一種虛擬化系統(tǒng)架構(gòu)示意圖,本實施方式所提供的技術(shù)方案適用于采用Android多媒體框架標(biāo)準(zhǔn)的,所述多媒體框架具體可包括Stagefright+OpenMAX或者Opencore+OpenMAX。其以所述虛擬化系統(tǒng)架構(gòu)中至少包括一個客戶機(jī)操作系統(tǒng),所述第一操作系統(tǒng)為客戶機(jī)操作系統(tǒng),所述第二操作系統(tǒng)為主機(jī)操作系統(tǒng)為例。在該客戶機(jī)操作系統(tǒng)中運行有多媒體應(yīng)用程序,例如視頻播放器等,當(dāng)所述多媒體應(yīng)用程序需要對某些多媒體數(shù)據(jù)進(jìn)行編解碼處理時,會向多媒體框架下發(fā)多媒體數(shù)據(jù)編解碼請求,例如在視頻播放器播放高清視頻時會向多媒體框架下發(fā)視頻數(shù)據(jù)解碼請求。
在步驟101中,客戶機(jī)操作系統(tǒng)中運行的多媒體應(yīng)用程序在需要對某些多媒體數(shù)據(jù)進(jìn)行編解碼處理時,會向多媒體框架下發(fā)多媒體數(shù)據(jù)編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù)。在客戶機(jī)操作系統(tǒng)中,無需運行完整的多媒體框架根據(jù)所述編解碼請求對所述多媒體數(shù)據(jù)進(jìn)行處理,僅需要根據(jù)所述編解碼請求生成編解碼指令,將多媒體數(shù)據(jù)寫入共享內(nèi)存,并將所述多媒體數(shù)據(jù)在共享內(nèi)存中的偏移地址包含在所述編解碼指令中,通過跨系統(tǒng)通信方式將所述編解碼指令傳遞至主機(jī)操作系統(tǒng)中。
在步驟102中,主機(jī)操作系統(tǒng)中運行了完整的OpenMAX集成層,在接收到客戶機(jī)操作系統(tǒng)基于共享內(nèi)存?zhèn)鬟f的編解碼指令后,根據(jù)所述編解碼指令中包含的偏移地址由共享內(nèi)存獲得所述多媒體數(shù)據(jù),將所述編解碼指令連同待編解碼處理的多媒體數(shù)據(jù)發(fā)送至主機(jī)操作系統(tǒng)中的OpenMAX集成層,由OpenMAX集成層根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,可以包括加載各種軟件編解碼器組件進(jìn)行軟件編解碼處理;也可以包括加載各種硬件編解碼器組件,驅(qū)動對應(yīng)的硬件編解碼器進(jìn)行硬件編解碼處理。
在一些實施方式中,在所述步驟101中,在客戶機(jī)操作系統(tǒng)Stagefright框架的OMX適配層中,獲取多媒體應(yīng)用程序進(jìn)行多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至主機(jī)操作系統(tǒng);在所述步驟102中,在主機(jī)操作系統(tǒng)OMX適配層中,根據(jù)所述編解碼指令中的偏移地址由共享內(nèi)存獲取所述多媒體數(shù)據(jù);將所述編解碼指令和所述多媒體數(shù)據(jù)發(fā)送至主機(jī)操作系統(tǒng)中的OpenMAX集成層,以使所述主機(jī)操作系統(tǒng)中的OpenMAX集成層根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
以虛擬化系統(tǒng)架構(gòu)采用Android多媒體框架(Stagefright+OpenMAX)為例,主機(jī)操作系統(tǒng)和客戶機(jī)操作系統(tǒng)中的Stagefright分別運行了OMX適配層,在所述適配層中分別引用了類OMXClient。其中在主機(jī)操作系統(tǒng)的OMX適配層中,AwesomePlayer可調(diào)用OMX Client::connect函數(shù),通過binder機(jī)制獲得MediaPlayerService,然后通過MediaPlayerService創(chuàng)建OMX的實例,使主機(jī)操作系統(tǒng)中的OMXClient作為OMX的入口,可以通過binder機(jī)制獲得OMX提供的服務(wù)。
在客戶機(jī)操作系統(tǒng)中,在客戶機(jī)操作系統(tǒng)中Stagefright框架的OMX適配層中創(chuàng)建新的類OMXClient前端,所述OMXClient前端能夠向類mediaplayer、類mediacodec,或者其他android系統(tǒng)多媒體框架中的其他類提供標(biāo)準(zhǔn)的類OMXClient接口,當(dāng)客戶機(jī)操作系統(tǒng)中所述OMXClient前端獲取到多媒體應(yīng)用程序進(jìn)行多媒體數(shù)據(jù)編解碼處理的編解碼請求后,根據(jù)所述編解碼請求生成編解碼指令,將多媒體數(shù)據(jù)寫入共享內(nèi)存,并將所述多媒體數(shù)據(jù)在共享內(nèi)存中的偏移地址包含在所述編解碼指令中,通過跨系統(tǒng)通信方式將所述編解碼指令傳遞至主機(jī)操作系統(tǒng)OMX適配層中的OMXClient后端,所述OMXClient后端能夠根據(jù)所述編解碼指令中包含的偏移地址由共享內(nèi)存獲得所述多媒體數(shù)據(jù),并將所述編解碼指令連同待編解碼處理的多媒體數(shù)據(jù)通過Binder機(jī)制發(fā)送給MediaPlayerService、MediaCodecService或者android系統(tǒng)多媒體框架中的其他Service。本實施方式中,將所述OMXClient后端作為主機(jī)操作系統(tǒng)OMX適配層OMX的入口,使客戶機(jī)操作系統(tǒng)中的發(fā)送至OMXClient前端的編解碼指令和多媒體數(shù)據(jù)能夠經(jīng)由OMXClient后端發(fā)送至主機(jī)操作系統(tǒng)中運行的完整的OpenMAX集成層,進(jìn)而完成硬件或者軟件的編解碼處理。
在本實施方式中,還可以根據(jù)所述編解碼請求確定對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼器的信息進(jìn)而生成對應(yīng)所述編解碼器的編解碼指令,上述步驟102可以為,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);將所述編解碼指令和所述多媒體數(shù)據(jù)發(fā)送至主機(jī)操作系統(tǒng)中的OpenMAX集成層,以使所述主機(jī)操作系統(tǒng)中的OpenMAX集成層根據(jù)所述編解碼指令加載所述編解碼器的組件對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
對于Stagefright框架,在預(yù)先設(shè)置的配置文件中可以存儲客戶機(jī)操作系統(tǒng)支持的所有編解碼器,包括各種硬件編解碼器和軟件編解碼器。在客戶機(jī)操作系統(tǒng)的OMX適配層OMXClient前端獲取到多媒體應(yīng)用程序發(fā)送的編解碼請求后,Stagefright框架能夠根據(jù)需要進(jìn)行編解碼處理的多媒體數(shù)據(jù)確定所述多媒體數(shù)據(jù)適用的編解碼器,例如根據(jù)多媒體數(shù)據(jù)的類型、格式或者分辨率等為其選擇適當(dāng)?shù)能浖蛘哂布幗獯a器,并生成所述編解碼器對應(yīng)的編解碼指令。
在主機(jī)操作系統(tǒng)的Stagefright框架OMX適配層OMXClient后端獲取到客戶機(jī)操作系統(tǒng)發(fā)送的編解碼指令后,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù),將所述編解碼指令和所述多媒體數(shù)據(jù)發(fā)送至主機(jī)操作系統(tǒng)中的OpenMAX集成層,以使所述OpenMAX集成層根據(jù)所述編解碼請求加載適當(dāng)?shù)能浖蛘哂布幗獯a器組件對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
在本實施方式中,在上述步驟102之后,還可以包括步驟103,將處理后的多媒體數(shù)據(jù)基于共享內(nèi)存反饋所述客戶機(jī)操作系統(tǒng);在客戶機(jī)操作系統(tǒng)中,將所述處理后的多媒體數(shù)據(jù)反饋所述多媒體應(yīng)用程序。
在主機(jī)操作系統(tǒng)的軟件或者硬件編解碼器對所述多媒體數(shù)據(jù)完成編解碼處理之后,主機(jī)操作系統(tǒng)OMX適配層中的OMXClient后端可以將進(jìn)行編解碼處理后的數(shù)據(jù)基于共享內(nèi)存?zhèn)鬟f至客戶機(jī)操作系統(tǒng)多媒體框架OMX適配層中的OMXClient前端,客戶機(jī)操作系統(tǒng)OMX適配層中的OMXClient前端,在接收到編解碼處理后的數(shù)據(jù)后可將其反饋至發(fā)起原編解碼請求的多媒體應(yīng)用程序。
在上述實施方式中,Qemu啟動時為多媒體創(chuàng)建了主機(jī)操作系統(tǒng)、客戶機(jī)操作系統(tǒng)均可訪問的共享內(nèi)存,在主機(jī)操作系統(tǒng)中創(chuàng)建該塊共享內(nèi)存的文件節(jié)點,并將該塊共享內(nèi)存映射至客戶機(jī)操作系統(tǒng),例如映射為客戶機(jī)操作系統(tǒng)PCI(Peripheral Component Interconnect,外設(shè)部件互連標(biāo)準(zhǔn))設(shè)備的內(nèi)存空間??蛻魴C(jī)操作系統(tǒng)中的多媒體前端(例如編解碼器驅(qū)動前端、OpenMAX前端或者OMXClient前端)由內(nèi)核層獲取配置信息進(jìn)行初始化后獲取Qemu分配的共享內(nèi)存空間,即得到了所述共享內(nèi)存在客戶機(jī)操作系統(tǒng)中的首地址。主機(jī)操作系統(tǒng)中的多媒體后端(例如編解碼器驅(qū)動后端、OpenMAX后端或者OMXClient后端)啟動后,監(jiān)聽其對應(yīng)的前端的連接請求,當(dāng)前端與后端進(jìn)行連接時,多媒體后端根據(jù)前述Qemu創(chuàng)建的共享內(nèi)存的文件節(jié)點映射得到共享內(nèi)存空間,即得到了所述共享內(nèi)存在主機(jī)操作系統(tǒng)中的首地址。之后,建立連接后的前端和后端可以通過上述共享內(nèi)存在各自操作系統(tǒng)中的首地址以及相同的偏移地址,通過共享內(nèi)存中的同一塊空間實現(xiàn)多媒體數(shù)據(jù)或者編解碼指令的跨系統(tǒng)傳輸。
本實施例中,提供了一種跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法,在第一操作系統(tǒng)中,當(dāng)需要對多媒體數(shù)據(jù)進(jìn)行編解碼處理時,可將多媒體數(shù)據(jù)通過共享內(nèi)存發(fā)送至第二操作系統(tǒng),以在第二操作系統(tǒng)中完成所述多媒體數(shù)據(jù)的編解碼處理,本申請中,通過共享內(nèi)存實現(xiàn)跨系統(tǒng)多媒體數(shù)據(jù)編解碼過程中多媒體數(shù)據(jù)的傳遞,減少了數(shù)據(jù)拷貝次數(shù),一方面節(jié)約了虛擬化系統(tǒng)架構(gòu)的計算資源和存儲資源,提升虛擬化系統(tǒng)性能,另一方面縮短了跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理時間。本申請還可以基于共享內(nèi)存方式在第一操作系統(tǒng)和第二操作系統(tǒng)間傳遞編解碼指令,進(jìn)一步縮短跨系統(tǒng)多媒體數(shù)據(jù)編解碼處理的時間;在第一操作系統(tǒng)原分配的緩沖區(qū)的物理存儲區(qū)為非共享內(nèi)存時,可將寫入非共享內(nèi)存的數(shù)據(jù)拷貝至共享內(nèi)存中以便于第二操作系統(tǒng)讀??;此外本提案還公開了第一操作系統(tǒng)和第二操作系統(tǒng)的內(nèi)核層、OpenMAX集成層或者多媒體框架的適配層均可以基于共享內(nèi)存實現(xiàn)跨系統(tǒng)傳輸多媒體數(shù)據(jù)編解碼請求,可根據(jù)用戶需求調(diào)整,更靈活。
實施例二:
基于同一發(fā)明構(gòu)思,本申請實施例中還提供了一種跨系統(tǒng)多媒體數(shù)據(jù)編解碼裝置,由于這些裝置解決問題的原理與跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法相似,因此這些裝置的實施可以參見方法的實施,重復(fù)之處不再贅述。如圖6所示,所述跨系統(tǒng)多媒體數(shù)據(jù)編解碼裝置200包括:
前端模塊201,用于在第一操作系統(tǒng)中,獲取對多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);
后端模塊202,用于在所述第二操作系統(tǒng)中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。
在一些實施方式中,所述將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng),包括:將所述編解碼指令基于共享內(nèi)存方式發(fā)送至第二操作系統(tǒng)。
在一些實施方式中,所述將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存,包括:將所述多媒體數(shù)據(jù)發(fā)送至非共享內(nèi)存;將所述非共享內(nèi)存中的多媒體數(shù)據(jù)拷貝至共享內(nèi)存。
在一些實施方式中,所述在第一操作系統(tǒng)中,獲取對多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù),包括:
在第一操作系統(tǒng)中,獲取多媒體框架調(diào)用編解碼器進(jìn)行多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);
所述根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,包括:
根據(jù)所述編解碼指令調(diào)用所述編解碼器的驅(qū)動程序?qū)λ龆嗝襟w數(shù)據(jù)進(jìn)行編解碼處理。
在一些實施方式中,所述前端模塊201具體用于,在第一操作系統(tǒng)OpenMAX集成層中,獲取適配層發(fā)送的對多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);將所述多媒體數(shù)據(jù)發(fā)送至共享內(nèi)存;根據(jù)所述編解碼請求生成對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理的編解碼指令,所述編解碼指令包括所述多媒體數(shù)據(jù)在所述共享內(nèi)存的偏移地址;將所述編解碼指令基于跨系統(tǒng)通信發(fā)送至第二操作系統(tǒng);
所述后端模塊202具體用于,在所述第二操作系統(tǒng)OpenMAX集成層中,根據(jù)所述編解碼指令中的偏移地址由所述共享內(nèi)存獲得所述多媒體數(shù)據(jù);根據(jù)所述編解碼指令加載所述編解碼器的組件對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,所述共享內(nèi)存對所述第一操作系統(tǒng)和所述第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。
在一些實施方式中,所述在第一操作系統(tǒng)中,獲取對多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù),包括:
在第一操作系統(tǒng)中,獲取多媒體應(yīng)用程序進(jìn)行多媒體數(shù)據(jù)編解碼處理的編解碼請求,所述編解碼請求包括需要進(jìn)行編解碼處理的多媒體數(shù)據(jù);
所述根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理,包括:
將所述編解碼指令和所述多媒體數(shù)據(jù)發(fā)送至第二操作系統(tǒng)中的OpenMAX集成層,以使所述第二操作系統(tǒng)中的OpenMAX集成層根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理。
在一些實施方式中,所述后端模塊202還用于,在所述根據(jù)所述編解碼指令對所述多媒體數(shù)據(jù)進(jìn)行編解碼處理之后,將所述多媒體數(shù)據(jù)的編解碼處理結(jié)果反饋至所述共享內(nèi)存;
所述前端模塊201還用于,在第一操作系統(tǒng)中,由所述共享內(nèi)存獲取所述編解碼處理結(jié)果。
實施例三:
基于同一發(fā)明構(gòu)思,本申請實施例中還提供了一種電子設(shè)備,由于其原理與跨系統(tǒng)多媒體數(shù)據(jù)編解碼方法相似,因此其實施可以參見方法的實施,重復(fù)之處不再贅述。如圖7所示,所述電子設(shè)備300包括:存儲器301,一個或多個處理器302;以及一個或多個模塊,所述一個或多個模塊被存儲在所述存儲器中,并被配置成由所述一個或多個處理器執(zhí)行,所述一個或多個模塊包括用于執(zhí)行任一上述方法中各個步驟的指令。
本實施例中,所述電子設(shè)備可以為手機(jī)、平板電腦、機(jī)器人或者其他智能設(shè)備。
實施例四:
基于同一發(fā)明構(gòu)思,本申請實施例還提供了一種與電子設(shè)備結(jié)合使用的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品包括內(nèi)嵌于計算機(jī)可讀的存儲介質(zhì)中的計算機(jī)程序,所述計算機(jī)程序包括用于使所述電子設(shè)備執(zhí)行任一上述方法中的各個步驟的指令。
為了描述的方便,以上所述裝置的各部分以功能分為各種模塊分別描述。當(dāng)然,在實施本申請時可以把各模塊或單元的功能在同一個或多個軟件或硬件中實現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本申請的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本申請范圍的所有變更和修改。