1.0 引言 用于處理離屏頁面的視頻幀合成與分解模塊是視頻通信、視頻網絡、視頻安防等多媒體應用中最重要的軟件組件之一。離屏頁面是指沒有在屏幕上顯示的那些視頻幀。 視頻幀合成模塊能夠接入多個視頻輸入通道,每個通道可以有各自不同的屬性,如像素格式、像素分辨率等。然后將來自這些通道的幀合成到單個或多個視頻輸出通道(同樣可以有不同的屬性)的輸出幀上。當這種合成幀經編碼并從一臺設備發送出去時,接收設備中的幀分解模塊將會完成相反的功能,即提取輸入通道的視頻幀中的合成幀。圖1和圖2顯示了這些組件的功能描述。 本文將討論需要使用這些模塊的各種用例,在嵌入式平臺上實現幀合成器/分解器的不同方法以及這些方法各自的優缺點,并推薦一種使用OpenGL ES構架和圖形處理單元(GPU)的具有高度可移植性和可擴展性的設計解決方案。 【分頁導航】 第1頁:引言 第2頁:視頻通信系統 第3頁:外部顯示器 第4頁:3D視頻會議 第5頁:使用獨立于平臺的算法 第6頁:使用特殊平臺縮放器 2.0 用例 多媒體系統有許多不同的應用場合需要使用幀合成器/分解器功能性組件。下面的解釋討論了其中的一些使用案例。 2.1 視頻通信系統 在涉及到雙方進行高清視頻呼叫的IP視頻通信系統中(即在點到點視頻呼叫中),要求每臺設備與另外一臺設備交換從各自攝像機捕獲到的視頻幀。每臺設備上可能會使用不同的視頻壓縮技術(如MPEG、H.264等)對捕獲到的攝像機圖像幀進行壓縮/編碼。壓縮后的比特流再使用各種網絡協議(如RTP、UDP)在網絡上傳送。 在接收端,首先要接收來自發送端的編過碼的數據流,然后使用MPEG、H.264等視頻解壓縮算法進行解碼/解壓縮。最終在接收端顯示解碼后的幀。這樣,呼叫雙方都至少需要具有同時解碼從網絡上收到的幀和編碼自己的攝像機捕獲到的幀的功能。 在智能手機、平板電腦等典型的嵌入式系統中,實現點到點視頻呼叫所需的這些編碼/解碼算法因所用的處理器架構而成為可能。這些算法要么在多內核CPU或低功耗數字信號處理器(DSP)上實現,要么使用硬件視頻加速器實現。 但在視頻會議情況下,會有多臺設備進行視頻呼叫。因此如果一臺設備想要參與視頻會議呼叫,它需要支持一個以上的解碼實例來解碼從多方收到的視頻,還需要一個編碼實例來編碼自己攝像機的內容。 由于設備存在最多一路高清幀的編碼和解碼電路限制,低端平板電腦和智能手機不可能支持涉及多路高清幀解碼和單路高清幀編碼的會議呼叫。為了讓這種系統支持高清視頻會議,它們需要采用所有設備能夠撥入的高端視頻通信橋。圖3顯示了這種視頻橋的功能。 視頻橋接收來自所有設備的多路編碼過的輸入視頻流,然后將它們解碼為幀。來自多方的解碼幀再合成為單個幀。這種視頻橋將為每個連接的用戶設備生成合成幀。 視頻橋為某個用戶設備產生的合成幀包含有除該臺設備自己產生的幀以外的所有其它用戶設備產生的視頻幀。因此為了在所有設備之間建立視頻會議,必須至少有一個橋。這種橋可以是一個高端視頻卡,也可以是具有更強編碼和解碼功能的這些設備之一。 正如我們在上述例子中看到的那樣,扮演視頻橋角色的嵌入式設備需要具有離屏視頻幀合成組件。 【分頁導航】 第1頁:引言 第2頁:視頻通信系統 第3頁:外部顯示器 第4頁:3D視頻會議 第5頁:使用獨立于平臺的算法 第6頁:使用特殊平臺縮放器 2.2 外部顯示器 對上述視頻會議用例中與視頻橋連接的每臺設備來說,可能要求從輸入的單路視頻通道中提取/分解合成視頻幀,并將它們顯示到各臺顯示設備,或者出于演示等目的在接收終端的屏幕各窗口上顯示。下面的圖4就展示了這樣的一個用例,其中來自用戶A、C和D的幀被顯示在用戶A的LCD屏幕的各個獨立窗口上,而來自用戶B的幀顯示在諸如HDMI電視機等外部顯示器上。 【分頁導航】 第1頁:引言 第2頁:視頻通信系統 第3頁:外部顯示器 第4頁:3D視頻會議 第5頁:使用獨立于平臺的算法 第6頁:使用特殊平臺縮放器 2.3 3D視頻會議 在如圖5所示的3D視頻會議應用案例中,要求將來自兩個攝像傳感器的輸入幀合成在一起,經編碼后在網絡上以數據流的形式傳輸。接收端則要求提取/分解出來自每個攝像傳感器的幀,以便將各個通道的幀渲染到顯示器的不同通道上,實現立體觀看體驗。 【分頁導航】 第1頁:引言 第2頁:視頻通信系統 第3頁:外部顯示器 第4頁:3D視頻會議 第5頁:使用獨立于平臺的算法 第6頁:使用特殊平臺縮放器 3.0 實現 離屏幀合成器/分解器功能可以有多種實現方式: 3.1 使用獨立于平臺的算法 這種方法采用可以在CPU上運行的通用算法。雖然這種實現具有很好的可移植性,但會導致CPU負擔過重。這是因為幀的合成/分解過程通常包含以下一些操作: ●縮放或重新調整視頻幀尺寸(放大或縮小) ●輸入視頻幀在輸出幀中的定位 ●輸入幀的剪切 ●輸出幀的剪切 ●輸入通道的Alpha混合 ●輸入/輸出幀的旋轉 在幀速率為30fps的視頻流情況下,這些操作必須以1/30s即33.33ms的幀周期執行。如果幀的像素分辨率更高,比如720p、1080p,那么處理這些幀將成為CPU很重的負擔。CPU負擔的加重將導致不良的用戶界面,因為I/O互動少了。如果處理器不能在如此短的幀周期內處理完一幀,那么在幀合成過程中有可能發生丟幀現象。 【分頁導航】 第1頁:引言 第2頁:視頻通信系統 第3頁:外部顯示器 第4頁:3D視頻會議 第5頁:使用獨立于平臺的算法 第6頁:使用特殊平臺縮放器 3.2 使用特殊平臺縮放器 一些嵌入式處理器提供特殊平臺縮放器的硬件實現,它們實際上是用硬件方式實現的多相過濾器,可以針對不同縮放比例提供可編程的過濾系數。 為了在應用程序中發揮這種特殊平臺功能,CPU芯片供應商將提供定制的設備驅動程序。我們可以通過縮放器設備驅動程序使用這種縮放器來實現合成功能。應用程序可以利用不同的輸入/輸出剪切參數一次調整一個輸入幀并合成到輸出幀中。一旦縮放器調整好了一個輸入幀的大小并將它放到輸入幀中,它就會向CPU內核發出中斷信號。 針對將N個輸入幀合成到一個輸出幀的應用而言,它必須在一個幀周期內完成N次尺寸調整操作。這些縮放器非常高效,可以在可接受的時間限制內完成縮放處理。合成幀的輸出幀速率取決于單次縮放操作所占用的時間。 如果是N到1的合成、并且輸入/輸出幀具有相同的像素分辨率,那么 N代表輸入數量 T代表一次縮放操作所花的時間 如果合成中的輸入/輸出幀具有不同的像素分辨率,那么: Tn代表將第n個輸入通道的幀縮放后放到輸出通道所花的時間。其中n:0->N 上述公式同樣可以應用于具有一個輸入和N個輸出通道的分解器。 雖然使用這種方法可以提供高效的解決方案,但它不具有可移植性。這些硬件功能對嵌入式處理器來說是特定的。要么不同的嵌入式處理器不一定有這些功能,要么是以不同的方式實現,具有不同的功能清單。 控制這些定制硬件的設備驅動程序提供的接口和功能在每種嵌入式處理器上是不同的。而且一般來說,像旋轉、Alpha混合等功能無法用這種縮放器硬件來實現。 本文作者:Sharath Bhat 【分頁導航】 第1頁:引言 第2頁:視頻通信系統 第3頁:外部顯示器 第4頁:3D視頻會議 第5頁:使用獨立于平臺的算法 第6頁:使用特殊平臺縮放器 |