Konfiguracje strumieni

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W systemie Android 10 wprowadzono funkcje umożliwiające klientom kamery wybór optymalnych strumieni kamery do określonych przypadków użycia i zapewnienie obsługi określonych kombinacji strumieni przez urządzenie z kamerą. Konfiguracja strumienia odnosi się do pojedynczego strumienia z kamery skonfigurowanego w urządzeniu z kamerą, a kombinacja strumienia odnosi się do jednego lub większej liczby zestawów strumieni skonfigurowanych w urządzeniu z kamerą. Aby uzyskać więcej informacji o tych funkcjach, zobacz zalecane konfiguracje strumieni i interfejs API do tworzenia zapytań o kombinacje strumieni .

Implementacja referencyjna

Istnieje implementacja referencyjna po stronie dostawcy zalecanych strumieni konfiguracji i interfejsu API do funkcji łączenia strumieni zapytań. Możesz znaleźć tę implementację na QCamera3HWI.cpp

Dostawcy kamer mogą ogłaszać klientom kamer zalecane konfiguracje strumieni dla określonych przypadków użycia. Te zalecane konfiguracje strumienia, które są podzbiorami StreamConfigurationMap , mogą pomóc klientom aparatu wybrać optymalne konfiguracje.

Chociaż StreamConfigurationMap udostępnia wyczerpujące informacje o konfiguracji strumienia klientom aparatu, nie zawiera żadnych informacji o wydajności, mocy ani wpływie na wydajność wybierania jednego strumienia przez inny. Klienci z kamerami mogą swobodnie wybierać spośród wszystkich możliwych konfiguracji strumieni, ale w wielu przypadkach prowadzi to do klientów korzystających z nieoptymalnych konfiguracji kamer i aplikacji, które wymagają czasochłonnych, wyczerpujących wyszukiwań.

Na przykład, chociaż niektóre przetworzone formaty YUV są wymagane i muszą być obsługiwane, aparat fotograficzny może nie mieć natywnej obsługi tych formatów. Powoduje to dodatkowy przebieg przetwarzania dla konwersji formatu i zmniejsza wydajność. Rozmiar i odpowiedni współczynnik kształtu również mogą mieć podobny wpływ, dzięki czemu poszczególne wymiary są preferowane pod względem mocy i wydajności.

Zalecane mapy konfiguracji strumienia nie muszą być wyczerpujące w porównaniu z StreamConfigurationMap . Sugerowane mapy konfiguracji muszą być zgodne z wymaganiami w sekcji implementacji i mogą zawierać dowolne dostępne formaty, rozmiary lub inne wartości znalezione w StreamConfigurationMap . Ukrytych formatów, rozmiarów lub innych wartości, których nie można znaleźć w StreamConfigurationMap, nie można uwzględnić w zalecanych mapach konfiguracji strumienia.

Wszystkie testy pozostają niezmienione i nie są rozluźnione w zależności od zalecanych konfiguracji strumienia.

Zalecane konfiguracje strumienia dostarczone przez implementację kamery są opcjonalne i klient kamery może je zignorować.

Realizacja

Wykonaj poniższe czynności, aby wdrożyć tę funkcję.

Wpisy metadanych

Aby włączyć tę funkcję, warstwa HAL kamery musi wypełnić następujące statyczne wpisy metadanych:

  • android.scaler.availableRecommendedStreamConfigurations : zalecany podzbiór konfiguracji strumienia dla określonych przypadków użycia. Deklaracja wykorzystuje proste bitmapy wskazujące sugerowane przypadki użycia w postaci [1 << PREVIEW | 1 << RECORD..] . Przypadki użycia rozszerzają zwykłą krotkę (format, szerokość, wysokość, dane wejściowe) o jeden dodatkowy wpis. Nieistniejące przypadki użycia publicznego lub jakiekolwiek 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ę dla zalecanej konfiguracji strumienia dla urządzenia z kamerą, która obsługuje tylko 4K i 1080p, gdzie obie rozdzielczości są preferowane do nagrywania wideo, 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 obszaru danych głębokości sugerowane dla tego urządzenia z kamerą. Podobnie jak w przypadku powyższego wpisu metadanych, dodatkowa mapa bitowa przypadków użycia wskazuje sugerowane przypadki użycia.

    Te informacje są przechowywane w tagu metadanych availableRecommendedInputOutputFormatsMap .

  • android.scaler.availableRecommendedInputOutputFormatsMap (dostępny tylko wtedy, gdy jest obsługiwany przez urządzenie): mapowanie zalecanych formatów obrazu, które są sugerowane dla tego urządzenia z kamerą dla 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 pośrednictwem interfejsu API RecommendedStreamConfigurationMap .

Wymagane przypadki użycia

Zalecane konfiguracje strumienia muszą być dostarczone dla następujących przypadków użycia i spełniać odpowiednie wymagania:

