Требования к носителям SDV

Ключевые слова MUST, MUST NOT, SHOULD и STRONGLY RECOMMENDED в этом документе следует интерпретировать в соответствии с RFC 2119 .

Гостевая система (образ виртуальной машины)

Требования, изложенные в этом разделе, относятся к гостевой системе.

Память

Система ОБЯЗАТЕЛЬНО должна предоставлять минимум 2 ГБ оперативной памяти на каждую виртуальную машину.

Двоичные интерфейсы приложений

Варианты реализации устройств:

  • Должен быть совместим с одним или несколькими определенными ABI Android NDK .
  • Для всех образов виртуальных машин на одном устройстве необходимо использовать один и тот же ABI Android NDK .
  • Необходимо обеспечить совместимость исходного кода (например, совместимость заголовочных файлов) и бинарную совместимость (по ABI) с каждой из необходимых библиотек в следующем списке.
  • Необходимо обеспечить доступность для приложений SDV всех следующих библиотек, предоставляющих собственные API:
    • libc (библиотека на языке C)
    • libdl (динамический компоновщик)
    • libdrm.so (Библиотека пользовательского пространства Direct Rendering Manager)
    • libgbm.so (Универсальное управление буфером)
    • libEGL.so (собственное управление поверхностями OpenGL)
    • 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)
  • Не допускается добавление или удаление общедоступных функций для указанных выше собственных библиотек.
  • Необходимо экспортировать все символы функций OpenGL ES 3.1 и Android Extension Pack, определенные в NDK, через библиотеку libGLESv3.so. Обратите внимание, что хотя все символы ДОЛЖНЫ присутствовать, OpenGL ES более подробно описывает требования к полной реализации каждой соответствующей функции.
  • Необходимо экспортировать основные символы функций Vulkan 1.1, а также расширения VK_KHR_surface , VK_KHR_swapchain , VK_KHR_maintenance1 и VK_KHR_get_physical_device_properties2 через библиотеку libvulkan.so . Обратите внимание, что хотя все символы ДОЛЖНЫ присутствовать, Vulkan более подробно описывает требования, когда ожидается полная реализация каждой соответствующей функции.
  • Сборка должна производиться с использованием исходного кода и заголовочных файлов, доступных в основном проекте Android Open Source Project.

Графика

  • Система ОБЯЗАТЕЛЬНО должна использовать virtio-gpu для аппаратного ускорения графики. Драйвер гостевой системы ДОЛЖЕН использовать gfxstream для рендеринга.

Вход

Гостевая система ОБЯЗАТЕЛЬНО должна поддерживать входные события, пересылаемые из хост-системы с помощью virtio-input .

OpenGL ES

Варианты реализации устройств:

  • Необходимо корректно определить поддерживаемые версии OpenGL ES (1.1, 2.0, 3.0, 3.1, 3.2) через собственные API.
  • ОБЯЗАТЕЛЬНО должна включать поддержку всех соответствующих нативных API для каждой поддерживаемой версии OpenGL ES.
  • ОБЯЗАТЕЛЬНО должна поддерживать OpenGL ES 1.1 и 2.0.
  • Настоятельно рекомендуется поддерживать OpenGL ES 3.1.
  • Должна поддерживать OpenGL ES 3.2.
  • Необходимо сообщать об использовании управляемых API OpenGL ES и собственных 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 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-битный, с плавающей запятой.
    • Каналы: моно, стерео, поддерживаются многоканальные конфигурации с количеством каналов до восьми.
    • Частота дискретизации (в Гц):
      • 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 в указанных выше конфигурациях каналов.
      • 96000 в моно и стерео режимах
  • Устройства ДОЛЖНЫ позволять захват необработанного аудиоконтента. Как минимум, устройства ДОЛЖНЫ поддерживать следующие характеристики:

    • Формат: линейный PCM, 16-бит
    • Частота дискретизации: 8000, 11025, 16000, 44100, 48000 Гц
    • Каналы: Моно
  • Встроенные устройства ДОЛЖНЫ позволять захват необработанного аудиоконтента со следующими характеристиками:

    • Формат: линейный PCM, 16-битный и 24-битный
    • Частота дискретизации: 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 Гц
    • Каналы: Количество каналов равно количеству микрофонов на устройстве.
  • Реализации устройств ДОЛЖНЫ обеспечивать поддержку воспроизведения и захвата звука через API libtinyalsav2.so , используя устройство virtio-sound для доступа к оборудованию, и ДОЛЖНЫ поддерживать API ALSA .

  • Видеокодеры и декодеры ДОЛЖНЫ поддерживать как минимум один из планарных или полупланарных цветовых форматов YUV420 8:8:8.

  • Видеодекодеры и кодеры ОБЯЗАТЕЛЬНО должны поддерживать кодек H.264 AVC.

  • В устройствах ОБЯЗАТЕЛЬНО должна поддерживаться основная модель H.264 уровня 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 кадров в секунду 30 кадров в секунду 30 кадров в секунду 30 кадров в секунду
      Видеобитрейт 384 Кбит/с 2 Мбит/с 4 Мбит/с 10 Мбит/с
  • Видеодекодеры:

    • Необходимо поддерживать профили декодирования видео HD 720p, указанные в следующей таблице.
    • Необходимо поддерживать профили декодирования видео HD 1080p, указанные в следующей таблице.

      SD (низкое качество) SD (высокое качество) HD 720p HD 1080p
      Разрешение видео 320 x 240 пикселей 720 x 480 пикселей 1280 x 720 пикселей 1920 x 1080 пикселей
      частота кадров видео 30 кадров в секунду 30 кадров в секунду 60 кадров в секунду 30 кадров в секунду
      Видеобитрейт 800 Кбит/с 2 Мбит/с 8 Мбит/с 20 Мбит/с
  • Внедрение устройств ОБЯЗАТЕЛЬНО должно обеспечивать поддержку медиакодеков, использующих API Video4Linux.

  • В реализациях устройств ОБЯЗАТЕЛЬНО должен быть обеспечен доступ к аппаратному видеодекодеру с использованием API Video4Linux.

  • Все аппаратные кодировщики видео и изображений ДОЛЖНЫ поддерживать кодирование кадров с аппаратных камер. Реализации устройств ДОЛЖНЫ обеспечивать аппаратный доступ для кодирования и декодирования видео через virtio-media .

  • Внедрение устройств ОБЯЗАТЕЛЬНО должно обеспечивать доступ к видеокамере с использованием API Video4Linux.

Хост-система (гипервизор и аппаратное обеспечение)

Требования, изложенные в этом разделе, относятся к хост-системе и среде гипервизора.

Виртуализация

  • Помимо устройств virtio , необходимых для основного профиля, хост-система ДОЛЖНА обеспечивать следующее:
    • virtio-gpu : Для виртуального графического процессора и дисплея
    • virtio-input : Для пересылки событий ввода (например, касания, клавиатуры)
    • virtio-sound : Для виртуальных аудиоустройств
    • virtio-video или virtio-media : для виртуальных видеокодеков.

Вход

  • Устройство ДОЛЖНО поддерживать устройства ввода и пересылать события в гостевые системы с помощью virtio-input . Устройство ДОЛЖНО поддерживать ввод с помощью указателя, кнопок и поворотного регулятора.