Android Media Framework(五)Tunnel Mode

青山渺渺發表於2024-06-11

本篇將聚焦Android Tunnel Mode,詳細解析元件之間隧道連線過程、資料傳遞過程、元件銷燬過程。透過閱讀本篇內容,我們應能對tunneled元件的連線過程和buffer分配過程有所瞭解。

1、Tunnel Mode介紹

IL Spec詳細描述了Tunnel Component的實現方式,但內容較為晦澀難懂,網上相關的資料也比較少,使得學習Tunnel Mode變得相當困難。此外,由於Android對Tunnel Mode進行了一些修改,因此Tunnel元件的具體實現會與Spec存在差異,不同廠商的實現方式可能各不相同,我們要做的是參照Spec瞭解Tunnel Mode的工作過程。

IL Spec定義的是通用Tunnel Mode,是任意兩個元件隧道連線的標準。Android上的Tunnel Mode用於OMX元件與渲染元件之間,只有在解碼渲染流程會使用。

image

上圖展示了一個普通的資料處理流程,Decoder會先將處理好的資料填充到output buffer中,隨後OMX元件會呼叫FillBufferDone函式將填充好的buffer傳遞給IL Client,IL Client在做好音畫同步後,會將這個output buffer送入native window進行渲染。

image

上圖展示了Tunnel Mode的資料處理流程。與普通流程相比,Tunnel Mode流程中增加了一個tunnel元件,該元件直接與native window連線,實際工作過程中output buffer將不再被回傳到IL Client,而是透過tunnel元件直接傳送到native window進行渲染。Tunnel Mode中的音畫同步(avsync)將在硬體中實現,具體實現由各個廠商來完成。

Tunnel Mode將音畫同步和渲染工作從應用處理器(ACPU)轉移到數字訊號處理器(DSP)進行,對於需要高效能處理的4K60FPS等高階音影片內容,Tunnel Mode能夠顯著降低效能消耗,保證流暢播放。此外Tunnel Mode透過硬體同步,可以確保音訊和影片資料的精確同步,提升使用者體驗。

Tunnel Mode的缺點也很明顯,實現複雜且需要硬體級支援!

2、supply and supplier

supply翻譯為供應、提供, supplier翻譯為供應方、提供者。

這兩個詞用於描述隧道元件埠的角色是buffer分配者還是buffer使用者,spec中有描述:在一對建立隧道的埠中,呼叫UseBuffer的一方被稱為supplier port,另一方被稱為non-supplier port。

image

3、ComponentTunnelRequest

4、隧道建立

5、隧道模式下的buffer釋放

6、隧道模式下的埠使能與禁用


全文閱讀:Android Media Framework(五)Tunnel Mode

image

相關文章