กล้อง USB ภายนอก

<!-- Copyright 2018 The Android Open Source Project

ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 ("ใบอนุญาต") คุณไม่สามารถใช้ไฟล์นี้หากไม่เป็นไปตามใบอนุญาต คุณสามารถรับสำเนาใบอนุญาตได้ที่

  http://www.apache.org/licenses/LICENSE-2.0

เว้นแต่กฎหมายที่เกี่ยวข้องจะกำหนดไว้หรือตกลงกันเป็นลายลักษณ์อักษร ซอฟต์แวร์ ที่เผยแพร่ภายใต้สัญญาอนุญาตนี้จะเผยแพร่ "ตามจริง" โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาที่เฉพาะเจาะจงซึ่งควบคุมสิทธิ์และ ข้อจำกัดภายใต้ใบอนุญาต -->

แพลตฟอร์ม Android รองรับการใช้กล้อง USB แบบเสียบและใช้งานได้ทันที (เช่น เว็บแคม) โดยใช้ 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 ให้อัปเดต 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 ภายนอกต้องเสียบปลั๊กในอุปกรณ์ที่เฉพาะเจาะจงตลอดการทดสอบ มิฉะนั้นกรณีทดสอบบางรายการจะล้มเหลว