Android 7 jni open () не работает + управление камерой USB - PullRequest
0 голосов
/ 28 мая 2018

Я использовал этот пример с ioctl на Android 4.4, 5.1 https://github.com/theicfire/simplewebcam/blob/master/jni/ImageProc.c

Я использую этот интерфейс для ручного управления такими параметрами, как контраст, усиление, экспозиция, уровень белого и т. Д., Когда я пыталсячтобы переместить приложение на android 7, файл fd не открывается.

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

Есть ли способ исправить это?

Я проверил, и camera2.api не позволяет контролироватьпараметры, которые мне нужны от камеры, и собственный код не работает из-за этой ошибки.

edit: если быть более точным, я использую USB-камеру, подключенную к планшету, а Android 7 не позволяет встретитьсяполучить устройство FD, хотя я использую CHMOD 666 или 777, чтобы установить разрешение.есть ли способ обойти это или другой способ получить контроль над экспозицией, контрастом, усилением, белым 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 голосов
/ 30 мая 2018

Чтобы получить FD для вашего USB-устройства, вам необходимо использовать API-интерфейс USB-менеджера Android;прямой доступ к узлу / dev обходит принудительное использование разрешений Android (см. руководство USB здесь ) для доступа к USB-устройству.

Поэтому приложения, имеющие доступ к узлу / dev, представляют собой уязвимость системы безопасности, которая блокируется в более поздних выпусках Android.

Получив FD для устройства USB из API Java USB, выможете манипулировать им в нативном коде, если хотите.

...