Konfiguracje strumienia

Android 10 wprowadza funkcje pozwalające klientom aparatu aby wybrać optymalną kamerę strumieni do konkretnych przypadków użycia i zadbać o to, aby określone kombinacje strumieni są obsługiwane przez aparat. Konfiguracja strumienia odnosi się do strumień z kamery skonfigurowany w aparacie i kombinacja strumienia, która odnosi się do co najmniej 1 zbioru strumieni skonfigurowanych w kamerze. Więcej informacji: tych funkcji znajdziesz zalecane konfiguracje strumieni oraz Interfejs API do wysyłania zapytań dotyczących kombinacji strumieni.

Implementacja referencyjna

Zalecana konfiguracja jest wdrożona po stronie dostawcy. strumieni danych i interfejsu API do wysyłania zapytań dotyczących funkcji kombinacji strumieni. Znajdziesz to wdrożenie na poziomie QCamera3HWI.cpp,

Dostawcy aparatów fotograficznych mogą reklamować zalecane konfiguracje strumieni do określonych zastosowań do klientów kamer. Zalecane konfiguracje strumieni, podzbiory StreamConfigurationMap, może pomóc klientom korzystającym z aparatów wybrać optymalne konfiguracje.

Chociaż StreamConfigurationMap – dostarcza szczegółowych informacji o konfiguracji strumienia danych klientom kamery, nie zawiera żadnych informacji o wydajności, mocy obliczeniowej ani wydajności wpływu wyboru jednego strumienia na drugi. Klienci korzystający z aparatu mogą dowolnie wybrać ze wszystkich możliwych konfiguracji strumieni, ale w wielu przypadkach prowadzi to do klientów korzystających z nieoptymalnej konfiguracji kamery i tworzenia aplikacji, czasochłonne, wyczerpujące wyszukiwania.

Na przykład chociaż niektóre przetworzone formaty YUV są wymagane i muszą być aparat może nie mieć natywnej obsługi tych formatów. Ten powoduje dodatkowe przejście przetwarzania dla konwersji formatu i zmniejsza efektywność. Rozmiar i format obrazu również mogą być podobne. wpływa na poprawę preferencji poszczególnych wymiarów pod względem mocy skuteczność reklam.

Zalecane mapy konfiguracji strumienia nie muszą być wyczerpujące w porównaniu z StreamConfigurationMap, Sugerowane mapy konfiguracji muszą być zgodne z wymaganiami implementacji i może zawierać wszystkie formatów, rozmiarów lub innych wartości występujących w StreamConfigurationMap, Ukryte formaty, rozmiary i inne wartości, których nie ma w StreamConfigurationMap nie można uwzględnić w zalecanych mapach konfiguracji strumienia.

Wszystkie testy nie zmieniają się i nie są relaksowane w zależności od zalecanej skuteczności konfiguracji strumieni danych.

Zalecane konfiguracje strumienia dostarczane przez implementację kamery to są opcjonalne, a klient kamery może je zignorować.

Implementacja

Aby wdrożyć tę funkcję, wykonaj poniższe czynności.

Wpisy metadanych

Aby można było włączyć tę funkcję, HAL aparatu musi wypełnić ten statyczny wpisy metadanych:

  • android.scaler.availableRecommendedStreamConfigurations: zalecany podzbiór konfiguracji strumieni do określonych przypadków użycia. deklaracja używa map bitowych wskazujących sugerowane przypadki użycia ma postać [1 << PREVIEW | 1 << RECORD..]. Przypadki użycia wykraczają poza zakres krotką standardową (format, szerokość, wysokość, dane wejściowe) z jednym dodatkowym wpisem. Nieistniejące publiczne przypadki użycia lub wszelkie inne bity ustawione w zakresie [PUBLIC_END, VENDOR_START] są zabronione.

    Te informacje są przechowywane w availableRecommendedStreamConfigurations .

    Poniższy przykład pokazuje tablicę dla zalecanego strumienia. dla kamery, która obsługuje tylko rozdzielczość 4K i 1080p. obie rozdzielczości są preferowane do nagrywania filmów, ale tylko 1080p 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ępna tylko wtedy, gdy jest obsługiwana przez urządzenie): zalecana przestrzeń danych o głębi konfiguracje strumienia sugerowane dla tego urządzenia z kamerą. Podobne do powyżej wpisu metadanych, dodatkowa mapa bitowa przypadku użycia wskazuje i przypadków użycia.

    Te informacje są przechowywane w availableRecommendedInputOutputFormatsMap .

  • android.scaler.availableRecommendedInputOutputFormatsMap (dostępny tylko wtedy, gdy jest obsługiwany przez urządzenie): mapowanie zalecanych formatów obrazów, które są sugerowane dla tego urządzenia kamery dla strumieni wejściowych, z odpowiednimi formatami wyjściowymi.

    Te informacje są przechowywane w availableRecommendedDepthStreamConfigurations .

Te informacje są dostępne dla klientów aparatu w recommendedStreamConfigurationMap – API.

Wymagane przypadki użycia

Musisz podać zalecane konfiguracje strumienia dla poniższych przypadków użycia i spełniać odpowiednie wymagania:

