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 LUT と 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 プロパティを把握し、選択した LUT をハードウェア Composer が処理できるかどうかを判断することもできます。