Android 7 jni open()失败+ usb相机控件

时间:2018-05-28 07:20:41

标签: android camera java-native-interface native ioctl

我在android 4.4,5.1上使用此示例和ioctl https://github.com/theicfire/simplewebcam/blob/master/jni/ImageProc.c

我正在使用此界面来手动控制对比度,增益,曝光,白电平等参数。 当我试图将应用程序移动到android 7时,fd文件无法打开。

fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);

有什么方法可以解决这个问题吗?

我已经检查过,camera2.api不允许对摄像机所需的参数进行控制,由于此错误,本机代码失败。

编辑: 更确切地说,我正在使用连接到平板电脑的USB摄像头,即使我使用chmod 666或777设置权限,android 7也不会让设备FD得到设备FD。是否有任何方法来控制曝光,对比度,增益,白色lvl?

这是我在java部分添加的代码,代码在canRead()部分

中失败
    private void InitCameraDevice() throws Exception {
        //set permissions to all /dev/video devices before checking them
        General.RunAsRoot("chmod 666 /dev/video*");

        NativeUtils.setLogName(General.getLogFileName());

        File dir = new File("/dev");
        File[] videoDevFiles = dir.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.startsWith("video");
            }
        });

        boolean cameraFound = false;
        for (File deviceFile : videoDevFiles) {
            // Process file
            if(deviceFile.canRead()) {
                cameraFound = (NativeUtils.prepareCamera(deviceFile.getAbsolutePath(), frameWidth, frameHeight) != -1);
                if (cameraFound)
                    break;
            }
            else
                General.logd(STREAM_THREAD_TAG, "Insufficient permissions on [" +
                        deviceFile.getAbsolutePath() +"].");
        }

        if(!cameraFound)
            throw new Exception("UVC Camera not found!");
    }

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您需要使用Android USB管理器API来获取USB设备的FD;直接访问/ dev节点会绕过Android的权限实施(请参阅USB guide here)以获取USB设备访问权限。

有权访问/ dev节点的应用程序是一个安全漏洞,在最近的Android版本中被锁定。

从Java USB API获得USB设备的FD后,如果您愿意,可以使用本机代码对其进行操作。