本ドキュメントにおけるキーワード「しなければならない」(MUST)、「してはならない」(MUST NOT)、「すべきである」(SHOULD)、「強く推奨される」(STRONGLY RECOMMENDED)は、RFC 2119 に記載されているように解釈されます。
ゲスト システム(VM イメージ)
このセクションの要件は、ゲスト システムに適用されます。
メモリ
システムは、VM あたり最小 2 GB のメモリを提供しなければなりません。
アプリケーション バイナリ インターフェース
デバイス実装は:
- 1 つ以上の定義済み Android NDK ABI と互換性がなければなりません。
- 同じデバイス上のすべての VM イメージで同じ Android NDK ABI を使用しなければなりません。
- 下記のリストにある各必須ライブラリとソース互換(ヘッダー互換など)かつバイナリ互換(ABI 向け)でなければなりません。
- ネイティブ API を提供する次のすべてのライブラリを、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 とベースライン プロファイルをサポートしなければなりません。任意のスライス順序(ASO)、柔軟なマクロブロック順序(FMO)、冗長スライス(RS)のサポートは任意です。
動画エンコーダ:
- 以下の表の標準画質(SD)動画エンコード プロファイルをサポートしなければなりません。
下表に示すとおり、高画質(HD)動画エンコード プロファイルをサポートすべきです。
SD(低画質) SD(高画質) HD 720p HD 1080p 動画の解像度 320 x 240 px 720 x 480 px 1,280 × 720 ピクセル 1,920 x 1,080 px 動画のフレームレート 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 px 720 x 480 px 1,280 × 720 ピクセル 1,920 x 1,080 px 動画のフレームレート 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を使用してゲスト システムにイベントを転送しなければなりません。デバイスは、ポインタ、ボタン、ロータリー コントローラの入力をサポートすべきです。