Limit typu urządzenia

W przypadku Androida Audio typ audio_devices_t jest używany do reprezentowania typu urządzenia audio. Jest on szeroko stosowany w kodzie źródłowym audio jako pole bitowe do filtrowania lub wybierania co najmniej jednego określonego urządzenia. Przed Androidem 11 obowiązywał limit 30 typów urządzeń wejściowych/wyjściowych audio i brak wolnych slotów na dodawanie nowych typów urządzeń audio. Poniżej usunięto limit dozwolonych typów urządzeń audio nowe typy urządzeń audio, które chcesz dodać.

Aby usunąć limit liczby typów urządzeń audio, wyliczanych wartości, a nie masek bitowych.

Wszystkie dotychczasowe typy urządzeń audio zostaną zachowane. AUDIO_DEVICE_BIT_IN to są nadal używane do rozróżniania urządzeń wejściowych i wyjściowych. Gdy dodajesz nowe typy urządzeń audio, określone wartości w lukach między istniejącymi wartościami.

OEM nie powinien używać maski audio_devices_t jako masky, ponieważ może to spowodować, po dodaniu nowych wymienionych typów urządzeń audio nie powinny wystąpić nieoczekiwane wyniki.

Przykłady i źródło

Przed Androidem 11 istniały 2 typowe przypadki użycia urządzeń audio jako maski bitowe.

  • Używanie wartości audio_devices_t do reprezentowania wielu urządzeń audio.
  • Sprawdzanie, czy wartość audio_devices_t zawiera typy urządzeń audio z określonej kategorii.

Aby reprezentować wiele typów urządzeń audio, klasa o nazwie DeviceTypeSet w parametrze /libaudiofoundation/include/media/AudioContainers.h który jest kontenerem std::set zbioru danych audio_devices_t. Klasa jest zadeklarowana w bibliotece libaudiofoundation dostępnej dla dostawcy. Aby reprezentować różne typy urządzeń audio w kodzie C, możesz użyć tablicy lub listy audio_devices_t.

Aby sprawdzić, czy poszczególne typy urządzeń należą do określonej kategorii, użyj funkcji pomocniczych audio_is_.*_device w /system/media/audio/include/system/audio.h. W przypadku etui różnych typów urządzeń audio użyj funkcji pomocniczych w języku: libaudiofoundation. Dla: przykład, użyj areAllOfSameDeviceType (DeviceTypeSet, std::function) w AudioContainers.h, aby sprawdzić, czy wszystkie podane typy urządzeń audio są tego samego typu.

Implementacja

Producenci OEM muszą usunąć z implementacji HAL audio reprezentacje bitowych pól typu urządzenia audio.

  1. Usuń całą pamięć urządzeń w polu bitowym.

    audio_devices_t nie powinien być używany do reprezentowania wielu typów urządzeń audio. Zamiast tego użyj listy lub wektora.

  2. Przestań używać operacji bitowych do porównań typów urządzeń.

    Przed Androidem 11 typy urządzeń audio można wykorzystać jako lub „bitfield”. W takich przypadkach w przypadku typów urządzeń często używa się operacji bitowych. i porównaniami. Gdy dodawane są nowe, wymienione typy urządzeń audio, operacje bitowe mogą dawać nieoczekiwane wyniki. Zamiast tego użyj funkcji pomocniczych. Jeśli jest singiel, typu urządzenia audio, a potem porównać obie wartości za pomocą bezpośredniego porównania. Aby sprawdzić, czy typ urządzenia audio należy do określonej kategorii, użyj funkcji pomocniczych w  /system/media/audio/include/system/audio.h. Na przykład: audio_is_output_device(audio_devices_t device).

  3. Przestań używać wstępnie zdefiniowanych wartości w przypadku grup typów urządzeń audio.

    Istnieje kilka wstępnie zdefiniowanych wartości dla grup typów urządzeń audio, AUDIO_DEVICE_OUT_ALL, w: system/media/audio/include/system/audio-base-utils.h Wszystkie te wartości są zarezerwowane, ale mogą zostać wycofane, ponieważ nie będą prawidłowe po dodaniu nowych typów urządzeń audio. W definicji audio-base-utils.h istnieją nowe grupy typów urządzeń audio, które są tablicami typów urządzeń audio, np. AUDIO_DEVICE_OUT_ALL_ARRAY.

  4. Zamiast metody set_parameters użyj metod create_audio_patch()release_audio_patch() do wyznaczania tras.

    Metoda set_parameters używa typów urządzeń audio jako bitowej reprezentacji liczby, więc w przypadku dodania nowych typów urządzeń audio mogą wystąpić nieoczekiwane wyniki.

    Obecnie wymagane są 2 rodzaje poprawek audio:

    • Mix to device patches (na potrzeby odtwarzania)
    • Urządzenie do miksowania poprawek do nagrywania

    W kolejnych aktualizacjach mogą być wymagane dodatkowe poprawki dotyczące komunikacji między urządzeniami.

    Podczas tworzenia poprawki audio, jeśli uchwyt poprawki nie jest kod HAL audio jest wymagany do wygenerowania unikalnego uchwytu poprawki, który może zidentyfikować poprawkę audio. W przeciwnym razie HAL dźwięku powinien użyć podanego identyfikatora do aktualizacji łatki dźwięku.

    Jeśli używasz starszej wersji interfejsu HAL dźwięku i opakowania AOSP HIDL, w starszej wersji interfejsu HAL dźwięku należy ustawić główną wersję interfejsu HAL na 3.0.

    Aby włączyć funkcję poprawki audio, należy ustawić wartość HAL audio główną wersję HAL 3.0 lub wyżej. Odwołaj się do Device::supportsAudioPatches() w domyślna implementacja HIDL .

Dostosowywanie

Nie można jej wyłączyć ani przywrócić refaktoryzacji urządzenia audio w platforma, która pozwala dodawać typy urządzeń audio.

Wszystkie dodane typy urządzeń audio pozwalają na reprezentowanie typu urządzenia za pomocą pojedynczego zestawu bitów, więc obecne implementacje HAL nadal działają.

Jeśli dodano nowe typy urządzeń audio i producenci OEM chcą z nich korzystać, muszą uaktualnić implementację HAL dźwięku i przełączyć się na HIDL w wersji 6.0 lub nowszej. Konieczne jest zaktualizowanie głównej wersji HAL do 3.0 i wdrażanie metod create_audio_patchrelease_audio_patch, ponieważ użycie metody set_parameters do kierowania strumienia może spowodować nieoczekiwane wyniki po dodaniu nowych typów urządzeń audio.

Weryfikacja

Dostawcy OEM muszą zaktualizować implementacje HAL. VTS dla interfejsu HAL audio można użyć do sprawdzenia, czy implementacja działa zgodnie z oczekiwaniami. Wszystkie testy znajdziesz w Pliki VTS.