รองรับกล้องหลายตัว

Android 9 เปิดตัวการรองรับ API สำหรับอุปกรณ์หลายกล้องผ่านอุปกรณ์กล้องลอจิกใหม่ที่ประกอบด้วยอุปกรณ์กล้องจริงสองตัวขึ้นไปที่ชี้ไปในทิศทางเดียวกัน อุปกรณ์กล้องลอจิคัลถูกเปิดเผยเป็น CameraDevice/CaptureSession เดียวในแอพเพื่อให้สามารถโต้ตอบกับคุณสมบัติกล้องหลายตัวที่ผสานรวมกับ HAL แอปสามารถเลือกเข้าถึงและควบคุมสตรีมของกล้องจริง ข้อมูลเมตา และการควบคุมได้

รองรับกล้องหลายตัว

รูปที่ 1 รองรับกล้องหลายตัว

ในแผนภาพนี้ ID กล้องที่ต่างกันจะมีรหัสสี แอปสามารถสตรีมบัฟเฟอร์ดิบจากกล้องจริงแต่ละตัวได้พร้อมกัน นอกจากนี้ยังสามารถตั้งค่าการควบคุมแยกต่างหากและรับข้อมูลเมตาแยกจากกล้องจริงต่างๆ

ตัวอย่างและที่มา

อุปกรณ์กล้องหลายตัวจะต้องได้รับการโฆษณาที่มี ความสามารถในการใช้กล้องหลายตัวตรรกะ

ลูกค้าสามารถสอบถามกล้อง ID ที่กล้องของอุปกรณ์ทางกายภาพกล้องตรรกะโดยเฉพาะอย่างยิ่งที่ทำจากโดยการเรียก getPhysicalCameraIds() รหัสกลับมาเป็นส่วนหนึ่งของผลที่ได้ถูกนำมาใช้ในการควบคุมอุปกรณ์ทางกายภาพเป็นรายบุคคลผ่าน setPhysicalCameraId() ผลที่ได้จากแต่ละคำขอดังกล่าวสามารถสอบถามจากผลสมบูรณ์โดยเรียก getPhysicalCameraResults()

คำขอกล้องจริงแต่ละรายการอาจรองรับพารามิเตอร์ชุดย่อยที่จำกัดเท่านั้น ที่จะได้รับรายชื่อของพารามิเตอร์การสนับสนุนนักพัฒนาสามารถเรียก getAvailablePhysicalCameraRequestKeys()

รองรับสตรีมกล้องจริงสำหรับคำขอที่ไม่ประมวลผลซ้ำ และสำหรับเซ็นเซอร์ขาวดำและไบเออร์เท่านั้น

การดำเนินการ

รายการตรวจสอบการสนับสนุน

ในการเพิ่มอุปกรณ์กล้องหลายตัวแบบลอจิคัลที่ด้าน HAL:

  • เพิ่ม ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA ความสามารถสำหรับอุปกรณ์กล้องตรรกะการสนับสนุนจากสองหรือกายภาพมากกว่ากล้องที่ยังมีการสัมผัสกับแอป
  • เติมคง ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS เมตาดาต้าเขตข้อมูลที่มีรายการของรหัสกล้องทางกายภาพ
  • เติมความลึกที่เกี่ยวข้องกับเมตาดาต้าแบบคงที่จำเป็นเพื่อให้ความสัมพันธ์ระหว่างกล้องลำธารทางกายภาพพิกเซล: ANDROID_LENS_POSE_ROTATION , ANDROID_LENS_POSE_TRANSLATION , ANDROID_LENS_INTRINSIC_CALIBRATION , ANDROID_LENS_DISTORTION , ANDROID_LENS_POSE_REFERENCE
  • ตั้งคง ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE ช่องข้อมูลเมตาไปที่:

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

  • หากการร้องขอของแต่ละบุคคลได้รับการสนับสนุนกระบวนการและการใช้ของแต่ละบุคคล physicalCameraSettings ที่สามารถเดินทางมาถึงเป็นส่วนหนึ่งของการร้องขอการจับภาพและผนวกบุคคล physicalCameraMetadata ตาม

  • สำหรับอุปกรณ์กล้อง HAL รุ่น 3.5 (แนะนำใน Android 10) หรือสูงกว่าเติม ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID สำคัญผลโดยใช้รหัสของกล้องมีอยู่จริงในปัจจุบันที่ใช้งานสำรองข้อมูลกล้องตรรกะ

สำหรับอุปกรณ์ที่ใช้ Android 9 อุปกรณ์กล้องต้องรองรับการแทนที่สตรีม YUV/RAW แบบลอจิคัลหนึ่งรายการด้วยสตรีมจริงที่มีขนาดเท่ากัน (ใช้ไม่ได้กับสตรีม RAW) และรูปแบบเดียวกันจากกล้องสองตัว สิ่งนี้ใช้ไม่ได้กับอุปกรณ์ที่ใช้ Android 10

