Bắt đầu từ Android 14, các đối tác và nhà cung cấp hệ thống SoC nên thay thế cách triển khai HIDL HAL hiện tại bằng AIDL HAL trong quá trình triển khai.
Giúp chuyển đổi suôn sẻ từ HIDL Audio HAL (Lớp trừu tượng phần cứng HIDL Audio HAL) với HAL âm thanh AIDL, một số điểm khác biệt chính được nêu bật trên trang này. Trang này cũng hiển thị mối liên kết giữa giao diện AIDL và HIDL cho Lớp trừu tượng phần cứng (HAL) cho âm thanh.
Sự khác biệt giữa cách triển khai lớp trừu tượng phần cứng (HAL) cho âm thanh HIDL và AIDL
Điểm khác biệt chính giữa cấu trúc HIDL và cấu trúc AIDL như sau: sau:
Trong AIDL Audio Core HAL, Giao diện
IConfig
được giới thiệu để thay thế cho giao diện trên toàn hệ thống các tham số trong tệp XML trong HIDL HAL. Khung sẽ đọc các tham số này từ HAL Core 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 sẽ xuất hiện để người dùng kiểm soát được cung cấp bởiIConfig.getSurroundSoundConfig
trong HAL lõi.Trong HAL Hiệu ứng âm thanh AIDL, logic
effectProxy
được xác định trong các tệp XML trong HAL Hiệu ứng HIDL được chuyển sang khung âm thanh. Khung âm thanh truy vấn tất cả các thực thể hiệu ứng trong hệ thống bằngIFactory.queryEffects
cũng như tất cả các quá trình xử lý hiệu ứng sử dụngIFactory.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ànhIModule
trong AIDL Audio HAL.IPrimaryDevice
đã được thay thế trong lớp trừu tượng phần cứng (HAL) cho âm thanh AIDL. Thông tin cập nhật về âm thanh hiện tại và chế độ xoay màn hình được gửi đến mọi thực thểIModule
. Các tham số liên quan đến định hướng kết nối đồng bộ Bluetooth (BT SCO) và Rảnh tay Hồ sơ (HFP) doIBluetooth
chuyên xử lý . Giao diệnITelephony
chuyên dụng cung cấp các tính năng dành riêng cho điện thoại . Bạn có thể truy xuất bản sao của cả hai giao diện này từ thực thể chính của giao diệnIModule
. Xem bảng so sánh trên HAL chính và Chức năng liên quan đến tính năng để biết thêm thông tin.IDevicesFactory
sẽ bị xoá trong lớp trừu tượng phần cứng (HAL) cho âm thanh AIDL để tránh tình trạng dư thừa. Lớp trừu tượng phần cứng (HAL) mô-đun (tức là phiên bản giao diệnIModule
) hiện đã được đăng ký trực tiếp với Trình quản lý dịch vụ bằng cách dùng tên của họ, ví dụ như,bluetooth
hoặcr_submix
. Ngoại lệ duy nhất là mô-đunprimary
các đăng ký dưới tên thực thểdefault
.
Ánh xạ HAL (Lớp trừu tượng phần cứng) cho Âm thanh HIDL và AIDL
Các bảng trong những phần sau đây cho thấy mối liên kết giữa HIDL và AIDL Giao diện HAL âm thanh. Xem Tệp HAL README về âm thanh để biết thêm thông tin về cấu trúc thư mục.
Lớp trừu tượng phần cứng (HAL) lõi
Tất cả giao diện HIDL đều nằm trong gói android.hardware.audio@N.M
, trong đó
N.M
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
.
Giao diện HIDL API và tệp cấu hình | Giao diện API AIDL |
---|---|
IDevicesFactory |
Gói đă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 |
Các tệp Chính sách âm thanh có thể định cấu hình | Sử dụng phương thức 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 phần tử của tệp XML được chỉ định bằng các dấu ngoặc nhọn.
Phương thức giao diện HIDL API và 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.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 cổng âm thanh và luồng âm thanh
Phương thức 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.getPresentationPosition và IStreamIn.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à vùng đệm tối thiểu
kích thước là một phần của cấu trúc AudioPatch do HAL trả về.
Dung lượng bộ nhớ đệm thực tế trong các khung hình là một phần của StreamDescriptor
cấu trúc, cùng với kích thước khung tính bằng byte. Dung lượng bộ nhớ đệm tính bằng byte có thể là
được tính bằng cách nhân hai số này. |
Kết nối Hiệu ứng âm thanh
Phương thức 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 trên toàn hệ thống
Cấu hình trên toàn hệ thống đã được xác định trước đó trong tệp XML chính sách âm thanh
các tệp cấu hình (cụ thể là audio_policy_configuration.xml
và
audio_policy_engine_configuration.xml
) phải được cung cấp thông qua IConfig
.
Tuy nhiên, để quá trình chuyển đổi sang AIDL diễn ra dễ dàng, nhà cung cấp vẫn có thể sử dụng
chính là các tệp XML mà trước đây chúng dùng để thiết lập cấu hình trên toàn hệ thống. Chiến lược phát hành đĩa đơn
triển khai tham chiếu cho IConfig
chứa mã cần thiết để
trình bày thông tin từ tệp XML bằng cách sử dụng các kiểu dữ liệu AIDL,
hỗ trợ chuyển đổi từ XML sang AIDL.
Phần tử của tệp cấu hình HIDL | Phương thức giao diện API AIDL |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
Tách thành hai phương pháp:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> , HOẶC
<volumeGroups> , <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled
bị xoá khỏi tệp cấu hình dưới dạng mục cấu hình này không được sử dụng trong hệ thống. Tất cả thiết bị đều phải có Đã bật DRC.<ahref="#fnref1" Rev="chú thích cuối trang"> </ahref="#fnref1">
Chức năng liên quan đến tính năng
Phương thức 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 lệnh 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 thức lỗi thời
Phương thức giao diện API HIDL | Bình luận |
---|---|
IDevice.initCheck IDevice.close |
Mô-đun HAL chỉ tự xuất bản bằng ServiceManager trên
khởi chạy thành công. Tại thời điểm đó, tài khoản AdSense sẽ được coi là tài khoản vĩnh viễn
và không đóng được. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
Hỗ trợ 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 của nhà cung cấp
Trong API HIDL, các tiện ích của nhà cung cấp được triển khai bằng getParameters
hoặc
Các phương thức setParameters
từ giao diện IDevice
và IStream
. Các
phương thức chấp nhận các chuỗi tuỳ ý.
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 thực thể Parcelable
tuỳ ý bằng cách sử dụng
đóng gói trong ParcelableHolders
.
Các thay đổi khác
Sau đây là các thay đổi chung khác:
Để cải thiện khả năng thử nghiệm của API HAL, trong phiên bản AIDL, chúng tôi giới thiệu các tuỳ chọn gỡ lỗi được sử dụng trong thử nghiệm VTS và có sẵn thông qua gói
ModuleDebug
. Những tuỳ 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 cần phải có sự can thiệp và sử dụng thủ công của thử nghiệm bên ngoài thiết bị.Dịch vụ HAL (Lớp trừu tượng phần cứng) phải khởi động lại khi có giá trị của thuộc tính hệ thống
sys.audio.restart.hal
được đặt thành1
. Quá trình khởi động lại diễn ra thông quaaudioserver.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ệpaudioserver.rc
. Trong Android 14, tên nàyvendor.audio-hal-aidl
được thêm riêng cho phiên bản AIDL của Lớp trừu tượng phần cứng (HAL).
Lớp trừu tượng phần cứng (HAL) cho hiệu ứng
Tất cả giao diện HIDL đều nằm trong android.hardware.audio.effect@N.M*
gói, trong đó N.M
là phiên bản Major.Minor. Tất cả giao diện AIDL đều
trong gói android.hardware.audio.effect
.
Giao diện HIDL API và tệp cấu hình | Giao diện API AIDL |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Nhà máy hiệu ứng
Giao diện HIDL API (android.hardware.audio.effect@X.X) |
Giao diện API AIDL (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects có tham số UUID rỗng |
IEffectsFactory.getDescriptor |
IFactory.queryEffects có tham số mã nhận dạng duy nhất (UUID) |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
Giao diện hiệu ứng
Giao diện HIDL API (android.hardware.audio.effect@X.X) |
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 |
Bản đồ đến IEffect.command ,
IEffect.setParameter hoặc
IEffect.getParameter dựa trên loại HIDL cũ
Command
|
Không áp dụng | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
Lệnh hiệu ứng
Giao diện HIDL API (android.hardware.audio.effect@X.X) |
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 dùng nữa trong AIDL HAL (Lớp trừu tượng phần cứng) cho hiệu ứng |
EFFECT_CMD_SET_PARAM_COMMIT |
Không dùng nữa trong AIDL HAL (Lớp trừu tượng phần cứng) cho hiệu ứng |
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
(tương tự VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
Không được dùng nữa.
Trong AIDL, các nút chuyển chế độ giảm tải và không giảm tải được xử lý trong khung. |
EFFECT_CMD_DUMP |
Được xử lý bằng giao dịch liên kết tích hợp sẵn AIBinder_dump . |
Định nghĩa các tham số Hiệu ứng phổ biến
Định nghĩa HIDL (android.hardware.audio.effect@X.X) |
Định nghĩa AIDL |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
Định nghĩa về Hiệu ứng cụ thể
Giao diện HIDL API (android.hardware.audio.effect@X.X) |
Giao diện API AIDL (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |