החל מ-Android 14, שותפים וספקי SoC מומלץ להחליף את ההטמעה הנוכחית של HIDL HAL ב-AIDL HAL יישום בפועל.
כדי לאפשר מעבר חלק מ-HIDL Audio HAL ל-AIDL Audio HAL, חלק מההבדלים העיקריים מודגשים בדף הזה. בדף הזה מוצג גם המיפוי בין ממשקי AIDL ו-HIDL של אודיו HAL.
ההבדל בין הטמעת AIDL ו-HIDL Audio HAL
ההבדלים העיקריים בין מבנה HIDL לבין מבנה AIDL הם ככה:
ב-AIDL Audio Core HAL, הממשק
IConfig
מוצג כתחליף למערכת כולה בקובצי XML ב-HIDL HAL. ה-framework קורא את הפרמטרים האלה מה-Core HAL במקום מקובץ התצורה של הספק. לדוגמה, רשימת הפורמטים של שירותי סראונד שזמינים לשליטה על ידי המשתמשים מסופק על ידיIConfig.getSurroundSoundConfig
בשיטת Core HAL.ב-AIDL Audio Effects HAL, הלוגיקה
effectProxy
שמוגדרת בקובצי XML ב-HIDL אפקטים HAL מועברת את הפריים של האודיו. ה-framework שולח שאילתה לגבי כל המופעים של אפקטים באמצעותIFactory.queryEffects
, וכל עיבודי האפקטים באמצעותIFactory.queryProcessing
.כדי למנוע בלבול בשימוש במונח מכשיר לסוגים של התקני אודיו, השם של
IDevice
ב-HIDL Audio HAL שונה ל-IModule
ב-AIDL Audio HAL.IPrimaryDevice
מוחלף ב-AIDL Audio HAL. עדכונים לגבי האודיו הנוכחי המצב וסיבוב המסך נשלחים לכל מופע שלIModule
. הפרמטרים קשור לחיבור סינכרוני ב-Bluetooth (BT SCO) ול- אין-דיבורית הפרופיל (HFP) מטופל על ידיIBluetooth
ייעודי גרפי. ממשק ייעודי שלITelephony
מספק גישה ספציפית לטלפוניה הפקדים בנגן. אפשר לאחזר מכונות של שני הממשקים המופע הראשי של הממשקIModule
. ניתן לעיין בטבלאות ההשוואה בכתובת Core HAL פונקציונליות שקשורה לתכונות אפשר לקבל מידע נוסף.הקובץ
IDevicesFactory
הוסר ב-AIDL Audio HAL כדי למנוע יתירות. HAL מודולים (כלומר,IModule
מכונות ממשק) רשומים עכשיו ישירות שבהם מנהל השירות משתמש בשמות שלהם, לדוגמה, שמות מכונות, כמוbluetooth
אוr_submix
. היוצא מן הכלל היחיד הוא המודולprimary
, נרשם בשם המכונהdefault
.
מיפוי AIDL ו-HIDL Audio HAL
בטבלאות שבקטעים הבאים מוצג המיפוי בין HIDL ו-AIDL ממשקי Audio HAL. צפייה קובץ HAL README של אודיו כדי לקבל מידע נוסף על מבנה הספרייה.
ליבה עם 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, הטמעה של תוספי ספקים מתבצעת באמצעות getParameters
או
setParameters
methods מהממשקים IDevice
ו-IStream
. האלה
מקבלים מחרוזות שרירותיות.
ב-AIDL API, יש שיטות תואמות, כמו getVendorParameters
או setVendorParameters
, שלוקחים מכונות Parcelable
שרירותיות באמצעות
בתוך ParcelableHolders
.
שינויים נוספים
שינויים כלליים נוספים הם:
כדי לשפר את יכולת הבדיקה של ממשקי API עם HAL, בגרסת AIDL, הוספת אפשרויות לניפוי באגים שמשמשות לבדיקות VTS והן זמינות באמצעות החבילה
ModuleDebug
. האפשרויות האלה מורים ל-HAL לחקות פונקציונליות מסוימת (לדוגמה, חיבור של מכשירים חיצוניים), שדורשים התערבות ידנית ושימוש בבדיקות חיצוניות ציוד היקפי.יש צורך בשירותי HAL כדי לבצע הפעלה מחדש כאשר הערך של מאפיין המערכת הערך של
sys.audio.restart.hal
מוגדר ל-1
. ההפעלה מחדש מתבצעת באמצעותaudioserver.rc
במהלך הטמעת ה-HAL, יש להשתמש בשם שירות HAL המתאים שמופיע ב את הקובץaudioserver.rc
. ב-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 |
מפעל אפקטים
ממשקי HIDL API (android.hardware.audio.effect@X.X) |
ממשקי API של AIDL (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 מדור קודם
מקש Command
|
לא רלוונטי | 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 |