Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

設備類型限制

在Android音頻中, audio_devices_t用於表示音頻設備類型。它在音頻源代碼中被廣泛用作位域,以過濾或選擇一個或多個指定設備。在Android 11之前的版本中,音頻輸入/輸出設備類型限制為30種,並且沒有可用的插槽來添加新的音頻設備類型。我們已取消了對音頻設備類型數量的限制,以允許添加新的音頻設備類型。

為了消除對音頻設備類型數量的限制,音頻設備類型現在是枚舉值,而不是位掩碼。

所有現有的音頻設備類型均保持不變。 AUDIO_DEVICE_BIT_IN仍用於區分輸入或輸出設備。添加新的音頻設備類型時,它們是在現有值之間的空白中枚舉的值。

OEM不應將audio_devices_t用作位掩碼,因為當添加新的枚舉音頻設備類型時,這可能會導致意外結果。

實例和來源

在Android 11之前,音頻設備類型有兩種典型用法,用作位掩碼。

  • 使用audio_devices_t值表示多個音頻設備。
  • 檢查audio_devices_t值是否包含指定類別中的音頻設備類型。

來表示多個音頻設備類型,一命名的類DeviceTypeSet/libaudiofoundation/include/media/AudioContainers.h被使用,這是一個std::set的容器audio_devices_t 。該類在供應商可用的libaudiofoundation庫中聲明。 audio_devices_t C代碼表示多種音頻設備類型,可以使用audio_devices_t的數組或列表。

要檢查是否單個設備類型是一個指定的類別的,使用輔助功能audio_is_.*_device/system/media/audio/include/system/audio.h 。對於多種音頻設備類型,請在libaudiofoundation使用輔助函數。例如,使用areAllOfSameDeviceType (DeviceTypeSet, std::function ) areAllOfSameDeviceType (DeviceTypeSet, std::function )AudioContainers.h中檢查所有給定的音頻設備類型是否都相同。

實作

OEM需要從音頻HAL實現中刪除音頻設備類型位字段表示。

  1. 刪除位字段上的所有設備存儲。

    audio_devices_t不應用於表示多種音頻設備類型。而是使用列表或向量。

  2. 停止將位操作用於設備類型比較。

    在Android 11之前的版本中,音頻設備類型可以用作位域。在這種情況下,通常使用位運算進行設備類型比較。添加新的枚舉音頻設備類型時,位操作可能會導致意外結果。而是使用輔助函數作為替代。如果只有一個音頻設備類型,則使用直接比較來比較兩個值。要檢查音頻設備類型是否屬於指定類別,請使用/system/media/audio/include/system/audio.h輔助函數。例如, audio_is_output_device(audio_devices_t device)

  3. 停止對音頻設備類型的組使用預定義的值。

    system/media/audio/include/system/audio-base-utils.h ,有一些針對音頻設備類型AUDIO_DEVICE_OUT_ALL預定義值。所有這些值均已保留,但可能會被棄用,因為添加新的枚舉音頻設備類型時它們將不正確。在audio-base-utils.h定義了新的音頻設備類型組,它們是音頻設備類型的數組,例如AUDIO_DEVICE_OUT_ALL_ARRAY

  4. 實現用於路由而不是set_parameterscreate_audio_patch()release_audio_patch()方法。

    set_parameters方法將音頻設備類型用作位域,因此,如果添加新的枚舉音頻設備類型,則可能會出現意外結果。

    當前,需要兩種音頻補丁:

    • 混音到設備補丁,以便播放
    • 混合補丁的設備,用於記錄

    在後續更新中,設備到設備可能需要其他補丁。

    創建音頻補丁時,如果未指定補丁句柄,則要求音頻HAL生成可識別音頻補丁的唯一補丁句柄。否則,音頻HAL應該使用給定的音頻補丁句柄來更新音頻補丁。

    如果使用傳統音頻HAL和AOSP HIDL包裝器,則傳統音頻HAL應將主要HAL版本設置為3.0。

    要啟用音頻補丁功能,音頻HAL應該將主要HAL版本設置為3.0或更高版本。有關更多信息,請參見默認HIDL實現中的Device::supportsAudioPatches() ,也可以在針對墨魚的音頻HAL中找到該信息。

客制化

無法關閉功能或在框架中還原音頻設備重構,從而無法添加音頻設備類型。

添加的所有音頻設備類型都允許以單個位來表示設備類型,因此當前的HAL實現仍然有效。

如果添加了新的音頻設備類型,並且OEM想要使用它們,則他們必須升級其音頻HAL實施並轉移到HIDL 6.0版或更高版本。必須將主要的HAL版本升級到3.0,並實現create_audio_patchrelease_audio_patch方法,因為在添加新的音頻設備類型時,使用set_parameters路由流會導致意外的結果。

驗證方式

OEM所需的工作是更新其HAL實施。音頻HAL的VTS可用於驗證實現是否按預期工作。所有測試都可以在VTS文件中找到。