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

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 ที่จำเป็น

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

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 ของกล้อง