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