الزامات رسانه SDV

کلمات کلیدی MUST (باید)، MUST NOT (نباید)، SHOULD (باید) و STRONGLY RECOMMENDED (قویاً توصیه می‌شود) در این سند باید مطابق با RFC 2119 تفسیر شوند.

سیستم مهمان (تصویر ماشین مجازی)

الزامات این بخش در مورد سیستم مهمان اعمال می‌شود.

حافظه

سیستم باید حداقل ۲ گیگابایت حافظه برای هر ماشین مجازی فراهم کند.

رابط‌های دودویی برنامه

پیاده‌سازی دستگاه:

  • باید با یک یا چند ABI تعریف‌شده‌ی NDK اندروید سازگار باشد.
  • باید از همان Android NDK ABI برای همه تصاویر ماشین مجازی در همان دستگاه استفاده شود.
  • باید با هر کتابخانه مورد نیاز در لیست زیر، سازگار با منبع (مثلاً سازگار با هدر) و سازگار با باینری (برای ABI) باشد.
  • باید تمام کتابخانه‌های زیر را که APIهای بومی ارائه می‌دهند، در دسترس برنامه‌های SDV قرار دهد:
    • libc (کتابخانه C)
    • libdl (لینک دهنده پویا)
    • libdrm.so (کتابخانه فضای کاربری مدیر رندر مستقیم)
    • libgbm.so (مدیریت بافر عمومی)
    • libEGL.so (مدیریت سطح بومی OpenGL)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (ثبت وقایع اندروید)
    • libtinyalsav2.so (ضبط و پخش صدا)
    • libvulkan.so (ولکان)
  • نباید توابع عمومی را برای کتابخانه‌های بومی قبلی اضافه یا حذف کنید.
  • باید تمام نمادهای تابع 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 الزامات مربوط به زمان اجرای کامل هر تابع مربوطه را با جزئیات بیشتری شرح می‌دهد.
  • باید با استفاده از کد منبع و فایل‌های هدر موجود در پروژه متن‌باز اندرویدِ بالادستی ساخته شود.

