Requisiti multimediali per SDV

Le parole chiave MUST, MUST NOT, SHOULD e STRONGLY RECOMMENDED in questo documento devono essere interpretate come descritto in RFC 2119.

Sistema guest (immagine VM)

I requisiti in questa sezione si applicano al sistema guest.

Memoria

Il sistema DEVE fornire un minimo di 2 GB di memoria per VM.

Interfacce binarie dell'applicazione

Implementazioni del dispositivo:

  • DEVONO essere compatibili con una o più ABI Android NDK definite.
  • DEVONO utilizzare la stessa ABI Android NDK per tutte le immagini VM sullo stesso dispositivo.
  • DEVONO essere compatibili a livello di codice sorgente (ad es. compatibili con le intestazioni) e compatibili a livello binario (per l'ABI) con ogni libreria richiesta nell'elenco seguente.
  • DEVONO rendere disponibili per le app SDV tutte le seguenti librerie, che forniscono API native:
    • libc (libreria C)
    • libdl (linker dinamico)
    • libdrm.so (libreria userspace di Direct Rendering Manager)
    • libgbm.so (gestione generica dei buffer)
    • libEGL.so (gestione delle superfici OpenGL native)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (registrazione Android)
    • libtinyalsav2.so (registrazione e riproduzione audio)
    • libvulkan.so (Vulkan)
  • NON DEVONO aggiungere o rimuovere le funzioni pubbliche per le librerie native precedenti.
  • DEVONO esportare tutti i simboli delle funzioni OpenGL ES 3.1 e Android Extension Pack, come definiti nell'NDK, tramite la libreria libGLESv3.so. Tieni presente che, sebbene tutti i simboli DEBBANO essere presenti, OpenGL ES descrive in modo più dettagliato i requisiti per quando è prevista l'implementazione completa di ogni funzione corrispondente.
  • DEVONO esportare i simboli delle funzioni Vulkan 1.1 di base, nonché le estensioni VK_KHR_surface, VK_KHR_swapchain, VK_KHR_maintenance1 e VK_KHR_get_physical_device_properties2 tramite la libreria libvulkan.so. Tieni presente che, sebbene tutti i simboli DEBBANO essere presenti, Vulkan descrive in modo più dettagliato i requisiti per quando è prevista l'implementazione completa di ogni funzione corrispondente.
  • DOVREBBERO essere compilate utilizzando il codice sorgente e i file di intestazione disponibili nel progetto Android Open Source upstream.

Grafica

  • Il sistema DEVE utilizzare virtio-gpu per la grafica con accelerazione hardware. Il driver lato guest DOVREBBE utilizzare gfxstream per il rendering.

Input

Il sistema guest DEVE includere il supporto per gli eventi di input inoltrati dal sistema host utilizzando virtio-input.

OpenGL ES

Implementazioni del dispositivo:

  • DEVONO identificare correttamente le versioni OpenGL ES supportate (1.1, 2.0, 3.0, 3.1, 3.2) tramite le API native.
  • DEVONO includere il supporto per tutte le API native corrispondenti per ogni versione OpenGL ES supportata.
  • DEVONO supportare sia OpenGL ES 1.1 sia 2.0.
  • È STRONGLY RECOMMENDED che supportino OpenGL ES 3.1.
  • DOVREBBERO supportare OpenGL ES 3.2.
  • DEVONO segnalare, utilizzando le API gestite OpenGL ES e le API native, eventuali altre estensioni OpenGL ES implementate e, al contrario, NON DEVONO segnalare stringhe di estensione non supportate.
  • DEVONO supportare le seguenti estensioni:
    • 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

È STRONGLY RECOMMENDED che le implementazioni dei dispositivi implementino OpenGL ES utilizzando la libreria ANGLE con backend Vulkan.

Vulkan

Implementazioni del dispositivo:

  • È STRONGLY RECOMMENDED che includano il supporto per Vulkan 1.3.
  • NON DEVONO supportare una versione variante di Vulkan (ovvero la parte variante della versione principale di Vulkan DEVE essere zero).
  • DEVONO supportare le seguenti estensioni:
    • 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

Compatibilità multimediale

  • Le implementazioni dei dispositivi DEVONO consentire la riproduzione di contenuti audio non elaborati con le seguenti caratteristiche:

    • Formati di origine: PCM lineare, 16 bit, 8 bit, float
    • Canali: mono, stereo, configurazioni multicanale valide con un massimo di otto canali
    • Frequenze di campionamento (in Hz):
      • 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 nelle configurazioni dei canali elencate in precedenza
      • 96000 in mono e stereo
  • Le implementazioni dei dispositivi DEVONO consentire l'acquisizione di contenuti audio non elaborati. Come minimo, le implementazioni dei dispositivi DEVONO supportare le seguenti caratteristiche:

    • Formato: PCM lineare, 16 bit
    • Frequenze di campionamento: 8000, 11025, 16000, 44100, 48000 Hz
    • Canali: mono
  • Le implementazioni dei dispositivi DOVREBBERO consentire l'acquisizione di contenuti audio non elaborati con le seguenti caratteristiche:

    • Formato: PCM lineare, 16 bit e 24 bit
    • Frequenze di campionamento: 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 Hz
    • Canali: tanti canali quanti sono i microfoni sul dispositivo
  • Le implementazioni dei dispositivi DEVONO fornire il supporto per la riproduzione e l'acquisizione audio tramite l'API libtinyalsav2.so, utilizzando il dispositivo virtio-sound per l'accesso hardware e DEVONO supportare l'API ALSA.

  • I codificatori e i decodificatori video DEVONO supportare almeno uno dei formati colore YUV420 8:8:8 planare o semiplanare.

  • I decodificatori e i codificatori video DEVONO supportare il codec H.264 AVC.

  • Le implementazioni dei dispositivi DEVONO supportare H.264 Main Profile Level 3.1 e profilo di baseline. Il supporto per l'ordinamento arbitrario delle sezioni (ASO), l'ordinamento flessibile dei macroblocchi (FMO) e le sezioni ridondanti (RS) è facoltativo.

  • Codificatori video:

    • DEVONO supportare i profili di codifica video in definizione standard (SD) nella tabella seguente.
    • DOVREBBERO supportare i profili di codifica video in alta definizione (HD) come indicato nella tabella seguente.

      SD (qualità bassa) SD (qualità alta) HD 720p HD 1080p
      Risoluzione video 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
      Frequenza fotogrammi video 20 fps 30 fps 30 fps 30 fps
      Bitrate video 384 Kbps 2 Mbps 4 Mbps 10 Mbps
  • Decodificatori video:

    • DEVONO supportare i profili di decodifica video HD 720p nella tabella seguente.
    • DEVONO supportare i profili di decodifica video HD 1080p nella tabella seguente.

      SD (qualità bassa) SD (qualità alta) HD 720p HD 1080p
      Risoluzione video 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
      Frequenza fotogrammi video 30 fps 30 fps 60 fps 30 fps
      Bitrate video 800 Kbps 2 Mbps 8 Mbps 20 Mbps
  • Le implementazioni dei dispositivi DEVONO fornire il supporto per i codec multimediali utilizzando l'API Video4Linux.

  • Le implementazioni dei dispositivi DEVONO fornire l'accesso a un decodificatore video hardware utilizzando l'API Video4Linux.

  • Tutti i codificatori video e immagini con accelerazione hardware DEVONO supportare la codifica dei fotogrammi dalle fotocamere hardware. Le implementazioni dei dispositivi DEVONO fornire l'accesso hardware per la codifica e la decodifica video tramite virtio-media.

  • Le implementazioni dei dispositivi DEVONO fornire l'accesso a una videocamera utilizzando l'API Video4Linux.

Sistema host (hypervisor e hardware)

I requisiti in questa sezione si applicano al sistema host e all'ambiente hypervisor.

Virtualizzazione

  • Oltre ai dispositivi virtio richiesti dal profilo Core, il sistema host DEVE fornire quanto segue:
    • virtio-gpu: per GPU e display virtuali
    • virtio-input: per l'inoltro degli eventi di input (ad es. tocco, tastiera)
    • virtio-sound: per i dispositivi audio virtuali
    • virtio-video o virtio-media: per i dispositivi codec video virtuali

Input

  • Il dispositivo DEVE supportare i dispositivi di input e inoltrare gli eventi ai sistemi guest utilizzando virtio-input. Il dispositivo DOVREBBE supportare gli input del puntatore, dei pulsanti e del controller rotativo.