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

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