使用對照表 (LUT) 校正色彩

Android 裝置的 HDR 功能各不相同,因此 HDR 顯示輸出內容可能不一致。查找表 (LUT) 是全新的色彩校正解決方案,可解決這項不一致的問題。為解決這項不一致問題,我們規定了色彩校正方式,而非委派給未定義的裝置專屬色彩校正機制。

SDK 先決條件

如要實作 LUT,SDK 版本必須為 36 以上。

實作 LUT

如要將 LUT 套用至 SurfaceControl,請按照下列步驟操作:

  1. 建立 DisplayLuts 執行個體。
  2. 使用 LUT 資料緩衝區、LUT 維度和 LUT 的取樣鍵,建立 DisplayLuts.Entry 執行個體。詳情請參閱LutProperties說明文件。
  3. 呼叫 DisplayLuts#set(DisplayLuts.Entry luts)DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) 設定 LUT 項目。這個架構支援 1D LUT、3D LUT,或 1D 和 3D LUT 的組合。
  4. 呼叫 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。