Przypadek użycia Wymaganie
PREVIEW Podgląd może zawierać tylko konfiguracje przetworzonych strumieni, które nie zawieszają się z formatami wyjściowymi takimi jak YUV_420_888 czy IMPLEMENTATION_DEFINED
RECORD Rekord wideo musi zawierać konfiguracje strumienia pasujące do rozgłaszanego obsługiwane profile multimediów w formacie IMPLEMENTATION_DEFINED.
VIDEO_SNAPSHOT Podsumowanie filmu musi zawierać konfiguracje strumienia, które mają co najmniej duże jak maksymalne rozdzielczości RECORD, a jedynie przy użyciu BLOB + Kombinacja formatu DATASPACE_JFIF/przestrzeni danych (JPEG). Konfiguracje nie powinno powodować błędów w podglądzie i powinna działać z szybkością 30 kl./s.
SNAPSHOT Konfiguracje zrzutu dysku muszą zawierać co najmniej jedną z konfiguracją rozmiaru zamknięcia do android.sensor.info.activeArraySize za pomocą BLOB + Kombinacja formatu DATASPACE_JFIF/przestrzeni danych (JPEG). Uwzględnianie ograniczenie formatu obrazu, dopasowania i innych ograniczeń dotyczących konkretnego dostawcy, obszar maksymalnego sugerowanego rozmiaru nie powinien być mniejszy niż 97% czujnika rozmiaru tablicy.
ZSL (jeśli jest obsługiwana) Zalecane konfiguracje strumienia wejściowego (jeśli go obsługuje) mogą być reklamowane wyłącznie razem z innymi przetwarzanymi lub zawieszającymi się wynikami formatów reklam.
RAW (jeśli jest obsługiwana) Zalecane konfiguracje nieprzetworzonych strumieni, jeśli kamera je obsługuje musi zawierać wyłącznie formaty wyjściowe oparte na RAW.

Inne przypadki użycia

Możesz dodać dodatkowe zalecane strumienie konfiguracji na potrzeby przypadków użycia do Twojej implementacji.

Weryfikacja

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

Interfejs API do wysyłania zapytań dotyczących kombinacji strumieni

Platforma Android obsługuje interfejs API do wysyłania zapytań dotyczących kombinacji strumieni. Wdrożenie ten interfejs API pozwala klientom kamery bezpiecznie wysyłać zapytania o kombinacje strumieni w dowolnym momencie po otrzymaniu prawidłowego Urządzenie Aparatu co eliminuje konieczność inicjowania sesji nagrywania ryzyko wystąpienia kolejnych wyjątków, w tym uszkodzenia kamery, i umożliwia szybsze wykonywanie zapytań.

Ta funkcja umożliwia też klientom kamery odbieranie listy kombinacji strumieni zebrane według wytycznymi dla urządzenia CameraDevice i obsługiwanego poziomu sprzętu. Dostępne są testy CTS pozwala sprawdzić poprawność wyników zapytania obejmującego niewielki podzbiór najpopularniejsze kombinacje strumieni.

Możesz obsługiwać tę funkcję przez wdrożenie 1 dodatkowego interfejsu HIDL API w menu HAL aparatu.

Implementacja

Aby interfejs API mógł wysyłać zapytania o kombinacje strumieni, interfejs HAL kamery musi udostępniać dla isStreamCombinationSupported Interfejs API HIDL. Ten interfejs sprawdza, czy aparat obsługuje określoną kombinację strumienia danych z kamery.

Po wywołaniu interfejs API musi zwracać jeden z tych kodów stanu:

  • OK: udało się wykonać zapytanie dotyczące kombinacji strumieni.
  • METHOD_NOT_SUPPORTED: kamera nie obsługuje transmisji ze względu na kombinację wartości.
  • INTERNAL_ERROR: nie można wykonać zapytania dotyczącego kombinacji strumieni z powodu błąd wewnętrzny.

Interfejs API zwraca wartość „prawda”, jeśli kombinacja strumienia jest obsługiwana. W przeciwnym razie zwraca wartość false (fałsz).

Platforma używa publicznego interfejsu API isSessionConfigurationSupported aby sprawdzić, czy kamera obsługuje daną konfigurację sesji urządzenia.

Wywołania interfejsu API nie mogą mieć żadnych efektów ubocznych na normalne działanie kamery. Interfejs API nie mogą zmieniać żadnych stanów wewnętrznych ani spowalniać działania kamery. Upewnij się, że po pomyślnym sprawdzeniu kombinacji strumienia przez HAL aparatu klienty kamery mogą skonfigurować kombinację strumieni. Aby uniknąć problemów, upewnij się, że implementacja nie przechowuje żadnych informacji podczas wysyłania zapytań dotyczących kombinacji strumieni, zmieniania stanu wewnętrznego lub wykonywania czasochłonnych operacji.

Weryfikacja

Aby sprawdzić tę funkcję, uruchom te przypadki testowe CTS i VTS kamery:

Moduły CTS kamery:

VTS kamery:

VtsHalCameraProviderV2_4TargetTest.cpp