Requisitos de mídia da SDV

As palavras-chave PRECISA, NÃO PODE, DEVE e FORTEMENTE RECOMENDADO neste documento precisam ser interpretadas conforme descrito na RFC 2119.

Sistema de convidado (imagem da VM)

Os requisitos desta seção se aplicam ao sistema de convidado.

Memória

O sistema PRECISA fornecer um mínimo de 2 GB de memória por VM.

Interfaces binárias do aplicativo

Implementações de dispositivos:

  • PRECISAM ser compatíveis com uma ou mais ABIs definidas do Android NDK.
  • PRECISAM usar a mesma ABI do Android NDK para todas as imagens de VM no mesmo dispositivo.
  • PRECISAM ser compatíveis com a origem (por exemplo, compatíveis com cabeçalho) e binárias (para a ABI) com cada biblioteca necessária na lista a seguir.
  • PRECISAM disponibilizar todas as bibliotecas a seguir, que fornecem APIs nativas, para apps SDV:
    • libc (biblioteca C)
    • libdl (vinculador dinâmico)
    • libdrm.so (biblioteca de espaço do usuário do Direct Rendering Manager)
    • libgbm.so (gerenciamento de buffer genérico)
    • libEGL.so (gerenciamento de superfície OpenGL nativo)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (registro do Android)
    • libtinyalsav2.so (gravação e reprodução de áudio)
    • libvulkan.so (Vulkan)
  • NÃO PODEM adicionar ou remover as funções públicas das bibliotecas nativas anteriores.
  • PRECISAM exportar todos os símbolos de função do OpenGL ES 3.1 e do Android Extension Pack, conforme definido no NDK, pela biblioteca libGLESv3.so. Embora todos os símbolos PRECISAM estar presentes, OpenGL ES descreve com mais detalhes os requisitos para quando a implementação completa de cada função correspondente é esperada.
  • PRECISAM exportar os símbolos de função principais do Vulkan 1.1, bem como as extensões VK_KHR_surface, VK_KHR_swapchain, VK_KHR_maintenance1 e VK_KHR_get_physical_device_properties2 pela biblioteca libvulkan.so. Embora todos os símbolos PRECISAM estar presentes, o Vulkan descreve com mais detalhes os requisitos para quando a implementação completa de cada função correspondente é esperada.
  • DEVEM ser criados usando o código-fonte e os arquivos de cabeçalho disponíveis no Android Open Source Project.

Gráficos

  • O sistema PRECISA usar virtio-gpu para gráficos acelerados por hardware. O driver do lado do convidado DEVE usar gfxstream para renderização.

Entrada

O sistema de convidado PRECISA incluir suporte para eventos de entrada encaminhados do sistema host usando virtio-input.

OpenGL ES

Implementações de dispositivos:

  • PRECISAM identificar corretamente as versões compatíveis do OpenGL ES (1.1, 2.0, 3.0, 3.1, 3.2) pelas APIs nativas.
  • PRECISAM incluir suporte para todas as APIs nativas correspondentes de cada versão do OpenGL ES que oferecem suporte.
  • PRECISAM oferecer suporte ao OpenGL ES 1.1 e 2.0.
  • É FORTEMENTE RECOMENDADO oferecer suporte ao OpenGL ES 3.1.
  • DEVEM oferecer suporte ao OpenGL ES 3.2.
  • PRECISAM informar usando as APIs gerenciadas do OpenGL ES e as APIs nativas de outras extensões do OpenGL ES que implementaram e, inversamente, NÃO PODEM informar strings de extensão que não oferecem suporte.
  • PRECISAM oferecer suporte às seguintes extensõ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

É FORTEMENTE RECOMENDADO que as implementações de dispositivos implementem o OpenGL ES usando a biblioteca ANGLE com o back-end do Vulkan.

Vulkan

Implementações de dispositivos:

  • É FORTEMENTE RECOMENDADO incluir suporte ao Vulkan 1.3.
  • NÃO PODEM oferecer suporte a uma versão variante do Vulkan (ou seja, a parte variante da versão principal do Vulkan PRECISA ser zero).
  • PRECISAM oferecer suporte às seguintes extensões:
    • 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

