พารามิเตอร์เซสชัน

ฟีเจอร์พารามิเตอร์เซสชันจะลดความล่าช้าโดยช่วยให้ไคลเอ็นต์กล้องสามารถกําหนดค่าพารามิเตอร์คําขอย่อยที่มีค่าใช้จ่ายสูงได้ ซึ่งก็คือพารามิเตอร์เซสชัน ซึ่งเป็นส่วนหนึ่งของระยะเริ่มต้นเซสชันการจับภาพ ฟีเจอร์นี้ช่วยให้การติดตั้งใช้งาน 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 มีกรณีใหม่ต่อไปนี้สําหรับการทดสอบพารามิเตอร์เซสชัน

โดยทั่วไป หลังจากพารามิเตอร์หนึ่งๆ เป็นส่วนหนึ่งของรายการคีย์เซสชันแล้ว ค่าปัจจุบันของพารามิเตอร์นั้นจะรวมอยู่ในพารามิเตอร์เซสชันที่ส่งระหว่างการกำหนดค่าสตรีมในเลเยอร์ 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