本文档中的关键字“必须”“不得”“应”和“强烈建议”将按 RFC 2119 中的描述进行解释。
客户机系统(虚拟机映像)
本部分中的要求适用于 guest 系统。
内存
系统必须为每个虚拟机提供至少 2 GB 的内存。
应用二进制接口
设备实现:
- 必须与一个或多个已定义的 Android NDK ABI 兼容。
- 必须为同一设备上的所有虚拟机映像使用相同的 Android NDK ABI。
- 必须与以下列表中每个必需的库保持源代码兼容(例如,标头兼容)和二进制兼容(适用于 ABI)。
- 必须使以下所有提供原生 API 的库可供 SDV 应用使用:
libc(C 库)libdl(动态链接器)libdrm.so(直接渲染管理器用户空间库)libgbm.so(通用缓冲区管理)libEGL.so(原生 OpenGL Surface 管理)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)
- 不得添加或移除上述原生库的公共函数。
- 必须通过 libGLESv3.so 库导出所有 OpenGL ES 3.1 和 Android Extension Pack 函数符号(如 NDK 中所定义)。请注意,虽然所有符号都必须存在,但 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进行硬件加速图形处理。guest 端驱动程序应使用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 为单位):
- 8000、11025、16000、22050、24000、32000、44100、48000(声道配置如上所列)
- 96000(单声道和立体声)
设备实现必须允许捕获原始音频内容。设备实现必须至少支持以下特征:
- 格式:线性 PCM、16 位
- 采样率:8000、11025、16000、44100、48000 Hz
- 声道:单声道
设备实现应允许捕获具有以下特征的原始音频内容:
- 格式:线性 PCM、16 位和 24 位
- 采样率:8000、11025、16000、22050、24000、32000、44100、48000 Hz
- 声道:声道数与设备上的麦克风数相同
设备实现必须通过
libtinyalsav2.soAPI 提供对音频播放和捕获的支持,使用virtio-sound设备进行硬件访问,并且必须支持 ALSA API。视频编码器和解码器必须至少支持平面或半平面 YUV420 8:8:8 颜色格式之一。
视频解码器和编码器必须支持 H.264 AVC 编解码器。
设备实现必须支持 H.264 Main Profile Level 3.1 和 Baseline Profile。可以选择是否支持任意切片顺序 (ASO)、灵活宏块顺序 (FMO) 和冗余切片 (RS)。
视频编码器:
- 必须支持下表中的标清 (SD) 视频编码配置文件。
应支持下表中所列的高清视频编码配置文件。
标清(低画质) 标清(高画质) 高清 720p 高清 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
视频解码器:
- 必须支持下表中的高清 720p 视频解码配置文件。
必须支持下表中的高清 1080p 视频解码配置。
标清(低画质) 标清(高画质) 高清 720p 高清 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 提供对视频摄像头的访问权限。
宿主系统(Hypervisor 和硬件)
本部分中的要求适用于主机系统和 Hypervisor 环境。
虚拟化
- 除了核心配置文件所需的
virtio设备之外,宿主系统还必须提供以下内容:virtio-gpu:适用于虚拟 GPU 和显示屏virtio-input:用于转发输入事件(例如触摸、键盘)virtio-sound:适用于虚拟音频设备virtio-video或virtio-media:适用于虚拟视频编解码器设备
输入
- 设备必须支持输入设备,并使用
virtio-input将事件转发到 guest 系统。设备应支持指针、按钮和旋转控制器输入。