專利名稱:將DirectShow視頻數據轉換為高性能Java圖像緩沖的方法
技術領域:
本發明涉及高性能的視頻數據格式轉換方法,尤其涉及將Windows操作系統上 的多媒體框架Directa10W所產生的視頻數據轉換為高性能的Java圖像緩沖的方法。
背景技術:
在Windows平臺進行多媒體視頻數據處理以及回放等程序設計,需要用到 DirectSiow。DirectSiow是Windows系統自帶的多媒體框架,提供了基于模塊插件結構的 多媒體捕捉、視頻音頻回放等功能。但由于Directalow是基于C/C++所開發,其程序開發 接口只提供了 C/C++語言支持。另一方面,Java作為目前企業級、桌面、嵌入式等多種領域 的主流開發技術,其多媒體支持方面卻一直很欠缺,官方提供的Java Media Framework仍 舊基于過時的技術體系,長期沒有得到更新,尤其在Java平臺上對Directa10W的支持幾乎 等于零。這給基于Java開發多媒體應用軟件帶來了極大地阻礙。在這個問題中,重點就在 于Directa10W產生的視頻數據如何以高性能方式轉換為Java的圖形緩沖數據,滿足Java 的圖形渲染要求,打通Directa10W與Java之間的視頻數據轉換通道。發明內容
針對上述技術問題,本發明提供一種將Directa10W視頻數據轉換為高性能Java 圖像緩沖的方法,實現Directa10W視頻數據到Java圖像緩沖的轉換。
為解決上述技術問題,本發明的技術方案包括以下步驟 i、對Directalow視頻流插入幀捕捉過濾器, 、對Directalow產生的視頻數據進行幀速率計算,基于幀速率控制建立計時器,并 依此確定定時器頻率發生點,啟動計時器;iii、對Directalow產生的視頻流進行幀捕獲,iv、根據Java圖形緩沖最佳匹配質量確定目標格式,并依據Windows環境下的像素排 列規則反向以行掃描方式快速完成像素格式轉換;ν、建立Java圖形緩沖區,并直接映射到物理內存;vi、將格式轉換后的幀數據直接填充到所述物理內存,形成Java圖形緩沖數據;vi、對格式轉換后的幀數據直接填充到上述物理內存;vii、判斷是否存在后續幀數據,如果存在,則返回步驟iii,實現Java中的連續畫面的回 放;否則,停止計時器,釋放內存資源,viii、結束。
進一步優化的,在步驟vi之后還包括,建立Java2D對顯卡顯存的直接存取,并映 射為標準Java圖像對象,將Java圖形緩沖數據渲染到Java圖像對象;優選的,所述步驟vi將格式轉換后的幀數據直接填充到所述物理內存,是通過Java Native Access這種新的字節碼與本地二進制代碼橋接方式完成所述物理內存中的圖像緩3沖區數據到Java圖形緩沖的映射轉換。
本發明通過建立Directa10W與Java之間的視頻數據轉換中間層,提供 Directa10W視頻數據到Java圖形數據緩沖格式的高效率轉換以及具備硬件加速性能的動 態圖像回放,并可自動根據幀速率質量進行轉換速度控制。本發明解決了長久以來Java對 DirectShow視頻數據的處理以及回放無法提供高性能解決方案的問題,實現了 Windows上 的系統級主流多媒體框架Directa10W的二進制視頻數據與Java圖像緩沖之間的轉換交 互,借用Directa10W豐富的解碼器資源以及高速的視頻處理效能,為Java提供了穩定可靠 的多媒體視頻處理支持。該方法可廣泛適用于任何在Windows環境運行的基于Java的多 媒體應用軟件設計與開發,可極大地簡化Java對多媒體視頻數據的功能開發實現,并擁有 極高的性能。
下面結合附圖和具體實施方式
對本發明的技術方案作進一步具體說明。
圖1是本發明的流程框圖。
具體實施方式
首先通過需要插入Directaiow視頻捕捉過濾器,針對DirectSiow輸出地視頻流 進行幀速率計算,并依此設置并啟動定時器。在規定的頻率發生點內完成視頻幀數據的捕 捉,基于兼容Java圖形緩沖格式對視頻幀圖像進行格式像素級轉換,建立Java圖形緩沖區 并直接映射到物理內存,將轉換后的視頻幀圖像數據直接填充到物理內存中,對Java2D啟 動硬件加速模式,提供對顯卡顯存的直接存取,將Java圖形緩沖數據渲染填充到顯卡顯存 中完成高性能圖像渲染回放。基于幀數據判斷形成一個循環往復的過程,由于有幀速率計 算,定時器的頻率發生點可以保證不斷渲染的圖像是流暢運動的連續畫面。下面結合圖1, 描述本具體實施方式
的過程采用C++完成Directalow視頻捕捉過濾器插入到DirecUhow當前視圖; 對Directa10W自動生成的視頻數據進行幀速率計算,確定定時頻率; 利用代碼橋接將定時頻率傳遞給Java工作線程,在Java工作線程內創建定時器,并設 置好頻率后啟動計時器;對Directaiow視頻進行幀捕捉;依據兼容于Java圖形緩沖格式的要求對捕捉的視頻幀進行像素格式轉換;由于在 Windows環境下系統圖像采取的坐標系是數學坐標系,因此需要從幀結尾向幀起始反方向 順序進行像素數據處理;在Java工作線程中建立Java圖像緩沖區,并直接映射到物理內存; 通過Java Native Access這種新的字節碼與本地二進制代碼橋接方式,將轉換后的視 頻幀數據填充到該物理內存,完成所述映射到物理內存中的圖像緩沖區數據到Java圖形 緩沖的映射轉換;利用Java2D硬件加速模式開啟到顯卡顯存的映射,將圖形緩沖渲染到顯卡顯存,完成 幀圖像的最終渲染;判斷是否存在后續幀數據,如果存在,則返回步驟iii,實現Java中的連續畫面的回放;否則,停止計時器,釋放內存資源;結束。
本說明書中未作詳細描述的內容屬于本領域專業技術人員公知的現有技術。
最后所應說明的是,以上具體實施方式
僅用以說明本發明的技術方案而非限制, 盡管參照較佳實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解,可以對 本發明的技術方案進行修改或者等同替換,而不脫離本發明技術方案的精神和范圍,其均 應涵蓋在本發明的權利要求范圍當中。
權利要求
1. 一種將Directa10W視頻數據轉換為高性能Java圖像緩沖的方法,其特征在于,包 括以下步驟1、對Directalow視頻流插入幀捕捉過濾器, 、對Directalow產生的視頻數據進行幀速率計算,基于幀速率控制建立計時器,并 依此確定定時器頻率發生點,啟動計時器;iii、對Directalow產生的視頻流進行幀捕獲,iv、根據Java圖形緩沖最佳匹配質量確定目標格式,并依據Windows環境下的像素排 列規則反向以行掃描方式快速完成像素格式轉換;ν、建立Java圖形緩沖區,并直接映射到物理內存;vi、對格式轉換后的幀數據直接填充到上述物理內存;vii、判斷是否存在后續幀數據,如果存在,則返回步驟iii,實現Java中的連續畫面的回 放;否則,停止計時器,釋放內存資源,viii、結束。
2、根據權利要求1所述的將Directa10W視頻數據轉換為高性能Java圖像緩沖的方 法,其特征在于,在步驟vi之后還包括,建立Java2D對顯卡顯存的直接存取,并映射為標準 Java圖像對象,將Java圖形緩沖數據渲染到Java圖像對象;
3、根據權利要求1或2所述的將Directa10W視頻數據轉換為高性能Java圖像緩沖的 方法,其特征在于,所述步驟vi將格式轉換后的幀數據直接填充到所述物理內存,是通過 Java Native Access新的字節碼與本地二進制代碼橋接方式完成所述物理內存中的圖像 緩沖區數據到Java圖形緩沖的映射轉換。
全文摘要
本發明公開了一種將DirectShow視頻數據轉換為高性能Java圖像緩沖的方法。其過程包括在DirectShow視頻流中插入幀捕捉過濾器,計算視頻流幀速率,設置并啟動定時器;捕捉視頻幀數據并對視頻幀圖像進行格式像素級轉換;建立Java圖形緩沖區并直接映射到物理內存,將轉換后的視頻幀圖像數據直接填充到物理內存中。本發明解決了長久以來Java對視頻數據的處理以及回放無法提供高性能解決方案的問題,實現了Windows上的系統級主流多媒體框架DirectShow的二進制視頻數據與Java圖像緩沖之間的轉換交互,為Java提供了穩定可靠的多媒體視頻處理支持。
文檔編號G06F3/14GK102033730SQ20101053123
公開日2011年4月27日 申請日期2010年11月4日 優先權日2010年11月4日
發明者張新 申請人:武漢鋼鐵(集團)公司