การกำหนดค่าสตรีม

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

การใช้งานอ้างอิง

มีการใช้งานอ้างอิงฝั่งผู้ให้บริการสตรีมการกําหนดค่าที่แนะนําและ API เพื่อค้นหาฟีเจอร์การรวมสตรีม คุณดูการใช้งานนี้ได้ที่ QCamera3HWI.cpp

ผู้ให้บริการกล้องสามารถโฆษณาการกำหนดค่าสตรีมที่แนะนำสำหรับกรณีการใช้งานที่เฉพาะเจาะจงแก่ลูกค้ากล้อง การกําหนดค่าสตรีมที่แนะนําเหล่านี้ ซึ่งเป็นชุดย่อยของ StreamConfigurationMap จะช่วยให้ไคลเอ็นต์กล้องเลือกการกําหนดค่าที่เหมาะสมที่สุดได้

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

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

แผนที่การกําหนดค่าสตรีมที่คุณแนะนําไม่จำเป็นต้องครอบคลุมเมื่อเทียบกับ StreamConfigurationMap แผนที่การกําหนดค่าที่แนะนําต้องเป็นไปตามข้อกําหนดในส่วนการใช้งาน และสามารถรวมรูปแบบ ขนาด หรือค่าอื่นๆ ที่มีอยู่ใน StreamConfigurationMap รูปแบบ ขนาด หรือค่าอื่นๆ ที่ซ่อนอยู่ซึ่งไม่พบใน StreamConfigurationMap จะรวมอยู่ในแผนที่การกําหนดค่าสตรีมที่แนะนําไม่ได้

การทดสอบทั้งหมดจะยังคงเหมือนเดิมและไม่มีการผ่อนปรนตามการกำหนดค่าสตรีมที่แนะนำ

การกำหนดค่าสตรีมที่แนะนำซึ่งได้จากการติดตั้งใช้งานกล้องนั้นไม่บังคับและไคลเอ็นต์กล้องสามารถละเว้นได้

การใช้งาน

ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้งใช้งานฟีเจอร์นี้

รายการข้อมูลเมตา

หากต้องการเปิดใช้ฟีเจอร์นี้ HAL ของกล้องต้องป้อนข้อมูลรายการข้อมูลเมตาแบบคงที่ต่อไปนี้

  • android.scaler.availableRecommendedStreamConfigurations: กลุ่มย่อยของการกําหนดค่าสตรีมที่แนะนําสําหรับกรณีการใช้งานที่เฉพาะเจาะจง การประกาศใช้บิตแมปที่ระบุกรณีการใช้งานที่แนะนำในรูปแบบ [1 << PREVIEW | 1 << RECORD..] กรณีการใช้งานจะขยายทูเปิลปกติ (รูปแบบ ความกว้าง ความสูง อินพุต) ด้วยรายการเพิ่มเติม 1 รายการ ไม่อนุญาตให้ใช้ Use Case สาธารณะที่ไม่มีอยู่จริงหรือบิตอื่นๆ ที่ตั้งค่าไว้ภายในช่วง [PUBLIC_END, VENDOR_START]

    ข้อมูลนี้จัดเก็บไว้ในแท็กเมตาข้อมูล availableRecommendedStreamConfigurations

    ตัวอย่างต่อไปนี้แสดงอาร์เรย์สำหรับการกำหนดค่าสตรีมที่แนะนำสำหรับอุปกรณ์กล้องที่รองรับเฉพาะ 4K และ 1080p โดยแนะนำให้ใช้ความละเอียดทั้ง 2 ระดับสำหรับการบันทึกวิดีโอ แต่แนะนำให้ใช้เฉพาะ 1080p สำหรับการแสดงตัวอย่าง

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (พร้อมใช้งานเฉพาะในกรณีที่อุปกรณ์รองรับ): การกำหนดค่าสตรีมพื้นที่ข้อมูลเชิงลึกที่แนะนำสำหรับอุปกรณ์กล้องนี้ บิตแมป Use Case เพิ่มเติมจะระบุ Use Case ที่แนะนํา ซึ่งคล้ายกับรายการข้อมูลเมตาด้านบน

    ข้อมูลนี้จัดเก็บไว้ในแท็กเมตาข้อมูล availableRecommendedInputOutputFormatsMap

  • android.scaler.availableRecommendedInputOutputFormatsMap (พร้อมใช้งานก็ต่อเมื่ออุปกรณ์รองรับเท่านั้น): การแมปรูปแบบรูปภาพที่แนะนำสำหรับอุปกรณ์กล้องนี้สำหรับสตรีมอินพุตกับรูปแบบเอาต์พุตที่สอดคล้องกัน

    ข้อมูลนี้จัดเก็บไว้ในแท็กเมตาข้อมูล availableRecommendedDepthStreamConfigurations

