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_maintenance1iVK_KHR_get_physical_device_properties2za pomocą bibliotekilibvulkan.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-gpudo akceleracji sprzętowej grafiki. Sterownik po stronie gościa POWINIEN używaćgfxstreamdo 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_importEGL_EXT_image_dma_buf_import_modifiersEGL_KHR_fence_syncEGL_KHR_image_baseEGL_KHR_wait_syncGL_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_bufferVK_EXT_external_memory_dma_bufVK_EXT_queue_family_foreignVK_KHR_external_memory_fdVK_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.soAPI, korzystając z urządzeniavirtio-soundw 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
virtiourządzeń wymaganych przez profil podstawowy system hosta MUSI zapewniać te elementy:virtio-gpu: w przypadku wirtualnego procesora graficznego i wyświetlaczavirtio-input: do przekazywania zdarzeń wejściowych (np. dotknięcia lub naciśnięcia klawisza).virtio-sound: w przypadku wirtualnych urządzeń audiovirtio-videolubvirtio-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.