החל מ-Android 14, מומלץ לשותפים ולספקי SoC להחליף את ההטמעה הנוכחית של HIDL HAL בהטמעה של AIDL HAL.
כדי להקל על המעבר מ-HIDL Audio HAL ל-AIDL Audio HAL, ריכזנו בעמוד הזה את ההבדלים העיקריים בין השניים. בדף הזה מוצג גם המיפוי בין ממשקי ה-AIDL וה-HIDL עבור Audio HAL.
ההבדל בין הטמעה של AIDL לבין הטמעה של HIDL Audio HAL
ההבדלים העיקריים בין המבנה של HIDL לבין המבנה של AIDL הם:
ב-AIDL Audio Core HAL, ממשק
IConfig
מוצג כתחליף לפרמטרים של המערכת כולה בקובצי XML ב-HIDL HAL. הפרמטרים האלה נקראים על ידי המסגרת מ-Core HAL במקום מקובץ ההגדרות של הספק. לדוגמה, רשימת הפורמטים של סראונד שמוצגת למשתמש כדי לשלוט בהם מסופקת על ידי השיטהIConfig.getSurroundSoundConfig
ב-Core HAL.ב-AIDL Audio Effects HAL, הלוגיקה של
effectProxy
שמוגדרת בקובצי XML ב-HIDL Effects HAL מועברת אל מסגרת האודיו. מסגרת האודיו שולחת שאילתות לכל המופעים של האפקטים במערכת באמצעותIFactory.queryEffects
, ולכל העיבודים של האפקטים באמצעותIFactory.queryProcessing
.כדי למנוע בלבול בשימוש במונח מכשיר לסוגי מכשירי אודיו, השם של
IDevice
ב-HIDL Audio HAL משתנה ל-IModule
ב-AIDL Audio HAL.
IPrimaryDevice
מוחלף ב-AIDL Audio HAL. עדכונים לגבי מצב האודיו הנוכחי וסיבוב המסך נשלחים לכל מופע שלIModule
. פרמטרים שקשורים ל-Bluetooth synchronous connection oriented (BT SCO) ול-Hands-Free Profile (HFP) מטופלים על ידי ממשקIBluetooth
ייעודי. ממשק ייעודיITelephony
מספק אמצעי בקרה ספציפיים לטלפוניה. אפשר לאחזר מופעים של שני הממשקים האלה מהמופע הראשי של הממשקIModule
. מידע נוסף זמין בטבלאות ההשוואה בנושא Core HAL ופונקציונליות שקשורה לתכונות.ההגדרה
IDevicesFactory
הוסרה ב-AIDL Audio HAL כדי למנוע כפילות. מודולי HAL (כלומר, מופעי ממשקIModule
) רשומים עכשיו ישירות ב-Service Manager באמצעות השמות שלהם כשמות מופעים, כמוbluetooth
אוr_submix
. החריג היחיד הוא המודולprimary
שנרשם תחת שם המופעdefault
.
מיפוי של AIDL ו-HIDL Audio HAL
בטבלאות שבקטעים הבאים מוצג המיפוי בין ממשקי HIDL ו-AIDL Audio HAL. מידע נוסף על מבנה הספריות זמין בקובץ ה-README של Audio HAL.
Core HAL
כל ממשקי ה-HIDL נמצאים בחבילה android.hardware.audio@N.M
, כאשר N.M
מציין את גרסת Major.Minor. כל ממשקי ה-AIDL נמצאים בחבילה android.hardware.audio.core
.
ממשקי HIDL API וקובצי תצורה | ממשקי AIDL API |
---|---|
IDevicesFactory |
רישום של IModule ב-ServiceManager . |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
קבצים של מדיניות אודיו שניתנת להגדרה | משתמשים בהטמעה של HIDL ב-Android 14. |
יציאות אודיו, פרופילים דינמיים, מסלולים וטלאים
בטבלה הזו, רכיבים של קובצי XML מסומנים באמצעות סוגריים זוויתיים.
שיטות ממשק API של HIDL ורכיבים של קובצי תצורה | שיטות של ממשק 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 , זמן האחזור הנומינלי וגודל המאגר המינימלי הם חלק מהמבנה AudioPatch שמוחזר על ידי HAL.
גודל המאגר בפועל בפריימים הוא חלק מהמבנה StreamDescriptor , יחד עם גודל הפריימים בבייטים. אפשר לחשב את גודל המאגר בבייט על ידי הכפלת שני המספרים האלה. |
חיבור של אפקטים קוליים
שיטות של ממשק 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
מכילה את הקוד שנדרש לייצוג מידע מקובץ ה-XML באמצעות סוגי נתונים של AIDL, מה שמקל על ההמרה מ-XML ל-AIDL.
אלמנטים בקובץ התצורה של HIDL | שיטות של ממשק AIDL API |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
השיטות מחולקות לשתי קבוצות:
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, תוספים של ספקים מוטמעים באמצעות ה-methods getParameters
או setParameters
מהממשקים IDevice
ו-IStream
. השיטות האלה מקבלות מחרוזות שרירותיות.
ב-AIDL API יש שיטות מקבילות, כמו getVendorParameters
או setVendorParameters
, שמקבלות מופעים שרירותיים של Parcelable
באמצעות אנקפסולציה בתוך ParcelableHolders
.
שינויים אחרים
שינויים כלליים אחרים:
כדי לשפר את יכולת הבדיקה של ממשקי HAL API, בגרסת AIDL הוספנו אפשרויות ניפוי באגים שמשמשות לבדיקות VTS וזמינות דרך
ModuleDebug
parcelable. האפשרויות האלה מנחות את HAL לבצע אמולציה של פונקציונליות מסוימת (לדוגמה, חיבור של מכשירים חיצוניים), שבדרך כלל דורשת התערבות ידנית ושימוש בציוד בדיקה חיצוני.שירותי HAL נדרשים להפעלה מחדש כשערך מאפיין המערכת
sys.audio.restart.hal
מוגדר כ-1
. ההפעלה מחדש מתבצעת באמצעותaudioserver.rc
. במהלך ההטמעה של HAL, צריך להשתמש בשם שירות ה-HAL המתאים שמופיע בקובץaudioserver.rc
. ב-Android 14, השםvendor.audio-hal-aidl
נוסף במיוחד לגרסת ה-AIDL של ה-HAL.
Effects 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 |
Effect Factory
ממשקי HIDL API (android.hardware.audio.effect@X.X) |
ממשקי AIDL API (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects עם פרמטר UUID מסוג null |
IEffectsFactory.getDescriptor |
IFactory.queryEffects עם פרמטר UUID |
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 |
מיפוי ל-IEffect.command , ל-IEffect.setParameter או ל-IEffect.getParameter בהתאם לסוג הפקודה של HIDL מדור קודם
|
לא רלוונטי | 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 |
הוצא משימוש ב-Effects AIDL HAL |
EFFECT_CMD_SET_PARAM_COMMIT |
הוצא משימוש ב-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
(same as VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
הוצא משימוש.
ב-AIDL, המעברים בין מצב offload למצב non-offload מטופלים ב-framework. |
EFFECT_CMD_DUMP |
הטיפול מתבצע על ידי טרנזקציית Binder מובנית 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 |