Media Codec

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

isSoftwareOnly()
コーデックがソフトウェア内でのみ実行されている場合は true を返します。ソフトウェア コーデックは、レンダリング パフォーマンスについて保証しません。
isHardwareAccelerated()
コーデックがハードウェア アクセラレーションを使用している場合は true を返します。
isVendor()
コーデックがデバイス ベンダーによって提供されている場合は true を返し、Android プラットフォームによって提供されている場合は false を返します。
isAlias()
代替コーデック名(エイリアス)を使用している場合、
MediaCodecList には、1 つの基盤コーデックに対して複数のエントリが含まれている可能性があります。このエントリのコーデックが別のコーデックのエイリアスである場合、このメソッドは true を返します。

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

パフォーマンス ポイント

「パフォーマンス ポイント」とは、特定の高さ、幅、フレームレートで動画をレンダリングするコーデックの能力を示します。たとえば、UHD_60 パフォーマンス ポイントは、60 fps でレンダリングされた Ultra HD 動画(3840x2160 ピクセル)を示します。

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

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

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

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