Android10.0(Q) 6765 USB 摄像头调试记录

usb摄像头 专栏收录该内容
10 篇文章 1 订阅

过程
开整之前,按习惯去 FAQ 上一顿搜索,都是些低版本的改动记录,后来得知高版本对 USB Camera这块的支持太少了。


FAQ 上淘到一个6.0的改动方法,照着试了试发现不行呃。后来经过一番搜索后,找到 MTK USB CMAERA 调试记录,按照这哥们的修改可行。编译后重新烧写,插入USB摄像头执行ls -l /dev/v*,
发现了 /dev/video0 设备,那么第一步算是走通了。

alps\kernel-4.9\arch\arm64\configs\k62v1_64_bsp_debug_defconfig
alps\kernel-4.9\arch\arm64\configs\k62v1_64_bsp_defconfig

# CONFIG_RD_LZ4 is not set
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_MTK_OTG=y
CONFIG_USB_MTK_HDRC=y 
CONFIG_USB_MTK_HDRC_HCD=y


打开 MTK UVC_SUPPORT 相关宏控制后,将编译对应的usb驱动文件

alps\kernel-4.9\drivers\media\usb\Makefile

能成功发现设备节点后,下载 https://github.com/jiangdongguo/AndroidUSBCamera 工程源码在 AS 中搞起来,

github 上的由于依赖库地址变动不能成功编译,后来经过排错后成功运行了。也可以下载我修改好后的。

https://github.com/cczheng/MTK-Android-CZ-Code/blob/master/AndroidUSBCamera-master.zip

成功运行起来后,我就遇到了USB权限问题

 11:42:25.572 5580-5620/com.jiangdg.usbcamera D/Debug: onConnectDev: 
 11:42:25.573 5580-5622/com.jiangdg.usbcamera V/UVCCameraTextureView: RenderThread#setEncoder:encoder=null
 11:42:25.586 5580-5621/com.jiangdg.usbcamera E/UsbManager: exception in UsbManager.openDevice
    java.lang.SecurityException: User has not given 1000/com.jiangdg.usbcamera permission to access device /dev/bus/usb/001/004
        at android.os.Parcel.createException(Parcel.java:2071)
        at android.os.Parcel.readException(Parcel.java:2039)
        at android.os.Parcel.readException(Parcel.java:1987)
        at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IUsbManager.java:739)
        at android.hardware.usb.UsbManager.openDevice(UsbManager.java:445)
        at com.serenegiant.usb.USBMonitor$UsbControlBlock.<init>(USBMonitor.java:1088)
        at com.serenegiant.usb.USBMonitor$UsbControlBlock.clone(USBMonitor.java:1111)
     

按理来说应该要弹框提示是否允许USB权限的,但我这里没弹出而且报了上面的错,后来直接把 framwork 下的权限检查给屏蔽了

frameworks/base/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java

public void checkPermission(UsbDevice device, String packageName, int uid) {
        if (!hasPermission(device, packageName, uid)) {
            //throw new SecurityException("User has not given " + uid + "/" + packageName
                    //+ " permission to access device " + device.getDeviceName());
        }
    }

    public void checkPermission(UsbAccessory accessory, int uid) {
        if (!hasPermission(accessory, uid)) {
           //throw new SecurityException("User has not given " + uid + " permission to accessory "
                   // + accessory);
        }
    }


这样用 demo 代码就能正常打开 USB 摄像头预览了。

这里只是简单记录了修改过程,如果要集成到系统本身的相机中打开 USB 摄像头,应该有不小的工作量。

默认的 Camera API 中据说可以兼容,感兴趣的可以看下这两篇
 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值