So sánh HAL âm thanh AIDL và HIDL

Bắt đầu từ Android 14, các đối tác và nhà cung cấp SoC được khuyến khích thay thế cách triển khai HIDL HAL hiện tại bằng cách triển khai AIDL HAL.

Để tạo điều kiện chuyển đổi suôn sẻ từ HIDL Audio HAL sang AIDL Audio HAL, một số điểm khác biệt chính được nêu rõ trên trang này. Trang này cũng hiển thị ánh xạ giữa giao diện AIDL và HIDL cho Audio HAL.

Sự khác biệt giữa triển khai AIDL và HIDL Audio HAL

Sự khác biệt chính giữa cấu trúc HIDL và cấu trúc AIDL như sau:

  • Trong AIDL Audio Core HAL , giao diện IConfig được giới thiệu như một sự thay thế cho các tham số toàn hệ thống trong các tệp XML trong HIDL HAL. Khung đọc các tham số này từ Core HAL thay vì tệp cấu hình của nhà cung cấp. Ví dụ: danh sách các định dạng âm thanh vòm được hiển thị để người dùng kiểm soát được cung cấp bởi phương thức IConfig.getSurroundSoundConfig trong Core HAL.

    Trong AIDL Audio Effects HAL , logic effectProxy được xác định trong các tệp XML trong HIDL Effects HAL được chuyển sang khung âm thanh. Khung âm thanh truy vấn tất cả các trường hợp hiệu ứng trong hệ thống bằng cách sử dụng IFactory.queryEffects và tất cả các quá trình xử lý hiệu ứng bằng cách sử dụng IFactory.queryProcessing .

  • Để tránh nhầm lẫn khi sử dụng thuật ngữ thiết bị cho các loại thiết bị âm thanh, IDevice trong HIDL Audio HAL được đổi tên thành IModule trong AIDL Audio HAL.

  • IPrimaryDevice được thay thế trong AIDL Audio HAL. Các cập nhật về chế độ âm thanh hiện tại và xoay màn hình sẽ được gửi tới mọi phiên bản IModule . Các thông số liên quan đến định hướng kết nối đồng bộ Bluetooth (BT SCO) và Cấu hình rảnh tay (HFP) được xử lý bởi giao diện IBluetooth chuyên dụng. Giao diện ITelephony chuyên dụng cung cấp các điều khiển dành riêng cho điện thoại. Các phiên bản của cả hai giao diện này có thể được truy xuất từ ​​phiên bản chính của giao diện IModule . Xem bảng so sánh về Core HALchức năng liên quan đến Tính năng để biết thêm thông tin.

  • IDevicesFactory bị xóa trong AIDL Audio HAL để tránh dư thừa. Các mô-đun HAL (nghĩa là các phiên bản giao diện IModule ) hiện được đăng ký trực tiếp với Trình quản lý dịch vụ bằng cách sử dụng tên của chúng làm tên phiên bản, chẳng hạn như bluetooth hoặc r_submix . Ngoại lệ duy nhất là mô-đun primary đăng ký theo tên phiên bản default .

Ánh xạ HAL âm thanh AIDL và HIDL

Các bảng trong các phần sau hiển thị ánh xạ giữa giao diện HIDL và AIDL Audio HAL. Xem tệp Audio HAL README để biết thêm thông tin về cấu trúc thư mục.

HAL lõi

Tất cả giao diện HIDL đều nằm trong gói android.hardware.audio@NM , trong đó NM biểu thị phiên bản Major.Minor . Tất cả giao diện AIDL đều nằm trong gói android.hardware.audio.core .

Các tệp cấu hình và giao diện API HIDL Giao diện API AIDL
IDevicesFactory Đăng ký IModule với ServiceManager .
IDevice IModule
IPrimaryDevice ITelephony
IBluetooth
IStream
IStreamIn
IStreamOut
StreamDescriptor
IStreamIn
IStreamCommon
IStreamOut
audio_policy_configuration.xml
audio_policy_engine_configuration.xml
IConfig
IModule
Tệp chính sách âm thanh có thể định cấu hình Sử dụng triển khai HIDL cho Android 14.

Cổng âm thanh, cấu hình động, tuyến đường và bản vá

