รองรับเวอร์ชันของกล้อง

หน้านี้แสดงรายละเอียดความแตกต่างของเวอร์ชันใน Camera HAL, API และการทดสอบ ชุดทดสอบความเข้ากันได้ (CTS) ที่เกี่ยวข้อง นอกจากนี้ยังครอบคลุมการเปลี่ยนแปลงทางสถาปัตยกรรมหลายประการที่ทำขึ้นเพื่อเพิ่มความแข็งแกร่งและรักษาความปลอดภัยให้กับเฟรมเวิร์กกล้องใน Android 7.0 การเปลี่ยนไปใช้ Treble ใน Android 8.0 และผู้จำหน่ายอัปเดตต้องทำเพื่อรองรับการเปลี่ยนแปลงเหล่านี้ในการใช้งานกล้องของตน

คำศัพท์เฉพาะทาง

มีการใช้คำศัพท์ต่อไปนี้ในหน้านี้:

กล้อง API1
เฟรมเวิร์กกล้องระดับแอปบนอุปกรณ์ Android 4.4 และต่ำกว่า เปิดเผยผ่านคลาส android.hardware.Camera
กล้อง API2
เฟรมเวิร์กกล้องระดับแอปบนอุปกรณ์ Android 5.0 ขึ้นไป เปิดเผยผ่านแพ็คเกจ android.hardware.camera2
กล้องฮาล
เลเยอร์โมดูลกล้องที่ผู้จำหน่าย SoC นำมาใช้ เฟรมเวิร์กสาธารณะระดับแอปสร้างขึ้นจากกล้อง HAL
กล้อง HAL3.1
เวอร์ชันของอุปกรณ์กล้อง HAL ที่ออกมาพร้อมกับ Android 4.4
กล้อง HAL3.2
เวอร์ชันของอุปกรณ์กล้อง HAL ที่ออกมาพร้อมกับ Android 5.0
กล้อง API1 CTS
ชุดการทดสอบ CTS ของกล้องที่ทำงานบน Camera API1
กล้อง API2 CTS
ชุดการทดสอบ CTS ของกล้องเพิ่มเติมที่ทำงานบน Camera API2
เสียงแหลม
แยกการใช้งานของผู้จำหน่าย (ซอฟต์แวร์เฉพาะอุปกรณ์ ระดับล่างที่เขียนโดยผู้ผลิตซิลิคอน) ออกจากเฟรมเวิร์กระบบปฏิบัติการ Android ผ่านอินเทอร์เฟซของผู้จำหน่ายใหม่
เอชดีแอล
ภาษาคำจำกัดความอินเทอร์เฟซ HAL นำมาใช้กับ Treble และใช้เพื่อระบุอินเทอร์เฟซระหว่าง HAL และผู้ใช้
วีทีเอส
ชุดทดสอบผู้ขาย ที่เปิดตัวควบคู่ไปกับ Treble

API ของกล้อง

Android มี API ของกล้องต่อไปนี้

กล้อง API1

Android 5.0 เลิกใช้งาน Camera API1 ซึ่งยังคงยุติการใช้งานเนื่องจากการพัฒนาแพลตฟอร์มใหม่มุ่งเน้นไปที่ Camera API2 อย่างไรก็ตาม ระยะเวลาการยุติการใช้งานจะยาวนานขึ้น และการเปิดตัว Android จะยังคงรองรับแอป Camera API1 ต่อไปเป็นระยะเวลาหนึ่ง โดยเฉพาะการสนับสนุนยังคงดำเนินต่อไปสำหรับ:

  • อินเทอร์เฟซ Camera API1 สำหรับแอป แอปกล้องที่สร้างจาก Camera API1 ควรทำงานเหมือนกับที่ทำงานบนอุปกรณ์ที่ใช้ Android เวอร์ชันต่ำกว่า
  • รุ่นกล้อง HAL รวมถึงการสนับสนุนสำหรับกล้อง HAL1.0

กล้อง API2

เฟรมเวิร์ก Camera API2 เปิดเผยการควบคุมกล้องระดับล่างให้กับแอป รวมถึงโฟลว์การถ่ายภาพต่อเนื่อง/การสตรีมแบบ Zero-Copy ที่มีประสิทธิภาพ และการควบคุมการรับแสง เกน การเพิ่มไวต์บาลานซ์ การแปลงสี การลดสัญญาณรบกวน การทำให้คมชัด และอื่นๆ ต่อเฟรม สำหรับรายละเอียด โปรดดู วิดีโอภาพรวมของ Google I/O

