השוואה בין AIDL לבין HIDL Audio HAL

החל מ-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.getAudioPort
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>1

<call_screen_mode_supported>
<engine_library>
הנתונים מחולקים לשתי שיטות שונות:
ITelephony.getSupportedAudioModes IConfig.getEngineConfig
<volumes>, או
<volumeGroups>, <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. המערכת מסירה את 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.

שינויים נוספים

שינויים כלליים נוספים הם:

  1. כדי לשפר את יכולת הבדיקה של ממשקי API עם HAL, בגרסת AIDL, הוספת אפשרויות לניפוי באגים שמשמשות לבדיקות VTS והן זמינות באמצעות החבילה ModuleDebug. האפשרויות האלה מורים ל-HAL לחקות פונקציונליות מסוימת (לדוגמה, חיבור של מכשירים חיצוניים), שדורשים התערבות ידנית ושימוש בבדיקות חיצוניות ציוד היקפי.

  2. יש צורך בשירותי 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