Trong bảng này, các thành phần của tệp XML được chỉ định bằng dấu ngoặc nhọn.

Các phương thức giao diện API HIDL và các phần tử tệp cấu hình Phương thức giao diện API AIDL
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts>
IModule.getAudioPorts
IDevice.getAudioPort
IDevice.setConnectedState
IModule.getAudioPort
IModule.connectExternalDevice
IModule.disconnectExternalDevice
IStream.getSupportedProfiles IModule.connectExternalDevice
< routes > IModule.getAudioRoutes
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
Thông số kỹ thuật của thiết bị trong IDevice.openInputStream
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Cấu hình và luồng cổng âm thanh

Phương pháp giao diện API HIDL Phương thức giao diện API AIDL
IStream.getAudioProperties
IStream.setAudioProperties
IStreamIn.getAudioSource
IModule.getAudioPortConfigs
IModule.setAudioPortConfig
IDevice.openInputStream
IDevice.openOutputStream
IStreamIn.prepareForReading
IStreamOut.prepareForWriting
IStream.createMmapBuffer
IModule.openInputStream
IModule.openOutputStream
IStream.close IStreamCommon.close
IStreamIn.updateSinkMetadata
IStreamOut.updateSourceMetadata
IStreamIn.updateMetadata
IStreamOut.updateMetadata
IStream.standby StreamDescriptor.Command.standby
IStream.pause
IStream.resume
IStream.start
IStream.stop
StreamDescriptor.Command.pause
.start
.start
.drain
IStreamOut.drain
IStreamOut.flush
StreamDescriptor.Command.drain
.flush
IStreamOut.setCallback
IStreamOut.clearCallback
IModule.openOutputStream
IStreamCommon.close
IStreamOut.getPresentationPositionIStreamIn.getCapturePosition
IStreamOut.getLatency
IStream.getMmapPosition
IStreamIn.getInputFramesLost
StreamDescriptor.Reply.observable
StreamDescriptor.Reply.latencyMs
StreamDescriptor.Reply.hardware
StreamDescriptor.Reply.xrunFrames
IDevice.getInputBufferSize
IStreamOut.getLatency
IStream.getBufferSize
IStream.getFrameSize
IStream.getFrameCount
IModule.setAudioPatch , độ trễ danh nghĩa và kích thước bộ đệm tối thiểu là một phần của cấu trúc AudioPatch được HAL trả về. Kích thước bộ đệm thực tế trong khung là một phần của cấu trúc StreamDescriptor , cùng với kích thước khung tính bằng byte. Kích thước bộ đệm tính bằng byte có thể được tính bằng cách nhân hai số này.

Kết nối hiệu ứng âm thanh

Phương pháp giao diện API HIDL Phương thức giao diện API AIDL
IDevice.addDeviceEffect
IDevice.removeDeviceEffect
IModule.addDeviceEffect
IModule.removeDeviceEffect
IStream.addEffect
IStream.removeEffect
IStreamCommon.addEffect
IStreamCommon.removeEffect

Cấu hình toàn hệ thống

Cấu hình toàn hệ thống đã được xác định trước đó trong các tệp cấu hình XML chính sách âm thanh (cụ thể là audio_policy_configuration.xmlaudio_policy_engine_configuration.xml ) phải được cung cấp thông qua IConfig . Tuy nhiên, để dễ dàng chuyển đổi sang AIDL, các nhà cung cấp vẫn có tùy chọn sử dụng cùng các tệp XML mà trước đây họ đã sử dụng để đặt cấu hình toàn hệ thống. Việc triển khai tham chiếu cho IConfig chứa mã cần thiết để biểu diễn thông tin từ tệp XML bằng cách sử dụng các kiểu dữ liệu AIDL, tạo điều kiện thuận lợi cho việc chuyển đổi từ XML sang AIDL.

Các phần tử tệp cấu hình HIDL Phương thức giao diện API AIDL
<globalConfiguration>
<speaker_drc_enabled> 1

<call_screen_mode_supported>
<engine_library>
Tách thành hai phương pháp khác nhau:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> , HOẶC
<volumeGroups> , <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. speaker_drc_enabled bị xóa khỏi tệp cấu hình vì mục cấu hình này không được sử dụng trong hệ thống. Tất cả các thiết bị phải được kích hoạt DRC.