Android 5.0 และสูงกว่าประกอบด้วย Camera API2; อย่างไรก็ตาม อุปกรณ์ที่ใช้ Android 5.0 และสูงกว่าอาจไม่รองรับคุณสมบัติ Camera API2 ทั้งหมด คุณสมบัติ android.info.supportedHardwareLevel ที่แอปสามารถสืบค้นผ่านอินเทอร์เฟซ Camera API2 จะรายงานระดับการสนับสนุนระดับใดระดับหนึ่งต่อไปนี้:

  • LEGACY : อุปกรณ์เหล่านี้เปิดเผยความสามารถให้กับแอปผ่านอินเทอร์เฟซ Camera API2 ซึ่งมีความสามารถใกล้เคียงกับความสามารถโดยประมาณกับแอปที่เปิดเผยผ่านอินเทอร์เฟซ Camera API1 โค้ดเฟรมเวิร์กแบบเดิมจะแปลการเรียก Camera API2 ไปเป็นการเรียก Camera API1 ตามแนวคิด อุปกรณ์รุ่นเก่าไม่รองรับฟีเจอร์ Camera API2 เช่น การควบคุมต่อเฟรม
  • LIMITED : อุปกรณ์เหล่านี้รองรับความสามารถของ Camera API2 บางอย่าง (แต่ไม่ใช่ทั้งหมด) และต้องใช้ Camera HAL 3.2 หรือสูงกว่า
  • FULL : อุปกรณ์เหล่านี้รองรับความสามารถหลักทั้งหมดของ Camera API2 และต้องใช้ Camera HAL 3.2 หรือสูงกว่า และ Android 5.0 หรือสูงกว่า
  • LEVEL_3 : อุปกรณ์เหล่านี้รองรับการประมวลผล YUV และการจับภาพ RAW พร้อมกับการกำหนดค่าสตรีมเอาต์พุตเพิ่มเติม
  • EXTERNAL : อุปกรณ์เหล่านี้คล้ายกับอุปกรณ์ LIMITED แต่มีข้อยกเว้นบางประการ ตัวอย่างเช่น ข้อมูลเซ็นเซอร์หรือเลนส์บางอย่างอาจไม่ถูกรายงานหรือมีอัตราเฟรมที่เสถียรน้อยกว่า ระดับนี้ใช้สำหรับกล้องภายนอก เช่น เว็บแคม USB

ความสามารถส่วนบุคคลจะถูกเปิดเผยผ่านคุณสมบัติ android.request.availableCapabilities ในอินเทอร์เฟซ Camera API2 อุปกรณ์ FULL ต้องใช้ความสามารถ MANUAL_SENSOR และ MANUAL_POST_PROCESSING และอื่นๆ ความสามารถ RAW เป็นทางเลือกแม้สำหรับอุปกรณ์ FULL อุปกรณ์ LIMITED สามารถโฆษณาชุดย่อยของความสามารถเหล่านี้ได้ รวมถึงไม่มีเลยด้วย อย่างไรก็ตาม จะต้องกำหนดความสามารถ BACKWARD_COMPATIBLE ไว้เสมอ

ระดับฮาร์ดแวร์ที่รองรับของอุปกรณ์ตลอดจนความสามารถเฉพาะของ Camera API2 ที่อุปกรณ์รองรับนั้นมีให้ใช้งานเป็นแฟล็กคุณสมบัติต่อไปนี้เพื่ออนุญาตให้ Google Play กรองแอพกล้อง Camera API2

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

ข้อกำหนดของซีทีเอส

อุปกรณ์ที่ใช้ Android 5.0 ขึ้นไปจะต้องผ่านการทดสอบกล้อง Camera API1 CTS, Camera API2 CTS และ CTS Verifier

อุปกรณ์ที่ไม่มีคุณลักษณะการใช้งาน Camera HAL3.2 และไม่สามารถรองรับอินเทอร์เฟซ Camera API2 เต็มรูปแบบ จะต้องยังคงผ่านการทดสอบ Camera API2 CTS อย่างไรก็ตาม อุปกรณ์ทำงานในโหมด Camera API2 LEGACY (ซึ่งการเรียก Camera API2 ได้รับการแมปตามแนวคิดกับการเรียก Camera API1) ดังนั้นการทดสอบ Camera API2 CTS ใดๆ ที่เกี่ยวข้องกับคุณสมบัติหรือความสามารถนอกเหนือจาก Camera API1 จะถูกข้ามไปโดยอัตโนมัติ

บนอุปกรณ์รุ่นเก่า การทดสอบ Camera API2 CTS ที่ดำเนินการจะใช้อินเทอร์เฟซและความสามารถของ Camera API1 สาธารณะที่มีอยู่โดยไม่มีข้อกำหนดใหม่ จุดบกพร่องที่ถูกเปิดเผย (และที่ทำให้ Camera API2 CTS ล้มเหลว) คือจุดบกพร่องที่มีอยู่แล้วใน Camera HAL ที่มีอยู่ของอุปกรณ์ และด้วยเหตุนี้จึงจะพบได้โดยแอป Camera API1 ที่มีอยู่ เราไม่คาดหวังว่าจะมีข้อบกพร่องในลักษณะนี้มากมาย (อย่างไรก็ตาม ข้อบกพร่องดังกล่าวจะต้องได้รับการแก้ไขจึงจะผ่านการทดสอบ Camera API2 CTS)

ข้อกำหนดของวีทีเอส

อุปกรณ์ที่ใช้ Android 8.0 และสูงกว่าพร้อมการใช้งาน HAL แบบผูกมัดจะต้องผ่าน การทดสอบ Camera VTS

กรอบกล้องแข็งตัว

เพื่อเพิ่มความปลอดภัยของสื่อและเฟรมเวิร์กกล้อง Android 7.0 จะย้ายบริการกล้องออกจากมีเดียเซิร์ฟเวอร์ ตั้งแต่ Android 8.0 เป็นต้นไป Camera HAL ที่ถูกผูกไว้แต่ละตัวจะทำงานในกระบวนการที่แยกจากบริการกล้อง ผู้จำหน่ายอาจต้องทำการเปลี่ยนแปลงในกล้อง HAL ขึ้นอยู่กับเวอร์ชัน API และ HAL ที่ใช้งานอยู่ ส่วนต่อไปนี้ให้รายละเอียดการเปลี่ยนแปลงทางสถาปัตยกรรมใน AP1 และ AP2 สำหรับ HAL1 และ HAL3 รวมถึงข้อกำหนดทั่วไป

การเปลี่ยนแปลงทางสถาปัตยกรรมสำหรับ API1

