W Android Audio audio_devices_t służy do reprezentowania typu urządzenia audio. Jest powszechnie używany w kodzie źródłowym audio jako pole bitowe do filtrowania lub wybierania co najmniej 1 określonego urządzenia. Przed Androidem 11 obowiązywał limit 30 typów urządzeń wejścia/wyjścia audio i nie było wolnych miejsc na dodanie nowych typów urządzeń audio. Usunęliśmy limit liczby typów urządzeń audio, aby umożliwić dodawanie nowych typów urządzeń audio.
Aby usunąć limit liczby typów urządzeń audio, typy urządzeń audio są teraz wartościami wyliczeniowymi, a nie maskami bitowymi.
Wszystkie dotychczasowe typy urządzeń audio pozostają bez zmian. AUDIO_DEVICE_BIT_IN nadal służy do rozróżniania urządzeń wejścia i wyjścia. Podczas dodawania nowych typów urządzeń audio są one wartościami wyliczeniowymi w lukach między istniejącymi wartościami.
Producenci OEM nie powinni używać audio_devices_t jako maski bitowej, ponieważ może to powodować nieoczekiwane wyniki po dodaniu nowych wyliczeniowych typów urządzeń audio.
Przykłady i źródło
Przed Androidem 11 typy urządzeń audio były zwykle używane jako maski bitowe na 2 sposoby.
- Używanie wartości
audio_devices_tdo reprezentowania wielu urządzeń audio. - Sprawdzanie, czy wartość
audio_devices_tzawiera typy urządzeń audio z określonej kategorii.
Do reprezentowania wielu typów urządzeń audio używana jest klasa o nazwie DeviceTypeSet w
/libaudiofoundation/include/media/AudioContainers.h
jest używana, która jest kontenerem std::set typu audio_devices_t. Klasa jest zadeklarowana w bibliotece
dostępnej dla dostawców
libaudiofoundation. Aby reprezentować wiele typów urządzeń audio w kodzie C, można użyć tablicy lub listy audio_devices_t.
Aby sprawdzić, czy pojedynczy typ urządzenia należy do określonej kategorii, użyj funkcji pomocniczych
audio_is_.*_device w
/system/media/audio/include/system/audio.h.
W przypadku wielu typów urządzeń audio użyj funkcji pomocniczych w libaudiofoundation. Aby
na
przykład
sprawdzić,
czy
wszystkie
podane
typy
urządzeń
audio
są
tego
samego
typu,
użyj
areAllOfSameDeviceType (DeviceTypeSet, std::function
w
AudioContainers.h.
Implementacja
Producenci OEM muszą usunąć reprezentację pola bitowego typu urządzenia audio z implementacji HAL audio.
- Usuń wszystkie urządzenia z pola bitowego.
audio_devices_tnie należy używać do reprezentowania wielu typów urządzeń audio. Zamiast tego użyj listy lub wektora. - Przestań używać operacji bitowych do porównywania typów urządzeń.
Przed Androidem 11 typy urządzeń audio można było używać jako pola bitowego. W takim przypadku do porównywania typów urządzeń często używa się operacji bitowych. Po dodaniu nowych wyliczeniowych typów urządzeń audio operacje bitowe mogą powodować nieoczekiwane wyniki. Zamiast tego użyj funkcji pomocniczych. Jeśli jest tylko 1 typ urządzenia audio, użyj bezpośredniego porównania, aby porównać 2 wartości. 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ładaudio_is_output_device(audio_devices_t device). - Przestań używać predefiniowanych wartości dla grup typów urządzeń audio.
W pliku
system/media/audio/include/system/audio-base-utils.hznajdują się predefiniowane wartości dla grup typów urządzeń audio, np.AUDIO_DEVICE_OUT_ALL. Wszystkie te wartości są zarezerwowane, ale mogą zostać wycofane, ponieważ po dodaniu nowych wyliczeniowych typów urządzeń audio nie będą już poprawne. W plikuaudio-base-utils.hzdefiniowano nowe grupy typów urządzeń audio, które są tablicami typów urządzeń audio, np.AUDIO_DEVICE_OUT_ALL_ARRAY. - Zaimplementuj metody
create_audio_patch()irelease_audio_patch()do routingu zamiastset_parameters.Metoda
set_parametersużywa typów urządzeń audio jako pola bitowego, więc po dodaniu nowych wyliczeniowych typów urządzeń audio mogą wystąpić nieoczekiwane wyniki.Obecnie wymagane są 2 rodzaje poprawek audio:
- Poprawki miksu do urządzenia na potrzeby odtwarzania
- Poprawki urządzenia do miksu na potrzeby nagrywania
W kolejnych aktualizacjach mogą być wymagane dodatkowe poprawki dla urządzenia do urządzenia.
Podczas tworzenia poprawki audio, jeśli nie określono uchwytu poprawki, HAL audio musi wygenerować unikalny uchwyt poprawki, który może identyfikować poprawkę audio. W przeciwnym razie HAL audio powinien użyć podanego uchwytu poprawki audio, aby zaktualizować poprawkę audio.
Jeśli używasz starszego HAL audio i otoki HIDL AOSP, starszy HAL audio powinien ustawić główną wersję HAL na 3.0.
Aby włączyć funkcję poprawki audio, HAL audio powinien ustawić główną wersję HAL na 3.0 lub nowszą. Więcej informacji znajdziesz w
Device::supportsAudioPatches()w domyślnej implementacji HIDL, która jest też dostępna w HAL audio dla Cuttlefish.
Dostosowywanie
Nie można wyłączyć tej funkcji ani przywrócić refaktoryzacji urządzenia audio w frameworku, która umożliwia dodawanie typów urządzeń audio.
Wszystkie dodane typy urządzeń audio umożliwiają reprezentowanie typu urządzenia za pomocą pojedynczego ustawionego bitu, więc obecne implementacje HAL nadal działają.
Jeśli dodane zostaną nowe typy urządzeń audio, a producenci OEM będą chcieli ich używać, muszą uaktualnić implementację HAL audio i przejść na HIDL w wersji 6.0 lub nowszej. Obowiązkowe jest uaktualnienie głównej wersji HAL do 3.0 i zaimplementowanie metod create_audio_patch i release_audio_patch, ponieważ używanie set_parameters do routingu strumienia może powodować nieoczekiwane wyniki po dodaniu nowych typów urządzeń audio.
Weryfikacja
Producenci OEM muszą zaktualizować implementacje HAL. Aby sprawdzić, czy implementacja działa zgodnie z oczekiwaniami, możesz użyć VTS dla HAL audio. Wszystkie testy znajdziesz w plikach VTS.