Android udostępnia funkcje, które umożliwiają klientom aparatu aby wybrać optymalną kamerę strumieni do konkretnych przypadków użycia i zadbać o to, aby określone kombinacje strumieni są obsługiwane przez aparat. Konfiguracja strumienia odnosi się do strumień z kamery skonfigurowany w aparacie i kombinacja strumienia, która odnosi się do co najmniej 1 zbioru strumieni skonfigurowanych w kamerze. Więcej informacji: tych funkcji znajdziesz zalecane konfiguracje strumieni oraz Interfejs API do wysyłania zapytań o kombinacje funkcji.
Implementacja referencyjna
Zalecana konfiguracja jest wdrożona po stronie dostawcy. strumieni danych i interfejsu API do wysyłania zapytań dotyczących funkcji kombinacji strumieni. Znajdziesz to wdrożenie na poziomie QCamera3HWI.cpp,
Zalecane konfiguracje strumienia
Dostawcy aparatów fotograficznych mogą reklamować zalecane konfiguracje strumieni do określonych zastosowań do klientów kamer. Zalecane konfiguracje strumieni, podzbiory StreamConfigurationMap, może pomóc klientom korzystającym z aparatów wybrać optymalne konfiguracje.
Chociaż StreamConfigurationMap – dostarcza szczegółowych informacji o konfiguracji strumienia danych klientom kamery, nie zawiera żadnych informacji o wydajności, mocy obliczeniowej ani wydajności wpływu wyboru jednego strumienia na drugi. Klienci korzystający z aparatu mogą dowolnie wybrać ze wszystkich możliwych konfiguracji strumieni, ale w wielu przypadkach prowadzi to do klientów korzystających z nieoptymalnej konfiguracji kamery i tworzenia aplikacji, czasochłonne, wyczerpujące wyszukiwania.
Na przykład chociaż niektóre przetworzone formaty YUV są wymagane i muszą być aparat może nie mieć natywnej obsługi tych formatów. Ten powoduje dodatkowe przejście przetwarzania dla konwersji formatu i zmniejsza efektywność. Rozmiar i format obrazu również mogą być podobne. wpływa na poprawę preferencji poszczególnych wymiarów pod względem mocy skuteczność reklam.
Zalecane mapy konfiguracji strumienia nie muszą być wyczerpujące w porównaniu z StreamConfigurationMap, Sugerowane mapy konfiguracji muszą być zgodne z wymaganiami implementacji i może zawierać wszystkie formatów, rozmiarów lub innych wartości występujących w StreamConfigurationMap, Ukryte formaty, rozmiary i inne wartości, których nie ma w StreamConfigurationMap nie można uwzględnić w zalecanych mapach konfiguracji strumienia.
Wszystkie testy nie zmieniają się i nie są relaksowane w zależności od zalecanej skuteczności konfiguracji strumieni danych.
Zalecane konfiguracje strumienia dostarczane przez implementację kamery to są opcjonalne, a klient kamery może je zignorować.
Implementacja
Aby wdrożyć tę funkcję, wykonaj poniższe czynności.
Wpisy metadanych
Aby można było włączyć tę funkcję, HAL aparatu musi wypełnić ten statyczny wpisy metadanych:
android.scaler.availableRecommendedStreamConfigurations
: zalecany podzbiór konfiguracji strumieni do określonych przypadków użycia. deklaracja używa map bitowych wskazujących sugerowane przypadki użycia ma postać[1 << PREVIEW | 1 << RECORD..]
. Przypadki użycia wykraczają poza zakres krotką standardową (format, szerokość, wysokość, dane wejściowe) z jednym dodatkowym wpisem. Nieistniejące publiczne przypadki użycia lub wszelkie inne bity ustawione w zakresie[PUBLIC_END, VENDOR_START]
są zabronione.Te informacje są przechowywane w
availableRecommendedStreamConfigurations
.Poniższy przykład pokazuje tablicę dla zalecanego strumienia. dla kamery, która obsługuje tylko rozdzielczość 4K i 1080p. obie rozdzielczości są preferowane do nagrywania filmów, ale tylko 1080p sugerowane do podglądu.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(dostępna tylko wtedy, gdy jest obsługiwana przez urządzenie): zalecana przestrzeń danych o głębi konfiguracje strumienia sugerowane dla tego urządzenia z kamerą. Podobne do powyżej wpisu metadanych, dodatkowa mapa bitowa przypadku użycia wskazuje i przypadków użycia.Te informacje są przechowywane w
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(dostępny tylko wtedy, gdy jest obsługiwany przez urządzenie): mapowanie zalecanych formatów obrazów, które są sugerowane dla tego urządzenia kamery dla strumieni wejściowych, z odpowiednimi formatami wyjściowymi.Te informacje są przechowywane w
availableRecommendedDepthStreamConfigurations
.
Te informacje są dostępne dla klientów aparatu w recommendedStreamConfigurationMap – API.
Wymagane przypadki użycia
Musisz podać zalecane konfiguracje strumienia dla poniższych przypadków użycia i spełniać odpowiednie wymagania:
Przypadek użycia | Wymaganie |
---|---|
PREVIEW |
Podgląd może zawierać tylko niedziałające konfiguracje przetworzonych strumieni
z formatami wyjściowymi takimi jak YUV_420_888 czy
IMPLEMENTATION_DEFINED |
RECORD |
Rekord wideo musi zawierać konfiguracje strumienia pasujące do rozgłaszanego
obsługiwane profile multimediów
w formacie IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
Podsumowanie filmu musi zawierać konfiguracje strumienia, które mają co najmniej duże jak maksymalne rozdzielczości RECORD, a jedynie przy użyciu BLOB + Kombinacja formatu DATASPACE_JFIF/przestrzeni danych (JPEG). Konfiguracje nie powinno powodować błędów w podglądzie i powinna działać z szybkością 30 kl./s. |
SNAPSHOT |
Konfiguracje zrzutu dysku muszą zawierać co najmniej jedną z konfiguracją rozmiaru zamknięcia
do android.sensor.info.activeArraySize za pomocą BLOB +
Kombinacja formatu DATASPACE_JFIF/przestrzeni danych (JPEG). Uwzględnianie
ograniczenie formatu obrazu, dopasowania
i innych ograniczeń dotyczących konkretnego dostawcy,
obszar maksymalnego sugerowanego rozmiaru nie powinien być mniejszy niż 97% czujnika
rozmiaru tablicy. |
ZSL (jeśli jest obsługiwana) |
Zalecane konfiguracje strumienia wejściowego (jeśli go obsługuje) mogą być reklamowane wyłącznie razem z innymi przetwarzanymi lub zawieszającymi się wynikami formatów reklam. |
RAW (jeśli jest obsługiwana) |
Zalecane konfiguracje nieprzetworzonych strumieni, jeśli kamera je obsługuje musi zawierać wyłącznie formaty wyjściowe oparte na RAW. |
Inne przypadki użycia
Możesz dodać dodatkowe zalecane strumienie konfiguracji na potrzeby przypadków użycia do Twojej implementacji.
Weryfikacja
Aby przetestować wdrożenie zalecanych strumieni konfiguracji, uruchom następujące testy CTS i VTS:
Punkt końcowy:
ExtendedCameraCharacteristicsTest.java
Konwersja wideo po wyświetleniu:
VtsHalCameraProviderV2_4TargetTest.cpp
Interfejs API do wysyłania zapytań dotyczących kombinacji funkcji
Począwszy od Androida 15, platforma Android zapewnia API do wysyłania zapytań o kombinacje funkcji. Ten interfejs API pozwala klientom aparatu zapytać, czy urządzenie może obsługiwać określoną kombinację funkcji. Ten interfejs API jest ponieważ interfejs Camera2 API modeluje różne funkcje, takie jak 4K, 60 kl./s Film HDR, UltraHDR, zoom ultraszerokokątny i stabilizacja jako elementy sterujące ortogonalne.
Wymagania
Aby interfejs API mógł wysyłać zapytania o kombinacje funkcji, interfejs HAL kamery musi zaimplementować
wersji 3 interfejsu ICameraDevice
. Więcej informacji:
Implementacja.
Jeśli interfejs API jest obsługiwany, stabilizacja podglądu musi być ortogonalna do
i innych funkcji. Oznacza to, że w przypadku aparatu obsługującego podgląd
stabilizacja, wartość zwrotna isStreamCombinationWithSettingsSupported
dla danej kombinacji musi mieć tę samą wartość w przypadku stabilizacji w podglądzie
jest włączony lub wyłączony. Zmniejsza to obszar wyszukiwania na potrzeby zapytań zawierających kombinację cech.
Dodatkowo w przypadku klasy wydajności multimediów 15 główny tylny aparat musi: obsługuje 10-bitową stabilizację podglądu HLG10 w rozdzielczości 1080p i 720p. podgląd i maksymalny rozmiar plików JPEG. Więcej informacji na temat tych wymagań znajdziesz w artykule (sekcja) 2.2.7.2. Aparat obrony CDD.
Implementacja
Aby umożliwić interfejs API do wysyłania zapytań dotyczących kombinacji funkcji, zaimplementuj te
interfejsy API zapytań w zakresie kombinacji funkcji w wersji 3
ICameraDevice
:
constructDefaultRequestSettings
: Tworzy ustawienia domyślne dla określonego typuCaptureRequest
. HAL może użyć funkcjiICameraDeviceSession::constructDefaultRequestSettings
implementacji.isStreamCombinationWithSettingsSupported
: Sprawdza, czy urządzenie obsługuje określoną kombinację strumieni z kamery z parametrami sesji i dodatkowymi kluczamiCaptureRequest
. Musi zwracatrue
w przypadku obsługiwanych kombinacji, afalse
w przypadku nieobsługiwanych kombinacji kombinacji cech. HAL może używać funkcjiisStreamCombinationSupported
i dodaj obsługę sprawdzania ustawieńCaptureRequest
są przekazywane wsessionParams
.getSessionCharacteristics
: przyjmuje obsługiwane transmisję strumieniową z parametrami sesji i zwraca do właściwości sesji.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: Wyświetla listę wszystkich często używanych konfiguracji sesji. Te konfiguracje są weryfikowane w ramach testów zgodności.
W przypadku wersji interfejsu ICameraDevice
starszych niż 3 plik HAL
powinien wdrożyć
isStreamCombinationSupported
.
.
Więcej informacji o kombinacjach funkcji, których dotyczy zapytanie, znajdziesz w
dokumentacja sessionConfigurationQueryVersion
w
system/media/camera/docs/metadata_definitions.xml
Przykłady referencyjnej implementacji tej funkcji znajdziesz w artykule
hardware/google/camera/devices/EmulatedCamera/hwl/
Publiczne interfejsy API
Aplikacje mogą używać poniższych publicznych interfejsów API do wysyłania zapytań dotyczących obsługiwanych kombinacji funkcji dla urządzenia:
CameraDevice.CameraDeviceSetup
: Ograniczona reprezentacja właściwościCameraDevice
, której można używać do wysyłania zapytań dotyczących funkcji nie wymaga instancjiCameraDevice
.getCameraDeviceSetup
: Pobiera obiektCameraDeviceSetup
dla podanego identyfikatora kamery, jeśliisCameraDeviceSetupSupported
zwracatrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: Obsługuje zapytania dotyczące kombinacji cech, jeśli ta wartość toVANILLA_ICE_CREAM
lub wyższą.OutputConfiguration
: Klasa opisująca dane wyjściowe kamery, która może zawierać odroczoną powierzchnię dla zapytań dotyczących kombinacji cech o krótkim czasie oczekiwania.SessionConfiguration
: Klasa narzędzia opisująca konfigurację sesji, w tym strumień kombinacji i parametrów sesji, które mogą być wykorzystywane w przypadku funkcji zapytań kombinacji.
Weryfikacja
Aby sprawdzić poprawność implementacji tej funkcji, użyj tych elementów: VTS, CTS Testy kamer ITS (CTS Verifier):
VTS
wskaźnik CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
Kamera IT
- cts/apps/CameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/CameraITS/tests/scene6/test_session_characteristics_zoom.py