گرافیک

  • سیستم باید 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 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 خطی، ۱۶ بیتی، ۸ بیتی، اعشاری
    • کانال‌ها: مونو، استریو، پیکربندی‌های چندکاناله معتبر تا هشت کانال
    • نرخ نمونه‌برداری (برحسب هرتز):
      • ۸۰۰۰، ۱۱۰۲۵، ۱۶۰۰۰، ۲۲۰۵۰، ۲۴۰۰۰، ۳۲۰۰۰، ۴۴۱۰۰، ۴۸۰۰۰ در تنظیمات کانال که قبلاً ذکر شده است
      • ۹۶۰۰۰ در مونو و استریو
  • پیاده‌سازی‌های دستگاه باید امکان ضبط محتوای صوتی خام را فراهم کنند. حداقل، پیاده‌سازی‌های دستگاه باید از ویژگی‌های زیر پشتیبانی کنند:

    • قالب: PCM خطی، ۱۶ بیتی
    • نرخ نمونه‌برداری: ۸۰۰۰، ۱۱۰۲۵، ۱۶۰۰۰، ۴۴۱۰۰، ۴۸۰۰۰ هرتز
    • کانال‌ها: مونو
  • پیاده‌سازی‌های دستگاه باید امکان ضبط محتوای صوتی خام با ویژگی‌های زیر را فراهم کنند:

    • قالب: PCM خطی، ۱۶ بیتی و ۲۴ بیتی
    • نرخ نمونه‌برداری: ۸۰۰۰، ۱۱۰۲۵، ۱۶۰۰۰، ۲۲۰۵۰، ۲۴۰۰۰، ۳۲۰۰۰، ۴۴۱۰۰، ۴۸۰۰۰ هرتز
    • کانال‌ها: به تعداد میکروفون‌های دستگاه، کانال وجود دارد
  • پیاده‌سازی‌های دستگاه باید از پخش و ضبط صدا از طریق API libtinyalsav2.so ، با استفاده از دستگاه virtio-sound برای دسترسی سخت‌افزاری، پشتیبانی کنند و باید از API ALSA پشتیبانی کنند.

  • رمزگذارها و رمزگشاهای ویدیویی باید حداقل از یکی از فرمت‌های رنگی YUV420 8:8:8 مسطح یا نیمه مسطح پشتیبانی کنند.

  • رمزگشاها و رمزگذارهای ویدیویی باید از کدک H.264 AVC پشتیبانی کنند.

  • پیاده‌سازی‌های دستگاه باید از H.264 Main Profile Level 3.1 و Baseline Profile پشتیبانی کنند. پشتیبانی از ترتیب دلخواه برش (ASO)، ترتیب انعطاف‌پذیر ماکروبلاک (FMO) و برش‌های افزونه (RS) اختیاری است.

  • انکودرهای ویدیویی:

    • باید از پروفایل‌های کدگذاری ویدیوی با کیفیت استاندارد (SD) در جدول زیر پشتیبانی کند.
    • باید از پروفایل‌های رمزگذاری ویدیوی با کیفیت بالا (HD) مطابق جدول زیر پشتیبانی کند.

      SD (کیفیت پایین) اس دی (کیفیت بالا) کیفیت اچ‌دی ۷۲۰p کیفیت اچ‌دی ۱۰۸۰p
      وضوح تصویر ۳۲۰ در ۲۴۰ پیکسل ۷۲۰ در ۴۸۰ پیکسل ۱۲۸۰ در ۷۲۰ پیکسل ۱۹۲۰ در ۱۰۸۰ پیکسل
      نرخ فریم ویدیو ۲۰ فریم در ثانیه 30 فریم در ثانیه 30 فریم در ثانیه 30 فریم در ثانیه
      بیت ریت ویدیو ۳۸۴ کیلوبیت بر ثانیه ۲ مگابیت بر ثانیه ۴ مگابیت بر ثانیه ۱۰ مگابیت بر ثانیه
  • رمزگشاهای ویدیویی:

    • باید از پروفایل‌های رمزگشایی ویدیوی HD 720p در جدول زیر پشتیبانی کند.
    • باید از پروفایل‌های رمزگشایی ویدیوی HD 1080p در جدول زیر پشتیبانی کند.

      SD (کیفیت پایین) اس دی (کیفیت بالا) کیفیت اچ‌دی ۷۲۰p کیفیت اچ‌دی ۱۰۸۰p
      وضوح تصویر ۳۲۰ در ۲۴۰ پیکسل ۷۲۰ در ۴۸۰ پیکسل ۱۲۸۰ در ۷۲۰ پیکسل ۱۹۲۰ در ۱۰۸۰ پیکسل
      نرخ فریم ویدیو 30 فریم در ثانیه 30 فریم در ثانیه ۶۰ فریم در ثانیه 30 فریم در ثانیه
      بیت ریت ویدیو ۸۰۰ کیلوبیت بر ثانیه ۲ مگابیت بر ثانیه ۸ مگابیت بر ثانیه ۲۰ مگابیت بر ثانیه
  • پیاده‌سازی‌های دستگاه باید از کدک‌های رسانه‌ای با استفاده از API Video4Linux پشتیبانی کنند.

  • پیاده‌سازی‌های دستگاه باید دسترسی به یک رمزگشای ویدیوی سخت‌افزاری با استفاده از API Video4Linux را فراهم کنند.

  • تمام انکودرهای ویدئو و تصویر شتاب‌دهنده سخت‌افزاری باید از فریم‌های کدگذاری شده از دوربین‌های سخت‌افزاری پشتیبانی کنند. پیاده‌سازی‌های دستگاه باید دسترسی سخت‌افزاری برای کدگذاری و رمزگشایی ویدئو از طریق virtio-media را فراهم کنند.

  • پیاده‌سازی‌های دستگاه باید دسترسی به دوربین فیلمبرداری را با استفاده از API Video4Linux فراهم کنند.

سیستم میزبان (هایپروایزر و سخت‌افزار)

الزامات این بخش در مورد سیستم میزبان و محیط هایپروایزر اعمال می‌شود.

مجازی‌سازی

  • علاوه بر دستگاه‌های virtio مورد نیاز پروفایل اصلی، سیستم میزبان باید موارد زیر را نیز ارائه دهد:
    • virtio-gpu : برای پردازنده گرافیکی مجازی و نمایشگر
    • virtio-input : برای ارسال رویدادهای ورودی (مثلاً لمس، صفحه کلید)
    • virtio-sound : برای دستگاه‌های صوتی مجازی
    • virtio-video یا virtio-media : برای دستگاه‌های کدک ویدیویی مجازی

ورودی

  • دستگاه باید از دستگاه‌های ورودی پشتیبانی کند و رویدادها را با استفاده از virtio-input به سیستم‌های مهمان ارسال کند. دستگاه باید از ورودی‌های اشاره‌گر، دکمه و کنترلر چرخشی پشتیبانی کند.