Android zawiera funkcje, które umożliwiają klientom kamery wybieranie optymalnych strumieni kamery w przypadku konkretnych zastosowań i zapewniają, że określone kombinacje strumieni są obsługiwane przez urządzenie kamery. Konfiguracja strumienia to pojedynczy strumień z kamery skonfigurowany na urządzeniu z kamerą, a kombinacja strumieni to co najmniej 1 zestaw strumieni skonfigurowany na urządzeniu z kamerą. Więcej informacji o tych funkcjach znajdziesz w artykule Zalecane konfiguracje strumieni i Interfejs API do wysyłania zapytań o kombinacje funkcji.
Implementacja referencyjna
Istnieje implementacja referencyjna po stronie dostawcy zalecanych strumieni konfiguracji i interfejsu API do wysyłania zapytań o funkcje kombinacji strumieni. Tę implementację znajdziesz w pliku QCamera3HWI.cpp.
Zalecane konfiguracje strumieni
Dostawcy kamer mogą reklamować zalecane konfiguracje strumieni w przypadku konkretnych zastosowań klientom kamer. Te zalecane konfiguracje strumieniowania, które są podzbiorami StreamConfigurationMap, mogą pomóc klientom kamer w wyborze optymalnych konfiguracji.
Chociaż StreamConfigurationMap dostarcza klientom kamery wyczerpujących informacji o konfiguracji strumienia, nie zawiera żadnych informacji o wydajności, zużyciu energii ani wpływie na skuteczność wyboru jednego strumienia zamiast innego. Klienci kamer mogą swobodnie wybierać spośród wszystkich możliwych konfiguracji strumieni, ale w wielu przypadkach prowadzi to do tego, że klienci używają nieoptymalnych konfiguracji kamer, a aplikacje przeprowadzają czasochłonne, wyczerpujące wyszukiwania.
Na przykład niektóre przetworzone formaty YUV są wymagane i muszą być obsługiwane, ale urządzenie z aparatem może nie obsługiwać ich natywnie. Wymaga to dodatkowego przetwarzania w celu przekształcenia formatu i zmniejsza wydajność. Rozmiar i odpowiedni współczynnik proporcji mogą mieć podobny wpływ na wydajność, dzięki czemu określone wymiary są preferowane pod względem mocy i wydajności.
Mapy rekomendowanych konfiguracji strumieni nie muszą być wyczerpujące w porównaniu z StreamConfigurationMap. Sugerowane mapy konfiguracji muszą spełniać wymagania podane w sekcji Implementacja i mogą zawierać dowolne dostępne formaty, rozmiary lub inne wartości podane w StreamConfigurationMap. Ukryte formaty, rozmiary lub inne wartości, których nie ma w obiekcie StreamConfigurationMap, nie mogą być uwzględniane w zalecanych mapach konfiguracji strumienia.
Wszystkie testy pozostają bez zmian i nie są upraszczane w zależności od zalecanych konfiguracji strumieni.
Zalecane konfiguracje strumieni 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ę, HAL aparatu musi wypełnić te statyczne wpisy metadanych:
android.scaler.availableRecommendedStreamConfigurations
: zalecany podzbiór konfiguracji strumienia w przypadku konkretnych zastosowań. Deklaracja korzysta z map bitowych wskazujących sugerowane przypadki użycia w formie[1 << PREVIEW | 1 << RECORD..]
. Przykłady zastosowań rozszerzają zwykłą krotkę (format, szerokość, wysokość, dane wejściowe) o 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ę z rekomendowaną 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 jest obsługiwane przez urządzenie): zalecane konfiguracje strumienia danych o głębi, które są sugerowane w przypadku tego urządzenia z kamerą. Podobnie jak w przypadku powyższego wpisu metadanych dodatkowa bitmapa przypadków użycia wskazuje sugerowane przypadki użycia.Te informacje są przechowywane w tagu metadanych
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(dostępne tylko wtedy, gdy jest obsługiwane przez urządzenie): mapowanie zalecanych formatów obrazu, które są sugerowane 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 RecommendedStreamConfigurationMap.
Wymagane przypadki użycia
W przypadku tych zastosowań należy podać zalecane konfiguracje strumienia, które spełniają odpowiednie wymagania:
Przypadek użycia | Wymaganie |
---|---|
PREVIEW |
Podgląd musi zawierać tylko przetworzone konfiguracje strumienia, które nie powodują zatrzymania odtwarzania, z formatami wyjściowymi, takimi jak YUV_420_888 i IMPLEMENTATION_DEFINED . |
RECORD |
Rekord wideo musi zawierać konfiguracje strumienia zgodne z reklamowanymi obsługiwanymi profilami multimediów w formacie IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
Migawka wideo musi zawierać konfiguracje strumienia, które są co najmniej tak duże jak maksymalne rozdzielczości RECORD, i tylko w połączeniu formatu/przestrzeni danych BLOB + DATASPACE_JFIF (JPEG). Konfiguracje nie powinny powodować błędów podglądu i powinny działać z częstotliwością 30 klatek na sekundę. |
SNAPSHOT |
Konfiguracje strumienia migawek muszą zawierać co najmniej 1 konfigurację o rozmiarze zbliżonym do android.sensor.info.activeArraySize z kombinacją formatu/przestrzeni danych BLOB + DATASPACE_JFIF (JPEG). Biorąc pod uwagę ograniczenia dotyczące formatu, wyrównania i inne ograniczenia specyficzne dla dostawcy, powierzchnia maksymalnego sugerowanego rozmiaru nie powinna być mniejsza niż 97% powierzchni matrycy czujnika. |
ZSL (jeśli jest obsługiwana) |
Jeśli urządzenie z kamerą obsługuje zalecane konfiguracje strumienia wejściowego, muszą one być reklamowane tylko razem z innymi przetworzonymi lub wstrzymanymi formatami wyjściowymi. |
RAW (jeśli jest obsługiwana) |
Jeśli urządzenie z kamerą obsługuje zalecane konfiguracje strumienia RAW, muszą one zawierać tylko formaty wyjściowe oparte na RAW. |
Inne zastosowania
Możesz podać dodatkowe zalecane strumienie konfiguracji dla przypadków użycia specyficznych dla Twojej implementacji.
Weryfikacja
Aby przetestować wdrożenie zalecanych strumieni konfiguracji, uruchom te testy CTS i VTS:
Interfejs API do wysyłania zapytań o kombinacje funkcji
Od Androida 15 platforma Android udostępnia interfejs API do wysyłania zapytań o kombinacje funkcji. Ten interfejs API umożliwia klientom kamery sprawdzanie, czy urządzenie obsługuje określoną kombinację funkcji. Ten interfejs API jest niezbędny, ponieważ interfejs Camera2 API modeluje różne funkcje, takie jak 4K, 60 kl./s, wideo HDR, UltraHDR, zoom ultraszerokokątny i stabilizacja, jako niezależne elementy sterujące.
Wymagania
Aby obsługiwać interfejs API do wysyłania 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 aparatu obsługującego stabilizację podglądu wartość zwracana przez isStreamCombinationWithSettingsSupported
dla danej kombinacji musi być taka sama, niezależnie od tego, czy stabilizacja podglądu jest włączona czy wyłączona. Zmniejsza to przestrzeń wyszukiwania zapytań o kombinacje funkcji.
Dodatkowo w przypadku klasy wydajności multimediów 15 główny aparat tylny musi obsługiwać stabilizację podglądu z 10-bitowym podglądem HLG10 dla podglądu w rozdzielczości 1080p i 720p oraz JPEG-i o maksymalnym rozmiarze. Więcej informacji o tych wymaganiach znajdziesz w sekcji 2.2.7.2. Kamera w dokumencie CDD.
Implementacja
Aby obsługiwać interfejs API do wysyłania zapytań o kombinacje funkcji, zaimplementuj te interfejsy API zapytań o kombinacje funkcji w wersji 3 ICameraDevice
:
constructDefaultRequestSettings
: tworzy domyślne ustawienia dla określonego typuCaptureRequest
. HAL może korzystać z implementacjiICameraDeviceSession::constructDefaultRequestSettings
.isStreamCombinationWithSettingsSupported
: sprawdza, czy urządzenie obsługuje określoną kombinację strumieni z kamery z parametrami sesji i dodatkowymi kluczamiCaptureRequest
. Musi zwracać wartośćtrue
w przypadku obsługiwanych kombinacji ifalse
w przypadku nieobsługiwanych kombinacji funkcji. HAL może używać implementacjiisStreamCombinationSupported
i dodawać obsługę sprawdzania ustawieńCaptureRequest
przekazywanych wsessionParams
.getSessionCharacteristics
: przyjmuje obsługiwaną kombinację strumieni z parametrami sesji i zwraca charakterystykę sesji.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: Wyświetla listę wszystkich powszechnie używanych konfiguracji sesji. Te konfiguracje są weryfikowane za pomocą testów zgodności.
W przypadku wersji interfejsu ICameraDevice
starszych niż wersja 3 warstwa HAL powinna implementować metodę isStreamCombinationSupported
.
Więcej informacji o kombinacjach funkcji, o które wysyłane są zapytania do interfejsu API, znajdziesz w dokumentacji dotyczącej sessionConfigurationQueryVersion
w system/media/camera/docs/metadata_definitions.xml
.
Przykładową implementację tej funkcji znajdziesz hardware/google/camera/devices/EmulatedCamera/hwl/
.
Publiczne interfejsy API
Aplikacje mogą używać tych publicznych interfejsów API, aby wysyłać zapytania o obsługiwane kombinacje funkcji na urządzeniu:
CameraDevice.CameraDeviceSetup
: ograniczona reprezentacjaCameraDevice
, której można używać do wysyłania zapytań o kombinacje funkcji bez konieczności używania instancjiCameraDevice
.getCameraDeviceSetup
: pobiera obiektCameraDeviceSetup
dla danego identyfikatora kamery, jeśli funkcjaisCameraDeviceSetupSupported
zwraca wartośćtrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: obsługuje zapytania dotyczące kombinacji funkcji, jeśli ta wartość jest równa lub większa niżVANILLA_ICE_CREAM
.OutputConfiguration
: klasa opisująca dane wyjściowe z aparatu, która może zawierać odroczoną powierzchnię na potrzeby zapytań o kombinacje funkcji o niskim opóźnieniu.SessionConfiguration
: klasa narzędziowa opisująca konfigurację sesji, w tym kombinacje strumieni i parametry sesji, których można używać w zapytaniach dotyczących kombinacji funkcji.
Weryfikacja
Aby sprawdzić, czy ta funkcja została prawidłowo wdrożona, użyj tych testów VTS, CTS i Camera ITS (CTS Verifier):
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
Camera ITS