השוואה בין AIDL ו-HIDL Audio HAL, השוואה בין AIDL ו-HIDL Audio HAL

החל מ-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 (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. ראה קובץ Audio HAL README למידע נוסף על מבנה הספריות.

Core HAL

כל ממשקי ה-HIDL נמצאים בחבילת android.hardware.audio@NM , כאשר NM מציינת את הגרסה 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 עבור אנדרואיד 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.

פונקציונליות הקשורה לתכונות

שיטות ממשק 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 מממשקי IDevice ו- IStream . שיטות אלה מקבלות מחרוזות שרירותיות. ב-AIDL API, קיימות שיטות מתאימות, כגון getVendorParameters או setVendorParameters , אשר לוקחות מופעים שרירותיים Parcelable על ידי שימוש ב-encapsulation בתוך ParcelableHolders .

שינויים אחרים

שינויים כלליים נוספים הם כדלקמן:

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

  2. שירותי HAL נדרשים להפעלה מחדש כאשר הערך של מאפיין המערכת sys.audio.restart.hal מוגדר ל 1 . ההפעלה מחדש מושגת דרך audioserver.rc . בעת יישום ה-HAL, השתמש בשם שירות ה-HAL המתאים הרשום בקובץ audioserver.rc . באנדרואיד 14, השם vendor.audio-hal-aidl נוסף במיוחד עבור גרסת ה-AIDL של ה-HAL.

אפקטים HAL

כל ממשקי ה-HIDL נמצאים בחבילת android.hardware.audio.effect@NM* , כאשר NM היא הגרסה 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@XX)
ממשקי 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@XX)
ממשקי 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@XX)
ממשקי 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, מתגי מצבי פריקה ומצב לא-פריקה מטופלים במסגרת.
EFFECT_CMD_DUMP מטופל על ידי עסקת הקלסר המובנית AIBinder_dump .

הגדרת פרמטרי אפקט נפוצים

הגדרת HIDL
(android.hardware.audio.effect@XX)
הגדרת AIDL
Types.hal Flags.aidl
Parameter.aidl

הגדרת אפקטים ספציפיים

ממשקי HIDL API
(android.hardware.audio.effect@XX)
ממשקי AIDL API
(android.hardware.audio.effect)
I $EffectType$ .hal $EffectType$ .aidl