เอาต์พุตสตรีม ครอบตัด และซูม

กระแสข้อมูลขาออก

ระบบย่อยของกล้องทำงานบนไปป์ไลน์ที่ใช้ ANativeWindow เท่านั้นสำหรับความละเอียดและรูปแบบเอาต์พุตทั้งหมด หลายกระแสที่สามารถกำหนดค่าในช่วงเวลาหนึ่งในการส่งกรอบเดียวไปยังเป้าหมายหลายอย่างเช่น GPU ที่เข้ารหัสวิดีโอ RenderScript หรือแอปมองเห็นบัฟเฟอร์ (RAW ไบเออร์ประมวลผลบัฟเฟอร์ YUV หรือบัฟเฟอร์ JPEG เข้ารหัส)

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรับประกันการส่งออกรวมกันกระแสที่ขึ้นอยู่กับระดับฮาร์ดแวร์ที่สนับสนุนโปรดดู createCaptureSession()

การครอบตัด

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

พื้นที่ถูกกำหนดเป็นรูปสี่เหลี่ยมผืนผ้า (x, y, ความกว้าง, ความสูง) โดยที่ (x, y) อธิบายมุมบนซ้ายของสี่เหลี่ยม สี่เหลี่ยมถูกกำหนดบนระบบพิกัดของอาร์เรย์พิกเซลแอ็คทีฟเซ็นเซอร์ โดย (0,0) เป็นพิกเซลด้านซ้ายบนของอาร์เรย์พิกเซลแอ็คทีฟ ดังนั้น ความกว้างและความสูงต้องไม่ใหญ่กว่าขนาดที่รายงานในฟิลด์ข้อมูลคงที่ของ ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY HAL จะรายงานความกว้างและความสูงขั้นต่ำที่อนุญาตผ่านช่องข้อมูลคงที่ ANDROID_SCALER_MAX_DIGITAL_ZOOM ซึ่งอธิบายปัจจัยการซูมที่รองรับสูงสุด ดังนั้นความกว้างและความสูงของพื้นที่ครอบตัดขั้นต่ำคือ:

  {width, height} =
   { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM),
     floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM) }

หากพื้นที่การครอบตัดต้องเป็นไปตามข้อกำหนดเฉพาะ (เช่น จำเป็นต้องเริ่มต้นบนพิกัดคู่ และความกว้าง/ความสูงต้องเท่ากัน) HAL จะต้องปัดเศษตามที่จำเป็นและเขียนขอบเขตการครอบตัดสุดท้ายที่ใช้ในผลลัพธ์ ข้อมูลเมตาของผลลัพธ์ ในทำนองเดียวกัน หาก HAL ใช้ระบบป้องกันภาพสั่นไหวของวิดีโอ จะต้องปรับขอบเขตการครอบตัดของผลลัพธ์เพื่ออธิบายขอบเขตที่รวมอยู่ในเอาต์พุตจริงหลังจากใช้ระบบป้องกันภาพสั่นไหวของวิดีโอ โดยทั่วไป แอปพลิเคชันที่ใช้กล้องจะต้องสามารถกำหนดขอบเขตการมองเห็นที่ได้รับตามพื้นที่ครอบตัด ขนาดของเซ็นเซอร์ภาพ และทางยาวโฟกัสของเลนส์

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

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

ตัวอย่างเช่น หากมีการกำหนดสตรีมสองรายการ สตรีม 640x480 (4:3) และสตรีม 1280x720 (ด้าน 16:9) ด้านล่างจะแสดงขอบเขตเอาต์พุตที่คาดไว้สำหรับแต่ละสตรีมสำหรับพื้นที่การครอบตัดตัวอย่างสองสามตัวอย่าง ตามสมมติฐาน 3 เซ็นเซอร์ MP (2000 x 1500 พิกเซลอาร์เรย์)

พื้นที่ครอบตัด: (500, 375, 1000, 750) (อัตราส่วนภาพ 4:3)
การครอบตัดสตรีม 640x480: (500, 375, 1000, 750) (เท่ากับพื้นที่ครอบตัด)
ครอบตัดสตรีม 1280x720: (500, 469, 1000, 562)

crop-region-43-ratio

รูปที่ 1 อัตราส่วน 4: 3 ด้าน

พื้นที่ครอบตัด: (500, 375, 1333, 750) (อัตราส่วนภาพ 16:9)
ครอปสตรีม 640x480: (666, 375, 1000, 750)
การครอบตัดสตรีม 1280x720: (500, 375, 1333, 750) (เท่ากับพื้นที่ครอบตัด)

crop-region-169-อัตราส่วน

รูปที่ 2 อัตราส่วน 16: 9 ด้าน

พื้นที่ครอบตัด: (500, 375, 750, 750) (อัตราส่วนภาพ 1:1)
ครอบตัดสตรีม 640x480: (500, 469, 750, 562)
ครอบตัดสตรีม 1280x720: (500, 543, 750, 414)

crop-region-11-ratio

รูปที่ 3 1: 1 อัตราส่วน

และตัวอย่างสุดท้าย สตรีมอัตราส่วนกว้างยาว 1024x1024 แทนสตรีม 480p:
พื้นที่ครอบตัด: (500, 375, 1000, 750) (อัตราส่วนภาพ 4:3)
ครอบตัดสตรีม 1024x1024: (625, 375, 750, 750)
ครอบตัดสตรีม 1280x720: (500, 469, 1000, 562)

crop-region-43-square-ratio

รูปที่ 4 4: 3 อัตราส่วนตาราง

กำลังประมวลผลใหม่