การบันทึกวิดีโอ API1 อาจถือว่ากล้องและตัวเข้ารหัสวิดีโออยู่ในกระบวนการเดียวกัน เมื่อใช้ API1 บน:

  • HAL3 โดยที่บริการกล้องใช้ BufferQueue เพื่อส่งบัฟเฟอร์ระหว่างกระบวนการ ไม่จำเป็นต้องอัปเดตจากผู้จำหน่าย

    กล้อง Android 7.0 และกองสื่อใน API1 บน HAL3

    รูปที่ 1 กล้อง Android 7.0 และสแต็กสื่อใน API1 บน HAL3

  • HAL1 ซึ่งรองรับการส่งผ่านข้อมูลเมตาในบัฟเฟอร์วิดีโอ ผู้ขายจะต้องอัปเดต HAL เพื่อใช้ kMetadataBufferTypeNativeHandleSource ( kMetadataBufferTypeCameraSource ไม่รองรับ Android 7.0 อีกต่อไป)

    กล้อง Android 7.0 และกองสื่อใน API1 บน HAL1

    รูปที่ 2 กล้อง Android 7.0 และสแต็กสื่อใน API1 บน HAL1

การเปลี่ยนแปลงทางสถาปัตยกรรมสำหรับ API2

สำหรับ API2 บน HAL1 หรือ HAL3 BufferQueue จะส่งผ่านบัฟเฟอร์ ดังนั้นเส้นทางเหล่านั้นจึงทำงานต่อไป สถาปัตยกรรม Android 7.0 สำหรับ API2 บน:

  • HAL1 ไม่ได้รับผลกระทบจากการย้ายบริการกล้อง และ ไม่จำเป็นต้องอัปเดตจากผู้จำหน่าย
  • HAL3 ได้ รับผลกระทบ แต่ ไม่จำเป็นต้องอัปเดตผู้จำหน่าย :

    กล้อง Android 7.0 และกองสื่อใน API2 บน HAL3

    รูปที่ 3 กล้อง Android 7.0 และสแต็กสื่อใน API2 บน HAL3

ข้อกำหนดเพิ่มเติม

การเปลี่ยนแปลงทางสถาปัตยกรรมที่ทำขึ้นเพื่อเพิ่มความปลอดภัยของสื่อและกรอบงานกล้องมีข้อกำหนดอุปกรณ์เพิ่มเติมดังต่อไปนี้

  • ทั่วไป. อุปกรณ์ต้องการแบนด์วิธเพิ่มเติมเนื่องจาก IPC ซึ่งอาจส่งผลต่อกรณีการใช้งานกล้องที่ต้องคำนึงถึงเวลา เช่น การบันทึกวิดีโอความเร็วสูง ผู้จำหน่ายสามารถวัดผลกระทบที่เกิดขึ้นจริงได้ด้วยการเรียกใช้ android.hardware.camera2.cts.PerformanceTest และแอป Google Camera สำหรับการบันทึกวิดีโอความเร็วสูง 120/240 FPS อุปกรณ์ยังต้องการ RAM เพิ่มเติมเล็กน้อยเพื่อสร้างกระบวนการใหม่
  • ส่งผ่านข้อมูลเมตาในบัฟเฟอร์วิดีโอ ( HAL1 เท่านั้น ) หาก HAL1 จัดเก็บข้อมูลเมตาแทนข้อมูลเฟรม YUV จริงในบัฟเฟอร์วิดีโอ HAL จะต้องใช้ kMetadataBufferTypeNativeHandleSource เป็นประเภทบัฟเฟอร์ข้อมูลเมตา และส่ง VideoNativeHandleMetadata ในบัฟเฟอร์วิดีโอ ( kMetadataBufferTypeCameraSource ไม่รองรับ Android 7.0 อีกต่อไป) ด้วย VideoNativeHandleMetadata กรอบงานกล้องและสื่อสามารถส่งผ่านบัฟเฟอร์วิดีโอระหว่างกระบวนการต่างๆ โดยการซีเรียลไลซ์และดีซีเรียลไลซ์แฮนเดิลเนทีฟอย่างเหมาะสม
  • ที่อยู่ตัวจัดการบัฟเฟอร์ไม่ได้เก็บบัฟเฟอร์เดียวกันเสมอไป ( เฉพาะ HAL3 ) สำหรับแต่ละคำขอจับภาพ HAL3 จะได้รับที่อยู่ของตัวจัดการบัฟเฟอร์ HAL ไม่สามารถใช้ที่อยู่เพื่อระบุบัฟเฟอร์ได้เนื่องจากที่อยู่อาจจัดเก็บบัฟเฟอร์ตัวจัดการอื่นหลังจากที่ HAL ส่งคืนบัฟเฟอร์ คุณต้องอัปเดต HAL เพื่อใช้ตัวจัดการบัฟเฟอร์เพื่อระบุบัฟเฟอร์ ตัวอย่างเช่น HAL ได้รับที่อยู่จับบัฟเฟอร์ A ซึ่งเก็บบัฟเฟอร์หมายเลขอ้างอิง A หลังจากที่ HAL ส่งคืนหมายเลขอ้างอิงบัฟเฟอร์ A ที่อยู่หมายเลขอ้างอิงบัฟเฟอร์ A อาจเก็บหมายเลขอ้างอิงบัฟเฟอร์ B ในครั้งถัดไปที่ HAL ได้รับ
  • อัปเดตนโยบาย SELinux สำหรับเซิร์ฟเวอร์กล้อง หากนโยบาย SELinux เฉพาะอุปกรณ์ให้สิทธิ์เซิร์ฟเวอร์มีเดียในการเรียกใช้กล้อง คุณต้องอัปเดตนโยบาย SELinux เพื่อให้สิทธิ์ที่เหมาะสมแก่เซิร์ฟเวอร์กล้อง เราไม่สนับสนุนการจำลองนโยบาย SELinux ของมีเดียเซิร์ฟเวอร์สำหรับเซิร์ฟเวอร์กล้อง (เนื่องจากโดยทั่วไปเซิร์ฟเวอร์มีเดียและเซิร์ฟเวอร์กล้องต้องการทรัพยากรที่แตกต่างกันในระบบ) Cameraserver ควรมีสิทธิ์ที่จำเป็นในการใช้งานฟังก์ชั่นกล้องเท่านั้น และควรลบสิทธิ์ที่เกี่ยวข้องกับกล้องที่ไม่จำเป็นใน Mediaserver ออก
  • การแยกระหว่าง Camera HAL และ CameraServer Android 8.0 และสูงกว่ายังแยก Camera HAL ที่ถูกผูกไว้เพิ่มเติมในกระบวนการที่แตกต่างจากเซิร์ฟเวอร์กล้อง IPC ผ่านอินเทอร์เฟซ ที่กำหนดโดย HIDL

