החל מ-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.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.
פונקציונליות הקשורה לתכונות
שיטות ממשק 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
.
שינויים אחרים
שינויים כלליים נוספים הם כדלקמן:
כדי לשפר את יכולת הבדיקה של ממשקי API של HAL, בגרסת AIDL, אנו מציגים אפשרויות ניפוי באגים המשמשות בדיקות VTS וזמינות דרך ה-
ModuleDebug
parcelable. אפשרויות אלו מנחות את ה-HAL לחקות פונקציונליות מסוימת (לדוגמה, חיבור של התקנים חיצוניים), שאחרת מצריכה התערבות ידנית ושימוש בציוד בדיקה חיצוני.שירותי 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 |