Android zawiera funkcje umożliwiające klientom kamery wybór optymalnych strumieni kamery w przypadku określonych 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 o tych funkcjach znajdziesz w artykule Zalecane konfiguracje strumieni i Kombinacje funkcji interfejsu API do zapytań.
Implementacja referencyjna
Dostępna jest referencyjna implementacja zalecanej konfiguracji strumieni przez dostawcę oraz interfejs API do zapytań o funkcje kombinacji strumieni. Implementację tę znajdziesz w pliku QCamera3HWI.cpp.
Zalecane konfiguracje strumieniowania
Dostawcy kamer mogą reklamować zalecane konfiguracje strumieni danych dla konkretnych przypadków użycia klientom kamer. Te zalecane konfiguracje strumienia, które są podzbiorami mapy StreamConfigurationMap, mogą pomóc klientom kamer w wybieraniu optymalnych konfiguracji.
Chociaż StreamConfigurationMap udostępnia klientom kamery wyczerpujące informacje o konfiguracji strumienia, nie zawiera żadnych informacji o wpływie wyboru jednego strumienia na koszt, moc i wydajność. Klienci kamer mogą swobodnie wybierać spośród wszystkich możliwych konfiguracji strumienia, ale w wielu przypadkach prowadzi to do korzystania przez klientów z nieoptymalnych konfiguracji kamer i aplikacji, co powoduje czasochłonne, wyczerpujące wyszukiwanie.
Na przykład niektóre przetworzone formaty YUV są wymagane i muszą być obsługiwane, ale urządzenie z kamerą może nie obsługiwać ich natywnie. Wymaga to dodatkowego przetwarzania w celu konwersji formatu i obniża wydajność. Rozmiar i odpowiednio współczynnik proporcji mogą też mieć podobny wpływ, przez co niektóre 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 lub inne wartości, których nie ma w mapie konfiguracji strumienia, nie mogą być uwzględnione w zalecanych mapach konfiguracji strumienia.
Wszystkie testy pozostają bez zmian i nie są łagodzone w zależności od zalecanych konfiguracji głównego nurtu.
Zalecane konfiguracje strumienia udostępniane przez implementację kamery są opcjonalne i klient kamery może je zignorować.
Implementacja
Aby wdrożyć tę funkcję, wykonaj te czynności.
Wpisy metadanych
Aby włączyć tę funkcję, interfejs HAL aparatu musi wypełnić te statyczne wpisy metadanych:
android.scaler.availableRecommendedStreamConfigurations
: zalecany podzbiór konfiguracji strumieni do określonych zastosowań. 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
.Na przykładzie poniżej pokazano tablicę z zalecaną konfiguracją strumienia dla urządzenia z kamerą, które obsługuje tylko rozdzielczości 4K i 1080p. Obie rozdzielczości są preferowane do nagrywania filmów, ale do podglądu zalecana jest tylko rozdzielczość 1080p.
[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ępne tylko w przypadku urządzeń obsługujących tę funkcję): zalecane konfiguracje strumienia danych z głębią. Podobnie jak w powyższym wpisie metadanych, bitmapa dodatkowego zastosowania wskazuje sugerowane zastosowania.Te informacje są przechowywane w tagu metadanych
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 odpowiadające im formaty wyjściowe.Te informacje są przechowywane w tagu metadanych
availableRecommendedDepthStreamConfigurations
.
Te informacje są dostępne dla klientów kamery za pomocą interfejsu API RecommendedStreamConfigurationMap.
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 musi zawierać tylko konfiguracje przepływu danych przetworzonych bez zatrzymywania, z formatami wyjściowymi takimi jak YUV_420_888 i IMPLEMENTATION_DEFINED . |
RECORD |
Plik wideo musi zawierać konfiguracje strumienia, które odpowiadają reklamowanym obsługiwanym profilom multimediów w formacie IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
Zrzut ekranu wideo musi zawierać konfiguracje strumienia o rozdzielczości co najmniej tak dużej jak maksymalna rozdzielczość RECORD i tylko z kombinacją formatu/przestrzeni danych BLOB + DATASPACE_JFIF (JPEG). Konfiguracje nie powinny powodować błędów w podglądzie i powinny działać z prędkością 30 FPS. |
SNAPSHOT |
Konfiguracje strumienia migawki muszą zawierać co najmniej 1 z rozmiarem zbliżonym do android.sensor.info.activeArraySize z kombinacją formatu/przestrzeni danych BLOB + DATASPACE_JFIF (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 obsługiwane) |
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 obsługiwane) |
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 podać dodatkowe zalecane strumienie konfiguracji do zastosowań związanych z Twoją implementacją.
Weryfikacja
Aby przetestować implementację zalecanych strumieni konfiguracji, uruchom te testy CTS i VTS:
Interfejs API do zapytań o kombinacje funkcji
Od Androida 15 platforma Androida udostępnia interfejs API do wysyłania zapytań o kombinacje funkcji. Ten interfejs API umożliwia klientom kamery wysyłanie zapytań o to, czy urządzenie obsługuje określoną kombinację funkcji. Ten interfejs API jest potrzebny, ponieważ modeluje on różne funkcje, takie jak 4K, 60 FPS, HDR, UltraHDR, Ultrawide Zoom i stabilizacja jako elementy sterujące.
Wymagania
Aby obsługiwać interfejs API do zapytań o kombinacje funkcji, komponent HAL aparatu musi implementować wersję 3 interfejsu ICameraDevice
. Szczegółowe informacje znajdziesz w sekcji Wdrażanie.
Gdy interfejs API jest obsługiwany, stabilizacja podglądu musi być niezależna od 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ć interfejsowi API wysyłanie zapytań o kombinacje funkcji, w wersji 3 interfejsu ICameraDevice
zaimplementuj te interfejsy API:
constructDefaultRequestSettings
: tworzy domyślne ustawienia 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ć implementacjiisStreamCombinationSupported
i dodać obsługę sprawdzania ustawieńCaptureRequest
przekazywanych w wartościsessionParams
.getSessionCharacteristics
: przyjmuje obsługiwaną kombinację strumieni z parametrami sesji i zwraca właściwości dotyczące sesji.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: wyświetla listę wszystkich często używanych konfiguracji sesji. Te konfiguracje są weryfikowane za pomocą 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óre są wyszukiwane przez interfejs API, znajdziesz w dokumentacji dotyczącej 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ć tych publicznych interfejsów API, aby zapytać o obsługiwane kombinacje funkcji na urządzeniu:
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 danego identyfikatora kamery, jeśliisCameraDeviceSetupSupported
zwracatrue
.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 z kamery, które mogą zawierać opóźnioną powierzchnię na potrzeby zapytań dotyczących kombinacji funkcji o niskiej latencji.SessionConfiguration
: klasa pomocnicza opisująca konfigurację sesji, w tym kombinacje strumieni i parametry sesji, które można wykorzystać w zapytaniach dotyczących kombinacji funkcji.
Weryfikacja
Aby zweryfikować implementację tej funkcji, wykonaj te testy VTS, CTS i ITS aparatu (CTS Verifier):
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ITS kamery
- cts/apps/CameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/CameraITS/tests/scene6/test_session_characteristics_zoom.py