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

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

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

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

การใช้งานพารามิเตอร์เซสชันอ้างอิงเป็นส่วนหนึ่งของ CameraHal อยู่แล้ว HAL นี้ใช้ Hal API แบบเดิม CameraHal ที่ใช้ Binder ซึ่งใช้ Camera 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