Konfiguracje strumienia

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 strumieniInterfejs 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.

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_888IMPLEMENTATION_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:

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 sessionConfigurationQueryVersionsystem/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 reprezentacja CameraDevice, której można używać do wysyłania zapytań o kombinacje funkcji bez konieczności używania instancji CameraDevice.

  • getCameraDeviceSetup: pobiera obiekt CameraDeviceSetup dla danego identyfikatora kamery, jeśli funkcja isCameraDeviceSetupSupported 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

Camera ITS