ข้อกำหนดเกี่ยวกับสื่อของ SDV

คำว่า "ต้อง" "ห้าม" "ควร" และ "ขอแนะนำอย่างยิ่ง" ในเอกสารนี้ ตีความตามที่อธิบายไว้ใน 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_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 ต้องเป็น 0)
  • ต้องรองรับส่วนขยายต่อไปนี้
    • 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

ความเข้ากันได้ของมัลติมีเดีย

  • การใช้งานอุปกรณ์ต้องอนุญาตให้เล่นเนื้อหาเสียงดิบที่มีลักษณะต่อไปนี้

    • รูปแบบแหล่งที่มา: 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.so API โดยใช้อุปกรณ์ 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 อุปกรณ์ควรรองรับอินพุตของตัวชี้ ปุ่ม และตัวควบคุมแบบหมุน