สำหรับอุปกรณ์ที่ใช้ Android 10 ที่กล้องรุ่นอุปกรณ์ HAL เป็น 3.5 หรือสูงกว่าอุปกรณ์กล้องต้องสนับสนุน isStreamCombinationSupported ปพลิเคชันในแบบสอบถามไม่ว่าจะเป็นการรวมกันโดยเฉพาะอย่างยิ่งที่มีกระแสลำธารทางกายภาพได้รับการสนับสนุน

แผนที่การกำหนดค่าสตรีม

สำหรับกล้องตรรกะชุดกระแสบังคับใช้สำหรับอุปกรณ์กล้องในระดับฮาร์ดแวร์บางอย่างเป็นเช่นเดียวกับสิ่งที่จำเป็นใน CameraDevice.createCaptureSession สตรีมทั้งหมดในแผนผังการกำหนดค่าสตรีมต้องเป็นสตรีมแบบลอจิคัล

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

ในการใช้ประโยชน์จากการซูมด้วยเลนส์แบบ HAL โดยการสลับระหว่างกล้องย่อยจริงระหว่างการจับภาพ RAW แอปจะต้องกำหนดค่าการสตรีมของกล้องย่อยจริงแทนการสตรีม RAW แบบลอจิคัล

รับประกันชุดสตรีม

ทั้งกล้องตรรกะและพื้นฐานกล้องทางกายภาพของมันจะต้องรับประกันการ รวมกันกระแสบังคับ จำเป็นสำหรับระดับอุปกรณ์ของพวกเขา

อุปกรณ์กล้องลอจิคัลควรทำงานในลักษณะเดียวกับอุปกรณ์กล้องจริงตามระดับฮาร์ดแวร์และความสามารถ ขอแนะนำว่าชุดคุณลักษณะของมันคือซูเปอร์เซ็ตของชุดกล้องจริงแต่ละตัว

บนอุปกรณ์ที่ใช้ Android 9 สำหรับชุดสตรีมที่รับประกันแต่ละรายการ กล้องลอจิคัลต้องรองรับ:

  • การแทนที่ YUV_420_888 หรือสตรีมแบบลอจิคัลหนึ่งรายการด้วยสตรีมจริง 2 รายการที่มีขนาดและรูปแบบเดียวกัน โดยแต่ละรายการมาจากกล้องจริงแยกต่างหาก เนื่องจากกล้องจริงรองรับขนาดและรูปแบบ

  • เพิ่มสตรีมดิบสองสตรีม หนึ่งสตรีมจากกล้องจริงแต่ละตัว หากกล้องลอจิคัลไม่ได้โฆษณาความสามารถ RAW แต่กล้องจริงที่อยู่เบื้องหลังทำได้ ซึ่งมักเกิดขึ้นเมื่อกล้องจริงมีขนาดเซนเซอร์ต่างกัน

  • การใช้ฟิสิคัลสตรีมแทนสตรีมแบบลอจิคัลที่มีขนาดและรูปแบบเดียวกัน สิ่งนี้จะต้องไม่ทำให้อัตราเฟรมของการจับภาพช้าลงเมื่อระยะเวลาเฟรมต่ำสุดของสตรีมทางกายภาพและทางลอจิคัลเท่ากัน

การพิจารณาประสิทธิภาพและกำลัง

  • ประสิทธิภาพ:

    • การกำหนดค่าและการสตรีมสตรีมทางกายภาพอาจทำให้อัตราการจับภาพของกล้องลอจิคัลช้าลงเนื่องจากข้อจำกัดของทรัพยากร
    • การใช้การตั้งค่ากล้องจริงอาจทำให้อัตราการจับภาพช้าลงหากกล้องที่อยู่ด้านล่างถูกใส่ไว้ในอัตราเฟรมที่ต่างกัน
  • พลัง:

    • การเพิ่มประสิทธิภาพพลังงานของ HAL ยังคงทำงานในกรณีเริ่มต้น
    • การกำหนดค่าหรือขอสตรีมทางกายภาพอาจแทนที่การเพิ่มประสิทธิภาพพลังงานภายในของ HAL และใช้พลังงานมากขึ้น

การปรับแต่ง