Compatibilidade multimídia

  • As implementações de dispositivos PRECISAM permitir a reprodução de conteúdo de áudio bruto com as seguintes características:

    • Formatos de origem:PCM linear, 16 bits, 8 bits, flutuante
    • Canais:mono, estéreo, configurações multicanal válidas com até oito canais
    • Taxas de amostragem (em Hz)
      • 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 nas configurações de canal listadas anteriormente
      • 96000 em mono e estéreo
  • As implementações de dispositivos PRECISAM permitir a captura de conteúdo de áudio bruto. No mínimo, as implementações de dispositivos PRECISAM oferecer suporte às seguintes características:

    • Formato:PCM linear, 16 bits
    • Taxas de amostragem:8000, 11025, 16000, 44100, 48000 Hz
    • Canais:mono
  • As implementações de dispositivos DEVEM permitir a captura de conteúdo de áudio bruto com as seguintes características:

    • Formato:PCM linear, 16 bits e 24 bits
    • Taxas de amostragem:8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 Hz
    • Canais:quantos canais forem o número de microfones no dispositivo
  • As implementações de dispositivos PRECISAM oferecer suporte à reprodução e captura de áudio pela API libtinyalsav2.so, usando o dispositivo virtio-sound para acesso ao hardware, e PRECISAM oferecer suporte à API ALSA.

  • Os codificadores e decodificadores de vídeo PRECISAM oferecer suporte a pelo menos um formato de cor YUV420 8:8:8 planar ou semiplanar.

  • Os decodificadores e codificadores de vídeo PRECISAM oferecer suporte ao codec H.264 AVC.

  • As implementações de dispositivos PRECISAM oferecer suporte ao H.264 Main Profile Level 3.1 e ao perfil de referência. O suporte para ordenação de fatias arbitrárias (ASO, na sigla em inglês), ordenação de macroblocos flexíveis (FMO, na sigla em inglês) e fatias redundantes (RS, na sigla em inglês) é opcional.

  • Codificadores de vídeo:

    • PRECISAM oferecer suporte aos perfis de codificação de vídeo de definição padrão (SD) na tabela a seguir.
    • DEVEM oferecer suporte aos perfis de codificação de vídeo de alta definição (HD) conforme indicado na tabela a seguir.

      SD (baixa qualidade) SD (alta qualidade) HD 720p HD 1080p
      Resolução do vídeo 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
      Frame rate do vídeo 20 fps 30 fps 30 fps 30 fps
      Taxa de bits do vídeo 384 Kbps 2 Mbps 4 Mbps 10 Mbps
  • Decodificadores de vídeo:

    • PRECISAM oferecer suporte aos perfis de decodificação de vídeo HD 720p na tabela a seguir.
    • PRECISAM oferecer suporte aos perfis de decodificação de vídeo HD 1080p na tabela a seguir.

      SD (baixa qualidade) SD (alta qualidade) HD 720p HD 1080p
      Resolução do vídeo 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
      Frame rate do vídeo 30 fps 30 fps 60 fps 30 fps
      Taxa de bits do vídeo 800 Kbps 2 Mbps 8 Mbps 20 Mbps
  • As implementações de dispositivos PRECISAM oferecer suporte a codecs de mídia usando a API Video4Linux.

  • As implementações de dispositivos PRECISAM fornecer acesso a um decodificador de vídeo de hardware usando a API Video4Linux.

  • Todos os codificadores de vídeo e imagem acelerados por hardware PRECISAM oferecer suporte à codificação de frames das câmeras de hardware. As implementações de dispositivos PRECISAM fornecer acesso de hardware para codificação e decodificação de vídeo pelo virtio-media.

  • As implementações de dispositivos PRECISAM fornecer acesso a uma câmera de vídeo usando a API Video4Linux.

Sistema host (hipervisor e hardware)

Os requisitos desta seção se aplicam ao sistema host e ao ambiente do hipervisor.

Virtualização

  • Além dos dispositivos virtio exigidos pelo perfil principal, o sistema host PRECISA fornecer o seguinte:
    • virtio-gpu: para GPU e display virtuais
    • virtio-input: para encaminhar eventos de entrada (por exemplo, toque, teclado)
    • virtio-sound: para dispositivos de áudio virtuais
    • virtio-video ou virtio-media: para dispositivos de codec de vídeo virtuais

Entrada

  • O dispositivo PRECISA oferecer suporte a dispositivos de entrada e encaminhar eventos para sistemas de convidado usando virtio-input. O dispositivo DEVE oferecer suporte a entradas de ponteiro, botão e controle giratório.