การตรวจสอบ

สำหรับอุปกรณ์ทั้งหมดที่มีกล้องและใช้ Android 7.0 ให้ตรวจสอบการใช้งานโดยใช้ Android 7.0 CTS แม้ว่า Android 7.0 จะไม่รวมการทดสอบ CTS ใหม่ที่ตรวจสอบการเปลี่ยนแปลงบริการกล้อง แต่การทดสอบ CTS ที่มีอยู่จะล้มเหลวหากคุณไม่ได้ทำการอัปเดตตามที่ระบุไว้ข้างต้น

สำหรับอุปกรณ์ทั้งหมดที่มีกล้องและใช้ Android 8.0 ขึ้นไป ให้ตรวจสอบการใช้งานของผู้จำหน่ายโดยการเรียกใช้ VTS

ประวัติเวอร์ชันของกล้อง HAL

สำหรับรายการการทดสอบที่มีให้สำหรับการประเมิน Android Camera HAL โปรดดู รายการตรวจสอบการทดสอบ Camera HAL

แอนดรอยด์ 10

Android 10 แนะนำการอัปเดตต่อไปนี้

API ของกล้อง

  • การปรับปรุงกล้องหลายตัวที่อนุญาตให้ใช้กล้องจริงทีละตัวหรือผ่านกล้องลอจิคัลที่สอดคล้องกันโดยการซ่อน ID กล้องจริง ดู การสนับสนุนกล้องหลายตัว
  • ความสามารถในการตรวจสอบว่ารองรับการกำหนดค่าเซสชันเฉพาะหรือไม่ โดยไม่มีค่าใช้จ่ายด้านประสิทธิภาพในการสร้างเซสชันใหม่ ดู CameraDevice
  • ความสามารถในการดึงข้อมูลการกำหนดค่าสตรีมที่แนะนำสำหรับกรณีการใช้งานที่กำหนด เพื่อทำให้ไคลเอ็นต์มีประสิทธิภาพและประสิทธิภาพในการใช้พลังงานมากขึ้น ดู getRecommendedStreamConfigurationMap
  • รองรับ รูปแบบภาพ JPEG เชิงลึก สำหรับรายละเอียดเพิ่มเติม โปรดดู ข้อกำหนดความลึกแบบไดนามิก
  • รองรับ รูปแบบภาพ HEIC ดู การถ่ายภาพ HEIF
  • การปรับปรุงความเป็นส่วนตัว ต้องใช้คีย์บางคีย์เพื่อให้ไคลเอ็นต์มีสิทธิ์ CAMERA ก่อนจึงจะสามารถดึงข้อมูลจาก CameraCharacteristics ได้ ดู getKeysNeedingPermission

กล้องฮาล

Camera HAL เวอร์ชันต่อไปนี้ได้รับการอัปเดตใน Android 10

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : ข้อมูลกล้องคงที่สำหรับ ID กล้องจริงที่สนับสนุนอุปกรณ์กล้องแบบลอจิคัล ดู การสนับสนุนกล้องหลายตัว
  • isStreamCombinationSupported : วิธีการนี้รองรับ API สาธารณะที่ช่วยให้ไคลเอนต์สอบถามว่ารองรับการกำหนดค่าเซสชันหรือไม่ ดู API เพื่อสืบค้นชุดสตรีม

ICameraDeviceSession

  • isReconfigurationNeeded : วิธีที่บอกเฟรมเวิร์กของกล้องว่าจำเป็นต้องมีการกำหนดค่าสตรีมใหม่ทั้งหมดสำหรับค่าพารามิเตอร์เซสชันใหม่ที่เป็นไปได้หรือไม่ ซึ่งจะช่วยหลีกเลี่ยงความล่าช้าในการกำหนดค่ากล้องใหม่โดยไม่จำเป็น ดู แบบสอบถามการกำหนดค่าเซสชันใหม่
  • API การจัดการบัฟเฟอร์ HAL : API เหล่านี้อนุญาตให้กล้อง HAL ร้องขอบัฟเฟอร์จากเฟรมเวิร์กของกล้องเมื่อจำเป็นเท่านั้น แทนที่จะเชื่อมต่อคำขอจับภาพแต่ละรายการกับบัฟเฟอร์ที่เกี่ยวข้องตลอดไปป์ไลน์ของกล้อง ส่งผลให้ประหยัดหน่วยความจำได้อย่างมาก
    • signalStreamFlush : ส่งสัญญาณไปยัง HAL ว่าบริการกล้องกำลังจะดำเนินการ configureStreams_3_5 และ HAL จะต้องส่งคืนบัฟเฟอร์ทั้งหมดของสตรีมที่กำหนด
    • configureStreams_3_5 : คล้ายกับ ICameraDevice3.4.configureStreams แต่เพิ่มเติม ตัวนับ streamConfigCounter มีไว้เพื่อตรวจสอบสภาพการแข่งขันระหว่างการเรียก configureStreams_3_5 และ signalStreamFlush

