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
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ITS ของกล้อง