Przypadek użycia Wymóg
PREVIEW Podgląd musi zawierać tylko konfiguracje nieprzetworzonych strumieni, które nie powodują zacinania się, z formatami wyjściowymi, takimi jak YUV_420_888 i IMPLEMENTATION_DEFINED .
RECORD Nagranie wideo musi zawierać konfiguracje strumienia 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 maksymalna rozdzielczość RECORD i tylko z kombinacją formatu BLOB + DATASPACE_JFIF/przestrzeń danych (JPEG). Konfiguracje nie powinny powodować zakłóceń podglądu i powinny działać z prędkością 30 fps.
SNAPSHOT Konfiguracje strumienia migawek muszą zawierać co najmniej jeden o rozmiarze zbliżonym do android.sensor.info.activeArraySize z kombinacją formatu BLOB + DATASPACE_JFIF/przestrzeń danych (JPEG). Biorąc pod uwagę ograniczenia dotyczące proporcji, wyrównania i inne ograniczenia specyficzne dla dostawcy, obszar maksymalnego sugerowanego rozmiaru nie powinien być mniejszy niż 97% obszaru rozmiaru matrycy czujnika.
ZSL (jeśli jest obsługiwany) Jeśli jest obsługiwana przez urządzenie z kamerą, zalecane konfiguracje strumienia wejściowego muszą być ogłaszane tylko razem z innymi przetworzonymi lub opóźnionymi formatami wyjściowymi.
RAW (jeśli jest obsługiwany) Jeśli jest obsługiwana przez urządzenie z kamerą, zalecane konfiguracje strumienia nieprzetworzonego muszą obejmować tylko formaty wyjściowe oparte na RAW.

Inne przypadki użycia

Możesz podać dodatkowe zalecane strumienie konfiguracji dla przypadków użycia specyficznych dla Twojej implementacji.

Walidacja

Aby przetestować implementację zalecanych strumieni konfiguracji, uruchom następujące testy CTS i VTS:

API do kombinacji strumieni zapytań

Platforma Android obsługuje interfejs API do zapytań o kombinacje strumieni. Wdrożenie tego interfejsu API umożliwia klientom kamer bezpieczne wysyłanie zapytań o kombinacje strumieni w dowolnym momencie po otrzymaniu ważnej instancji CameraDevice , eliminując obciążenie związane z inicjowaniem sesji przechwytywania kamery oraz możliwość wystąpienia kolejnych wyjątków kamery, w tym awarii kamery, i umożliwiając szybsze wysyłanie zapytań.

Ta funkcja umożliwia również klientom kamer otrzymywanie listy kombinacji strumieni skompilowanych zgodnie z wytycznymi dla CameraDevice i obsługiwanym poziomem sprzętu. Dostępne są testy CTS w celu maksymalnego wymuszenia poprawności wyników zapytań, obejmujące niewielki podzbiór najczęstszych kombinacji strumieni.

Możesz wybrać obsługę tej funkcji, implementując jedno dodatkowe wywołanie interfejsu API HIDL w kamerze HAL.

Realizacja

Aby obsługiwać interfejs API do zapytań o kombinacje strumieni, warstwa HAL kamery musi zapewnić implementację interfejsu isStreamCombinationSupported HIDL API. Ten interfejs sprawdza, czy kamera obsługuje określoną kombinację strumienia kamery.

Po wywołaniu interfejs API musi zwrócić jeden z następujących kodów stanu:

  • OK : kwerenda kombinacji strumieni zakończyła się pomyślnie.
  • METHOD_NOT_SUPPORTED : Urządzenie z kamerą nie obsługuje zapytania z kombinacją strumienia.
  • INTERNAL_ERROR : Zapytanie o połączenie strumieni nie może zakończyć się z powodu błędu wewnętrznego.

Interfejs API zwraca wartość true, jeśli kombinacja strumieni jest obsługiwana. W przeciwnym razie zwraca fałsz.

Framework wykorzystuje publiczny interfejs API isSessionConfigurationSupported , aby sprawdzić, czy dana konfiguracja sesji jest obsługiwana przez urządzenie z kamerą.

Wywołania interfejsu API nie mogą mieć żadnych skutków ubocznych w normalnym działaniu aparatu. Wywołania API nie mogą zmieniać żadnych stanów wewnętrznych ani spowalniać działania aparatu. Upewnij się, że po pomyślnym zweryfikowaniu kombinacji strumienia przez warstwę HAL kamery, klienci kamer mogą pomyślnie skonfigurować kombinację strumienia. Aby uniknąć problemów, upewnij się, że implementacja nie przechowuje żadnych informacji podczas zapytań kombinacyjnych strumieni, nie zmienia swojego stanu wewnętrznego ani nie angażuje się w czasochłonne operacje.

Walidacja

Aby sprawdzić poprawność tej funkcji, uruchom następujące przypadki testowe kamery CTS i VTS:

Moduły kamery CTS:

Kamera VTS:

VtsHalCameraProviderV2_4TargetTest.cpp