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

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

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

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

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

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

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

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

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

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

การใช้งาน

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

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

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

  • android.scaler.availableRecommendedStreamConfigurations: The recommended subset of stream configurations for specific use cases. การประกาศใช้บิตแมปที่ระบุ Use Case ที่แนะนำใน รูปแบบของ [1 << PREVIEW | 1 << RECORD..] กรณีการใช้งานจะขยายทูเพิล ปกติ (รูปแบบ ความกว้าง ความสูง อินพุต) ด้วยรายการเพิ่มเติมอีก 1 รายการ ห้ามใช้กรณีการใช้งานสาธารณะที่ไม่มีอยู่จริงหรือบิตอื่นๆ ที่ตั้งค่าภายในช่วง [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 (ใช้ได้เฉพาะในกรณีที่อุปกรณ์รองรับ): การกำหนดค่าสตรีมพื้นที่ข้อมูลเชิงลึกที่แนะนำ ซึ่งแนะนำสำหรับอุปกรณ์กล้องนี้ บิตแมปกรณีการใช้งานเพิ่มเติมจะระบุกรณีการใช้งานที่แนะนํา ซึ่งคล้ายกับ รายการข้อมูลเมตาด้านบน

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

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

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

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

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

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

กรณีการใช้งาน ข้อกำหนด
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 เท่านั้น

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

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

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

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

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

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

ข้อกำหนด

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

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

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

การใช้งาน

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

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

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

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

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

สำหรับเวอร์ชันที่ต่ำกว่าเวอร์ชัน 3 ของอินเทอร์เฟซ ICameraDevice 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 และ Camera ITS (CTS Verifier) ต่อไปนี้

VTS

CTS

ITS ของกล้อง