ข้อมูลนี้พร้อมให้บริการแก่ไคลเอ็นต์กล้องผ่าน RecommendedStreamConfigurationMap API

กรณีการใช้งานที่จำเป็น

คุณต้องระบุการกำหนดค่าสตรีมที่แนะนำสำหรับกรณีการใช้งานต่อไปนี้ และเป็นไปตามข้อกำหนดที่เกี่ยวข้อง

Use Case ข้อกำหนด
PREVIEW ตัวอย่างต้องมีเฉพาะการกำหนดค่าสตรีมที่ได้รับการประมวลผลแบบไม่หยุดชะงักซึ่งมีรูปแบบเอาต์พุต เช่น YUV_420_888 และ IMPLEMENTATION_DEFINED
RECORD ระเบียนวิดีโอต้องมีการกำหนดค่าสตรีมที่ตรงกับโปรไฟล์สื่อที่รองรับซึ่งโฆษณาไว้ในรูปแบบ IMPLEMENTATION_DEFINED
VIDEO_SNAPSHOT ภาพนิ่งของวิดีโอต้องมีการกําหนดค่าสตรีมที่มีขนาดใหญ่อย่างน้อยเท่ากับความละเอียดสูงสุดของ RECORD และต้องใช้เฉพาะรูปแบบ/พื้นที่ข้อมูลที่รวม BLOB + DATASPACE_JFIF (JPEG) การกําหนดค่านี้จะไม่ทําให้การแสดงตัวอย่างกระตุกและควรทํางานได้ที่ 30 fps
SNAPSHOT การกําหนดค่าสตรีมภาพรวมต้องมีอย่างน้อย 1 รายการที่มีขนาดใกล้เคียงกับ android.sensor.info.activeArraySize โดยใช้รูปแบบ/พื้นที่ข้อมูลที่รวม BLOB + DATASPACE_JFIF (JPEG) โดยคำนึงถึงข้อจำกัดด้านสัดส่วนการแสดงผล การจัดตำแหน่ง และข้อจำกัดอื่นๆ ที่เฉพาะเจาะจงสำหรับผู้ให้บริการ พื้นที่ของขนาดที่แนะนำสูงสุดไม่ควรน้อยกว่า 97% ของพื้นที่ขนาดอาร์เรย์เซ็นเซอร์
ZSL (หากรองรับ) หากอุปกรณ์กล้องรองรับ การกำหนดค่าสตรีมอินพุตที่แนะนำจะต้องโฆษณาร่วมกับรูปแบบเอาต์พุตอื่นๆ ที่ประมวลผลแล้วหรือหยุดชะงักเท่านั้น
RAW (หากรองรับ) หากอุปกรณ์กล้องรองรับ การกำหนดค่าสตรีม RAW ที่แนะนำต้องมีเฉพาะรูปแบบเอาต์พุตแบบ RAW เท่านั้น

กรณีการใช้งานอื่นๆ

คุณสามารถระบุสตรีมการกําหนดค่าที่แนะนําเพิ่มเติมสําหรับกรณีการใช้งานที่เจาะจงสําหรับการติดตั้งใช้งาน

การตรวจสอบความถูกต้อง

หากต้องการทดสอบการใช้งานสตรีมการกําหนดค่าที่แนะนํา ให้ทําการทดสอบ CTS และ VTS ต่อไปนี้

API สำหรับการค้นหาชุดค่าผสมของฟีเจอร์

ตั้งแต่ Android 15 เป็นต้นไป แพลตฟอร์ม Android จะมี API สำหรับการค้นหาชุดค่าผสมของฟีเจอร์ API นี้ช่วยให้ไคลเอ็นต์กล้องสามารถสอบถามว่าอุปกรณ์รองรับชุดค่าผสมของฟีเจอร์ที่ระบุหรือไม่ API นี้จําเป็นเนื่องจาก Camera2 API จำลองฟีเจอร์ต่างๆ เช่น 4K, 60 fps, วิดีโอ HDR, UltraHDR, การซูมมุมกว้างพิเศษ และระบบกันภาพสั่นเป็นการควบคุมแบบออโตรโกนอล

ข้อกำหนด

HAL ของกล้องต้องใช้อินเทอร์เฟซ ICameraDevice เวอร์ชัน 3 เพื่อรองรับ API ในการค้นหาการผสมผสานฟีเจอร์ โปรดดูรายละเอียดในส่วนการติดตั้งใช้งาน

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

