Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

カラー マネージメント

Android 8.1 には、ディスプレイ技術全体に一貫したエクスペリエンスを提供するために使用できるカラー マネージメントのサポートが追加されています。Android 8.1 で実行されるアプリケーションは、広色域ディスプレイの全機能にアクセスして、ディスプレイ デバイスを最大限に活用できます。

従来の Android のリリースでは、カラー マネージメントのサポートはなく、(多くの場合、テレビ業界が支援する目標である)互換性のあるコンテンツやディスプレイに依存していました。しかし、最近のディスプレイ技術では、より広色域のディスプレイが可能となり、既存のコンテンツを期待どおりに表示できません。Android 8.1 では、広色域のディスプレイを使用するデバイス(例: アクティブ マトリックス有機発光ダイオードや AMOLED、一部の LCD)で、アプリケーションから広色域のコンテンツを視聴できます。

デバイスのサポートの決定

Android 8.1 を搭載したワイドカラー ディスプレイのデバイスは、カラー マネージメント(ワイドカラー)をサポートする必要があります。この機能を有効にする前に、デバイスが次の要件を満たしていることを確認してください。

  • デバイス ディスプレイが、Display-P3 色空間をサポートする特徴的なディスプレイを含むハードウェア要件を満たしている。ディスプレイがこの要件を満たしていない場合は、カラー マネージメントを有効にしないでください。CPU と GPU の影響を軽減するには、ディスプレイ パイプラインで拡張された sRGB と HDR10 をサポートすることが望まれます。
  • デバイスが、較正データ(デバイスに格納されています)を生成する出荷時の調整プロセスをサポートして、ディスプレイの動作の製造でのばらつきを調整している。少なくとも、較正データは、sRGB コンテンツと D65 および D73 のホワイト ポイントがディスプレイに正確に表示されるようにする必要があります。Android の今後のバージョンでは、各デバイスの ICC プロファイルが完全にサポートされる可能性があります。

上記の要件が満たされている場合、デバイスのカラー マネージメント機能を有効にできます。

カラー マネージメントの実装

カラー マネージメントを実装するには、まず Hardware Composer 2(HWC2)ドライバを更新してカラーモードについて把握し、これらのモードをハードウェアに適用します。具体的には、HWC2 コンポーザーは、HWCDisplay::GetColorModes を使用して Display-P3 と sRGB のカラーモードを報告する必要があります。

次に、必要な OpenGL 拡張機能とライブラリ サポートを有効にして、OpenGL 色空間を HAL データスペースに変換します。OpenGL 拡張機能に必要なものは次のとおりです。

  • EGL_EXT_pixel_format_float。16 ビット浮動小数点の色の構成を使用することで、アプリケーションが表示可能な EGLSurface を作成できるようにします。優先度: 高(ワイドカラー対応アプリケーションのデフォルトのピクセル形式を想定)。ドライバのサポートが必要です。
  • EGL_KHR_gl_colorspace。sRGB 形式のデフォルトのフレームバッファを使用してディスプレイ デバイスに対する sRGB レンダリングを簡単に行うアプリケーションでは、この拡張機能により、その機能をサポートする OpenGL コンテキストで sRGB にレンダリングされる EGLSurface を作成できます。sRGB の動作に対するドライバのサポートが必要です。

Android では、次のオプションの拡張機能も提供しています。

  • EGL_EXT_colorspace_scrgb_linear。この拡張機能では、EGLSurface の作成時にアプリケーションが選択する新しい色空間オプション scRGB が提供されます。scRGB 色空間は、sRGB と同じホワイト ポイントと原色の線形表示参照空間を定義します(したがって sRGB と下位互換性があります)。ドライバのサポートは不要で、Android EGL ラッパーで実装できます。有効活用するためには、この拡張機能では 16 ビット浮動小数点(FP16)のサポートが必要です。
  • EGL_EXT_gl_colorspace_display_p3 と EGL_EXT_gl_colorspace_display_p3_linear。Display-P3 形式のデフォルトのフレームバッファを使用してディスプレイ デバイスに対する sRGB レンダリングを簡単に行うアプリケーションでは、この拡張機能により、その機能をサポートする OpenGL コンテキストで Display-P3 にレンダリングされる EGLSurface を作成できます。これは、EGL ドライバのラッパーで実装できます。
  • VK_EXT_swapchain_colorspace(Vulkan)。アプリケーションが、使用している色空間にスワップ チェーンをタグ付けできるようにします。DCI-P3、Display-P3、AdobeRGB、BT2020 などの一般的な色空間が含まれます。

カスタマイズ

DCI-P3、AdobeRGB、Rec709、Rec2020 などのさまざまな色標準をサポートすることで、カラー マネージメント機能をカスタマイズできます。他にも次のようなカスタマイズを行えます。

  • ディスプレイ パイプラインの色変換のハードウェア サポート。ハードウェアでの複数の色変換のサポートを有効にします。
  • 複数レイヤでの独立した色変換のサポート(たとえば、一部のレイヤを sRGB、その他を extended-sRGB にし、それぞれ独自のカラー パイプラインを持たせることできます)。複数の色空間が表示される場合、一部の色空間はディスプレイの色空間に変換する必要があります。この変換はディスプレイ エンジンから提供されるのが理想的です。そうでない場合は、Android が GPU 合成を実行する必要があります。

テスト

カラー マネージメントをテストするには、opengl/tests の次のリソースを使用します。

  • gl2_basic。Display-P3 色空間を要求するシンプルな OpenGL デモです。
  • EGL_test。必要な拡張機能と構成のサポートをテストします(10:10:10:2 および FP16)。
  • test_wide_color。SurfaceFlinger と同じ方法でサーフェスを作成します(例: 構成、色空間、ピクセル形式)。

リファレンス実装

リファレンス実装については、frameworks/native を参照してください。ヘッダーについては、以下を参照してください。