Wymagania dotyczące multimediów SDV

Słowa MUSI, NIE MOŻE, POWINIEN i ZDECYDOWANIE ZALECANE w tym dokumencie należy interpretować zgodnie z opisem w RFC 2119.

System gościa (obraz maszyny wirtualnej)

Wymagania w tej sekcji dotyczą systemu gościa.

Pamięć

System MUSI zapewniać co najmniej 2 GB pamięci na maszynę wirtualną.

Interfejsy binarne aplikacji

Implementacje urządzeń:

  • MUSI być zgodna z co najmniej jednym zdefiniowanym interfejsem ABI Android NDK.
  • MUSI używać tego samego interfejsu ABI Android NDK w przypadku wszystkich obrazów maszyn wirtualnych na tym samym urządzeniu.
  • MUSI być zgodna ze źródłem (np. z nagłówkiem) i binarnie (z interfejsem ABI) z każdą wymaganą biblioteką z tej listy.
  • MUSI udostępniać aplikacjom SDV wszystkie te biblioteki z natywnymi interfejsami API:
    • libc (biblioteka C)
    • libdl (dynamiczny linker)
    • libdrm.so (biblioteka przestrzeni użytkownika Direct Rendering Manager)
    • libgbm.so (Generic Buffer Management)
    • libEGL.so (natywne zarządzanie powierzchnią OpenGL)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (logowanie w Androidzie)
    • libtinyalsav2.so (nagrywanie i odtwarzanie dźwięku)
    • libvulkan.so (Vulkan)
  • NIE WOLNO dodawać ani usuwać funkcji publicznych w przypadku poprzednich bibliotek natywnych.
  • MUSI eksportować wszystkie symbole funkcji OpenGL ES 3.1 i pakietu rozszerzeń Androida, zgodnie z definicją w NDK, za pomocą biblioteki libGLESv3.so. Pamiętaj, że chociaż wszystkie symbole MUSZĄ być obecne, OpenGL ES szczegółowo opisuje wymagania dotyczące tego, kiedy oczekiwane jest pełne wdrożenie każdej odpowiedniej funkcji.
  • MUSI eksportować podstawowe symbole funkcji interfejsu Vulkan 1.1, a także rozszerzenia VK_KHR_surface, VK_KHR_swapchain, VK_KHR_maintenance1VK_KHR_get_physical_device_properties2 za pomocą biblioteki libvulkan.so. Pamiętaj, że wszystkie symbole MUSZĄ być obecne. Vulkan szczegółowo opisuje wymagania dotyczące pełnej implementacji każdej odpowiedniej funkcji.
  • POWINIEN być zbudowany przy użyciu kodu źródłowego i plików nagłówkowych dostępnych w projekcie Android Open Source Project.

Grafika

  • System MUSI używać virtio-gpu do akceleracji sprzętowej grafiki. Sterownik po stronie gościa POWINIEN używać gfxstream do renderowania.

Dane wejściowe

System gościa MUSI obsługiwać zdarzenia wejściowe przekazywane z systemu hosta za pomocą virtio-input.

OpenGL ES

Implementacje urządzeń:

  • MUSI prawidłowo identyfikować obsługiwane wersje OpenGL ES (1.1, 2.0, 3.0, 3.1, 3.2) za pomocą natywnych interfejsów API.
  • MUSI obsługiwać wszystkie odpowiednie natywne interfejsy API dla każdej obsługiwanej wersji OpenGL ES.
  • Musi obsługiwać zarówno OpenGL ES 1.1, jak i 2.0.
  • Zdecydowanie zalecamy obsługę OpenGL ES 3.1.
  • POWINNO obsługiwać OpenGL ES 3.2.
  • MUSZĄ zgłaszać za pomocą interfejsów API zarządzanych przez OpenGL ES i interfejsów API natywnych wszelkie inne zaimplementowane rozszerzenia OpenGL ES, a z kolei NIE MOGĄ zgłaszać ciągów rozszerzeń, których nie obsługują.
  • MUSI obsługiwać te rozszerzenia:
    • 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

Zdecydowanie zalecamy, aby implementacje urządzeń korzystały z biblioteki ANGLE z backendem Vulkan do implementacji OpenGL ES.

Vulkan

Implementacje urządzeń:

  • Zdecydowanie zalecamy obsługę interfejsu Vulkan 1.3.
  • NIE MOŻE obsługiwać wersji wariantu Vulkana (czyli część wariantu wersji podstawowej Vulkana MUSI wynosić zero).
  • MUSI obsługiwać te rozszerzenia:
    • 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