อัพเดต ICameraDeviceCallback :

  • requestStreamBuffers : การโทรกลับแบบซิงโครนัสที่กล้อง HAL เรียกเพื่อขอบัฟเฟอร์จากเซิร์ฟเวอร์กล้อง ดู requestStreamBuffers
  • returnStreamBuffers : การเรียกกลับแบบซิงโครนัสสำหรับกล้อง HAL เพื่อส่งคืนบัฟเฟอร์เอาต์พุตไปยังเซิร์ฟเวอร์กล้อง ดูที่ returnStreamBuffers

3.4

ปุ่มต่อไปนี้ถูกเพิ่มลงในข้อมูลเมตาของกล้องใน Android 10

  • รูปแบบภาพ
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • แท็กข้อมูลเมตาของกล้อง
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • ความสามารถ
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • ค่าสำหรับคีย์ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • การกำหนดค่าสตรีมความลึกแบบไดนามิกที่พร้อมใช้งาน
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • การกำหนดค่าสตรีม HEIC ที่ใช้ได้
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

โมดูลกล้อง

เวอร์ชันโมดูลกล้องต่อไปนี้ได้รับการอัปเดตใน Android 10

2.5

  • เพิ่มวิธีการ notifyDeviceStateChange สำหรับอุปกรณ์เพื่อแจ้งเตือน HAL ของกล้องเมื่อการเปลี่ยนแปลงทางกายภาพ เช่น การพับ ส่งผลต่อกล้องและการกำหนดเส้นทาง

2.4

  • อุปกรณ์ที่เปิดตัวด้วย API ระดับ 29 หรือสูงกว่าจะต้องรายงาน true สำหรับ isTorchModeSupported

แอนดรอยด์ 9

Android 9 เปิดตัวการอัปเดตต่อไปนี้สำหรับอินเทอร์เฟซ API2 และ HAL ของกล้อง

API ของกล้อง

  • เปิดตัว API ของกล้องหลายตัวเพื่อรองรับอุปกรณ์ที่มีกล้องหลายตัวหันหน้าไปในทิศทางเดียวกันได้ดียิ่งขึ้น ช่วยให้ใช้งานฟีเจอร์ต่างๆ เช่น โบเก้ และการซูมได้อย่างราบรื่น ซึ่งช่วยให้แอปสามารถดูกล้องหลายตัวบนอุปกรณ์เป็นหน่วยลอจิคัลเดียว (กล้องลอจิคัล) คำขอจับภาพสามารถส่งไปยังอุปกรณ์กล้องแต่ละตัวที่ล้อมรอบด้วยกล้องลอจิคัลตัวเดียวได้ ดู การสนับสนุนกล้องหลายตัว
  • แนะนำพารามิเตอร์เซสชัน พารามิเตอร์เซสชันเป็นชุดย่อยของพารามิเตอร์การจับที่มีอยู่ซึ่งอาจทำให้เกิดความล่าช้าในการประมวลผลอย่างรุนแรงเมื่อมีการแก้ไข ต้นทุนเหล่านี้สามารถลดลงได้หากไคลเอนต์ส่งค่าเริ่มต้นระหว่างการเริ่มต้นเซสชันการจับภาพ ดู พารามิเตอร์เซสชัน
  • เพิ่มคีย์ข้อมูลระบบป้องกันภาพสั่นไหวแบบออปติคัล (OIS) สำหรับระบบป้องกันภาพสั่นไหวและเอฟเฟกต์ระดับแอป ดู STATISTICS_OIS_SAMPLES
  • เพิ่มการรองรับแฟลชภายนอก ดู CONTROL_AE_MODE_ON_EXTERNAL_FLASH
  • เพิ่มจุดประสงค์ในการติดตามการเคลื่อนไหวใน CAPTURE_INTENT ดู CONTROL_CAPTURE_INTENT_MOTION_TRACKING
  • เลิกใช้งาน LENS_RADIAL_DISTORTION และเพิ่ม LENS_DISTORTION ในตำแหน่ง
  • เพิ่มโหมดการแก้ไขความผิดเพี้ยนใน CaptureRequest ดูที่ DISTORTION_CORRECTION_MODE
  • เพิ่มการรองรับกล้อง USB/UVC ภายนอกบนอุปกรณ์ที่รองรับ ดู INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL

กล้องฮาล

3.4

อัปเดตเป็น ICameraDeviceSession

  • configureStreams_3_4 : เพิ่มการรองรับ sessionParameters และกล้องลอจิคัล
  • processCaptureRequest_3_4 : เพิ่มการรองรับสำหรับการรวม ID กล้องจริงในโครงสร้างสตรีม

อัปเดตเป็น ICameraDeviceCallback

  • processCaptureResult_3_4 : เพิ่มข้อมูลเมตาของกล้องจริงในผลลัพธ์การจับภาพ

3.3

ปุ่มต่อไปนี้ถูกเพิ่มลงในข้อมูลเมตาของกล้องใน Android 9

  • ความสามารถ
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • แท็กข้อมูลเมตาของกล้อง
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

ระบบปฏิบัติการ Android 8.0

Android 8.0 เปิดตัว Treble ด้วย Treble การใช้งาน Camera HAL ของผู้จำหน่ายจะต้องถูก ผูกไว้ Android 8.0 ยังมีการปรับปรุงที่สำคัญเหล่านี้ในบริการกล้อง:

  • พื้นผิวที่ใช้ร่วมกัน: เปิดใช้งานหลายพื้นผิวที่ใช้ร่วมกัน OutputConfiguration เดียวกัน
  • System API สำหรับโหมดกล้องแบบกำหนดเอง
  • onCaptureQueueEmpty