คุณสามารถปรับแต่งการใช้งานอุปกรณ์ของคุณได้ด้วยวิธีต่อไปนี้

  • เอาต์พุตที่หลอมรวมของอุปกรณ์กล้องลอจิคัลขึ้นอยู่กับการใช้งาน HAL ทั้งหมด การตัดสินใจว่าสตรีมแบบลอจิคัลแบบหลอมรวมนั้นมาจากกล้องจริงอย่างไรนั้นโปร่งใสสำหรับแอพและเฟรมเวิร์กของกล้อง Android
  • คำขอทางกายภาพแต่ละรายการและผลลัพธ์สามารถเลือกได้ ชุดของพารามิเตอร์ที่มีอยู่ในคำขอดังกล่าวยังขึ้นอยู่กับการใช้งาน HAL ที่เฉพาะเจาะจงอีกด้วย
  • จาก Android 10 HAL สามารถลดจำนวนของกล้องที่สามารถเปิดได้โดยตรงจากแอปโดยการเลือกตั้งที่จะไม่โฆษณา PHYSICAL_IDs บางส่วนหรือทั้งหมดใน getCameraIdList โทร getPhysicalCameraCharacteristics แล้วต้องกลับลักษณะของกล้องทางกายภาพ

การตรวจสอบความถูกต้อง

อุปกรณ์หลายกล้องเชิงตรรกะต้องผ่าน CTS ของกล้องเหมือนกับกล้องทั่วไปอื่นๆ กรณีทดสอบที่กำหนดเป้าหมายประเภทของอุปกรณ์นี้สามารถพบได้ใน LogicalCameraDeviceTest โมดูล

การทดสอบ ITS ทั้งสามนี้มุ่งเป้าไปที่ระบบกล้องหลายตัวเพื่ออำนวยความสะดวกในการรวมภาพอย่างเหมาะสม:

ฉากที่ 1 และ 4 ฉากทดสอบทำงานกับ ITS-in-a-กล่อง ทดสอบแท่นขุดเจาะ test_multi_camera_match การทดสอบยืนยันว่าความสว่างของศูนย์ของภาพที่ตรงกับเมื่อสองกล้องมีทั้งที่เปิดใช้งาน test_multi_camera_alignment ทดสอบอ้างว่าระยะปลูกกล้องหมุนและพารามิเตอร์บิดเบือนมีการโหลดอย่างถูกต้อง หากระบบกล้องหลายตัวมีกล้อง Wide FoV (>90o) จำเป็นต้องใช้กล่อง ITS เวอร์ชัน rev2

Sensor_fusion เป็นอุปกรณ์ทดสอบที่สองที่ช่วยให้ซ้ำเคลื่อนไหวโทรศัพท์ที่กำหนดและอ้างว่าวัดการหมุนวนและภาพ timestamps เซ็นเซอร์จับคู่และว่าเฟรมกล้องหลายตัวอยู่ในซิงค์

กล่องทั้งหมดที่มีอยู่ผ่าน AcuSpec อิงค์ ( www.acuspecinc.com , fred@acuspecinc.com) และ MyWay ผลิต ( www.myway.tw , sales@myway.tw) นอกจากนี้ REV1 กล่องสามารถซื้อผ่าน West-Mark ( www.west-mark.com , dgoodman@west-mark.com)

