Android 10 แนะนำคุณสมบัติที่ช่วยให้ไคลเอนต์กล้องสามารถเลือกสตรีมของกล้องที่เหมาะสมที่สุดสำหรับกรณีการใช้งานเฉพาะและเพื่อให้แน่ใจว่าอุปกรณ์กล้องรองรับการรวมสตรีมบางอย่าง การกำหนดค่าสตรีม หมายถึงสตรีมของกล้องตัวเดียวที่กำหนดค่าในอุปกรณ์กล้อง และ การรวมสตรีม หมายถึงชุดสตรีมหนึ่งชุดหรือมากกว่าที่กำหนดค่าในอุปกรณ์กล้อง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติเหล่านี้ โปรดดู การกำหนดค่าสตรีมที่แนะนำ และ API เพื่อค้นหาชุดค่าผสมของสตรีม
การดำเนินการอ้างอิง
มีการดำเนินการอ้างอิงฝั่งผู้ขายของสตรีมการกำหนดค่าที่แนะนำและ API เพื่อสืบค้นคุณสมบัติการรวมสตรีม คุณสามารถดูการใช้งานนี้ได้ที่ QCamera3HWI.cpp
การกำหนดค่าสตรีมที่แนะนำ
ผู้จำหน่ายกล้องสามารถโฆษณาการกำหนดค่าสตรีมที่แนะนำสำหรับกรณีการใช้งานเฉพาะให้กับลูกค้ากล้องได้ การกำหนดค่าสตรีมที่แนะนำเหล่านี้ ซึ่งเป็นชุดย่อยของ StreamConfigurationMap สามารถช่วยไคลเอ็นต์กล้องเลือกการกำหนดค่าที่เหมาะสมที่สุดได้
แม้ว่า StreamConfigurationMap จะให้ข้อมูลการกำหนดค่าสตรีมโดยละเอียดแก่ไคลเอนต์กล้อง แต่ก็ไม่ได้ให้ข้อมูลใดๆ เกี่ยวกับประสิทธิภาพ พลังงาน หรือผลกระทบของการเลือกสตรีมหนึ่งเหนือสตรีมอื่น ไคลเอนต์กล้องสามารถเลือกการกำหนดค่าสตรีมที่เป็นไปได้ทั้งหมดได้อย่างอิสระ แต่ในหลายกรณี สิ่งนี้ทำให้ไคลเอนต์ใช้การกำหนดค่ากล้องที่ต่ำกว่ามาตรฐานและแอปพลิเคชันที่ทำให้การค้นหาหมดจดโดยใช้เวลานาน
ตัวอย่างเช่น แม้ว่าต้องใช้รูปแบบ YUV ที่ประมวลผลแล้วบางรูปแบบและต้องได้รับการสนับสนุน แต่อุปกรณ์กล้องอาจไม่รองรับรูปแบบดั้งเดิม ซึ่งส่งผลให้มีการประมวลผลเพิ่มเติมสำหรับการแปลงรูปแบบและลดประสิทธิภาพ ขนาดและอัตราส่วนภาพที่สอดคล้องกันยังสามารถส่งผลกระทบที่คล้ายกัน ทำให้มิติข้อมูลเฉพาะเหมาะกว่าในแง่ของกำลังและประสิทธิภาพ
แมปการกำหนดค่าสตรีมที่แนะนำของคุณไม่จำเป็นต้องครบถ้วนสมบูรณ์เมื่อเทียบกับ StreamConfigurationMap แมปการกำหนดค่าที่แนะนำต้องเป็นไปตามข้อกำหนดในส่วน การใช้งาน และสามารถรวมรูปแบบ ขนาด หรือค่าอื่นๆ ที่มีอยู่ใน StreamConfigurationMap รูปแบบ ขนาด หรือค่าอื่นที่ซ่อนซึ่งไม่พบใน StreamConfigurationMap ไม่สามารถรวมไว้ในแมปการกำหนดค่าสตรีมที่แนะนำ
การทดสอบทั้งหมดยังคงไม่เปลี่ยนแปลงและไม่มีการผ่อนคลาย ทั้งนี้ขึ้นอยู่กับการกำหนดค่าสตรีมที่แนะนำ
การกำหนดค่าสตรีมที่แนะนำโดยการใช้งานกล้องเป็นทางเลือก และไคลเอนต์กล้องสามารถละเว้นได้
การนำไปปฏิบัติ
ทำตามขั้นตอนเหล่านี้เพื่อใช้คุณลักษณะนี้
รายการข้อมูลเมตา
หากต้องการเปิดใช้งานคุณสมบัตินี้ Camera HAL จะต้องเติมรายการข้อมูลเมตาแบบคงที่ต่อไปนี้:
android.scaler.availableRecommendedStreamConfigurations
: ชุดย่อยที่แนะนำของการกำหนดค่าสตรีมสำหรับกรณีการใช้งานเฉพาะ การประกาศใช้บิตแมปอย่างง่ายซึ่งระบุกรณีการใช้งานที่แนะนำในรูปแบบของ[1 << PREVIEW | 1 << RECORD..]
. กรณีการใช้งานจะขยายทูเพิลปกติ (รูปแบบ ความกว้าง ความสูง อินพุต) ด้วยรายการเพิ่มเติมหนึ่งรายการ ห้ามใช้กรณีการใช้งานสาธารณะที่ไม่มีอยู่หรือบิตอื่นใดที่ตั้งค่าไว้ในช่วง[PUBLIC_END, VENDOR_START]
ข้อมูลนี้ถูกเก็บไว้ในแท็กข้อมูลเมตา
availableRecommendedStreamConfigurations
ตัวอย่างต่อไปนี้แสดงอาร์เรย์สำหรับการกำหนดค่าสตรีมที่แนะนำสำหรับอุปกรณ์กล้องที่รองรับเฉพาะ 4K และ 1080p โดยที่ควรใช้ความละเอียดทั้งสองสำหรับการบันทึกวิดีโอ แต่แนะนำให้ใช้เพียง 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
availableRecommendedDepthStreamConfigurations (ใช้ได้เฉพาะเมื่ออุปกรณ์รองรับ): การกำหนดค่าสตรีม Dataspace เชิงลึกที่แนะนำที่แนะนำสำหรับอุปกรณ์กล้องนี้ เช่นเดียวกับการป้อนข้อมูลเมตาข้างต้น บิตแมปกรณีการใช้งานเพิ่มเติมจะระบุกรณีการใช้งานที่แนะนำข้อมูลนี้ถูกเก็บไว้ในแท็กข้อมูลเมตา
availableRecommendedInputOutputFormatsMap
android.scaler.availableRecommendedInputOutputFormatsMap
(ใช้ได้เฉพาะในกรณีที่อุปกรณ์รองรับเท่านั้น): การแมปรูปแบบภาพที่แนะนำที่แนะนำสำหรับอุปกรณ์กล้องนี้สำหรับสตรีมอินพุต กับรูปแบบเอาต์พุตที่สอดคล้องกันข้อมูลนี้ถูกจัดเก็บไว้ในแท็กข้อมูลเมตา
availableRecommendedDepthStreamConfigurations
ข้อมูลนี้มีให้สำหรับไคลเอนต์กล้องผ่าน RecommendStreamConfigurationMap API
กรณีการใช้งานที่จำเป็น
ต้องระบุการกำหนดค่าสตรีมที่แนะนำสำหรับกรณีการใช้งานต่อไปนี้และตรงตามข้อกำหนดที่เกี่ยวข้อง:
กรณีการใช้งาน | ความต้องการ |
---|---|
PREVIEW | การแสดงตัวอย่างจะต้องมีเฉพาะการกำหนดค่าสตรีมที่ประมวลผลแบบไม่หยุดชะงักด้วยรูปแบบเอาต์พุต เช่น YUV_420_888 และ IMPLEMENTATION_DEFINED |
RECORD | บันทึกวิดีโอจะต้องมีการกำหนดค่าสตรีมที่ตรงกับ โปรไฟล์ สื่อที่รองรับที่โฆษณาซึ่งมีรูปแบบ IMPLEMENTATION_DEFINED |
VIDEO_SNAPSHOT | สแน็ปช็อตวิดีโอต้องมีการกำหนดค่าสตรีมที่มีขนาดใหญ่เท่ากับความละเอียดบันทึกสูงสุดเป็นอย่างน้อย และเฉพาะกับรูปแบบ BLOB + DATASPACE_JFIF/การรวมพื้นที่ข้อมูล (JPEG) เท่านั้น การกำหนดค่าไม่ควรทำให้เกิดข้อผิดพลาดในการดูตัวอย่างและควรสามารถทำงานได้ที่ 30 fps |
SNAPSHOT | การกำหนดค่าสตรีมสแนปชอตต้องมีอย่างน้อยหนึ่งรายการที่มีขนาดใกล้เคียงกับ android.sensor.info.activeArraySize พร้อมด้วย BLOB + DATASPACE_JFIF รูปแบบ/ชุดพื้นที่ข้อมูล (JPEG) เมื่อคำนึงถึงข้อจำกัดเกี่ยวกับอัตราส่วนภาพ การจัดตำแหน่ง และข้อจำกัดเฉพาะของผู้จำหน่าย พื้นที่ขนาดสูงสุดที่แนะนำไม่ควรน้อยกว่า 97% ของพื้นที่ขนาดอาเรย์เซ็นเซอร์ |
ZSL (หากรองรับ) | หากอุปกรณ์กล้องรองรับ การกำหนดค่าอินพุตสตรีมที่แนะนำจะต้องโฆษณาร่วมกับรูปแบบเอาต์พุตที่ประมวลผลแล้วหรือหยุดทำงานอื่นๆ เท่านั้น |
RAW (หากรองรับ) | หากอุปกรณ์กล้องรองรับ การกำหนดค่าสตรีมดิบที่แนะนำจะต้องมีรูปแบบเอาต์พุตแบบ RAW เท่านั้น |
กรณีการใช้งานอื่นๆ
คุณสามารถจัดเตรียมสตรีมการกำหนดค่าที่แนะนำเพิ่มเติมสำหรับกรณีการใช้งานเฉพาะสำหรับการใช้งานของคุณ
การตรวจสอบ
หากต้องการทดสอบการใช้งานสตรีมการกำหนดค่าที่แนะนำ ให้รันการทดสอบ CTS และ VTS ต่อไปนี้:
API เพื่อสืบค้นชุดสตรีม
แพลตฟอร์ม Android รองรับ API เพื่อค้นหาชุดสตรีม การใช้ API นี้ช่วยให้ไคลเอนต์กล้องสามารถสืบค้นการรวมสตรีมได้อย่างปลอดภัย ณ จุดใดก็ได้หลังจากได้รับอินสแตนซ์ CameraDevice ที่ถูกต้อง โดยลบค่าใช้จ่ายในการเริ่มต้นเซสชันการจับภาพของกล้อง และความเป็นไปได้ที่จะมีข้อยกเว้นของกล้องตามมา รวมถึงการหยุดทำงานของกล้อง และช่วยให้สามารถสืบค้นได้เร็วขึ้น
คุณสมบัตินี้ยังช่วยให้ไคลเอนต์กล้องสามารถรับรายการชุดสตรีมที่รวบรวมตาม แนวทาง สำหรับ CameraDevice และระดับ HW ที่รองรับ การทดสอบ CTS มีไว้เพื่อบังคับใช้ความถูกต้องของผลลัพธ์การสืบค้นให้มากที่สุดเท่าที่จะเป็นไปได้ โดยครอบคลุมชุดย่อยย่อยของชุดค่าผสมสตรีมที่พบบ่อยที่สุด
คุณสามารถเลือกที่จะสนับสนุนคุณสมบัตินี้ได้โดยใช้การเรียก HIDL API เพิ่มเติมหนึ่งครั้งใน Camera HAL
การนำไปปฏิบัติ
เพื่อรองรับ API เพื่อสืบค้นชุดสตรีม Camera HAL จะต้องจัดเตรียมการใช้งานสำหรับอินเทอร์เฟซ isStreamCombinationSupported
HIDL API อินเทอร์เฟซนี้จะตรวจสอบว่าอุปกรณ์กล้องรองรับการรวมสตรีมกล้องที่ระบุหรือไม่
เมื่อเรียก API จะต้องส่งคืนรหัสสถานะอย่างใดอย่างหนึ่งต่อไปนี้:
-
OK
: แบบสอบถามรวมสตรีมสำเร็จ -
METHOD_NOT_SUPPORTED
: อุปกรณ์กล้องไม่รองรับแบบสอบถามรวมสตรีม -
INTERNAL_ERROR
: ไม่สามารถดำเนินการค้นหาแบบรวมสตรีมได้เนื่องจากข้อผิดพลาดภายใน
API จะคืนค่าเป็นจริงหากรองรับชุดสตรีม มิฉะนั้นจะคืนค่าเท็จ
เฟรมเวิร์กใช้ isSessionConfigurationSupported
API สาธารณะเพื่อตรวจสอบว่าอุปกรณ์กล้องรองรับการกำหนดค่าเซสชันเฉพาะหรือไม่
การเรียก API จะต้องไม่มีผลข้างเคียงใดๆ ต่อการทำงานของกล้องตามปกติ การเรียก API จะต้องไม่เปลี่ยนแปลงสถานะภายในหรือทำให้ประสิทธิภาพของกล้องช้าลง ตรวจสอบให้แน่ใจว่าหลังจากที่ Camera HAL ตรวจสอบการรวมสตรีมสำเร็จแล้ว ไคลเอนต์กล้องจะสามารถกำหนดค่าการรวมสตรีมได้สำเร็จ เพื่อหลีกเลี่ยงปัญหา ตรวจสอบให้แน่ใจว่าการใช้งานไม่ได้จัดเก็บข้อมูลใดๆ ในระหว่างการสืบค้นแบบรวมสตรีม เปลี่ยนสถานะภายใน หรือมีส่วนร่วมในการดำเนินการที่ใช้เวลานาน
การตรวจสอบ
ในการตรวจสอบคุณสมบัตินี้ ให้รันกรณีทดสอบ CTS และ VTS ของกล้องต่อไปนี้:
โมดูลกล้อง CTS:
กล้องวีทีเอส:
VtsHalCameraProviderV2_4TargetTest.cpp