ดูส่วนด้านล่างสำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติเหล่านี้

พื้นผิวที่ใช้ร่วมกัน

คุณสมบัตินี้ช่วยให้บัฟเฟอร์เพียงชุดเดียวสามารถขับเคลื่อนสองเอาต์พุต เช่น การแสดงตัวอย่างและการเข้ารหัสวิดีโอ ซึ่งช่วยลดการใช้พลังงานและหน่วยความจำ เพื่อสนับสนุนคุณสมบัตินี้ ผู้ผลิตอุปกรณ์จำเป็นต้องตรวจสอบให้แน่ใจว่าการใช้งานกล้อง HAL และ gralloc HAL สามารถสร้างบัฟเฟอร์ gralloc ที่ผู้บริโภคหลายรายใช้ (เช่น ผู้แต่งฮาร์ดแวร์/GPU และตัวเข้ารหัสวิดีโอ) แทนที่จะเป็นผู้บริโภคเพียงรายเดียว บริการกล้องส่งแฟล็กการใช้งานของผู้บริโภคไปยังกล้อง HAL และ graloc HAL พวกเขาจำเป็นต้องจัดสรรบัฟเฟอร์ประเภทที่ถูกต้อง หรือกล้อง HAL จำเป็นต้องส่งคืนข้อผิดพลาดที่ไม่รองรับการใช้งานร่วมกันนี้

ดูเอกสารประกอบสำหรับนักพัฒนา enableSurfaceSharing สำหรับรายละเอียดเพิ่มเติม

System API สำหรับโหมดกล้องแบบกำหนดเอง

API ของกล้องสาธารณะกำหนดโหมดการทำงานสองโหมด: การบันทึกความเร็วสูงแบบปกติและแบบจำกัด พวกมันมีความหมายที่แตกต่างกันพอสมควร ตัวอย่างเช่น โหมดความเร็วสูงถูกจำกัดไว้ที่เอาต์พุตเฉพาะสูงสุดสองเอาต์พุตในคราวเดียว OEM หลายรายแสดงความสนใจในการกำหนดโหมดแบบกำหนดเองอื่นๆ สำหรับความสามารถเฉพาะของฮาร์ดแวร์ ภายใต้ประทุน โหมดนี้เป็นเพียงจำนวนเต็มที่ส่งผ่านไปยัง configure_streams ดู: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams

คุณลักษณะนี้รวมถึงการเรียก API ของระบบที่แอปกล้อง OEM สามารถใช้เพื่อเปิดใช้งานโหมดแบบกำหนดเองได้ โหมดเหล่านี้ต้องเริ่มต้นที่ค่าจำนวนเต็ม 0x8000 เพื่อหลีกเลี่ยงความขัดแย้งกับโหมดในอนาคตที่เพิ่มใน API สาธารณะ

เพื่อสนับสนุนคุณสมบัตินี้ OEM เพียงต้องเพิ่มโหมดใหม่ให้กับ HAL ของตน ซึ่งทริกเกอร์โดยจำนวนเต็มนี้ที่ส่งไปยัง HAL บน configuration_streams จากนั้นให้แอปกล้องแบบกำหนดเองใช้ API ระบบ

ชื่อเมธอดคือ android.hardware.camera2.CameraDevice#createCustomCaptureSession ดู: frameworks/base/core/java/android/hardware/camera2/CameraDevice

onCaptureQueueEmpty

วัตถุประสงค์ของ API นี้คือเพื่อลดเวลาแฝงของการเปลี่ยนแปลงการควบคุม เช่น การซูม โดยทำให้คิวคำขอว่างเปล่าที่สุดเท่าที่จะเป็นไปได้ onCaptureQueueEmpty ไม่ต้องทำงาน HAL มันเป็นการเพิ่มด้านกรอบงานล้วนๆ แอปพลิเคชันที่ต้องการใช้ประโยชน์จากมันจำเป็นต้องเพิ่มผู้ฟังในการโทรกลับนั้นและตอบสนองอย่างเหมาะสม โดยทั่วไปจะเป็นการส่งคำขอจับภาพอีกครั้งไปยังอุปกรณ์กล้อง

อินเทอร์เฟซกล้อง HIDL

อินเทอร์เฟซ Camera HIDL เป็นการยกเครื่องอินเทอร์เฟซ Camera HAL ใหม่ทั้งหมดซึ่งใช้ API ที่กำหนดโดย HIDL ที่เสถียร คุณสมบัติและความสามารถของกล้องทั้งหมดที่นำมาใช้ในเวอร์ชันเก่าล่าสุด 3.4 และ 2.4 (สำหรับโมดูลกล้อง) เป็นส่วนหนึ่งของคำจำกัดความ HIDL เช่นกัน

3.4

การเพิ่มเล็กน้อยในข้อมูลเมตาที่รองรับและการเปลี่ยนแปลงการสนับสนุน data_space:

  • เพิ่ม ANDROID_SENSOR_OPAQUE_RAW_SIZE ข้อมูลเมตาคงที่เป็นข้อบังคับ หากรองรับรูปแบบ RAW_OPAQUE
  • เพิ่ม ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE ข้อมูลเมตาคงที่เป็นข้อบังคับ หากรองรับรูปแบบ RAW ใดๆ
  • สลับฟิลด์ camera3_stream_t data_space เป็นคำจำกัดความที่ยืดหยุ่นมากขึ้น โดยใช้คำจำกัดความเวอร์ชัน 0 ของการเข้ารหัส dataspace
  • การเพิ่มข้อมูลเมตาทั่วไปที่พร้อมใช้งานสำหรับ HALv3.2 หรือใหม่กว่า:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

