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ứcIConfig.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ụngIFactory.queryEffects
và tất cả các quá trình xử lý hiệu ứng bằng cách 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 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ảnIModule
. 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ệnIBluetooth
chuyên dụng. Giao diệnITelephony
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ệnIModule
. Xem bảng so sánh về Core HAL và chứ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ệnIModule
) 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ặcr_submix
. Ngoại lệ duy nhất là mô-đunprimary
đăng ký theo tên phiên bảndefault
.
Á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.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.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à 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.xml
và audio_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> <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 |
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 IDevice
và IStream
. 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:
Để 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.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ành1
. Việc khởi động lại được thực hiện 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ênvendor.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ặcIEffect.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 |