คุณสมบัติพารามิเตอร์เซสชันช่วยลดความล่าช้าโดยทำให้ไคลเอนต์กล้องสามารถกำหนดค่าชุดย่อยของพารามิเตอร์คำขอที่มีราคาแพง ซึ่งก็คือพารามิเตอร์เซสชัน โดยเป็นส่วนหนึ่งของขั้นตอนการเริ่มต้นเซสชันการบันทึก ด้วยคุณสมบัตินี้ การใช้งาน HAL ของคุณจะได้รับพารามิเตอร์ไคลเอนต์ในระหว่างขั้นตอนการกำหนดค่าสตรีมแทนที่จะเป็นคำขอบันทึกครั้งแรก และสามารถเตรียมและสร้างไปป์ไลน์ภายในได้อย่างมีประสิทธิภาพมากขึ้น ขึ้นอยู่กับค่าของพวกเขา
ใน Android 10 คุณสามารถปรับปรุงประสิทธิภาพได้โดยใช้ฟีเจอร์แบบสอบถามการกำหนดค่าเซสชันเสริมเพื่อควบคุมตรรกะการกำหนดค่าพารามิเตอร์เซสชันภายในใหม่ได้มากขึ้น สำหรับข้อมูลเพิ่มเติม โปรดดูที่ แบบสอบถามการกำหนดค่าเซสชันใหม่
ตัวอย่างและที่มา
การใช้พารามิเตอร์เซสชันอ้างอิงเป็นส่วนหนึ่งของ CameraHal แล้ว HAL นี้ใช้ Hal API เดิม CameraHal ที่ ถูกผูกไว้ ซึ่งใช้กล้อง HIDL API ต้องใช้รายการ HIDL sessionParams ที่เกี่ยวข้องเพื่อเข้าถึงพารามิเตอร์เซสชันขาเข้าใหม่ในระหว่างการกำหนดค่าสตรีม
ไคลเอนต์กล้องสามารถสืบค้นคีย์ของพารามิเตอร์เซสชันที่รองรับทั้งหมดได้โดยการเรียก 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