Zgodność z multimediami

  • Urządzenia MUSZĄ umożliwiać odtwarzanie surowych treści audio o tych cechach:

    • Formaty źródłowe: Linear PCM, 16-bitowy, 8-bitowy, zmiennoprzecinkowy
    • Kanały: mono, stereo, prawidłowe konfiguracje wielokanałowe z maksymalnie 8 kanałami
    • Częstotliwości próbkowania (w Hz):
      • 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 w konfiguracjach kanałów wymienionych wcześniej
      • 96 000 w mono i stereo
  • Urządzenia MUSZĄ umożliwiać rejestrowanie surowych treści audio. Urządzenia MUSZĄ obsługiwać co najmniej te funkcje:

    • Format: Linear PCM, 16-bit
    • Częstotliwości próbkowania: 8000, 11025, 16000, 44100, 48000 Hz
    • Kanały: mono
  • Urządzenia powinny umożliwiać rejestrowanie surowych treści audio o tych cechach:

    • Format: Linear PCM, 16-bitowy i 24-bitowy
    • Częstotliwości próbkowania: 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 Hz
    • Kanały: tyle kanałów, ile mikrofonów ma urządzenie.
  • Implementacje urządzeń MUSZĄ obsługiwać odtwarzanie i nagrywanie dźwięku za pomocą interfejsu libtinyalsav2.so API, korzystając z urządzenia virtio-sound w celu uzyskania dostępu do sprzętu, i MUSZĄ obsługiwać interfejs ALSA API.

  • Koder i dekoder wideo MUSZĄ obsługiwać co najmniej jeden z tych formatów kolorów: płaski lub półpłaski YUV420 8:8:8.

  • Dekodery i enkodery wideo MUSZĄ obsługiwać kodek H.264 AVC.

  • Urządzenia MUSZĄ obsługiwać profil główny H.264 na poziomie 3.1 i profil podstawowy. Obsługa dowolnego porządkowania wycinków (ASO), elastycznego porządkowania makrobloków (FMO) i nadmiarowych wycinków (RS) jest opcjonalna.

  • Kodery wideo:

    • MUSI obsługiwać profile kodowania wideo w standardowej rozdzielczości (SD) w tabeli poniżej.
    • POWINNO obsługiwać profile kodowania wideo w wysokiej rozdzielczości (HD) zgodnie z tabelą poniżej.

      SD (niska jakość) SD (wysoka jakość) HD 720p HD 1080p
      Rozdzielczość wideo 320 x 240 pikseli 720 x 480 pikseli 1280 x 720 pikseli 1920 x 1080 pikseli
      Liczba klatek filmu 20 kl./s 30 kl./s 30 kl./s 30 kl./s
      Szybkość transmisji bitów wideo 384 Kb/s 2 Mb/s 4 Mb/s 10 Mb/s
  • Dekodery wideo:

    • MUSI obsługiwać profile dekodowania wideo HD 720p w tabeli poniżej.
    • MUSI obsługiwać profile dekodowania wideo HD 1080p w tabeli poniżej.

      SD (niska jakość) SD (wysoka jakość) HD 720p HD 1080p
      Rozdzielczość wideo 320 x 240 pikseli 720 x 480 pikseli 1280 x 720 pikseli 1920 x 1080 pikseli
      Liczba klatek filmu 30 kl./s 30 kl./s 60 kl./s 30 kl./s
      Szybkość transmisji bitów wideo 800 Kb/s 2 Mb/s 8 Mb/s 20 Mb/s
  • Implementacje urządzeń MUSZĄ obsługiwać kodeki multimediów za pomocą interfejsu Video4Linux API.

  • Implementacje urządzeń MUSZĄ zapewniać dostęp do sprzętowego dekodera wideo za pomocą interfejsu Video4Linux API.

  • Wszystkie akcelerowane sprzętowo kodery wideo i obrazów MUSZĄ obsługiwać kodowanie klatek z kamer sprzętowych. Implementacje urządzeń MUSZĄ zapewniać dostęp do sprzętu do kodowania i dekodowania wideo za pomocą interfejsu virtio-media.

  • Implementacje urządzeń MUSZĄ zapewniać dostęp do kamery wideo za pomocą interfejsu Video4Linux API.

System hosta (hiperwizor i sprzęt)

Wymagania w tej sekcji dotyczą systemu hosta i środowiska hiperwizora.

Wirtualizacja

  • Oprócz virtio urządzeń wymaganych przez profil podstawowy system hosta MUSI zapewniać te elementy:
    • virtio-gpu: w przypadku wirtualnego procesora graficznego i wyświetlacza
    • virtio-input: do przekazywania zdarzeń wejściowych (np. dotknięcia lub naciśnięcia klawisza).
    • virtio-sound: w przypadku wirtualnych urządzeń audio
    • virtio-video lub virtio-media: w przypadku wirtualnych urządzeń kodeka wideo

Dane wejściowe

  • Urządzenie MUSI obsługiwać urządzenia wejściowe i przekazywać zdarzenia do systemów gości za pomocą virtio-input. Urządzenie POWINNO obsługiwać wprowadzanie danych za pomocą wskaźnika, przycisków i kontrolera obrotowego.