Android zawiera funkcje umożliwiające klientom kamery wybieranie optymalnych strumieni kamery w przypadku konkretnych zastosowań oraz zapewnienie, że określone kombinacje strumieni są obsługiwane przez urządzenie z kamerą. Konfiguracja strumienia odnosi się do pojedynczego strumienia kamery skonfigurowanego w urządzeniu kamery, a kombinacja strumieni odnosi się do co najmniej 1 zestawu strumieni skonfigurowanych w urządzeniu kamery. 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. Implementację tę znajdziesz w pliku QCamera3HWI.cpp.
Zalecane konfiguracje strumienia
Dostawcy aparatów fotograficznych mogą reklamować zalecane konfiguracje strumieni do określonych zastosowań do klientów kamer. Te zalecane konfiguracje strumienia, które są podzbiorami mapy StreamConfigurationMap, mogą pomóc klientom kamer w wybieraniu optymalnych konfiguracji.
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. W efekcie konieczne jest przeprowadzenie dodatkowego przetwarzania w celu konwersji formatu, co zmniejsza wydajność. Rozmiar i odpowiednio współczynnik proporcji mogą mieć również podobny wpływ, co powoduje, że określone wymiary są preferowane pod względem mocy i wydajności.
Zaleca się, aby mapy konfiguracji strumienia nie były wyczerpujące w porównaniu z StreamConfigurationMap. Sugerowane mapy konfiguracji muszą spełniać wymagania podane w sekcji implementacja. Mogą one zawierać dowolne dostępne formaty, rozmiary lub inne wartości znalezione 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 pozostają niezmienione i nie są w nich luźne w zależności od zalecanego 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 zawiera bitmapy wskazujące sugerowane zastosowania w postaci[1 << PREVIEW | 1 << RECORD..]
. Przypadki użycia rozszerzają zwykłą (format, szerokość, wysokość, dane wejściowe) tuplę o jeden dodatkowy element. Nieistniejące przypadki użycia publicznego lub inne bity ustawione w zakresie[PUBLIC_END, VENDOR_START]
są zabronione.Te informacje są przechowywane w tagu metadanych
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 zaproponowane 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ą. Podobnie jak w powyższym wpisie metadanych, bitmapa dodatkowego zastosowania wskazuje sugerowane zastosowania.Te informacje są przechowywane w
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(dostępne tylko w przypadku urządzeń obsługujących tę funkcję): mapowanie zalecanych formatów obrazów sugerowanych dla tego urządzenia z kamerą w przypadku strumieni wejściowych na ich odpowiednie formaty wyjściowe.Te informacje są przechowywane w tagu metadanych
availableRecommendedDepthStreamConfigurations
.
Te informacje są dostępne dla klientów aparatu w recommendedStreamConfigurationMap – API.
Wymagane przypadki użycia
W przypadku tych zastosowań musisz podać zalecane konfiguracje transmisji i spełnić 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). Biorąc pod uwagę ograniczenia dotyczące formatu obrazu, wyrównania i innych ograniczeń narzuconych przez producenta, sugerowany maksymalny rozmiar nie powinien być mniejszy niż 97% obszaru rozmiaru matrycy czujnika. |
ZSL (jeśli jest obsługiwana) |
Zalecane konfiguracje strumienia danych wejściowych (jeśli są obsługiwane przez urządzenie z kamerą) muszą być reklamowane tylko z innymi przetworzonymi formatami wyjściowymi lub formatami, które powodują zatrzymywanie obrazu. |
RAW (jeśli jest obsługiwana) |
Jeśli jest to obsługiwane przez urządzenie z kamerą, zalecane konfiguracje strumienia RAW muszą zawierać tylko formaty wyjściowe 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
Od Androida 15 platforma Androida udostępnia interfejs 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
. Szczegółowe informacje znajdziesz w sekcji Wdrażanie.
Jeśli interfejs API jest obsługiwany, stabilizacja podglądu musi być ortogonalna do
i innych funkcji. Oznacza to, że w przypadku urządzenia z kamerą, które obsługuje stabilizację podglądu, zwracana wartość isStreamCombinationWithSettingsSupported
w przypadku danej kombinacji musi być taka sama, gdy stabilizacja podglądu jest włączona lub wyłączona. Zmniejsza to przestrzeń wyszukiwania w przypadku zapytań dotyczących kombinacji funkcji.
Dodatkowo w przypadku klasy wydajności multimediów 15 główna tylna kamera musi obsługiwać stabilizację podglądu z podglądem 10-bitowym HLG10 w przypadku podglądu 1080p i 720p oraz plików JPEG o maksymalnym rozmiarze. Więcej informacji o tych wymaganiach znajdziesz w sekcji 2.2.7.2. Kameraz 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żywać implementacjiICameraDeviceSession::constructDefaultRequestSettings
.isStreamCombinationWithSettingsSupported
: sprawdza, czy urządzenie obsługuje określoną kombinację strumieni kamer z parametrami sesji i dodatkowymi kluczamiCaptureRequest
. Musi zwracać wartośćtrue
w przypadku obsługiwanych kombinacji i wartośćfalse
w przypadku nieobsługiwanych kombinacji funkcji. HAL może używać funkcjiisStreamCombinationSupported
i dodaj wsparcie w zakresie 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 interfejs HAL powinien implementować metodę isStreamCombinationSupported
.
Więcej informacji o kombinacjach funkcji, których dotyczy zapytanie, znajdziesz w
dokumentacja sessionConfigurationQueryVersion
w
system/media/camera/docs/metadata_definitions.xml
Implementację referencyjną 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
: ograniczone odwzorowanie typuCameraDevice
, które można wykorzystać do zapytania o kombinacje funkcji bez konieczności tworzenia instancji typuCameraDevice
.getCameraDeviceSetup
: Pobiera obiektCameraDeviceSetup
dla podanego identyfikatora kamery, jeśliisCameraDeviceSetupSupported
zwraca wartośćtrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: obsługuje zapytania o kombinacje funkcji, jeśli ta wartość wynosiVANILLA_ICE_CREAM
lub więcej.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