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

คำสำคัญ MUST, MUST NOT, SHOULD และ STRONGLY RECOMMENDED ในหน้านี้ มีความหมายตามที่อธิบายไว้ใน RFC 2119

ระบบ Guest (อิมเมจ VM)

ข้อกำหนดในส่วนนี้ใช้กับระบบ Guest

หน่วยความจำ

ระบบต้องมีหน่วยความจำอย่างน้อย 2 GB ต่อ VM

อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน

การใช้งานอุปกรณ์

  • ต้องเข้ากันได้กับ ABI ของ Android NDK อย่างน้อย 1 รายการที่กำหนดไว้
  • ต้องใช้ ABI ของ Android NDK เดียวกันสำหรับอิมเมจ VM ทั้งหมดในอุปกรณ์เครื่องเดียวกัน
  • ต้องเข้ากันได้กับซอร์สโค้ด (เช่น เข้ากันได้กับส่วนหัว) และเข้ากันได้กับไบนารี (สำหรับ ABI) กับไลบรารีที่จำเป็นแต่ละรายการในรายการต่อไปนี้
  • ต้องทำให้ไลบรารีต่อไปนี้ทั้งหมดซึ่งมี API ดั้งเดิมพร้อมใช้งานสำหรับแอปพลิเคชันยานยนต์ที่กำหนดโดยซอฟต์แวร์ (SDV)

    • libc (ไลบรารี C)
    • libdl (ตัวลิงก์แบบไดนามิก)
    • libdrm.so (ไลบรารีพื้นที่ผู้ใช้ของ Direct Rendering Manager)
    • 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 Open Source Project ต้นทาง

กราฟิก

ระบบต้องใช้ virtio-gpu สำหรับกราฟิกที่เร่งการแสดงผลด้วยฮาร์ดแวร์ ไดรเวอร์ฝั่ง Guest ควรใช้ gfxstream สำหรับการแสดงผล

อินพุต

ระบบ Guest ต้องรองรับเหตุการณ์อินพุตที่ส่งต่อจากระบบโฮสต์โดยใช้ 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

ขอแนะนำอย่างยิ่งให้การใช้งานอุปกรณ์ใช้ไลบรารี ANGLE กับแบ็กเอนด์ Vulkan เพื่อใช้งาน OpenGL ES

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
    • ช่อง: ช่องสัญญาณจำนวนเท่ากับไมโครโฟนในอุปกรณ์
  • การใช้งานอุปกรณ์ต้องรองรับการเล่นและการบันทึกเสียง ผ่าน API libtinyalsav2.so โดยใช้อุปกรณ์ virtio-sound สำหรับ การเข้าถึงฮาร์ดแวร์ และต้องรองรับ ALSA API

  • ตัวเข้ารหัสและตัวถอดรหัสวิดีโอต้องรองรับรูปแบบสี YUV420 8:8:8 แบบระนาบหรือแบบกึ่งระนาบอย่างน้อย 1 รูปแบบ

  • ตัวถอดรหัสและตัวเข้ารหัสวิดีโอต้องรองรับตัวแปลงรหัส H.264 AVC

  • การใช้งานอุปกรณ์ต้องรองรับ H.264 Main Profile Level 3.1 และ Baseline Profile การรองรับการเรียงลำดับสไลซ์แบบกำหนดเอง (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: สำหรับอุปกรณ์ตัวแปลงรหัสวิดีโอเสมือน

อินพุต

  • อุปกรณ์ต้องรองรับอุปกรณ์อินพุตและส่งต่อเหตุการณ์ไปยังระบบ Guest โดยใช้ virtio-input อุปกรณ์ควรรองรับอินพุตของตัวชี้ ปุ่ม และตัวควบคุมแบบหมุน