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

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