在 SurfaceFlinger 的 Layer 處理邏輯中,除了常見的 Client Composition(GPU合成) 和 Device Composition(HWC合成),還存在一些特殊的合成方式,比如 Sideband、Solid Color 和 Display Decoration。這些都是通過 CompositionType
進行區分的:
?Sideband Composition(旁路流 Sideband 流)
🔹 定義:
-
這是一種 外部流輸入(Sideband Stream) 的合成方式,通常用于 低延遲的多媒體流(例如 IPTV、外部解碼器視頻)。
-
數據源不是常規的 Graphic Buffer,而是一個 Sideband Stream,它會通過
sideband stream
字段傳遞,而不是buffer
。
🔹 常見應用:
-
硬件視頻解碼器(比如 MediaTek、Qualcomm 等方案的 Zero-Copy 視頻)
-
Wi-Fi Display(Miracast 無線投屏)
-
低延遲視頻流,比如 IPTV 播放
🔹 Dumpsys 里的表現:
buffer: buffer=0x0
sideband stream=0xb40000770a9efe60
-
buffer=0x0
:表示這個 Layer 沒有普通的 GraphicBuffer,而是依賴sideband stream
。 -
sideband stream
:表示該 Layer 綁定了一個 外部數據流,SurfaceFlinger 不會自己合成,而是交由 HWC 處理。
2?? Solid Color Composition(純色填充)
🔹 定義:
-
用于繪制 純色 Layer,通常用于 UI 組件,比如背景、蒙版等,不需要綁定 Buffer。
-
顏色信息存儲在
color
字段,而不是buffer
里。
🔹 常見應用:
-
透明遮罩(比如暗淡背景層)
-
漸變背景(如果不使用著色器的話)
-
系統 UI(比如通知欄背景)
🔹 Dumpsys 里的表現:
buffer: buffer=0x0
color=[0.000000 0.000000 0.000000]
-
buffer=0x0
:這個 Layer 不使用 Buffer,直接填充顏色。 -
color=[R G B]
:RGB 顏色值(范圍 0.0 - 1.0)。
3?? Display Decoration(顯示裝飾)
🔹 定義:
-
這是 專門用于系統裝飾的 Layer,通常和 圓角裁剪(Rounded Corners)、水滴屏(Notch)、屏下指紋動畫 相關。
-
這些 Layer 通常不會參與普通應用的合成,而是專門用于屏幕的 UI 效果。
🔹 常見應用:
-
屏幕圓角遮罩
-
挖孔屏的 UI 裁剪
-
屏下指紋動畫
-
Always-On Display(AOD,息屏顯示)
🔹 Dumpsys 里的表現:
* Layer 0xb40000776aa87410 (Display Overlays#65)
-
這個 Layer 一般和 Display Overlays 相關,是 SurfaceFlinger 額外創建的系統 UI 組件。
-
可能包含特殊的
Dataspace
(比如Dataspace::DISPLAY_DECORATION
)。
總結
Composition 類型 | 描述 | 典型應用 | 是否綁定 Buffer |
---|---|---|---|
Sideband Composition | 旁路流輸入,直接由 HWC 處理 | 硬件解碼視頻流(IPTV、Wi-Fi Display) | ? 綁定 sideband stream |
Solid Color Composition | 純色填充 | UI 背景、透明蒙版 | ? 綁定 color |
Display Decoration | 系統 UI 裝飾 | 圓角、挖孔、水滴屏、AOD | ? 可能綁定特殊 Buffer |
實際上一般的Video硬解播放也不會走sideband stream,可能只能tunnel mode才會走。?