דרישות המדיה של SDV

מילות המפתח MUST,‏ MUST NOT,‏ SHOULD ו-STRONGLY RECOMMENDED במסמך הזה מפורשות כמו שמתואר ב-RFC 2119.

מערכת אורחת (תמונת מכונה וירטואלית)

הדרישות שבקטע הזה חלות על מערכת האורחים.

זיכרון

המערכת צריכה לספק לפחות 2 GB של זיכרון לכל מכונה וירטואלית.

ממשקי בינאריים של אפליקציות

הטמעות במכשיר:

  • חייב להיות תואם לאחד או יותר מממשקי ה-ABI של Android NDK שהוגדרו.
  • חובה להשתמש באותו Android NDK ABI לכל תמונות מכונות וירטואליות באותו מכשיר.
  • חייבת להיות תאימות לקוד המקור (לדוגמה, תאימות לכותרת) ותאימות בינארית (לממשק ABI) לכל ספרייה נדרשת ברשימה הבאה.
  • חובה לספק את כל הספריות הבאות, שמספקות ממשקי API מקוריים, לאפליקציות SDV:
    • libc (ספריית C)
    • libdl (dynamic linker)
    • libdrm.so (Direct Rendering Manager userspace library)
    • libgbm.so (ניהול כללי של מאגר נתונים זמני)
    • libEGL.so (native OpenGL surface management)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (רישום ביומן ב-Android)
    • libtinyalsav2.so (הקלטת אודיו והפעלה)
    • libvulkan.so (Vulkan)
  • אסור להוסיף או להסיר את הפונקציות הציבוריות של הספריות המקוריות הקודמות.
  • חובה לייצא את כל סמלי הפונקציות של OpenGL ES 3.1 ושל Android Extension Pack, כפי שמוגדר ב-NDK, דרך ספריית libGLESv3.so. שימו לב: כל הסמלים חייבים להיות נוכחים, אבל OpenGL ES מתאר בפירוט רב יותר את הדרישות לגבי המועד שבו צפויה הטמעה מלאה של כל פונקציה תואמת.
  • חובה לייצא את סמלי הפונקציות של ליבת Vulkan 1.1, וגם את התוספים VK_KHR_surface, VK_KHR_swapchain, VK_KHR_maintenance1 ו-VK_KHR_get_physical_device_properties2 דרך ספריית libvulkan.so. שימו לב שכל הסמלים חייבים להיות נוכחים, אבל Vulkan מתאר בפירוט רב יותר את הדרישות לגבי המועד שבו צפוי יישום מלא של כל פונקציה תואמת.
  • צריך לבנות אותו באמצעות קוד המקור וקבצי הכותרות שזמינים בפרויקט קוד פתוח של Android.

גרפיקה

  • המערכת חייבת להשתמש ב-virtio-gpu לעיבוד גרפי עם שיפור מהירות באמצעות חומרה. מומלץ שהדרייבר בצד האורח ישתמש ב-gfxstream לעיבוד.

קלט

מערכת האורחים חייבת לכלול תמיכה באירועי קלט שמועברים ממערכת המארח באמצעות virtio-input.

OpenGL ES

הטמעות במכשיר:

  • חובה לזהות בצורה נכונה את הגרסאות הנתמכות של OpenGL ES ‏ (1.1, ‏2.0, ‏3.0, ‏3.1, ‏3.2) באמצעות ממשקי ה-API המקוריים.
  • חייבים לכלול תמיכה בכל ממשקי ה-API המקוריים התואמים לכל גרסה של OpenGL ES שהם תומכים בה.
  • חייב לתמוך ב-OpenGL ES 1.1 וב-2.0.
  • מומלץ מאוד לתמוך ב-OpenGL ES 3.1.
  • צריך לתמוך ב-OpenGL ES 3.2.
  • חובה לדווח באמצעות ממשקי ה-API המנוהלים של OpenGL ES וממשקי ה-API המקוריים על כל תוסף אחר של OpenGL ES שהם הטמיעו, ולהיפך, אסור לדווח על מחרוזות של תוספים שהם לא תומכים בהם.
  • חובה לתמוך בתוספים הבאים:
    • EGL_EXT_image_dma_buf_import
    • EGL_EXT_image_dma_buf_import_modifiers
    • EGL_KHR_fence_sync
    • EGL_KHR_image_base
    • EGL_KHR_wait_sync
    • GL_OES_EGL_image

מומלץ מאוד להטמיע OpenGL ES במכשירים באמצעות ספריית ANGLE עם קצה עורפי של Vulkan.

Vulkan

הטמעות במכשיר:

  • מומלץ מאוד לכלול תמיכה ב-Vulkan 1.3.
  • אסור לתמוך בגרסת וריאציה של Vulkan (כלומר, החלק של הווריאציה בגרסת הליבה של Vulkan חייב להיות אפס).
  • חובה לתמוך בתוספים הבאים:
    • VK_ANDROID_external_memory_android_hardware_buffer
    • VK_EXT_external_memory_dma_buf
    • VK_EXT_queue_family_foreign
    • VK_KHR_external_memory_fd
    • VK_KHR_external_semaphore_fd

