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