Android 裝置的 HDR 功能各不相同,因此 HDR 顯示輸出內容可能不一致。查找表 (LUT) 是全新的色彩校正解決方案,可解決這項不一致的問題。為解決這項不一致問題,我們規定了色彩校正方式,而非委派給未定義的裝置專屬色彩校正機制。
SDK 先決條件
如要實作 LUT,SDK 版本必須為 36 以上。
實作 LUT
如要將 LUT 套用至 SurfaceControl
,請按照下列步驟操作:
- 建立
DisplayLuts
執行個體。 - 使用 LUT 資料緩衝區、LUT 維度和 LUT 的取樣鍵,建立
DisplayLuts.Entry
執行個體。詳情請參閱LutProperties
說明文件。 - 呼叫
DisplayLuts#set(DisplayLuts.Entry luts)
或DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)
設定 LUT 項目。這個架構支援 1D LUT、3D LUT,或 1D 和 3D LUT 的組合。 - 呼叫
SurfaceControl.Transaction#setLuts
,將 LUT 套用至圖層。
Kotlin
val sc = SurfaceControl.Builder().build()
val luts = DisplayLuts()
val entry = DisplayLuts.Entry(
floatArrayOf(0.5f, 0.5f, 0.5f, 0.5f),
LutProperties.ONE_DIMENSION,
LutProperties.SAMPLING_KEY_MAX_RGB
)
luts.set(entry)
SurfaceControl.Transaction().setLuts(sc, luts).apply()
Java
SurfaceControl sc = new SurfaceControl.Builder().build();
DisplayLuts luts = new DisplayLuts();
DisplayLuts.Entry entry = new DisplayLuts.Entry(
new float[]{0.5f, 0.5f, 0.5f, 0.5f},
LutProperties.ONE_DIMENSION,
LutProperties.SAMPLING_KEY_MAX_RGB
);
luts.set(entry);
new SurfaceControl.Transaction().setLuts(sc, luts).apply();
您也可以使用 OverlayProperties.getLutProperties()
瞭解裝置的 LUT 屬性,並判斷硬體 Compositor 是否可以處理所選 LUT。