Chức năng liên quan đến tính năng

Phương pháp giao diện API HIDL Giao diện API AIDL
IDevice.setMasterVolume
IDevice.getMasterVolume
IDevice.setMicMute
IDevice.getMicMute
IDevice.setMasterMute
IDevice.getMasterMute
IModule.\*
IPrimaryDevice.getTtyMode
IPrimaryDevice.setTtyMode
IPrimaryDevice.getHacEnabled
IPrimaryDevice.setHacEnabled
IPrimaryDevice.setVoiceVolume
ITelephony.TelecomConfig.\*
IPrimaryDevice.setBtScoHeadsetDebugName
IPrimaryDevice.getBtScoNrecEnabled
IPrimaryDevice.setBtScoNrecEnabled
IPrimaryDevice.getBtScoWidebandEnabled
IPrimaryDevice.setBtScoWidebandEnabled,
IPrimaryDevice.getBtHfpEnabled
IPrimaryDevice.setBtHfpEnabled
IPrimaryDevice.setBtHfpSampleRate
IPrimaryDevice.setBtHfpVolume
IBluetooth.ScoConfig.\*
IBluetooth.HfpConfig.\*
IPrimaryDevice.setMode
IPrimaryDevice.updateRotation
ITelephony.switchAudioMode
IModule.updateAudioMode
IModule.updateScreenRotation
IDevice.setScreenState
IDevice.getMicrophones
IModule.updateScreenState
IModule.getMicrophones
IDevice.getHwAvSync
IStream.setHwAvSync
IModule.generateHwAvSyncId
IStreamCommon.updateHwAvSyncId
IStreamIn.setGain
IStreamIn.setMicrophoneDirection
IStreamIn.setMicrophoneFieldDimension
IStreamIn.setHwGain
IStreamIn.setMicrophoneDirection
IStreamIn.setMicrophoneFieldDimension
IStreamOut.getDualMonoMode
IStreamOut.setDualMonoMode
IStreamOut.getPlaybackRateParameters
IStreamOut.setPlaybackRateParameters
IStreamOut.selectPresentation
IStreamOut.getAudioDescriptionMixLevel
IStreamOut.setAudioDescriptionMixLevel
IStreamOut.setLatencyMode
IStreamOut.getRecommendedLatencyModes
IStreamOut.\*
IStreamOut.setEventCallback
IStreamOut.setLatencyModeCallback
IModule.openOutputStream (các cuộc gọi lại được kết hợp thành IStreamOutEventCallback )
IDevice.get/setParameters
IStream.get/setParameters
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters

Phương pháp lỗi thời

Phương pháp giao diện API HIDL Bình luận
IDevice.initCheck
IDevice.close
Mô-đun HAL chỉ tự xuất bản với ServiceManager khi khởi tạo thành công. Tại thời điểm đó, nó được coi là vĩnh viễn và không thể đóng lại được.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Hỗ trợ các bản vá, tạm dừng, tiếp tục và thoát là bắt buộc.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Lỗi thời.

Tiện ích mở rộng nhà cung cấp

Trong API HIDL, các tiện ích mở rộng của nhà cung cấp được triển khai bằng cách sử dụng các phương thức getParameters hoặc setParameters từ giao diện IDeviceIStream . Các phương thức này chấp nhận các chuỗi tùy ý. Trong API AIDL, có các phương thức tương ứng, chẳng hạn như getVendorParameters hoặc setVendorParameters , lấy các phiên bản Parcelable tùy ý bằng cách sử dụng tính năng đóng gói trong ParcelableHolders .

Những thay đổi khác

