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, a kombinacja strumieni odnosi się do co najmniej 1 zestawu strumieni skonfigurowanych w urządzeniu. Więcej informacji o tych funkcjach znajdziesz w artykule Zalecane konfiguracje strumieni i Kombinacje funkcji zapytań interfejsu API.
Implementacja referencyjna
Na stronie dostawcy dostępna jest referencyjna implementacja zalecanej konfiguracji strumieni i interfejsu 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 ani 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ą mieć również 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 mapą 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 strumienia.
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
: zalecana podgrupa konfiguracji strumieni do określonych zastosowań. Deklaracja zawiera bitmapy wskazujące sugerowane zastosowania w postaci[1 << PREVIEW | 1 << RECORD..]
. Przypadki użycia rozszerzają zwykłą czwórkę (format, szerokość, wysokość, dane wejściowe) o jeden dodatkowy element. Nieistniejące przypadki użycia publicznego ani żadne 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 tylko 1080p jest 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ępne tylko wtedy, gdy urządzenie obsługuje tę funkcję): zalecane konfiguracje strumienia danych z przestrzenią głębi 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 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 ich odpowiednie 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ń związanych z poszczególnymi dostawcami, maksymalna sugerowana wielkość nie powinna być mniejsza niż 97% wielkości obszaru 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 lub opóźnionymi formatami wyjściowymi. |
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 zastosowania
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, film HDR, UltraHDR, ultraszerokokątny zoom i stabilizacja jako elementy sterujące.
Wymagania
Aby obsługiwać interfejs API do zapytań dotyczących kombinacji funkcji, komponent HAL aparatu musi implementować wersję 3 interfejsu ICameraDevice
. Szczegółowe informacje znajdziesz w sekcji Wdrażanie.
Jeśli 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 usługachsessionParams
.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 wszystkie często używane konfiguracje 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 aparatu, 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