在 Android 音訊中,audio_devices_t
代表音訊裝置類型。是
廣泛用於音訊原始碼的位元欄位,用於篩選或選取一或多個
。在 Android 11 之前,上限為 30 個
音訊輸入/輸出裝置類型,以及沒有備用音訊裝置類型的備用插槽。我們
已解除音訊裝置類型的上限
新的音訊裝置類型。
為瞭解除音訊裝置類型的數量限制,現在使用音訊裝置類型 列舉值而非位元遮罩。
所有現有的音訊裝置類型都會維持現狀。AUDIO_DEVICE_BIT_IN
仍用於區分輸入或輸出裝置。新增音訊裝置類型時,會在現有值之間的空隙中列舉值。
原始設備製造商 (OEM) 不應使用 audio_devices_t
做為位元遮罩,因為這會導致
新增列舉的音訊裝置類型時,可能會產生非預期的結果。
範例和來源
在 Android 11 之前,下列是兩種一般的音訊裝置用法 視為位元遮罩
- 使用
audio_devices_t
值代表多個音訊裝置。 - 正在檢查
audio_devices_t
值是否包含音訊裝置類型 指定的類別
為了代表多種音訊裝置類型,我們使用 /libaudiofoundation/include/media/AudioContainers.h
中的 DeviceTypeSet
類別,這是 audio_devices_t
的 std::set
容器。這個類別會在供應商提供的 libaudiofoundation
程式庫中宣告。如要在 C 程式碼中表示多個音訊裝置類型,可以使用 audio_devices_t
陣列或清單。
如要檢查單一裝置類型是否屬於指定類別,請使用輔助函式
「」中的「audio_is_.*_device
」
/system/media/audio/include/system/audio.h
。
如果有多個音訊裝置類型,請在 libaudiofoundation
中使用輔助函式。舉例來說,您可以使用 AudioContainers.h
中的 areAllOfSameDeviceType (DeviceTypeSet, std::function
,檢查所有指定的音訊裝置類型是否為相同類型。
實作
原始設備製造商需要從音訊 HAL 實作中移除音訊裝置類型位元欄位表示法。
- 移除小欄位的所有裝置儲存空間。
audio_devices_t
不應用於代表多種音訊裝置類型。請改用清單或向量。 - 停止使用位元運算來比較裝置類型。
在 Android 11 之前,音訊裝置類型可做為 位元欄位。在這種情況下,經常針對裝置類型使用位元運算。 比較。新增枚舉音訊裝置類型時,位元運算可能會導致意外結果。請改用輔助函式。如果只有一種音訊裝置類型,請使用直接比較方式比較這兩個值。如要檢查音訊裝置類型是否屬於特定類別,請使用
/system/media/audio/include/system/audio.h
中的輔助函式。例如:audio_is_output_device(audio_devices_t device)
- 請停止為音訊裝置類型群組使用預先定義的值。
音訊裝置類型群組有一些預先定義的值
AUDIO_DEVICE_OUT_ALL
,於system/media/audio/include/system/audio-base-utils.h
。所有這些值皆為保留值,但可能會淘汰,因為在新增枚舉音訊裝置類型時,這些值將不會正確。audio-base-utils.h
中定義了新的音訊裝置類型群組,這些群組是音訊裝置類型的陣列,例如AUDIO_DEVICE_OUT_ALL_ARRAY
。 - 導入
create_audio_patch()
和release_audio_patch()
而非set_parameters
的轉送方法set_parameters
方法使用音訊裝置類型做為位元欄位,因此可以 如果新增了列舉的音訊裝置類型,將導致非預期的結果。目前必須使用兩種音訊修補程式:
- 用於播放的裝置修補程式
- 用於錄製的混音裝置
在後續更新中,裝置間的通訊可能需要額外的修補程式。
建立音訊修補程式時,如果未指定修補程式句柄,音訊 HAL 就必須產生可識別音訊修補程式的專屬修補程式句柄。否則 音訊 HAL 應使用指定的音訊修補控制代碼來更新音訊修補程式。
如果使用舊版音訊 HAL 和 Android 開放原始碼計畫 HIDL 包裝函式,舊版音訊 HAL 應將主要 HAL 版本設為 3.0。
如要啟用音訊修補功能,音訊 HAL 應設為 將主要 HAL 版本更新至 3.0 或 更高。詳情請參閱預設 HIDL 實作項目中的
Device::supportsAudioPatches()
,也可以查看 Cuttlefish 的音訊 HAL。
自訂
您無法關閉這項功能,也無法在架構中還原音訊裝置重構,因此無法新增音訊裝置類型。
您新增的所有音訊裝置類型,都能代表採用單一位元組合的裝置類型。 因此目前的 HAL 實作仍可正常運作
如果新增了音訊裝置類型,且原始設備製造商 (OEM) 想使用這些類型,就必須升級音訊 HAL 實作方式,並改用 HIDL 6.0 以上版本。您必須將主要 HAL 版本升級至 3.0,並實作 create_audio_patch
和 release_audio_patch
方法,因為在新增音訊裝置類型時,使用 set_parameters
來路由串流可能會導致非預期的結果。
驗證
原始設備製造商 (OEM) 的必要工作是更新 HAL 實作項目。您可以使用音訊 HAL 的 VTS,驗證實作是否正常運作。所有語言 您可以在 VTS 檔案。