Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. คุณขอรับสำเนาใบอนุญาตได้ที่
http://www.apache.org/licenses/LICENSE-2.0
ซอฟต์แวร์ ที่เผยแพร่ภายใต้ใบอนุญาตจะเผยแพร่ตามสภาพที่เป็นอยู่ "AS IS" BASIS, โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัย เว้นแต่กฎหมายที่ใช้บังคับจะกำหนดไว้หรือมีการตกลงเป็นลายลักษณ์อักษร ดูภาษาที่เฉพาะเจาะจงซึ่งควบคุมสิทธิ์และการจำกัดภายใต้ใบอนุญาตได้ที่ใบอนุญาต -->
แพลตฟอร์ม Android รองรับการใช้กล้อง USB แบบ Plug and Play (เช่น เว็บแคม) โดยใช้ Android Camera2 API มาตรฐานและอินเทอร์เฟซ HAL ของกล้อง โดยทั่วไปแล้ว เว็บแคมจะรองรับ ไดรเวอร์ USB Video Class (UVC) และใน Linux จะใช้ ไดรเวอร์ Video4Linux (V4L) มาตรฐานเพื่อควบคุมกล้อง UVC
การรองรับเว็บแคมช่วยให้อุปกรณ์สามารถใช้ในกรณีการใช้งานที่มีน้ำหนักเบา เช่น การวิดีโอแชทและตู้ถ่ายรูป ฟีเจอร์นี้ไม่ได้มาแทนที่ HAL ของกล้องภายในทั่วไปในโทรศัพท์ Android และไม่ได้ออกแบบมาเพื่อรองรับงานที่ซับซ้อนและต้องใช้ประสิทธิภาพสูง ซึ่งเกี่ยวข้องกับการสตรีมความละเอียดสูงและความเร็วสูง, AR และการควบคุม ISP/เซ็นเซอร์/เลนส์ด้วยตนเอง
กระบวนการ HAL ของกล้อง USB เป็นส่วนหนึ่งของผู้ให้บริการกล้องภายนอกที่คอยตรวจสอบความพร้อมใช้งานของอุปกรณ์ USB และแสดงรายการอุปกรณ์กล้องภายนอกตามความเหมาะสม กระบวนการนี้มีสิทธิ์และนโยบาย SE ที่คล้ายกับกระบวนการ HAL ของกล้องในตัว แอปเว็บแคมของบุคคลที่สามที่สื่อสารกับอุปกรณ์ USB โดยตรงต้องมีสิทธิ์เข้าถึงกล้องเดียวกันกับแอปกล้องทั่วไปเพื่อเข้าถึงอุปกรณ์ UVC
ตัวอย่างและแหล่งข้อมูล
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้กล้อง USB ได้ที่การติดตั้งใช้งานอ้างอิงของผู้ให้บริการกล้องภายนอกที่
ExternalCameraProvider
การติดตั้งใช้งานอุปกรณ์กล้องภายนอกและเซสชันรวมอยู่ใน
ExternalCameraDevice
และ
ExternalCameraDeviceSession
ตั้งแต่ระดับ API 28 เป็นต้นไป Java Client API จะมี
EXTERNAL
ระดับฮาร์ดแวร์
การใช้งาน
การติดตั้งใช้งานต้องรองรับ
android.hardware.usb.host
ฟีเจอร์ระบบ
นอกจากนี้ คุณต้องเปิดใช้การรองรับเคอร์เนลสำหรับอุปกรณ์ UVC ด้วย คุณเปิดใช้ได้โดยเพิ่มรายการต่อไปนี้ลงในไฟล์ defconfig ของเคอร์เนลที่เกี่ยวข้อง
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_MEDIA_USB_SUPPORT=y
หากต้องการเปิดใช้ผู้ให้บริการกล้องภายนอกในการสร้างอุปกรณ์ที่เกี่ยวข้อง ซึ่งจะเพิ่มสิทธิ์ SELinux ที่จำเป็น การกำหนดค่ากล้องภายนอก และการพึ่งพาผู้ให้บริการกล้องภายนอก ให้ทำตามขั้นตอนต่อไปนี้
เพิ่มไฟล์กำหนดค่ากล้องภายนอกและไลบรารีกล้องภายนอกลงใน
device.mk+PRODUCT_PACKAGES += android.hardware.camera.provider-V1-external-service +PRODUCT_COPY_FILES += \ +device/manufacturerX/productY/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xmlเพิ่มชื่อผู้ให้บริการกล้องภายนอกลงในไฟล์ Manifest ของ Treble HAL ของอุปกรณ์
<hal format="aidl"> <name>android.hardware.camera.provider</name> <version>1</version> <interface> <name>ICameraProvider</name> <instance>internal/0</instance> + <instance>external/0</instance> </interface> </hal>(ไม่บังคับ) หากอุปกรณ์ทำงานในโหมด Treble Passthrough ให้อัปเดต
sepolicyเพื่อให้cameraserverเข้าถึงกล้อง UVC ได้+# for external camera +allow cameraserver device:dir r_dir_perms; +allow cameraserver video_device:dir r_dir_perms; +allow cameraserver video_device:chr_file rw_file_perms;
ตัวอย่าง external_camera_config.xml (ละเว้นบรรทัดลิขสิทธิ์)
<ExternalCamera> <Provider> <ignore> <!-- Internal video devices to be ignored by external camera HAL --> <id>0</id> <!-- No leading/trailing spaces --> <id>1</id> </ignore> </Provider> <!-- See ExternalCameraUtils.cpp for default values of Device configurations below --> <Device> <!-- Max JPEG buffer size in bytes--> <MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) --> <!-- Size of v4l2 buffer queue when streaming >= 30fps --> <!-- Larger value: more request can be cached pipeline (less janky) --> <!-- Smaller value: use less memory --> <NumVideoBuffers count="4"/> <!-- Size of v4l2 buffer queue when streaming < 30fps --> <NumStillBuffers count="2"/> <!-- List of maximum fps for various output sizes --> <!-- Any image size smaller than the size listed in Limit row will report fps (as minimum frame duration) up to the fpsBound value. --> <FpsList> <!-- width/height must be increasing, fpsBound must be decreasing--> <Limit width="640" height="480" fpsBound="30.0"/> <Limit width="1280" height="720" fpsBound="15.0"/> <Limit width="1920" height="1080" fpsBound="10.0"/> <!-- image size larger than the last entry will not be supported--> </FpsList> </Device> </ExternalCamera>
การปรับแต่ง
คุณสามารถปรับปรุงกล้อง Android ได้ผ่านตัวเลือกการปรับแต่งทั่วไปหรือการเพิ่มประสิทธิภาพเฉพาะอุปกรณ์
การปรับแต่งทั่วไป
คุณสามารถปรับแต่งผู้ให้บริการกล้องภายนอกได้โดยแก้ไขไฟล์ external_camera_config.xml โดยเฉพาะอย่างยิ่ง ไคลเอ็นต์สามารถปรับแต่งพารามิเตอร์ต่อไปนี้ได้
- การยกเว้นโหนดวิดีโอของกล้องภายใน
- ขีดจำกัดบนของขนาดรูปภาพและอัตราเฟรมที่รองรับ
- จำนวนบัฟเฟอร์ที่อยู่ระหว่างการประมวลผล (การแลกเปลี่ยนระหว่างการกระตุกกับหน่วยความจำ)
นอกจากพารามิเตอร์เหล่านี้แล้ว คุณยังเพิ่มพารามิเตอร์ของคุณเองหรือพัฒนาการกำหนดค่าของคุณเองได้ด้วย
การเพิ่มประสิทธิภาพเฉพาะอุปกรณ์
นอกจากนี้ คุณยังปรับปรุงประสิทธิภาพได้ด้วยการเพิ่มการเพิ่มประสิทธิภาพเฉพาะอุปกรณ์
การคัดลอก/ปรับขนาดบัฟเฟอร์และการถอดรหัส/เข้ารหัส JPEG
การติดตั้งใช้งานทั่วไปใช้ CPU (libyuv/libjpeg) แต่คุณสามารถแทนที่ด้วยการเพิ่มประสิทธิภาพเฉพาะอุปกรณ์ได้
รูปแบบเอาต์พุต HAL
การติดตั้งใช้งานทั่วไปใช้รูปแบบเอาต์พุตต่อไปนี้
YUV_420_888สำหรับบัฟเฟอร์IMPLEMENTATION_DEFINEDของวิดีโอYUV12สำหรับบัฟเฟอร์IMPLEMENTATION_DEFINEDอื่นๆ ทั้งหมด
คุณสามารถแทนที่รูปแบบเอาต์พุตด้วยรูปแบบที่มีประสิทธิภาพเฉพาะอุปกรณ์เพื่อปรับปรุงประสิทธิภาพ นอกจากนี้ คุณยังรองรับรูปแบบเพิ่มเติมในการติดตั้งใช้งานที่กำหนดเองได้ด้วย
การตรวจสอบ
อุปกรณ์ที่รองรับกล้องภายนอกต้องผ่าน CTS ของกล้อง เว็บแคม USB ภายนอกต้องเสียบปลั๊กอยู่ในอุปกรณ์ที่เฉพาะเจาะจงตลอดการทดสอบ ไม่เช่นนั้นกรณีทดสอบบางรายการจะล้มเหลว