การแก้ไขเล็กน้อยของ HAL ที่มีความสามารถเพิ่มเติม:

  • OPAQUE และ YUV กำลังประมวลผลการอัปเดต API ใหม่
  • การสนับสนุนพื้นฐานสำหรับบัฟเฟอร์เอาต์พุตเชิงลึก
  • การเพิ่มฟิลด์ data_space ใน camera3_stream_t
  • การเพิ่มฟิลด์การหมุนให้กับ camera3_stream_t
  • เพิ่มโหมดการทำงานการกำหนดค่าสตรีม Camera3 ให้กับ camera3_stream_configuration_t

3.2

การแก้ไขเล็กน้อยของ HAL ที่มีความสามารถเพิ่มเติม:

  • เลิกใช้ get_metadata_vendor_tag_ops ใช้ get_vendor_tag_ops ใน camera_common.h แทน
  • เลิกใช้ register_stream_buffers บัฟเฟอร์ gralloc ทั้งหมดที่เฟรมเวิร์กมอบให้ HAL ใน process_capture_request อาจเป็นบัฟเฟอร์ใหม่ได้ตลอดเวลา
  • เพิ่มการสนับสนุนผลลัพธ์บางส่วน process_capture_result อาจถูกเรียกหลายครั้งโดยมีชุดย่อยของผลลัพธ์ที่มีอยู่ก่อนที่ผลลัพธ์ทั้งหมดจะพร้อมใช้งาน
  • เพิ่มเทมเพลตแบบแมนนวลให้กับ camera3_request_template แอปพลิเคชันอาจใช้เทมเพลตนี้เพื่อควบคุมการตั้งค่าการบันทึกโดยตรง
  • ปรับปรุงข้อกำหนดสตรีมแบบสองทิศทางและอินพุตสตรีมใหม่
  • เปลี่ยนเส้นทางการส่งคืนบัฟเฟอร์อินพุต บัฟเฟอร์จะถูกส่งกลับใน process_capture_result แทน process_capture_request

3.1

การแก้ไขเล็กน้อยของ HAL ที่มีความสามารถเพิ่มเติม:

  • configure_streams ส่งผ่านแฟล็กการใช้งานของผู้บริโภคไปยัง HAL
  • ล้างการโทรเพื่อยกเลิกคำขอ/บัฟเฟอร์ในเที่ยวบินทั้งหมดโดยเร็วที่สุด

3.0

การแก้ไขครั้งแรกของ HAL ที่มีความสามารถเพิ่มเติม:

  • การเปลี่ยนแปลงเวอร์ชันหลักเนื่องจาก ABI แตกต่างอย่างสิ้นเชิง ไม่มีการเปลี่ยนแปลงความสามารถของฮาร์ดแวร์ที่จำเป็นหรือรูปแบบการดำเนินงานจาก 2.0
  • คำขออินพุตและอินเทอร์เฟซคิวสตรีมทำใหม่: การเรียกเฟรมเวิร์กเข้าสู่ HAL พร้อมคำขอถัดไปและบัฟเฟอร์สตรีมที่แยกออกจากคิวแล้ว รวมการสนับสนุนเฟรมเวิร์กการซิงค์ซึ่งจำเป็นสำหรับการใช้งานที่มีประสิทธิภาพ
  • ย้ายทริกเกอร์ไปยังคำขอ การแจ้งเตือนส่วนใหญ่ไปยังผลลัพธ์
  • รวมการเรียกกลับทั้งหมดไว้ในกรอบงานไว้ในโครงสร้างเดียว และวิธีการตั้งค่าทั้งหมดไว้ในการโทร initialize() เพียงครั้งเดียว
  • ทำการกำหนดค่าสตรีมให้เป็นการโทรครั้งเดียวเพื่อลดความซับซ้อนในการจัดการสตรีม สตรีมแบบสองทิศทางแทนที่โครงสร้าง STREAM_FROM_STREAM
  • ซีแมนทิกส์โหมดจำกัดสำหรับอุปกรณ์ฮาร์ดแวร์รุ่นเก่า/จำกัด

2.0

การเปิดตัวครั้งแรกของ HAL ที่มีความสามารถเพิ่มเติม (Android 4.2) [camera2.h]:

  • เพียงพอสำหรับการใช้งาน android.hardware.Camera API ที่มีอยู่
  • อนุญาตคิว ZSL ในชั้นบริการกล้อง
  • ไม่ได้ทดสอบคุณสมบัติใหม่ใดๆ เช่น การควบคุมการจับภาพด้วยตนเอง, การบันทึก Bayer RAW, การประมวลผลข้อมูล RAW ใหม่ ฯลฯ

1.0

กล้อง Android เริ่มต้น HAL (Android 4.0) [camera.h]:

  • แปลงจากเลเยอร์นามธรรมของ CameraHardwareInterface C ++
  • รองรับ android.hardware.Camera API

ประวัติเวอร์ชันโมดูลกล้อง

ส่วนนี้ประกอบด้วยข้อมูลการกำหนดเวอร์ชันโมดูลสำหรับโมดูลฮาร์ดแวร์กล้อง โดยอิงจาก camera_module_t.common.module_api_version เลขฐานสิบหกที่มีนัยสำคัญที่สุดสองหลักแสดงถึงเวอร์ชันหลัก และเลขฐานสิบหกที่มีนัยสำคัญน้อยที่สุดสองหลักแสดงถึงเวอร์ชันรอง

2.4

