Requisitos de mídia da SDV

As palavras-chave "PRECISA", "NÃO PODE", "DEVE" e "ALTAMENTE RECOMENDADO" nesta página devem ser interpretadas conforme descrito na RFC 2119.

Sistema convidado (imagem de VM)

Os requisitos nesta seção se aplicam ao sistema convidado.

Memória

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

Interfaces binárias de aplicativos

Implementações de dispositivos:

  • Precisa ser compatível com uma ou mais ABIs do Android NDK definidas.
  • É necessário usar a mesma ABI do Android NDK para todas as imagens de VM no mesmo dispositivo.
  • Precisa ser compatível com a origem (por exemplo, com o cabeçalho) e com o binário (para a ABI) de cada biblioteca obrigatória na lista a seguir.
  • PRECISA disponibilizar todas as seguintes bibliotecas, que fornecem APIs nativas, para apps de veículos definidos por software (SDV, na sigla em inglês):

    • libc (biblioteca C)
    • libdl (vinculador dinâmico)
    • libdrm.so (biblioteca de espaço do usuário do Direct Rendering Manager)
    • libgbm.so (gerenciamento genérico de buffer)
    • libEGL.so (gerenciamento de superfície nativo do OpenGL)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (geração de registros do Android)
    • libtinyalsav2.so (gravação e reprodução de áudio)
    • libvulkan.so (Vulkan)
  • NÃO adicione nem remova as funções públicas das bibliotecas nativas anteriores.

  • PRECISA 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 precisem estar presentes, o OpenGL ES descreve com mais detalhes os requisitos para quando a implementação completa de cada função correspondente é esperada.

  • É OBRIGATÓRIO 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 precisem estar presentes, o Vulkan descreve com mais detalhes os requisitos para quando a implementação completa de cada função correspondente é esperada.

  • DEVE ser criado usando o código-fonte e os arquivos de cabeçalho disponíveis no Android Open Source Project upstream.

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 convidado PRECISA incluir suporte para eventos de entrada encaminhados do sistema host usando virtio-input.

OpenGL ES

Implementações de dispositivos:

  • PRECISA identificar corretamente as versões compatíveis do OpenGL ES (1.1, 2.0, 3.0, 3.1, 3.2) usando as APIs nativas.
  • PRECISAM incluir suporte para todas as APIs nativas correspondentes em todas as versões do OpenGL ES compatíveis.
  • PRECISA ser compatível com OpenGL ES 1.1 e 2.0.
  • É ALTAMENTE RECOMENDADO que ofereçam suporte ao OpenGL ES 3.1.
  • DEVE ser compatível com o OpenGL ES 3.2.
  • É OBRIGATÓRIO informar usando as APIs gerenciadas e nativas do OpenGL ES qualquer outra extensão do OpenGL ES implementada. Por outro lado, NÃO é OBRIGATÓRIO informar strings de extensão que não são compatíveis.
  • PRECISA 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

É ALTAMENTE RECOMENDÁVEL que as implementações de dispositivos usem a biblioteca ANGLE com back-end Vulkan para implementar o OpenGL ES.

Vulkan

Implementações de dispositivos:

  • É ALTAMENTE RECOMENDADO incluir suporte para Vulkan 1.3.
  • NÃO PODE oferecer suporte a uma versão variante do Vulkan. Ou seja, a parte variante da versão principal do Vulkan precisa ser zero.
  • PRECISA 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, ponto 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
      • 96.000 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 ser compatíveis com as seguintes características:

    • Formato:PCM linear, 16 bits
    • Taxas de amostragem:8.000, 11.025, 16.000, 44.100, 48.000 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 de 16 e 24 bits
    • Taxas de amostragem:8.000, 11.025, 16.000, 22.050, 24.000, 32.000, 44.100, 48.000 Hz
    • Canais:tantos canais quanto 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 ser compatíveis com pelo menos um formato de cor YUV420 8:8:8 planar ou semiplanar.

  • Os decodificadores e codificadores de vídeo precisam ser compatíveis com o codec H.264 AVC.

  • As implementações de dispositivos precisam ser compatíveis com o nível 3.1 do perfil principal H.264 e o perfil de referência. O suporte para ordenação arbitrária de segmentos (ASO), ordenação flexível de macroblocos (FMO) e segmentos redundantes (RS) é opcional.

  • Codificadores de vídeo:

    • PRECISA oferecer suporte aos perfis de codificação de vídeo de definição padrão (SD) na tabela a seguir.
    • PRECISA ser compatível com os perfis de codificação de vídeo em alta definição (HD) indicados 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 1.280 x 720 px 1920 x 1080 px
      Frame rate do vídeo 20 qps 30 fps 30 fps 30 fps
      Taxa de bits de vídeo 384 Kbps 2 Mbps 4 Mbps 10 Mbps
  • Decodificadores de vídeo:

    • PRECISA oferecer suporte aos perfis de decodificação de vídeo HD 720p na tabela a seguir.
    • PRECISA ser compatível com os 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 1.280 x 720 px 1920 x 1080 px
      Frame rate do vídeo 30 fps 30 fps 60 qps 30 fps
      Taxa de bits de 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 por 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 usando 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 nesta 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 virtual e tela
    • 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 virtual

Entrada

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