החל מ-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. ה-framework קורא את הפרמטרים האלה מ-HAL הליבה במקום מקובץ התצורה של הספק. לדוגמה, רשימת הפורמטים של סראונד שמוצגים לשליטת המשתמש מסופקת על ידי השיטהIConfig.getSurroundSoundConfig
ב-HAL של הליבה.ב-AIDL Audio Effects HAL, הלוגיקה של
effectProxy
שמוגדרת בקובצי XML ב-HIDL Effects HAL מועברת למסגרת האודיו. ה-framework של האודיו שולח שאילתה על כל המופעים של האפקטים במערכת באמצעותIFactory.queryEffects
, ועל כל עיבודי האפקטים באמצעותIFactory.queryProcessing
.כדי למנוע בלבול עם השימוש במונח device (מכשיר) לגבי סוגי מכשירי אודיו, השם של
IDevice
ב-HIDL Audio HAL השתנה ל-IModule
ב-AIDL Audio HAL.IPrimaryDevice
מוחלף ב-AIDL Audio HAL. עדכונים לגבי מצב האודיו הנוכחי וסיבוב המסך נשלחים לכל מכונה שלIModule
. הפרמטרים שקשורים ל-Bluetooth משולב (BT SCO) ולפרופיל דיבורית (HFP) מטופלים על ידי ממשקIBluetooth
ייעודי. ממשקITelephony
ייעודי מספק אמצעי בקרה ספציפיים לטלפוניה. אפשר לאחזר מופעים של שני הממשקים האלה מהמכונה הראשית של הממשקIModule
. מידע נוסף זמין בטבלאות ההשוואה Core HAL ובפונקציונליות שקשורה לתכונות.IDevicesFactory
הוסר ב-HAL של אודיו ב-AIDL כדי למנוע יתירות. מודולים עם 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 מסומנים באמצעות סוגריים משולשים.
שיטות ממשק של 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 , זמן האחזור הנומינלי והגודל המינימלי של מאגר הנתונים הזמני הם חלק מהמבנה 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, והן זמינות דרך ה-parcelable
ModuleDebug
. האפשרויות האלה מורות ל-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 עם פרמטר null UUID |
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
(זהה ל- VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
הוצא משימוש.
ב-AIDL, המעבר בין המצבים offload ו-non-offload מטופל במסגרת. |
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 |