ปฏิบัติที่ดีที่สุด

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

  • (Android 10 หรือสูงกว่า) ซ่อนกายภาพย่อยกล้องจาก getCameraIdList วิธีนี้ช่วยลดจำนวนกล้องที่แอปสามารถเปิดได้โดยตรง ทำให้ไม่จำเป็นต้องใช้แอปที่มีตรรกะการเลือกกล้องที่ซับซ้อน
  • (Android 11 หรือสูงกว่า) สำหรับอุปกรณ์กล้องหลายตรรกะสนับสนุนซูมใช้ ANDROID_CONTROL_ZOOM_RATIO API และการใช้ ANDROID_SCALER_CROP_REGION สำหรับอัตราส่วนการปลูกพืชเท่านั้น ANDROID_CONTROL_ZOOM_RATIO ช่วยให้อุปกรณ์เพื่อซูมออกและรักษาความแม่นยำที่ดีกว่า ในกรณีนี้ HAL จะต้องปรับระบบพิกัดของ ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES และ ANDROID_STATISTICS_FACE_LANDMARKS การรักษาข้อมูลการโพสต์การซูมของมุมมองที่เป็นอาร์เรย์ที่ใช้งานเซ็นเซอร์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธี ANDROID_SCALER_CROP_REGION ทำงานร่วมกับ ANDROID_CONTROL_ZOOM_RATIO ดู camera3_crop_reprocess#cropping
  • สำหรับอุปกรณ์หลายกล้องที่มีกล้องจริงที่มีความสามารถต่างกัน ตรวจสอบให้แน่ใจว่าอุปกรณ์โฆษณาสนับสนุนค่าหรือช่วงที่แน่นอนสำหรับการควบคุมก็ต่อเมื่อช่วงการซูมทั้งหมดรองรับค่าหรือช่วงนั้น ตัวอย่างเช่น หากกล้องลอจิคัลประกอบด้วยกล้องอัลตร้าไวด์ ไวด์ และเทเลโฟโต้ ให้ทำดังต่อไปนี้:
    • ถ้าขนาดอาร์เรย์ที่ใช้งานของกล้องทางกายภาพที่แตกต่างกัน HAL กล้องต้องทำทำแผนที่จากอาร์เรย์ที่ใช้งานกล้องทางกายภาพถึงตรรกะกล้องอาร์เรย์การใช้งานสำหรับ ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES และ ANDROID_STATISTICS_FACE_LANDMARKS เพื่อให้จากแอป มุมมองระบบพิกัดคือขนาดอาร์เรย์ที่ใช้งานของกล้องลอจิก
    • หากกล้องไวด์และเทเลโฟโต้รองรับการโฟกัสอัตโนมัติ แต่กล้องอัลตร้าไวด์นั้นมีโฟกัสคงที่ ตรวจสอบให้แน่ใจว่ากล้องลอจิคัลรองรับการโฟกัสอัตโนมัติ HAL ต้องจำลองเครื่องระบุสถานะออโต้โฟกัสสำหรับกล้องอัลตร้าไวด์ เพื่อที่ว่าเมื่อแอปซูมออกไปยังเลนส์อัลตร้าไวด์ ความจริงที่ว่ากล้องจริงที่อยู่ด้านล่างนั้นโฟกัสคงที่จะโปร่งใสสำหรับแอป และเครื่องระบุสถานะออโต้โฟกัสสำหรับโหมด AF ที่รองรับ ทำงานตามที่คาดไว้
    • หากกล้องไวด์และเทเลโฟโต้รองรับ 4K @ 60 fps และกล้องอัลตร้าไวด์รองรับเฉพาะ 4K @ 30 fps หรือ 1080p @ 60 fps แต่ไม่รองรับ 4K @ 60 fps ตรวจสอบให้แน่ใจว่ากล้องลอจิคัลไม่โฆษณา 4k @ 60 fps ใน การกำหนดค่าสตรีมที่รองรับ นี้รับประกันความสมบูรณ์ของความสามารถของกล้องตรรกะเพื่อให้มั่นใจว่าแอปจะไม่ทำงานเป็นปัญหาของการไม่บรรลุ 4k @ ที่ 60 เฟรมต่อวินาทีที่ ANDROID_CONTROL_ZOOM_RATIO ค่าน้อยกว่า 1
  • จาก Android 10 ไม่จำเป็นต้องใช้กล้องหลายตัวแบบลอจิคัลเพื่อรองรับชุดสตรีมที่มีสตรีมจริง หาก HAL รองรับการรวมกันกับฟิสิคัลสตรีม:
    • (Android 11 หรือสูงกว่า) เพื่อจัดการกับกรณีการใช้งาน เช่น ความลึกจากสเตอริโอและการติดตามการเคลื่อนไหว ให้กำหนดขอบเขตการมองเห็นของเอาต์พุตสตรีมจริงให้ใหญ่ที่สุดเท่าที่ฮาร์ดแวร์จะทำได้ อย่างไรก็ตาม หากกระแสข้อมูลทางกายภาพและสตรีมแบบลอจิคัลมีต้นกำเนิดจากกล้องทางกายภาพตัวเดียวกัน ข้อจำกัดของฮาร์ดแวร์อาจบังคับให้ขอบเขตการมองเห็นของสตรีมทางกายภาพเหมือนกับสตรีมแบบลอจิคัล
    • เพื่อรับมือกับความกดดันหน่วยความจำที่เกิดจากลำธารทางกายภาพหลายทำให้แอพพลิเคแน่ใจว่าใช้ discardFreeBuffers เพื่อ deallocate บัฟเฟอร์ฟรี (บัฟเฟอร์ที่ถูกปล่อยออกมาโดยผู้บริโภค แต่ยังไม่ได้ dequeued โดยผู้ผลิต) ถ้ากระแสทางกายภาพที่คาดว่าจะไม่ได้ใช้งานเป็นระยะเวลา ของเวลา
    • หากกระแสทางกายภาพจากกล้องทางกายภาพที่แตกต่างกันไม่ได้แนบโดยทั่วไปคำขอเดียวกันให้แน่ใจว่าแอพพลิเคใช้ surface group เพื่อให้เป็นหนึ่ง buffer คิวจะใช้ในการสำรองสองพื้นผิวแอปหันหน้าช่วยลดการใช้หน่วยความจำ