ฟีเจอร์พารามิเตอร์เซสชันช่วยลดความล่าช้าโดยช่วยให้ไคลเอ็นต์กล้อง กำหนดค่าพารามิเตอร์คำขอที่มีค่าใช้จ่ายสูงบางส่วนได้อย่างมีประสิทธิภาพ ซึ่งก็คือพารามิเตอร์เซสชัน เป็นส่วนหนึ่งของระยะการเริ่มต้นเซสชันการจับภาพ ฟีเจอร์นี้ช่วยให้การติดตั้งใช้งาน HAL ได้รับพารามิเตอร์ไคลเอ็นต์ในระหว่างขั้นตอนการกำหนดค่าสตรีมแทนที่จะเป็นคำขอการจับภาพแรก และสามารถเตรียมและสร้างไปป์ไลน์ภายในได้อย่างมีประสิทธิภาพมากขึ้น ทั้งนี้ขึ้นอยู่กับค่าของพารามิเตอร์
ใน Android 10 คุณสามารถปรับปรุงประสิทธิภาพได้โดยใช้ ฟีเจอร์การค้นหาการกำหนดค่าเซสชันใหม่ที่ไม่บังคับเพื่อควบคุม ตรรกะการกำหนดค่าพารามิเตอร์เซสชันภายในใหม่ได้มากขึ้น ดูข้อมูลเพิ่มเติมได้ที่ คำค้นหาการกำหนดค่าเซสชันใหม่
ตัวอย่างและแหล่งที่มา
การติดตั้งใช้งานพารามิเตอร์เซสชันอ้างอิงเป็นส่วนหนึ่งของ CameraHal อยู่แล้ว HAL นี้ใช้ Hal API เดิม Binderized CameraHal ที่ใช้ API ของ HIDL สำหรับกล้องต้องใช้รายการ sessionParams ของ HIDL ที่เกี่ยวข้องเพื่อเข้าถึงพารามิเตอร์เซสชันใหม่ที่เข้ามาในระหว่างการกำหนดค่าสตรีม
ไคลเอ็นต์กล้องสามารถค้นหาคีย์ของพารามิเตอร์เซสชันที่รองรับทั้งหมดได้โดยการเรียกใช้
getAvailableSessionKeys()
และตั้งค่าเริ่มต้นในท้ายที่สุดผ่าน
setSessionParameters()
การใช้งาน
การติดตั้งใช้งาน CameraHal ต้องสร้าง
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ภายในข้อมูลเมตาของกล้องแบบคงที่ที่เกี่ยวข้อง และระบุชุดย่อยของ
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
ซึ่งมีรายการคีย์ที่ใช้ต่อเฟรมได้ยากและอาจ
ทำให้เกิดความล่าช้าที่ไม่คาดคิดเมื่อแก้ไขในเซสชันการจับภาพ
ตัวอย่างทั่วไป ได้แก่ พารามิเตอร์ที่ต้องมีการกำหนดค่าฮาร์ดแวร์ใหม่ที่ใช้เวลานาน หรือการเปลี่ยนแปลงไปป์ไลน์กล้องภายใน คุณยังคงควบคุมพารามิเตอร์ของเซสชันได้ในคำขอแคปเจอร์ แต่ไคลเอ็นต์ควรทราบและคาดการณ์ถึงความล่าช้าในแอป
เฟรมเวิร์กจะตรวจสอบคำขอขาเข้าทั้งหมด และหากตรวจพบการเปลี่ยนแปลงใน ค่าของพารามิเตอร์เซสชัน ก็จะกำหนดค่ากล้องใหม่ภายใน การกำหนดค่าสตรีมใหม่ที่ส่งไปยัง CameraHal จะมีค่าพารามิเตอร์เซสชันที่อัปเดตแล้ว ซึ่งใช้เพื่อกำหนดค่าไปป์ไลน์กล้องได้อย่างมีประสิทธิภาพมากขึ้น
การปรับแต่ง
คุณกำหนดแท็กได้ในรายการพารามิเตอร์ของเซสชันที่มีอยู่ซึ่งสร้างขึ้นในฝั่ง CameraHal ฟีเจอร์นี้จะไม่ทำงานหาก CameraHal ปล่อยให้ รายการพารามิเตอร์ของเซสชันที่ใช้ได้ว่างเปล่า
การตรวจสอบความถูกต้อง
CTS มีกรณีทดสอบใหม่ต่อไปนี้สําหรับการทดสอบพารามิเตอร์เซสชัน
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
โดยทั่วไป หลังจากที่พารามิเตอร์หนึ่งๆ เป็นส่วนหนึ่งของรายการคีย์เซสชันแล้ว ระบบจะรวมค่าปัจจุบันของพารามิเตอร์นั้นเป็นส่วนหนึ่งของพารามิเตอร์เซสชันที่ส่งผ่านระหว่างการกำหนดค่าสตรีมที่เลเยอร์ HAL
คุณต้องเลือกพารามิเตอร์เซสชันอย่างระมัดระวัง ค่าไม่ควรเปลี่ยนแปลงบ่อย หากมีการกำหนดค่าสตรีม พารามิเตอร์ที่มีการเปลี่ยนแปลงบ่อย เช่น เจตนาในการจับภาพ ไม่เหมาะที่จะใช้ และการเพิ่มพารามิเตอร์ดังกล่าวลงใน รายการพารามิเตอร์เซสชันอาจทำให้ CTS ล้มเหลวเนื่องจากการกำหนดค่าภายในใหม่มากเกินไป
การค้นหาการกำหนดค่าเซสชันใหม่
Android 10 ขอแนะนำฟีเจอร์การค้นหาการกำหนดค่าเซสชันใหม่ที่ไม่บังคับเพื่อปรับปรุงประสิทธิภาพ เนื่องจาก
การกำหนดค่าสตรีมภายในใหม่ที่เกิดจากการแก้ไขค่าพารามิเตอร์เซสชัน
อาจลดประสิทธิภาพได้ เพื่อแก้ไขข้อกังวลนี้
HIDL
ICameraDeviceSession
เวอร์ชัน 3.5 ขึ้นไปรองรับเมธอด
isReconfigurationRequired
ซึ่งให้การควบคุมแบบละเอียดเกี่ยวกับตรรกะการกำหนดค่าใหม่ของพารามิเตอร์เซสชันภายใน การใช้วิธีนี้จะช่วยให้การกำหนดค่าสตรีมใหม่เกิดขึ้นได้
เมื่อจำเป็นเท่านั้น
อาร์กิวเมนต์สำหรับ isReconfigurationRequired
ระบุข้อมูลที่จำเป็นเกี่ยวกับการแก้ไขพารามิเตอร์เซสชันที่รอดำเนินการทั้งหมด
ซึ่งช่วยให้ปรับแต่งอุปกรณ์ได้หลายประเภท
ฟีเจอร์นี้จะใช้งานได้ในบริการกล้องและ HAL ของกล้องเท่านั้น ไม่มี API ที่หันหน้าสู่สาธารณะ หากมีการใช้ฟีเจอร์นี้ ไคลเอ็นต์กล้องควรเห็นประสิทธิภาพที่ดีขึ้นเมื่อทำงานกับพารามิเตอร์เซสชัน
การใช้งาน
หากต้องการรองรับการค้นหาการกำหนดค่าเซสชันใหม่ คุณต้องใช้เมธอด
isReconfigurationRequired
เพื่อตรวจสอบว่าจำเป็นต้องกำหนดค่าสตรีมใหม่ทั้งหมดสำหรับค่าพารามิเตอร์เซสชันใหม่หรือไม่
หากไคลเอ็นต์เปลี่ยนค่าของพารามิเตอร์เซสชันที่โฆษณาไว้ เฟรมเวิร์กกล้องจะเรียกใช้เมธอด isReconfigurationRequired
HAL จะตัดสินใจว่าต้องมีการกำหนดค่าสตรีมใหม่ทั้งหมดหรือไม่ โดยขึ้นอยู่กับค่าที่เฉพาะเจาะจง
หาก HAL แสดงผล false
เฟรมเวิร์กกล้อง
จะข้ามการกำหนดค่าภายในใหม่ หาก HAL แสดงผล true
เฟรมเวิร์กจะกำหนดค่าสตรีมใหม่และส่งค่าพารามิเตอร์เซสชันใหม่ตามนั้น
เฟรมเวิร์กสามารถเรียกใช้เมธอด isReconfigurationRequired
ได้ในบางครั้งก่อนที่จะส่งคำขอที่มีพารามิเตอร์ใหม่ไปยัง HAL และสามารถยกเลิกคำขอก่อนที่จะส่งได้ ดังนั้น HAL ต้องไม่ใช้การเรียกเมธอดนี้เพื่อเปลี่ยนลักษณะการทำงานไม่ว่าในลักษณะใด
การติดตั้งใช้งาน HAL ต้องเป็นไปตามข้อกำหนดต่อไปนี้
- เฟรมเวิร์กต้องเรียกใช้เมธอด
isReconfigurationRequired
ได้ทุกเมื่อหลังจากกำหนดค่าเซสชันที่ใช้งานอยู่ - ต้องไม่ส่งผลต่อประสิทธิภาพของคำขอกล้องที่รอดำเนินการ โดยเฉพาะอย่างยิ่ง ต้องไม่มีข้อบกพร่องหรือความล่าช้าระหว่างการสตรีมกล้องตามปกติ
อุปกรณ์และการใช้งาน HAL ต้องเป็นไปตามข้อกำหนดด้านประสิทธิภาพต่อไปนี้
- ห้ามเปลี่ยนแปลงการตั้งค่ากล้องของฮาร์ดแวร์และซอฟต์แวร์
- ต้องไม่มีผลกระทบที่ผู้ใช้มองเห็นได้ต่อประสิทธิภาพของกล้อง
เมธอด isReconfigurationRequired
จะใช้อาร์กิวเมนต์ต่อไปนี้
oldSessionParams
: พารามิเตอร์เซสชันจากเซสชันก่อนหน้า โดยปกติจะเป็นพารามิเตอร์เซสชันที่มีอยู่newSessionParams
: พารามิเตอร์เซสชันใหม่ที่ไคลเอ็นต์ตั้งค่า
รหัสสถานะการตอบกลับที่คาดไว้มีดังนี้
OK
: ต้องใช้การค้นหาเพื่อกำหนดค่าใหม่ให้สำเร็จMETHOD_NOT_SUPPORTED
: อุปกรณ์กล้องไม่รองรับคำค้นหาการกำหนดค่าใหม่INTERNAL_ERROR
: การค้นหาการกำหนดค่าใหม่ไม่สำเร็จเนื่องจาก เกิดข้อผิดพลาดภายใน
ค่าที่แสดงผลมีดังนี้
true
: ต้องกำหนดค่าสตรีมใหม่false
: ไม่จำเป็นต้องกำหนดค่าสตรีมใหม่
หากต้องการไม่สนใจคำค้นหาการกำหนดค่าเซสชันใหม่ HAL จะแสดงผล
METHOD_NOT_SUPPORTED
หรือ false
ซึ่งส่งผลให้เกิดลักษณะการทำงานของบริการกล้องเริ่มต้น
ที่การกำหนดค่าสตรีมใหม่จะทริกเกอร์เมื่อมีการเปลี่ยนแปลงพารามิเตอร์เซสชันแต่ละรายการ
การตรวจสอบความถูกต้อง
คุณสามารถตรวจสอบฟีเจอร์การค้นหาการกำหนดค่าเซสชันใหม่ได้โดยใช้กรณีทดสอบ VTS ใน CameraHidlTest#configureStreamsWithSessionParameters