Konfiguracje strumienia

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

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:

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 sessionConfigurationQueryVersionsystem/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 typu CameraDevice, które można wykorzystać do zapytania o kombinacje funkcji bez konieczności tworzenia instancji typu CameraDevice.

  • getCameraDeviceSetup: Pobiera obiekt CameraDeviceSetup dla danego identyfikatora kamery, jeśli isCameraDeviceSetupSupported zwraca true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: obsługuje zapytania o kombinacje funkcji, jeśli ta wartość wynosi VANILLA_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

ITS kamery