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

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

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