このページのキーワード「しなければならない」、「してはならない」、「すべきである」、「強く推奨される」 は、RFC 2119に記載されているように解釈されます。
ゲスト システム(VM イメージ)
このセクションの要件は、ゲスト システムに適用されます。
メモリ
システムは、VM ごとに最小 2 GB のメモリを提供しなければなりません。
アプリケーション バイナリ インターフェース
デバイス実装は:
- 1 つ以上の定義済み Android NDK ABI と互換性がなければなりません。
- 同じデバイス上のすべての VM イメージで同じ Android NDK ABI を使用しなければなりません。
- 次のリストにある各必須ライブラリとソース互換(ヘッダー互換など)かつバイナリ互換(ABI 向け)でなければなりません。
ネイティブ API を提供する次のすべてのライブラリを、Software Defined Vehicle(SDV)アプリで利用できるようにしなければなりません。
libc(C ライブラリ)libdl(動的リンカー)libdrm.so(Direct Rendering Manager ユーザー空間ライブラリ)libgbm.so(汎用バッファ管理)libEGL.so(ネイティブ OpenGL サーフェス管理)libGLESv1_CM.so(OpenGL ES 1.x)libGLESv2.so(OpenGL ES 2.0)libGLESv3.so(OpenGL ES 3.x)liblog(Android ロギング)libtinyalsav2.so(音声録音と再生)libvulkan.so(Vulkan)
上記のネイティブ ライブラリのパブリック関数を追加または削除してはなりません。
NDK で定義されているとおり、すべての OpenGL ES 3.1 と Android 拡張機能パックの関数シンボルを、libGLESv3.so ライブラリを介してエクスポートしなければなりません。 なお、すべてのシンボルが存在しなければなりませんが、OpenGL ES 対応する関数それぞれの完全な実装が期待される場合の要件については、 詳しく記載しています。
libvulkan.soライブラリを通じて、主な Vulkan 1.1 関数シンボルと拡張機能VK_KHR_surface、VK_KHR_swapchain、VK_KHR_maintenance1、およびVK_KHR_get_physical_device_properties2の関数シンボルをエクスポートしなければなりません。なお、すべてのシンボルが存在しなければなりませんが、 Vulkan には、対応する関数それぞれの完全な 実装が期待される場合の要件について詳しく記載されています。アップストリームの Android オープンソース プロジェクトで入手可能なソースコードとヘッダー ファイルを使用してビルドすべきです。
グラフィック
システムは、ハードウェア アクセラレーションによるグラフィックに virtio-gpu を使用しなければなりません。ゲスト側のドライバは、レンダリングに gfxstream を使用すべきです。
入力
ゲスト システムは、virtio-input を使用してホスト システムから転送された入力イベントのサポートを含まなければなりません。
OpenGL ES
デバイス実装は:
- ネイティブ API を通じて、サポート対象の OpenGL ES バージョン(1.1、2.0、3.0、3.1、3.2)を正しく識別しなければなりません。
- サポートするすべての OpenGL ES バージョンについて、対応するすべてのネイティブ API をサポートしなければなりません。
- OpenGL ES 1.1 と 2.0 の両方をサポートしなければなりません。
- OpenGL ES 3.1 をサポートすることが強く推奨されます。
- OpenGL ES 3.2 をサポートすべきです。
- OpenGL ES マネージド API とネイティブ API を介して、実装されている他の OpenGL ES 拡張機能をレポートしなければならず、また逆に、サポートしていない拡張機能の文字列をレポートしてはなりません。
- 次の拡張機能をサポートしなければなりません。
EGL_EXT_image_dma_buf_importEGL_EXT_image_dma_buf_import_modifiersEGL_KHR_fence_syncEGL_KHR_image_baseEGL_KHR_wait_syncGL_OES_EGL_image
デバイス実装は、Vulkan バックエンドを備えた ANGLE ライブラリを使用して OpenGL ES を実装することが強く推奨されます。
Vulkan
デバイス実装は:
- Vulkan 1.3 のサポートを含むことが強く推奨されます。
- Vulkan バリアント バージョンをサポートしてはなりません(Vulkan コアバージョンのバリアント部分はゼロでなければなりません)。
- 次の拡張機能をサポートしなければなりません。
VK_ANDROID_external_memory_android_hardware_bufferVK_EXT_external_memory_dma_bufVK_EXT_queue_family_foreignVK_KHR_external_memory_fdVK_KHR_external_semaphore_fd
マルチメディアの互換性
デバイス実装は、次の特性を持つ未加工オーディオ コンテンツを再生できるようにしなければなりません。
- 音源形式: リニア PCM、16 ビット、8 ビット、浮動小数点
- チャンネル: モノラル、ステレオ、最大 8 チャンネルの有効なマルチチャンネル構成
- サンプリング レート(Hz):
- 上記のチャンネル構成で 8,000、11,025、16,000、22,050、24,000、32,000、44,100、48,000
- モノラルとステレオで 96,000
デバイス実装は、未加工オーディオ コンテンツをキャプチャできるようにしなければなりません。少なくとも、デバイス実装は次の特性をサポートしなければなりません。
- 形式: リニア PCM、16 ビット
- サンプリング レート: 8,000、11,025、16,000、44,100、48,000 Hz
- チャンネル: モノラル
デバイス実装は、次の特性を持つ未加工オーディオ コンテンツをキャプチャできるようにすべきです。
- 形式: リニア PCM、16 ビットと 24 ビット
- サンプリング レート: 8,000、11,025、16,000、22,050、24,000、32,000、44,100、48,000 Hz
- チャンネル: デバイスのマイクと同じ数のチャンネル
デバイス実装は、ハードウェア アクセスに
virtio-soundデバイスを使用して、libtinyalsav2.soAPI を介した音声の再生とキャプチャのサポートを提供しなければならず、ALSA API をサポートしなければなりません。動画エンコーダとデコーダは、少なくとも Planar または SemiPlanar いずれかの YUV420 8:8:8 カラー形式をサポートしなければなりません。
動画デコーダとエンコーダは、H.264 AVC コーデックをサポートしなければなりません。
デバイス実装は、H.264 メイン プロファイル レベル 3.1 とベースライン プロファイルをサポートしなければなりません。Arbitrary Slice Ordering(ASO)、Flexible Macroblock Ordering(FMO)、Redundant Slices(RS)のサポートは任意です。
動画エンコーダ:
- 次の表の標準画質(SD)動画エンコード プロファイルをサポートしなければなりません。
次の表に示すとおり、高画質(HD)動画エンコード プロファイルをサポートすべきです。
SD(低画質) SD(高画質) HD 720p HD 1080p 動画の解像度 320 x 240 ピクセル 720 x 480 ピクセル 1280 x 720 ピクセル 1920 x 1080 ピクセル 動画のフレームレート 20 fps 30 fps 30 fps 30 fps 映像ビットレート 384 Kbps 2 Mbps 4 Mbps 10 Mbps
動画デコーダ:
- 次の表の HD 720p 動画デコード プロファイルをサポートしなければなりません。
次の表の HD 1080p 動画デコード プロファイルをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p 動画の解像度 320 x 240 ピクセル 720 x 480 ピクセル 1280 x 720 ピクセル 1920 x 1080 ピクセル 動画のフレームレート 30 fps 30 fps 60 fps 30 fps 映像ビットレート 800 Kbps 2 Mbps 8 Mbps 20 Mbps
デバイス実装は、Video4Linux API を使用してメディア コーデックのサポートを提供しなければなりません。
デバイス実装は、Video4Linux API を使用してハードウェア動画デコーダへのアクセスを提供しなければなりません。
ハードウェア アクセラレーションの動画エンコーダと画像エンコーダはすべて、ハードウェア カメラからのフレームのエンコードをサポートしなければなりません。デバイス実装は、
virtio-mediaを介して動画のエンコードとデコードのハードウェア アクセスを提供しなければなりません。デバイス実装は、Video4Linux API を使用してビデオカメラへのアクセスを提供しなければなりません。
ホスト システム(ハイパーバイザとハードウェア)
このセクションの要件は、ホスト システムとハイパーバイザ環境に適用されます。
仮想化
- コア プロファイルで必要な
virtioデバイスに加えて、ホスト システムは次のものを提供しなければなりません。virtio-gpu: 仮想 GPU とディスプレイ用virtio-input: 入力イベント(タッチ、キーボードなど)の転送用virtio-sound: 仮想オーディオ デバイス用virtio-videoまたはvirtio-media: 仮想動画コーデック デバイス用
入力
- デバイスは入力デバイスをサポートし、
virtio-inputを使用してイベントをゲスト システムに転送しなければなりません。デバイスは、ポインタ、ボタン、ロータリー コントローラの入力をサポートすべきです。