คำว่า "ต้อง" "ห้าม" "ควร" และ "ขอแนะนำอย่างยิ่ง" ในเอกสารนี้ ตีความตามที่อธิบายไว้ใน RFC 2119
ระบบปฏิบัติการของผู้ใช้ชั่วคราว (อิมเมจ VM)
ข้อกำหนดในส่วนนี้มีผลกับระบบของผู้เข้าพัก
หน่วยความจำ
ระบบต้องมีหน่วยความจำอย่างน้อย 2 GB ต่อ VM
อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน
การติดตั้งใช้งานอุปกรณ์
- ต้องเข้ากันได้กับ Android NDK ABI อย่างน้อย 1 รายการที่กำหนดไว้
- ต้องใช้ Android NDK ABI เดียวกันสำหรับอิมเมจ VM ทั้งหมดในอุปกรณ์เดียวกัน
- ต้องเข้ากันได้กับแหล่งที่มา (เช่น ส่วนหัว) และเข้ากันได้กับไบนารี (สำหรับ ABI) กับไลบรารีที่จำเป็นแต่ละรายการในรายการต่อไปนี้
- ต้องทำให้ไลบรารีต่อไปนี้ทั้งหมดซึ่งมี API ดั้งเดิมพร้อมใช้งานสำหรับแอป SDV
libc(ไลบรารี C)libdl(โปรแกรมลิงก์แบบไดนามิก)libdrm.so(Direct Rendering Manager userspace library)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(การบันทึก 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_importEGL_EXT_image_dma_buf_import_modifiersEGL_KHR_fence_syncEGL_KHR_image_baseEGL_KHR_wait_syncGL_OES_EGL_image
ขอแนะนำอย่างยิ่งให้การติดตั้งใช้งานอุปกรณ์ใช้ OpenGL ES โดยใช้ไลบรารี ANGLE ที่มีแบ็กเอนด์ Vulkan
Vulkan
การติดตั้งใช้งานอุปกรณ์
- ขอแนะนำอย่างยิ่งให้รวมการรองรับ Vulkan 1.3
- ต้องไม่รองรับเวอร์ชันย่อยของ Vulkan (กล่าวคือ ส่วนย่อยของ เวอร์ชันหลักของ Vulkan ต้องเป็น 0)
- ต้องรองรับส่วนขยายต่อไปนี้
VK_ANDROID_external_memory_android_hardware_bufferVK_EXT_external_memory_dma_bufVK_EXT_queue_family_foreignVK_KHR_external_memory_fdVK_KHR_external_semaphore_fd
ความเข้ากันได้ของมัลติมีเดีย
การใช้งานอุปกรณ์ต้องอนุญาตให้เล่นเนื้อหาเสียงดิบที่มีลักษณะต่อไปนี้
- รูปแบบแหล่งที่มา: Linear PCM, 16 บิต, 8 บิต, Float
- ช่องสัญญาณ: โมโน สเตอริโอ การกำหนดค่าแบบหลายช่องสัญญาณที่ถูกต้องซึ่งมีช่องสัญญาณสูงสุด 8 ช่อง
- อัตราการสุ่มตัวอย่าง (ในหน่วย Hz):
- 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 ในการกำหนดค่าช่อง ที่ระบุไว้ก่อนหน้านี้
- 96000 ในระบบเสียงโมโนและสเตอริโอ
การใช้งานอุปกรณ์ต้องอนุญาตให้บันทึกเนื้อหาเสียงดิบได้ อย่างน้อยที่สุด การใช้งานอุปกรณ์ต้องรองรับลักษณะต่อไปนี้
- รูปแบบ: Linear PCM, 16 บิต
- อัตราการสุ่มตัวอย่าง: 8000, 11025, 16000, 44100, 48000 Hz
- ช่อง: โมโน
การใช้งานอุปกรณ์ควรอนุญาตให้บันทึกเนื้อหาเสียงดิบที่มีลักษณะต่อไปนี้
- รูปแบบ: Linear PCM, 16 บิต และ 24 บิต
- อัตราการสุ่มตัวอย่าง: 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 Hz
- ช่อง: ช่องมากเท่ากับจำนวนไมโครโฟนใน อุปกรณ์
การใช้งานอุปกรณ์ต้องรองรับการเล่นและการบันทึกเสียง ผ่าน
libtinyalsav2.soAPI โดยใช้อุปกรณ์virtio-soundสำหรับ การเข้าถึงฮาร์ดแวร์ และต้องรองรับ ALSA APIโปรแกรมเปลี่ยนไฟล์และโปรแกรมถอดรหัสวิดีโอต้องรองรับรูปแบบสี YUV420 8:8:8 แบบระนาบหรือแบบกึ่งระนาบอย่างน้อย 1 รูปแบบ
ตัวถอดรหัสและตัวเข้ารหัสวิดีโอต้องรองรับตัวแปลงรหัส H.264 AVC
การใช้งานอุปกรณ์ต้องรองรับโปรไฟล์หลักระดับ 3.1 ของ H.264 และโปรไฟล์พื้นฐาน การรองรับการเรียงลำดับสไลซ์แบบกำหนดเอง (ASO), การเรียงลำดับมาโครบล็อกแบบยืดหยุ่น (FMO) และสไลซ์ที่ซ้ำกัน (RS) เป็นทางเลือก
โปรแกรมเปลี่ยนไฟล์วิดีโอ
- ต้องรองรับโปรไฟล์การเข้ารหัสวิดีโอความละเอียดมาตรฐาน (SD) ในตารางต่อไปนี้
ควรสนับสนุนโปรไฟล์การเข้ารหัสวิดีโอความละเอียดสูง (HD) ตามที่ระบุไว้ในตารางต่อไปนี้
SD (คุณภาพต่ำ) SD (คุณภาพสูง) HD 720p HD 1080p ความละเอียดวิดีโอ 320 x 240 พิกเซล 720 x 480 พิกเซล 1280 x 720 พิกเซล 1920 x 1080 พิกเซล อัตราเฟรมวิดีโอ 20 FPS 30 FPS 30 FPS 30 FPS อัตราบิตวิดีโอ 384 Kbps 2 Mbps 4 Mbps 10 Mbps
ตัวถอดรหัสวิดีโอ
- ต้องรองรับโปรไฟล์การถอดรหัสวิดีโอ HD 720p ในตารางต่อไปนี้
ต้องรองรับโปรไฟล์การถอดรหัสวิดีโอ HD 1080p ในตารางต่อไปนี้
SD (คุณภาพต่ำ) SD (คุณภาพสูง) HD 720p HD 1080p ความละเอียดวิดีโอ 320 x 240 พิกเซล 720 x 480 พิกเซล 1280 x 720 พิกเซล 1920 x 1080 พิกเซล อัตราเฟรมวิดีโอ 30 FPS 30 FPS 60 FPS 30 FPS อัตราบิตวิดีโอ 800 Kbps 2 Mbps 8 Mbps 20 Mbps
การติดตั้งใช้งานอุปกรณ์ต้องรองรับตัวแปลงรหัสสื่อโดยใช้ Video4Linux API
การติดตั้งใช้งานอุปกรณ์ต้องให้สิทธิ์เข้าถึงเครื่องมือถอดรหัสวิดีโอฮาร์ดแวร์โดยใช้ Video4Linux API
ตัวเข้ารหัสวิดีโอและรูปภาพที่เร่งการแสดงผลด้วยฮาร์ดแวร์ทั้งหมดต้องรองรับการเข้ารหัส เฟรมจากกล้องฮาร์ดแวร์ การติดตั้งใช้งานอุปกรณ์ต้องให้สิทธิ์เข้าถึงฮาร์ดแวร์สำหรับการเข้ารหัสและถอดรหัสวิดีโอผ่าน
virtio-mediaการใช้งานอุปกรณ์ต้องให้สิทธิ์เข้าถึงกล้องวิดีโอโดยใช้ Video4Linux API
ระบบโฮสต์ (ไฮเปอร์ไวเซอร์และฮาร์ดแวร์)
ข้อกำหนดในส่วนนี้มีผลกับระบบโฮสต์และสภาพแวดล้อมไฮเปอร์ไวเซอร์
ระบบเสมือน
- นอกเหนือจากอุปกรณ์
virtioที่โปรไฟล์หลักกำหนดแล้ว ระบบโฮสต์ ต้องมีสิ่งต่อไปนี้virtio-gpu: สำหรับ GPU และจอแสดงผลเสมือนvirtio-input: สำหรับการส่งต่อเหตุการณ์อินพุต (เช่น การสัมผัส แป้นพิมพ์)virtio-sound: สำหรับอุปกรณ์เสียงเสมือนvirtio-videoหรือvirtio-media: สำหรับอุปกรณ์ตัวแปลงรหัสวิดีโอเสมือน
อินพุต
- อุปกรณ์ต้องรองรับอุปกรณ์อินพุตและส่งต่อเหตุการณ์ไปยังระบบของผู้เข้าพัก
โดยใช้
virtio-inputอุปกรณ์ควรรองรับอินพุตของตัวชี้ ปุ่ม และตัวควบคุมแบบหมุน