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

ฟีเจอร์พารามิเตอร์เซสชันช่วยลดความล่าช้าโดยช่วยให้ไคลเอ็นต์กล้อง กำหนดค่าพารามิเตอร์คำขอที่มีค่าใช้จ่ายสูงบางส่วนได้อย่างมีประสิทธิภาพ ซึ่งก็คือพารามิเตอร์เซสชัน เป็นส่วนหนึ่งของระยะการเริ่มต้นเซสชันการจับภาพ ฟีเจอร์นี้ช่วยให้การติดตั้งใช้งาน HAL ได้รับพารามิเตอร์ไคลเอ็นต์ในระหว่างขั้นตอนการกำหนดค่าสตรีมแทนที่จะเป็นคำขอการจับภาพแรก และสามารถเตรียมและสร้างไปป์ไลน์ภายในได้อย่างมีประสิทธิภาพมากขึ้น ทั้งนี้ขึ้นอยู่กับค่าของพารามิเตอร์

ใน Android 10 คุณสามารถปรับปรุงประสิทธิภาพได้โดยใช้ ฟีเจอร์การค้นหาการกำหนดค่าเซสชันใหม่ที่ไม่บังคับเพื่อควบคุม ตรรกะการกำหนดค่าพารามิเตอร์เซสชันภายในใหม่ได้มากขึ้น ดูข้อมูลเพิ่มเติมได้ที่ คำค้นหาการกำหนดค่าเซสชันใหม่

ตัวอย่างและแหล่งที่มา

การติดตั้งใช้งานพารามิเตอร์เซสชันอ้างอิงเป็นส่วนหนึ่งของ CameraHal อยู่แล้ว HAL นี้ใช้ Hal API เดิม Binderized CameraHal ที่ใช้ API ของ HIDL สำหรับกล้องต้องใช้รายการ sessionParams ของ HIDL ที่เกี่ยวข้องเพื่อเข้าถึงพารามิเตอร์เซสชันใหม่ที่เข้ามาในระหว่างการกำหนดค่าสตรีม

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