ディスプレイの設定を調整する

Android には、アプリがサポートされているハードウェアのディスプレイ設定を調整できるようにする API が含まれています。Android TV OS では、アプリはこの機能を活用して、フレームレートとカラー プロファイルを理想的な視聴体験に合わせて調整し、コンテンツを最適な形式で表示できます。

コンテンツのフレームレートを合わせる

動画のフレームレートがディスプレイのリフレッシュ レートと一致しない場合、フレームレート変換によって不快なモーション ジャダー アーティファクトが発生することがあります。これは、ゆっくりとパンするショットで特に顕著です。このため、SurfaceControl.Transaction.setFrameRate() API を使用してコンテンツのフレームレートをフレームワークに通知し、動画コンテンツがシームレスでないフレームレートの切り替えの対象となるかどうかを通知することが重要です。

詳しくは、フレームレート ガイドをご覧ください。

優先する写真プロファイルと一致する

Android 16 の MediaQuality API を使用すると、デベロッパーは画像プロファイルを制御できます。

次のようなシナリオがあります。

  • より広いダイナミック レンジでマスタリングされた映画やテレビシリーズの場合、デベロッパーは、クリエイターが意図したようにコンテンツを正確に表示するために、映画監督モードをリクエストできます。色の精度が高いシネマ プロファイルでは、明るさを上げるために、シャドウの微妙なディテールを際立たせます。
  • スポーツのライブ配信は、ダイナミック レンジが狭く、日光の下で視聴されることが多く、色の精度よりも明るさを重視したプロファイルが適しています。
  • ゲーム デベロッパーは、画像処理を最小限に抑えた低レイテンシ プロファイルをリクエストして、プレーヤーがディスプレイから最高のパフォーマンスを引き出せるようにできます。

システムの画像プロファイルを選択する

ピクチャー プロファイルを選択する前に、デバイスがそれをサポートしていることを確認することが重要です。

次のスニペットは、getAvailablePictureProfiles() を使用してサポートされているすべての写真プロファイルをクエリし、スポーツ プロファイルを適用する方法を示しています。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
    val mediaQualityManager: MediaQualityManager =
        context.getSystemService(MediaQualityManager::class.java)
    val profiles = mediaQualityManager.getAvailablePictureProfiles(null)
    for (profile in profiles) {
        // If we have a system sports profile, apply it to our media codec
        if (profile.profileType == PictureProfile.TYPE_SYSTEM
            && profile.name == NAME_SPORTS
        ) {
            val bundle = Bundle().apply { 
                putParcelable(MediaFormat.KEY_PICTURE_PROFILE_INSTANCE, profile)
            }
            mediaCodec.setParameters(bundle)
        }
    }
}

名前を指定して特定のプロファイルを取得するには、getPictureProfile() を使用します。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
    val profile = mediaQualityManager.getPictureProfile(
        PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null)
}

プロファイルが使用可能かどうかをクエリする必要がない場合は、MediaFormat.KEY_PICTURE_PROFILE_INSTANCE を使用して、ID でプロファイルを MediaCodec に直接提供できます。

サポートされているプロファイルはデバイスによって異なりますが、次の既知のシステム プロファイル ID と照合することを検討してください。

const val NAME_STANDARD: String = "standard"
const val NAME_VIVID: String = "vivid"
const val NAME_SPORTS: String = "sports"
const val NAME_GAME: String = "game"
const val NAME_MOVIE: String = "movie"
const val NAME_ENERGY_SAVING: String = "energy_saving"
const val NAME_USER: String = "user"