我在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!");
}
感谢您的帮助
答案 0 :(得分:0)
您需要使用Android USB管理器API来获取USB设备的FD;直接访问/ dev节点会绕过Android的权限实施(请参阅USB guide here)以获取USB设备访问权限。
有权访问/ dev节点的应用程序是一个安全漏洞,在最近的Android版本中被锁定。
从Java USB API获得USB设备的FD后,如果您愿意,可以使用本机代码对其进行操作。