Konfiguracje strumienia

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.

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 availableRecommendedStreamConfigurations tagu 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 availableRecommendedInputOutputFormatsMap tagu 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:

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 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 isCameraDeviceSetupSupported zwraca wartość true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Obsługuje zapytania o kombinacje funkcji, jeśli ta wartość to VANILLA_ICE_CREAM lub 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

Camera ITS