SDV 媒體規定

本文中的 MUST、MUST NOT、SHOULD 和 STRONGLY RECOMMENDED 關鍵字,應按照 RFC 2119 的說明解讀。

訪客系統 (VM 映像檔)

本節中的需求適用於訪客系統。

記憶體

系統必須為每個 VM 提供至少 2 GB 的記憶體。

應用程式二進位檔介面

裝置實作方式:

  • 必須與一或多個已定義的 Android NDK ABI 相容。
  • 同一裝置上的所有 VM 映像檔都「必須」使用相同的 Android NDK ABI
  • 必須與下列清單中的每個必要程式庫來源相容 (例如標頭相容),且與 ABI 二進位檔相容。
  • 必須向 SDV 應用程式提供下列所有程式庫,並提供原生 API:
    • libc (C 程式庫)
    • libdl (動態連結器)
    • libdrm.so (Direct Rendering Manager 使用者空間程式庫)
    • 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 程式庫,匯出 NDK 中定義的所有 OpenGL ES 3.1 和 Android 擴充套件函式符號。請注意,雖然所有符號都「必須」存在,但 OpenGL ES 會更詳細地說明何時需要完整實作每個對應函式。
  • 必須透過 libvulkan.so 程式庫匯出核心 Vulkan 1.1 函式符號,以及 VK_KHR_surfaceVK_KHR_swapchainVK_KHR_maintenance1VK_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_import
    • EGL_EXT_image_dma_buf_import_modifiers
    • EGL_KHR_fence_sync
    • EGL_KHR_image_base
    • EGL_KHR_wait_sync
    • GL_OES_EGL_image

強烈建議裝置實作項目使用 ANGLE 程式庫和 Vulkan 後端實作 OpenGL ES。

Vulkan

裝置實作方式:

  • 強烈建議加入 Vulkan 1.3 的支援。
  • 不得支援 Vulkan 變體版本 (也就是 Vulkan 核心版本的變體部分必須為零)。
  • 必須支援下列擴充功能:
    • VK_ANDROID_external_memory_android_hardware_buffer
    • VK_EXT_external_memory_dma_buf
    • VK_EXT_queue_family_foreign
    • VK_KHR_external_memory_fd
    • VK_KHR_external_semaphore_fd

多媒體相容性

  • 裝置實作「必須」允許播放具有下列特徵的原始音訊內容:

    • 來源格式:線性 PCM、16 位元、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.so API 支援音訊播放和擷取作業,並使用 virtio-sound 裝置存取硬體,且「必須」支援 ALSA API

  • 影片編碼器和解碼器必須支援平面或半平面 YUV420 8:8:8 顏色格式。

  • 視訊解碼器和編碼器必須支援 H.264 AVC 轉碼器。

  • 裝置實作項目必須支援 H.264 Main 設定檔等級 3.1 和基準設定檔。任意切片排序 (ASO)、彈性巨集區塊排序 (FMO) 和冗餘切片 (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-videovirtio-media:適用於虛擬視訊轉碼器裝置

輸入

  • 裝置「必須」支援輸入裝置,並使用 virtio-input 將事件轉送至訪客系統。裝置「應」支援指標、按鈕和旋轉控制器輸入。