کلمات کلیدی 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به سیستمهای مهمان ارسال کند. دستگاه باید از ورودیهای اشارهگر، دکمه و کنترلر چرخشی پشتیبانی کند.