裝置類型限制

在 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 也就是 audio_devices_tstd::set 容器。 類別是在供應商提供的 libaudiofoundation 程式庫。代表 多個音訊 可使用 C 程式碼中的裝置類型、陣列或 audio_devices_t 清單。

如要檢查單一裝置類型是否屬於指定類別,請使用輔助函式 「」中的「audio_is_.*_device/system/media/audio/include/system/audio.h。 如果有多個音訊裝置類型,請在 libaudiofoundation 中使用輔助函式。適用對象 例如,請使用 areAllOfSameDeviceType (DeviceTypeSet, std::function) AudioContainers.h:檢查所有指定音訊裝置類型是否所有 屬於相同類型

實作

原始設備製造商 (OEM) 需要從音訊 HAL 實作中移除音訊裝置類型位元欄位表示法。

  1. 移除小欄位的所有裝置儲存空間。

    audio_devices_t 不得用來代表多部音訊裝置 。請改用清單或向量。

  2. 停止使用位元運算進行裝置類型比較。

    在 Android 11 之前,音訊裝置類型可做為 位元欄位。在這種情況下,經常針對裝置類型使用位元運算。 比較。新增列舉的音訊裝置類型時,位元運算可能會導致位元運算 非預期的結果請改用輔助函式。如果 Google Play 設有單一 音訊裝置類型,然後使用直接比較來比較兩個值。如何確認音訊是否正常 裝置類型屬於指定類別, /system/media/audio/include/system/audio.h。例如:audio_is_output_device(audio_devices_t device)

  3. 停止對音訊裝置類型群組使用預先定義的值。

    音訊裝置類型群組有一些預先定義的值 AUDIO_DEVICE_OUT_ALL,於 system/media/audio/include/system/audio-base-utils.h。這些值全都是 已保留,但可能已淘汰,因為新的列舉會在新增列舉時不正確 新增音訊裝置類型。我們在 audio-base-utils.h,此為音訊裝置類型的陣列,例如 AUDIO_DEVICE_OUT_ALL_ARRAY

  4. 導入 create_audio_patch()release_audio_patch() 而非 set_parameters 的轉送方法

    set_parameters 方法使用音訊裝置類型做為位元欄位,因此可以 如果新增了列舉的音訊裝置類型,將導致非預期的結果。

    目前必須使用兩種音訊修補程式:

    • 用於播放的裝置修補程式
    • 要混用修補程式的裝置

    在後續的更新中,裝置可能需要額外的修補程式。

    建立音訊修補程式時,如果修補程式控點沒有 就必須讓音訊 HAL 產生不重複的修補控制代碼 識別音訊修補程式否則 音訊 HAL 應使用指定的音訊修補控制代碼來更新音訊修補程式。

    如果使用舊版音訊 HAL 和 Android 開放原始碼計畫 HIDL 包裝函式,應設定舊版音訊 HAL 將主要 HAL 版本更新至 3.0 版

    如要啟用音訊修補功能,音訊 HAL 應設為 將主要 HAL 版本更新至 3.0 或 更高。請參閱 Device::supportsAudioPatches() 預設 HIDL 實作 或前往 Cuttlefish 的音訊 HAL 瞭解詳情。

自訂

你無法關閉這項功能,也無法還原音訊裝置在 可讓您新增音訊裝置類型

您新增的所有音訊裝置類型,都能代表採用單一位元組合的裝置類型。 因此目前的 HAL 實作仍可正常運作

如果新增的音訊裝置類型,且原始設備製造商 (OEM) 想使用, 必須升級音訊 HAL 實作,並遷移至 HIDL 6.0 以上版本。是 必須將主要 HAL 升級至 3.0 版 create_audio_patchrelease_audio_patch 方法,因為 使用 set_parameters 轉送串流,可能會導致非預期的結果 新增音訊裝置類型。

驗證

原始設備製造商 (OEM) 的必要工作是更新 HAL 實作項目。影片片段: 音訊 HAL 可用來驗證實作是否正常運作。所有語言 您可以在 VTS 檔案