Những thay đổi chung khác như sau:

  1. Để cải thiện khả năng kiểm tra của API HAL, trong phiên bản AIDL, chúng tôi giới thiệu các tùy chọn gỡ lỗi được các thử nghiệm VTS sử dụng và có sẵn thông qua gói ModuleDebug . Các tùy chọn này hướng dẫn HAL mô phỏng một số chức năng nhất định (ví dụ: kết nối các thiết bị bên ngoài), nếu không thì yêu cầu can thiệp thủ công và sử dụng thiết bị kiểm tra bên ngoài.

  2. Các dịch vụ HAL bắt buộc phải khởi động lại khi giá trị của thuộc tính hệ thống sys.audio.restart.hal được đặt thành 1 . Việc khởi động lại được thực hiện thông qua audioserver.rc . Trong khi triển khai HAL, hãy sử dụng tên dịch vụ HAL thích hợp được liệt kê trong tệp audioserver.rc . Trong Android 14, tên vendor.audio-hal-aidl được thêm riêng cho phiên bản AIDL của HAL.

Hiệu ứng HAL

Tất cả giao diện HIDL đều nằm trong gói android.hardware.audio.effect@NM* , trong đó NM là phiên bản Major.Minor . Tất cả giao diện AIDL đều nằm trong gói android.hardware.audio.effect .

Các tệp cấu hình và giao diện API HIDL Giao diện API AIDL
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Nhà máy hiệu ứng

Giao diện API HIDL
(android.hardware.audio.effect@XX)
Giao diện API AIDL
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects với tham số UUID null
IEffectsFactory.getDescriptor IFactory.queryEffects với tham số UUID
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.queryEffects

Giao diện hiệu ứng

Giao diện API HIDL
(android.hardware.audio.effect@XX)
Giao diện API AIDL
(android.hardware.audio.effect)
IEffect.init IEffect.open
IEffect.setConfig IEffect.setParameter
IEffect.enable IEffect.command(CommandId::START)
IEffect.disable IEffect.command(CommandId::STOP)
IEffect.reset IEffect.command(CommandId::RESET)
IEffect.getDescriptor IEffect.getDescriptor
IEffect.command Ánh xạ tới IEffect.command ,
IEffect.setParameter hoặc
IEffect.getParameter dựa trên loại lệnh HIDL kế thừa
không áp dụng IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

Lệnh hiệu ứng

Giao diện API HIDL
(android.hardware.audio.effect@XX)
Giao diện API AIDL
(android.hardware.audio.effect)
EFFECT_CMD_INIT IEffect.open
EFFECT_CMD_RESET CommandId.RESET
EFFECT_CMD_ENABLE IEffect.command(CommandId::START)
EFFECT_CMD_DISABLE IEffect.command(CommandId::STOP)
EFFECT_CMD_SET_PARAM_DEFERRED Không được dùng nữa trong Effects AIDL HAL
EFFECT_CMD_SET_PARAM_COMMIT Không được dùng nữa trong Effects AIDL HAL
EFFECT_CMD_SET_CONFIG
EFFECT_CMD_SET_PARAM
EFFECT_CMD_SET_DEVICE
EFFECT_CMD_SET_VOLUME
EFFECT_CMD_SET_AUDIO_MODE
EFFECT_CMD_SET_CONFIG_REVERSE
EFFECT_CMD_SET_INPUT_DEVICE
EFFECT_CMD_SET_FEATURE_CONFIG
EFFECT_CMD_SET_AUDIO_SOURCE
IEffect.setParameter
EFFECT_CMD_GET_PARAM
EFFECT_CMD_GET_CONFIG
EFFECT_CMD_GET_CONFIG_REVERSE
EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
EFFECT_CMD_GET_FEATURE_CONFIG
VISUALIZER_CMD_MEASURE
EFFECT_CMD_FIRST_PROPRIETARY
(giống như VISUALIZER_CMD_CAPTURE )
IEffect.getParameter
EFFECT_CMD_OFFLOAD Không dùng nữa.
Trong AIDL, các chuyển đổi chế độ giảm tải và không giảm tải được xử lý trong khung.
EFFECT_CMD_DUMP Được xử lý bởi giao dịch liên kết tích hợp AIBinder_dump .

Định nghĩa tham số Hiệu ứng chung

định nghĩa HIDL
(android.hardware.audio.effect@XX)
AIDL định nghĩa
Types.hal Flags.aidl
Parameter.aidl

Định nghĩa tác dụng cụ thể

Giao diện API HIDL
(android.hardware.audio.effect@XX)
Giao diện API AIDL
(android.hardware.audio.effect)
I $EffectType$ .hal $EffectType$ .aidl