นอกจากนี้ สำหรับประสิทธิภาพสื่อระดับ 15 กล้องหลังหลักต้องรองรับการลดภาพสั่นในการแสดงตัวอย่างด้วยการแสดงตัวอย่าง HLG10 10 บิตสำหรับการแสดงตัวอย่าง 1080p และ 720p รวมถึง JPEG ขนาดสูงสุด ดูรายละเอียดเพิ่มเติมเกี่ยวกับข้อกำหนดเหล่านี้ได้ในส่วน2.2.7.2 กล้อง ของ CDD

การใช้งาน

หากต้องการใช้ API เพื่อค้นหาชุดค่าผสมของฟีเจอร์ ให้ใช้ API การค้นหาชุดค่าผสมของฟีเจอร์ต่อไปนี้ใน ICameraDevice เวอร์ชัน 3

  • constructDefaultRequestSettings: สร้างการตั้งค่าเริ่มต้นสำหรับCaptureRequestประเภทที่ระบุ HAL ใช้การใช้งาน ICameraDeviceSession::constructDefaultRequestSettings ได้

  • isStreamCombinationWithSettingsSupported: ตรวจสอบการรองรับอุปกรณ์ของสตรีมกล้องที่ระบุไว้ซึ่งรวมกันด้วยพารามิเตอร์เซสชันและคีย์ CaptureRequest เพิ่มเติม ต้องแสดงผล true สำหรับชุดค่าผสมที่รองรับ และ false สำหรับชุดค่าผสมฟีเจอร์ที่ไม่รองรับ HAL สามารถใช้การติดตั้งใช้งาน isStreamCombinationSupported และเพิ่มการรองรับเพื่อตรวจสอบการตั้งค่า CaptureRequest ที่ส่งผ่านใน sessionParams

  • getSessionCharacteristics: ใช้ชุดค่าผสมสตรีมที่รองรับกับพารามิเตอร์เซสชัน แล้วแสดงลักษณะเฉพาะของเซสชัน

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: แสดงรายการการกําหนดค่าเซสชันที่ใช้กันโดยทั่วไปทั้งหมด การกําหนดค่าเหล่านี้ได้รับการยืนยันโดยการทดสอบการปฏิบัติตามข้อกําหนด

สำหรับอินเทอร์เฟซ ICameraDevice เวอร์ชันที่ต่ำกว่าเวอร์ชัน 3 HAL ควรใช้วิธี isStreamCombinationSupported

ดูข้อมูลเพิ่มเติมเกี่ยวกับชุดค่าผสมของฟีเจอร์ที่ API ค้นหาได้ที่เอกสารประกอบเกี่ยวกับ sessionConfigurationQueryVersion ใน system/media/camera/docs/metadata_definitions.xml

ดูข้อมูลอ้างอิงการติดตั้งใช้งานฟีเจอร์นี้ได้ที่ hardware/google/camera/devices/EmulatedCamera/hwl/

API สาธารณะ

แอปสามารถใช้ API สาธารณะต่อไปนี้เพื่อค้นหาชุดค่าผสมฟีเจอร์ที่รองรับสำหรับอุปกรณ์

  • CameraDevice.CameraDeviceSetup: การนําเสนอ CameraDevice แบบจํากัดที่สามารถใช้เพื่อค้นหาชุดค่าผสมของฟีเจอร์ได้โดยไม่ต้องใช้อินสแตนซ์ CameraDevice

  • getCameraDeviceSetup: รับออบเจ็กต์ CameraDeviceSetup สำหรับรหัสกล้องที่ระบุหาก isCameraDeviceSetupSupported แสดงผลเป็น true

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: รองรับการค้นหาการผสมผสานฟีเจอร์หากค่านี้เท่ากับหรือมากกว่า VANILLA_ICE_CREAM

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

  • SessionConfiguration: คลาสยูทิลิตีที่อธิบายการกําหนดค่าเซสชัน ซึ่งรวมถึงชุดค่าผสมสตรีมและพารามิเตอร์เซสชัน ซึ่งสามารถใช้สําหรับการค้นหาชุดค่าผสมฟีเจอร์

การตรวจสอบความถูกต้อง

หากต้องการตรวจสอบการติดตั้งใช้งานฟีเจอร์นี้ ให้ใช้การทดสอบ VTS, CTS และ ITS ของกล้อง (โปรแกรมตรวจสอบ CTS) ต่อไปนี้

VTS

CTS

ITS ของกล้อง