Android の HDR スクリーンショット

ハイ ダイナミック レンジ(HDR)動画の登場以来、ストリーミング サービスでは、全画面での視聴体験を重視して HDR 動画のストリーミングを開始しました。最近では、ソーシャル メディア アプリが HDR 動画やウルトラ HDR のサポートを開始しており、さまざまなアプリで HDR 導入に対する関心が高まっていることがうかがえます。

Android での HDR のサポート

Android では、この数年間で HDR テクノロジーのサポートに関して次のような重要な取り組みを行ってきました。

Android 7

  • HDR 動画のデコードと表示のサポートを開始。
  • HDR 機能を継続的に改善。

Android 13

  • HDR 動画のキャプチャ、エンコード、表示のエンドツーエンドのサポート。
  • SDR と HDR の混合構成を導入し、SDR と HDR で異なる表示可能な輝度範囲を定義。

Android 14

HDR でのスクリーンショットのサポートもここ数年で進化し、多くの変更が加えられています。

HDR スクリーンショット機能の進歩

このセクションでは、最近の Android のアップデートにおける HDR スクリーンショット機能の進歩について説明します。

Android 9

Android のグラフィック コンポジタである SurfaceFlinger に HDR 動画のサポートが導入されています。また、複雑な多項式トーンマッパーでの HDR 動画やスクリーンショットの GPU レンダリングがサポートされています。このトーン マッピング曲線はディスプレイのトーンマッパーと常に同じであるとは限らないため、スクリーンショットは画面上のコンテンツとは異なります。

Android 13

トーン マッピング プラグインが SurfaceFlinger の GPU レンダリング ブロックに追加され、OEM がディスプレイのトーン マッピング曲線に一致させるための GPU シェーダーを提供できるようになりました。スクリーンショットは画面上に表示されているものとほぼ同じですが、次のような違いがあります。

  • スクリーンショットは SDR フォーマットのままです。そのため、HDR のシーンと見比べると、スクリーンショット内の HDR の範囲は暗くなります。
  • SDR 輝度は管理されないため、スクリーンショット内の SDR コンテンツは HDR コンテンツと同程度の明るさになります。

つまり、スクリーンショットでキャプチャされた HDR 動画は SDR 動画に変換されるということです。

Android 14

ウルトラ HDR でのスクリーンショットには大きな課題が存在します。動画とは違い、画像は通常 UI フレームバッファ内でレンダリングされます。これによる影響には主に次の 2 つがあります。

  • 画像では、トーン マッピングを含め、周囲の UI と異なる画像処理を行うことができません。
  • UI のレンダリング時、アプリがソースベースのトーン マッピングを実行します。

この課題を軽減するためにスクリーンショットで実装可能な方法としては、次の 3 つがあります。

  • ウルトラ HDR 画像の HDR の詳細を保持し、スクリーンショット内のアプリの UI を暗くする。
  • アプリの UI の詳細を保持し、ウルトラ HDR 画像をクリップする。
  • HDR のハイライトをクリップしつつアプリの UI を明るくすることで調整する。

Android 14 では、アプリの UI を明るくし、HDR のハイライトをクリップするという 3 番目の方法を採用しています。

Android 15-QPR1

SurfaceFlinger にはスクリーンショットのローカル トーン マッピング アルゴリズムが含まれています。このプロセスでは次のことを行います。

  • 入力画像を小さな画像に分割する。
  • 各画像の最大輝度を計算し、各セクション内の低輝度値を破棄する。
  • 計算した輝度をぼかしとリサンプリングを使って補間する。
  • 補間された輝度値に基づいて、パラメータ化されたラインハルト トーンマッパーを入力画像に適用する。

次の例に示すように、Android 14 から Android 15-QPR1 にかけては、このアルゴリズムによりスクリーンショットが大幅に改善されています。

  • 例 1 はウルトラ HDR を含む Chrome のページ上に重なった HDR 動画のスクリーンショットです。新しい実装では UI の色はほぼ保持され、画像がクリップされることもありません。

    Android 14 Android 15-QPR1
    Android 14 での例 1 Android 15qpr での例 1

    図 1. 例 1 での Android 14 と Android 15-QPR1 の比較

  • 例 2 は [設定] の上に重なった HDR 動画のスクリーンショットと、続けて撮ったスクリーンショットです。Android 14 ではスクリーンショットの色が段々と暗くなっています。Android 15-QPR1 では、トーンマッパーによって UI の色が正しく再現され、保持されています。

    Android 14 Android 15-QPR1
    Android 14 での例 2 Android 15qpr での例 2

    図 2. 例 2 での Android 14 と Android 15-QPR1 の比較