תאימות למולטימדיה

  • הטמעות במכשירים חייבות לאפשר הפעלה של תוכן אודיו גולמי עם המאפיינים הבאים:

    • פורמטים של מקור: PCM ליניארי, 16 ביט, 8 ביט, float
    • ערוצים: מונו, סטריאו, הגדרות תקינות של ריבוי ערוצים עם עד שמונה ערוצים
    • תדירויות דגימה (ב-Hz):
      • ‫8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 בהגדרות הערוץ שצוינו קודם
      • ‫96,000 במונו ובסטריאו
  • הטמעות של מכשירים חייבות לאפשר לכידה של תוכן אודיו גולמי. לפחות, הטמעות של מכשירים חייבות לתמוך במאפיינים הבאים:

    • פורמט: Linear PCM, ‏ 16 ביט
    • תדירויות דגימה: 8,000,‏ 11,025,‏ 16,000,‏ 44,100,‏ 48,000 Hz
    • ערוצים: מונו
  • הטמעות של מכשירים צריכות לאפשר לכידה של תוכן אודיו גולמי עם המאפיינים הבאים:

    • פורמט: Linear PCM, ‏ 16 ביט ו-24 ביט
    • תדירויות דגימה: 8000, ‏ 11025, ‏ 16000, ‏ 22050, ‏ 24000, ‏ 32000, ‏ 44100,‏ 48000 Hz
    • ערוצים: מספר הערוצים שווה למספר המיקרופונים במכשיר
  • הטמעות של מכשירים חייבות לספק תמיכה בהפעלה ובצילום של אודיו באמצעות libtinyalsav2.so API, תוך שימוש במכשיר virtio-sound לגישה לחומרה, וחייבות לתמוך ב-ALSA API.

  • מקודדים ומפענחים של וידאו חייבים לתמוך לפחות באחד מפורמטי הצבעים YUV420 8:8:8 planar או semiplanar.

  • מפענחי וידאו ומקודדי וידאו חייבים לתמוך בקודק H.264 AVC.

  • הטמעות של מכשירים חייבות לתמוך בפרופיל הראשי של H.264 ברמה 3.1 ובפרופיל Baseline. התמיכה בסדר פרוסות שרירותי (ASO), בסדר גמיש של בלוקים מאקרו (FMO) ובפרוסות מיותרות (RS) היא אופציונלית.

  • מקודדי וידאו:

    • חובה לתמוך בפרופילים של קידוד וידאו באיכות רגילה (SD) שמפורטים בטבלה הבאה.
    • צריכה להיות תמיכה בפרופילים של קידוד סרטונים באיכות HD, כמו שמופיע בטבלה הבאה.

      איכות רגילה (איכות נמוכה) איכות רגילה (SD) HD 720p HD 1080p
      רזולוציית הווידאו ‫320 x 240 px ‫720 x 480 פיקסלים ‫‎1280 x 720 פיקסלים ‫‎1,920 x 1,080 פיקסלים
      קצב פריימים של סרטון ‫20 פריימים לשנייה ‫30 פריימים לשנייה ‫30 פריימים לשנייה ‫30 פריימים לשנייה
      קצב העברת נתונים של סרטון ‫384 Kbps ‫2 Mbps ‫4 Mbps ‫10 Mbps
  • מפענחי וידאו:

    • חייב לתמוך בפרופילים של פענוח וידאו באיכות HD 720p שמופיעים בטבלה הבאה.
    • חובה לתמוך בפרופילים של פענוח וידאו באיכות HD 1080p שמופיעים בטבלה הבאה.

      איכות רגילה (איכות נמוכה) איכות רגילה (SD) HD 720p HD 1080p
      רזולוציית הווידאו ‫320 x 240 px ‫720 x 480 פיקסלים ‫‎1280 x 720 פיקסלים ‫‎1,920 x 1,080 פיקסלים
      קצב פריימים של סרטון ‫30 פריימים לשנייה ‫30 פריימים לשנייה ‫60 fps ‫30 פריימים לשנייה
      קצב העברת נתונים של סרטון ‫800 Kbps ‫2 Mbps ‫8 Mbps ‫20 Mbps
  • הטמעות במכשירים חייבות לספק תמיכה ברכיבי Codec של מדיה באמצעות Video4Linux API.

  • הטמעות של מכשירים חייבות לספק גישה למפענח וידאו באמצעות חומרה באמצעות Video4Linux API.

  • כל מקודדי הווידאו והתמונות שפועלים באמצעות האצת חומרה חייבים לתמוך בקידוד של פריימים ממצלמות החומרה. הטמעות של מכשירים חייבות לספק גישה לחומרה לקידוד ולפענוח של סרטונים באמצעות virtio-media.

  • הטמעות של מכשירים חייבות לספק גישה למצלמת וידאו באמצעות Video4Linux API.

מערכת המארח (hypervisor וחומרה)

הדרישות שבקטע הזה חלות על מערכת המארח ועל סביבת ההיפר-ויז'ור.

וירטואליזציה

  • בנוסף למכשירי virtio שנדרשים בפרופיל הליבה, מערכת המארח חייבת לספק את הפריטים הבאים:
    • virtio-gpu: עבור GPU וירטואלי ותצוגה
    • virtio-input: להעברת אירועי קלט (לדוגמה, מגע, מקלדת)
    • virtio-sound: למכשירי אודיו וירטואליים
    • virtio-video או virtio-media: למכשירי קודק וידאו וירטואליים

קלט

  • המכשיר חייב לתמוך במכשירי קלט ולהעביר אירועים למערכות אורחות באמצעות virtio-input. המכשיר צריך לתמוך בקלט של מצביע, לחצן ובקר סיבובי.