Android 14 より、パートナーと SoC ベンダーは現在の HIDL HAL 実装を AIDL HAL 実装に変更することが推奨されます。
HIDL オーディオ HAL から AIDL オーディオ HAL にスムーズに移行できるように、このページでは主な相違点をまとめています。また、このページではオーディオ HAL の AIDL インターフェースと HIDL インターフェース間のマッピングについても説明しています。
AIDL と HIDL オーディオ HAL 実装の違い
HIDL 構造と AIDL 構造の主な違いは次のとおりです。
AIDL オーディオコア HAL では、
IConfig
インターフェースが HIDL HAL の XML ファイルにあるシステム全体のパラメータに置き換わるものとして導入されています。フレームワークはベンダー構成ファイルではなくコア HAL からこれらのパラメータを読み込みます。例を挙げると、ユーザー制御に表示されるサラウンド形式のリストはコア HAL のIConfig.getSurroundSoundConfig
メソッドで指定されます。AIDL オーディオ エフェクト HAL では、HIDL エフェクト HAL の XML ファイルで定義されている
effectProxy
ロジックがオーディオ フレームワークに移行します。オーディオ フレームワークはIFactory.queryEffects
を使ってシステムのすべてのエフェクト インスタンスをクエリし、IFactory.queryProcessing
を使ってすべてのエフェクト処理をクエリします。オーディオ デバイスタイプのデバイスという用語の使用により混乱を招かないように、HIDL オーディオ HAL の
IDevice
は AIDL オーディオ HAL ではIModule
に名前が変更されます。IPrimaryDevice
は AIDL オーディオ HAL では置き換わります。現在のオーディオ モードと画面の回転に関するアップデートはすべてのIModule
インスタンスに送信されます。Bluetooth 同期接続指向(BT SCO)とハンズフリー プロファイル(HFP)に関連するパラメータは専用のIBluetooth
インターフェースで処理されます。専用のITelephony
インターフェースではテレフォニー固有の制御ができます。この両方のインターフェースのインスタンスは、IModule
インターフェースのプライマリ インスタンスから取得できます。詳細はコア HAL の比較表と、機能関連の特徴をご覧ください。IDevicesFactory
は冗長を避けるため、AIDL オーディオ HAL では削除されます。HAL モジュール(IModule
インターフェース インスタンス)はbluetooth
やr_submix
などの名前をインスタンス名に使用して、直接サービス マネージャーに登録されます。唯一の例外はprimary
モジュールで、インスタンス名はdefault
として登録されます。
AIDL と HIDL オーディオ HAL のマッピング
次のセクションの表は HIDL と AIDL オーディオ HAL インターフェース間のマッピングを示しています。ディレクトリ構造について詳細は、オーディオ HAL README ファイルをご覧ください。
コア HAL
すべての HIDL インターフェースは android.hardware.audio@N.M
パッケージ内にあり、N.M
は Major.Minor バージョンを意味します。すべての AIDL インターフェースは android.hardware.audio.core
パッケージ内にあります。
HIDL API インターフェースと構成ファイル | AIDL API インターフェース |
---|---|
IDevicesFactory |
ServiceManager での IModule の登録。 |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
設定可能なオーディオ ポリシー ファイル | Android 14 の HIDL 実装を使用します。 |
オーディオ ポート、ダイナミック プロファイル、ルート、パッチ
この表では、XML ファイルの要素を山かっこで囲んでいます。
HIDL API インターフェース メソッドと構成ファイルの要素 | AIDL API インターフェース メソッド |
---|---|
<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
IDevice.openInputStream のデバイスの仕様
IDevice.openOutputStream |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
オーディオ ポート構成とストリーム
HIDL API インターフェース メソッド | AIDL API インターフェース メソッド |
---|---|
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 と 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 、軽微なレイテンシ、最小バッファサイズは HAL によって返される AudioPatch 構造の一部です。実際のバッファサイズ(フレーム数)は StreamDescriptor 構造の一部です。フレームサイズ(バイト数)も同様です。バッファサイズ(バイト数)はこれら 2 つの数字を乗算して計算できます。 |
オーディオ エフェクト接続
HIDL API インターフェース メソッド | AIDL API インターフェース メソッド |
---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
システム全体の設定
これまでオーディオ ポリシー XML 構成ファイル(audio_policy_configuration.xml
と audio_policy_engine_configuration.xml
)で定義されていたシステム全体の設定は、IConfig
で行う必要があります。ただし、AIDL への移行をスムーズに行えるように、ベンダーは引き続きこれまでシステム全体の設定に使用してきたものと同じ XML ファイルを使用することもできます。IConfig
のリファレンス実装には、AIDL データタイプを使用して XML ファイルからの情報を示すために必要なコードが含まれており、XML から AIDL への変換をサポートします。
HIDL 構成ファイルの要素 | AIDL API インターフェース メソッド |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
2 つの異なるメソッドに分割:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> または
<volumeGroups> 、<ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled
は構成ファイルから削除されます。この構成アイテムはシステム内で使用されないためです。すべてのデバイスで DRC を有効にする必要があります。<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
機能関連の特徴
HIDL API インターフェース メソッド | AIDL API インターフェース |
---|---|
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 (コールバックは IStreamOutEventCallback に統合) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
廃止メソッド
HIDL API インターフェース メソッド | コメント |
---|---|
IDevice.initCheck IDevice.close |
HAL モジュールは初期化が正常に終了すると、ServiceManager でのみ公開されます。その時点で恒久的とみなされ、閉じることはできません。 |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
パッチ、一時停止、再開、消耗に対するサポートは必須です。 |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
廃止。 |
ベンダー拡張
HIDL API では、IDevice
と IStream
インターフェースから getParameters
または setParameters
メソッドを使って、ベンダー拡張が実装されます。これらのメソッドでは任意の文字列を使用できます。AIDL API には、getVendorParameters
や setVendorParameters
などの対応するメソッドがあり、ParcelableHolders
内のカプセル化を使って、任意の Parcelable
インスタンスを取得します。
その他の変更点
その他の一般的な変更には次のものがあります。
HAL API のテストの容易性を高めるため、AIDL バージョンでは VTS テストで使用するデバッグ オプションを導入しています。これは
ModuleDebug
Parcelable から利用できます。これらのオプションは HAL に特定の機能(外部デバイスとの接続など)のエミュレートを指示します。オプションを使用しない場合、手動での操作と外部テスト機器が必要となります。HAL サービスはシステム プロパティの
sys.audio.restart.hal
の値を1
に設定した場合、再起動する必要があります。再起動はaudioserver.rc
で行われます。HAL を実装する際に、audioserver.rc
ファイルに記載された適切な HAL サービス名を使用してください。Android 14 では、vendor.audio-hal-aidl
という名前が AIDL バージョンの HAL 用に追加されています。
エフェクト HAL
すべての HIDL インターフェースは android.hardware.audio.effect@N.M*
パッケージ内にあり、N.M
は Major.Minor バージョンを意味します。すべての AIDL インターフェースは android.hardware.audio.effect
パッケージ内にあります。
HIDL API インターフェースと構成ファイル | AIDL API インターフェース |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
エフェクト Factory
HIDL API インターフェース (android.hardware.audio.effect@X.X) |
AIDL API インターフェース (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
null UUID パラメータを持つ IFactory.queryEffects |
IEffectsFactory.getDescriptor |
UUID パラメータを持つ IFactory.queryEffects |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
エフェクト インターフェース
HIDL API インターフェース (android.hardware.audio.effect@X.X) |
AIDL API インターフェース (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 |
従来の HIDL コマンドのタイプに基づき、IEffect.command 、IEffect.setParameter 、IEffect.getParameter にマッピング |
なし | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
エフェクト コマンド
HIDL API インターフェース (android.hardware.audio.effect@X.X) |
AIDL API インターフェース (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 |
エフェクト AIDL HAL で非推奨 |
EFFECT_CMD_SET_PARAM_COMMIT |
エフェクト 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
( VISUALIZER_CMD_CAPTURE と同様)
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
非推奨。 AIDL ではオフロードと非オフロード モードの切り替えはフレームワークで処理されます。 |
EFFECT_CMD_DUMP |
組み込みバインダ トランザクションの AIBinder_dump で処理。 |
一般的なエフェクト パラメータ定義
HIDL 定義 (android.hardware.audio.effect@X.X) |
AIDL 定義 |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
固有のエフェクト定義
HIDL API インターフェース (android.hardware.audio.effect@X.X) |
AIDL API インターフェース (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |