Android zawiera funkcje, które umożliwiają klientom kamery wybieranie optymalnych strumieni kamery do określonych zastosowań oraz zapewniają, że określone kombinacje strumieni są obsługiwane przez urządzenie z kamerą. Konfiguracja strumienia odnosi się do pojedynczego strumienia z kamery skonfigurowanego w urządzeniu z kamerą, a kombinacja strumieni odnosi się do co najmniej 1 zestawu strumieni skonfigurowanych w urządzeniu z kamerą. Więcej informacji o tych funkcjach znajdziesz w sekcjach Zalecane konfiguracje strumieni i Interfejs API do wysyłania zapytań o kombinacje funkcji.
Implementacja referencyjna
Dostępna jest implementacja referencyjna po stronie dostawcy zalecanych strumieni konfiguracji oraz interfejsu API do wysyłania zapytań o funkcje kombinacji strumieni. Tę implementację znajdziesz w pliku QCamera3HWI.cpp.
Zalecane konfiguracje strumieni
Dostawcy kamer mogą reklamować klientom kamery zalecane konfiguracje strumieni do określonych zastosowań. Te zalecane konfiguracje strumieni, które są podzbiorami StreamConfigurationMap, mogą pomóc klientom kamery w wyborze optymalnych konfiguracji.
Chociaż StreamConfigurationMap udostępnia klientom kamery wyczerpujące informacje o konfiguracji strumieni, nie zawiera żadnych informacji o wydajności, zużyciu energii ani wpływie na wydajność wyboru jednego strumienia zamiast innego. Klienci kamery mogą swobodnie wybierać spośród wszystkich możliwych konfiguracji strumieni, ale w wielu przypadkach prowadzi to do tego, że klienci używają suboptymalnych konfiguracji kamery, a aplikacje wykonują czasochłonne, wyczerpujące wyszukiwania.
Na przykład, chociaż niektóre przetworzone formaty YUV są wymagane i muszą być obsługiwane, urządzenie z kamerą może nie obsługiwać tych formatów natywnie. Powoduje to dodatkowe przetwarzanie w celu konwersji formatu i zmniejsza wydajność. Rozmiar i odpowiadający mu współczynnik proporcji mogą mieć podobny wpływ, co sprawia, że niektóre wymiary są preferowane pod względem zużycia energii i wydajności.
Mapy zalecanych 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 znalezione w StreamConfigurationMap. Ukryte formaty, rozmiary lub inne wartości, których nie ma w StreamConfigurationMap, nie mogą być uwzględniane w mapach zalecanych konfiguracji strumieni.
Wszystkie testy pozostają bez zmian i nie są łagodzone 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 zaimplementować tę funkcję, wykonaj te czynności.
Wpisy metadanych
Aby włączyć tę funkcję, HAL kamery musi wypełnić te statyczne wpisy metadanych:
android.scaler.availableRecommendedStreamConfigurations: zalecany podzbiór konfiguracji strumieni do określonych zastosowań. Deklaracja używa bitmap wskazujących sugerowane przypadki użycia w postaci[1 << PREVIEW | 1 << RECORD..]. Zastosowania rozszerzają zwykłą krotkę (format, szerokość, wysokość, dane wejściowe) o 1 dodatkowy wpis. Niedozwolone są nieistniejące publiczne zastosowania ani żadne inne bity ustawione w zakresie[PUBLIC_END, VENDOR_START].Te informacje są przechowywane w
availableRecommendedStreamConfigurationstagu metadanych.Poniższy przykład przedstawia tablicę zalecanej konfiguracji 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 rozdzielczość 1080p jest sugerowana 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 są obsługiwane przez urządzenie): zalecane konfiguracje strumieni przestrzeni danych głębi sugerowane dla tego urządzenia z kamerą. Podobnie jak w przypadku powyższego wpisu metadanych, dodatkowa bitmapa zastosowań wskazuje sugerowane zastosowania.Te informacje są przechowywane w
availableRecommendedInputOutputFormatsMaptagu metadanych.android.scaler.availableRecommendedInputOutputFormatsMap(dostępne tylko wtedy, gdy są obsługiwane przez urządzenie): mapowanie zalecanych formatów obrazów, 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 API.
Wymagane zastosowania
Zalecane konfiguracje strumieni muszą być udostępniane w tych zastosowaniach i spełniać odpowiednie wymagania:
| Zastosowanie | Wymaganie |
|---|---|
PREVIEW |
Podgląd musi zawierać tylko konfiguracje przetworzonych strumieni bez opóźnień
z formatami wyjściowymi takimi jak YUV_420_888 i
IMPLEMENTATION_DEFINED. |
RECORD |
Nagranie wideo musi zawierać konfiguracje strumieni zgodne z reklamowanymi
obsługiwanymi profilami multimediów
w formacie IMPLEMENTATION_DEFINED. |
VIDEO_SNAPSHOT |
Migawka wideo musi zawierać konfiguracje strumieni, które są co najmniej tak duże jak maksymalne rozdzielczości 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 szybkością 30 klatek na sekundę. |
SNAPSHOT |
Konfiguracje strumieni 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 współczynnika proporcji, wyrównania i inne ograniczenia specyficzne dla dostawcy, obszar maksymalnego sugerowanego rozmiaru nie powinien być mniejszy niż 97% obszaru tablicy czujników. |
ZSL (jeśli jest obsługiwane) |
Jeśli urządzenie z kamerą obsługuje tę funkcję, zalecane konfiguracje strumieni wejściowych muszą być reklamowane tylko razem z innymi przetworzonymi lub opóźniającymi formatami wyjściowymi. |
RAW (jeśli jest obsługiwane) |
Jeśli urządzenie z kamerą obsługuje tę funkcję, zalecane konfiguracje strumieni RAW muszą zawierać tylko formaty wyjściowe oparte na RAW. |
Inne zastosowania
Możesz udostępnić dodatkowe zalecane strumienie konfiguracji do zastosowań specyficznych dla Twojej implementacji.
Weryfikacja
Aby przetestować implementację 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 określona kombinacja funkcji może być obsługiwana przez urządzenie. 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 ortogonalne elementy sterujące.
Wymagania
Aby obsługiwać interfejs API do wysyłania zapytań o kombinacje funkcji, HAL kamery musi zaimplementować interfejs ICameraDevice w wersji 3. Więcej informacji znajdziesz w sekcji
Implementacja.
Gdy interfejs API jest obsługiwany, stabilizacja podglądu musi być ortogonalna względem innych funkcji. Oznacza to, że w przypadku urządzenia z kamerą, które obsługuje stabilizację podglądu, wartość zwracana przez isStreamCombinationWithSettingsSupported dla określonej kombinacji musi być taka sama, gdy stabilizacja podglądu jest włączona lub wyłączona. Zmniejsza to przestrzeń wyszukiwania zapytań o kombinacje funkcji.
Ponadto w przypadku klasy wydajności multimediów 15 główny aparat tylny musi obsługiwać stabilizację podglądu z 10-bitowym podglądem HLG10 w przypadku podglądu w rozdzielczości 1080p i 720p oraz JPEG-ów 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 do wysyłania zapytań o kombinacje funkcji w interfejsie
ICameraDevice w wersji 3:
constructDefaultRequestSettings: tworzy ustawienia domyślne dla określonego typuCaptureRequest. HAL może używaćICameraDeviceSession::constructDefaultRequestSettingsimplementacji.isStreamCombinationWithSettingsSupported: sprawdza, czy urządzenie obsługuje określoną kombinację strumieni z kamery z parametrami sesji i dodatkowymi kluczamiCaptureRequest. W przypadku obsługiwanych kombinacji musi zwracać wartośćtrue, a w przypadku nieobsługiwanych kombinacji funkcji –false. HAL może używać implementacjiisStreamCombinationSupportedi dodać obsługę sprawdzania ustawieńCaptureRequestprzekazywanych wsessionParams.getSessionCharacteristics: przyjmuje obsługiwaną kombinację strumieni z parametrami sesji i zwraca charakterystyki specyficzne dla sesji.INFO_SESSION_CONFIGURATION_QUERY_VERSION: zawiera 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 HAL
powinien zaimplementować
isStreamCombinationSupported
metodę.
Więcej informacji o kombinacjach funkcji, o które wysyłane są zapytania przez interfejs API, znajdziesz w
dokumentacji sessionConfigurationQueryVersion w
system/media/camera/docs/metadata_definitions.xml.
Implementację referencyjną tej funkcji znajdziesz w pliku
hardware/google/camera/devices/EmulatedCamera/hwl/.
Publiczne interfejsy API
Aplikacje mogą używać tych publicznych interfejsów API do wysyłania zapytań 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 obiektCameraDeviceSetupdla danego identyfikatora kamery, jeśliisCameraDeviceSetupSupportedzwraca wartośćtrue.INFO_SESSION_CONFIGURATION_QUERY_VERSION: Obsługuje zapytania o kombinacje funkcji, jeśli ta wartość toVANILLA_ICE_CREAMlub nowsza.OutputConfiguration: klasa opisująca wyjście kamery, 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órej można używać do wysyłania zapytań o kombinacje funkcji.
Weryfikacja
Aby zweryfikować implementację tej funkcji, 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