Media Codec

Android 10(API レベル 29)以降では、MediaCodecInfo に、コーデックに関する詳細情報を取得するメソッドが用意されています。

isSoftwareOnly()
コーデックがソフトウェアのみで実行される場合は true を返します。ソフトウェア コーデックは、レンダリング パフォーマンスを保証しません。
isHardwareAccelerated()
コーデックがハードウェアによって高速化されている場合は true を返します。
isVendor()
コーデックがデバイス ベンダーから提供されている場合は true を、Android プラットフォームから提供されている場合は false を返します。
isAlias()
MediaCodecList には、代替のコーデック名(エイリアス)を使用して、同じ基盤となるコーデックの追加エントリが含まれる場合があります。このメソッドは、このエントリのコーデックが別のコーデックのエイリアスである場合に true を返します。

また、MediaCodec.getCanonicalName() は、エイリアスを介して作成されたコーデックの基盤となるコーデック名を返します。

パフォーマンス ポイント

パフォーマンス ポイントは、特定の高さ、幅、フレームレートで動画をレンダリングするコーデックの能力を表します。たとえば、UHD_60 パフォーマンス ポイントは、60 フレーム/秒でレンダリングされる超高画質動画(3,840x2,160 ピクセル)を表します。

メソッド MediaCodecInfo.VideoCapabilities.getSupportedPerformancePoints() は、コーデックがレンダリングまたはキャプチャできる PerformancePoint エントリのリストを返します。

特定の PerformancePoint が別の PerformancePoint をカバーしているかどうかを確認するには、PerformancePoint.covers(PerformancePoint) を呼び出します。たとえば、UHD_60.covers(UHD_50) は true を返します。

すべてのハードウェア アクセラレーション コーデックのパフォーマンス ポイントのリストが提供されます。コーデックが最低の標準パフォーマンス ポイントも満たしていない場合、このリストは空になる可能性があります。

ベンダー イメージを更新せずに Android 10(API レベル 29)以降にアップグレードされたデバイスには、パフォーマンス ポイント データがありません。このデータはベンダー HAL から取得されるためです。この場合、getSupportedPerformancePoints() は null を返します。