การสนับสนุนเพิ่มเติมสำหรับไฟล์ภาพดิบมีให้โดยการประมวลผลการรองรับซ้ำสำหรับข้อมูล RAW ไบเออร์ การสนับสนุนนี้ช่วยให้ไปป์ไลน์ของกล้องประมวลผลบัฟเฟอร์ RAW และข้อมูลเมตาที่บันทึกไว้ก่อนหน้านี้ (ทั้งเฟรมที่บันทึกไว้ก่อนหน้านี้) เพื่อสร้างเอาต์พุต YUV หรือ JPEG ที่แสดงผลใหม่

ซูม

สำหรับอุปกรณ์ที่ใช้ Android 11 หรือสูงกว่าแอปสามารถใช้การซูมของกล้อง (ดิจิตอลและออปติคอล) ผ่าน ANDROID_CONTROL_ZOOM_RATIO การตั้งค่า

อัตราส่วนการซูมถูกกำหนดให้เป็นปัจจัยจุดลอยตัว แทนการใช้ ANDROID_SCALER_CROP_REGION สำหรับการเพาะปลูกและซูมแอปสามารถใช้ ANDROID_CONTROL_ZOOM_RATIO ในการควบคุมระดับการซูมและการใช้ ANDROID_SCALER_CROP_REGION สำหรับการปลูกพืชแนวนอนและแนวเพื่อให้บรรลุอัตราส่วนที่แตกต่างกว่าเซ็นเซอร์กล้องพื้นเมือง

ระบบกล้องหลายตัวอาจมีเลนส์มากกว่าหนึ่งตัวที่ทางยาวโฟกัสต่างกัน และผู้ใช้สามารถใช้การซูมด้วยเลนส์โดยการสลับระหว่างเลนส์ ใช้ ANDROID_CONTROL_ZOOM_RATIO มีประโยชน์ในสถานการณ์ดังต่อไปนี้:

  • ซูมภาพจากเลนส์กว้างเลนส์: อัตราส่วน floating point ให้ความแม่นยำที่ดีขึ้นเมื่อเทียบกับค่าจำนวนเต็มของ ANDROID_SCALER_CROP_REGION
  • ซูมออกจากเลนส์กว้างเลนส์กว้างพิเศษ: ANDROID_CONTROL_ZOOM_RATIO สนับสนุนซูมออก (<1.0f) ในขณะที่ ANDROID_SCALER_CROP_REGION ไม่

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

อัตราการซูม: 2.0; 1/4 ของมุมมองเดิม
พื้นที่ครอบตัด: (0, 0, 2000, 1500) (อัตราส่วนภาพ 4:3)
ครอปสตรีม 640x480: (0, 0, 2000, 1500) (เท่ากับพื้นที่ครอบตัด)
ครอบตัดสตรีม 1280x720: (0, 187, 2000, 1125)

อัตราส่วนการซูม-2-crop-43

รูปที่ 5 2.0 ซูมอัตราส่วน 4: 3

อัตราการซูม: 2.0; 1/4 ของมุมมองเดิม
พื้นที่ครอบตัด: (0, 187, 2000, 1125) (อัตราส่วนภาพ 16:9)
ครอปสตรีม 640x480: (250, 187, 1500, 1125) (มีแถบดำด้านข้าง)
ครอบตัดสตรีม 1280x720: (0, 187, 2000, 1125) (เท่ากับพื้นที่ครอบตัด)

อัตราส่วนการซูม-2-crop-169

รูปที่ 6 2.0 ซูมอัตราส่วน 16: 9

อัตราการซูม: 0.5; มุมมองเดิม 4 เท่า (เปลี่ยนจากเลนส์ไวด์เป็นเลนส์อัลตร้าไวด์)
พื้นที่ครอบตัด: (250, 0, 1500, 1500) (อัตราส่วนภาพ 1:1)
ครอปสตรีม 640x480: (250, 187, 1500, 1125) (แถบดำ)
ครอบตัดสตรีม 1280x720: (250, 328, 1500, 844) (แถบดำ)

ภาพ/zoom-ratio-0.5-crop-11

รูปที่ 7 0.5 ซูม 1: 1 อัตราส่วน

เท่าที่เห็นจากกราฟข้างต้นระบบของการเปลี่ยนแปลงภูมิภาคพืชจะมีประสิทธิภาพหลังการซูมมุมมองของการประสานงานและเป็นตัวแทนจากสี่เหลี่ยมที่มีขนาดดังต่อไปนี้: ( 0 , 0 , activeArrayWith , activeArrayHeight ) เช่นเดียวกับบริเวณและใบหน้า AE/AWB/AF นี้มีการเปลี่ยนแปลงระบบการประสานงานไม่ได้นำไปใช้กับการจับภาพ RAW และข้อมูลที่เกี่ยวข้องเช่น intrinsicCalibration และ lensShadingMap

โดยใช้ตัวอย่างสมมุติฐานเดียวกันข้างต้น และสมมติว่าเอาต์พุตสตรีม #1 (640x480) เป็นสตรีมช่องมองภาพ การซูม 2.0x สามารถทำได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธีต่อไปนี้

  • zoomRatio = 2.0 , scaler.cropRegion = (0, 0, 2000, 1500)
  • zoomRatio = 1.0 (ค่าเริ่มต้น) scaler.cropRegion = (500, 375, 1000, 750)

สำหรับแอปตั้ง android.control.aeRegions จะเป็นไตรมาสที่ด้านบนซ้ายของสนามช่องมองภาพในมุมมองของการตั้งค่า android.control.aeRegions ไป (0, 0, 1000, 750) กับ android.control.zoomRatio ตั้ง 2.0 อีกวิธีหนึ่งคือแอปสามารถตั้ง android.control.aeRegions ไปยังภูมิภาคเทียบเท่า (500, 375, 1000, 750) สำหรับ android.control.zoomRatio ของ 1.0