使用對照表 (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 屬性,並判斷 Hardware Composer 是否可以處理所選 LUT。