เวอร์ชันโมดูลกล้องนี้เพิ่มการเปลี่ยนแปลง API ต่อไปนี้:

  1. รองรับโหมดคบเพลิง เฟรมเวิร์กสามารถเปิดโหมดคบเพลิงสำหรับอุปกรณ์กล้องใดๆ ที่มีชุดแฟลช โดยไม่ต้องเปิดอุปกรณ์กล้อง อุปกรณ์กล้องมีความสำคัญในการเข้าถึงชุดแฟลชมากกว่าโมดูลกล้อง การเปิดอุปกรณ์กล้องจะปิดไฟฉายหากเปิดใช้งานผ่านอินเทอร์เฟซของโมดูล เมื่อมีข้อขัดแย้งด้านทรัพยากร เช่น การเรียก open() เพื่อเปิดอุปกรณ์กล้อง โมดูล HAL ของกล้องจะต้องแจ้งเฟรมเวิร์กผ่านการเรียกกลับสถานะโหมดคบเพลิงว่าโหมดคบเพลิงปิดอยู่
  2. รองรับกล้องภายนอก (เช่น กล้อง USB hot-plug) การอัปเดต API ระบุว่าข้อมูลคงที่ของกล้องจะพร้อมใช้งานเฉพาะเมื่อมีการเชื่อมต่อกล้องและพร้อมที่จะใช้สำหรับกล้อง hot-plug ภายนอก การโทรเพื่อรับข้อมูลคงที่ถือเป็นการโทรที่ไม่ถูกต้องเมื่อสถานะของกล้องไม่ใช่ CAMERA_DEVICE_STATUS_PRESENT เฟรมเวิร์กนับเฉพาะการเรียกกลับการเปลี่ยนแปลงสถานะของอุปกรณ์เพื่อจัดการรายการกล้องภายนอกที่มีอยู่
  3. คำแนะนำอนุญาโตตุลาการกล้อง เพิ่มการรองรับเพื่อระบุจำนวนอุปกรณ์กล้องที่สามารถเปิดและใช้งานได้พร้อมกันอย่างชัดเจน หากต้องการระบุชุดอุปกรณ์ที่ถูกต้อง ควรตั้งค่าฟิลด์ resource_cost และ conflicting_devices ในโครงสร้าง camera_info ที่ส่งคืนโดยการเรียก get_camera_info เสมอ
  4. วิธีการเริ่มต้นโมดูล เรียกโดยบริการกล้องหลังจากโหลดโมดูล HAL เพื่อให้สามารถเริ่มต้น HAL ได้เพียงครั้งเดียว มันถูกเรียกก่อนที่จะเรียกใช้เมธอดโมดูลอื่นๆ

2.3

เวอร์ชันโมดูลกล้องนี้เพิ่มการรองรับอุปกรณ์ HAL ของกล้องแบบเปิดรุ่นเก่า เฟรมเวิร์กสามารถใช้เพื่อเปิดอุปกรณ์กล้องเป็นอุปกรณ์ HAL เวอร์ชันต่ำกว่า อุปกรณ์ HAL หากอุปกรณ์เดียวกันสามารถรองรับ API เวอร์ชันของอุปกรณ์ได้หลายเวอร์ชัน open call ของโมดูลฮาร์ดแวร์มาตรฐาน ( common.methods->open ) ยังคงเปิดอุปกรณ์กล้องด้วยเวอร์ชันที่รองรับล่าสุด ซึ่งเป็นเวอร์ชันที่แสดงอยู่ใน camera_info_t.device_version ด้วย

2.2

เวอร์ชันโมดูลกล้องนี้เพิ่มการสนับสนุนแท็กผู้ขายจากโมดูล และเลิกใช้ vendor_tag_query_ops เก่าที่ก่อนหน้านี้สามารถเข้าถึงได้เมื่อเปิดอุปกรณ์เท่านั้น

2.1

เวอร์ชันโมดูลกล้องนี้เพิ่มการสนับสนุนสำหรับการเรียกกลับแบบอะซิงโครนัสไปยังเฟรมเวิร์กจากโมดูล HAL ของกล้อง ซึ่งใช้เพื่อแจ้งเตือนเฟรมเวิร์กเกี่ยวกับการเปลี่ยนแปลงสถานะของโมดูลกล้อง โมดูลที่ให้เมธอด set_callbacks() ที่ถูกต้องจะต้องรายงานหมายเลขเวอร์ชันนี้เป็นอย่างน้อย

2.0

โมดูลกล้องที่รายงานหมายเลขเวอร์ชันนี้จะใช้อินเทอร์เฟซ HAL ของโมดูลกล้องเวอร์ชันที่สอง อุปกรณ์กล้องที่เปิดได้ผ่านโมดูลนี้อาจรองรับอินเทอร์เฟซ HAL ของอุปกรณ์กล้องเวอร์ชัน 1.0 หรือเวอร์ชัน 2.0 ช่อง device_version ของ camera_info นั้นถูกต้องเสมอ ฟิลด์ static_camera_characteristics ของ camera_info นั้นถูกต้อง หากฟิลด์ device_version เป็น 2.0 หรือสูงกว่า

1.0

โมดูลกล้องที่รายงานหมายเลขเวอร์ชันเหล่านี้จะใช้อินเทอร์เฟซ HAL ของโมดูลกล้องเริ่มต้น อุปกรณ์กล้องทั้งหมดที่สามารถเปิดได้ผ่านโมดูลนี้รองรับเฉพาะเวอร์ชัน 1 ของอุปกรณ์กล้อง HAL ช่อง device_version และ static_camera_characteristics ของ camera_info ไม่ถูกต้อง โมดูลนี้และอุปกรณ์ต่างๆ รองรับเฉพาะ android.hardware.Camera API เท่านั้น