Почему cv :: VideoCapture не может открыть мою USB-камеру, когда я запускаю свою программу с Valgrind? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть многопоточная программа, которая использует opencv для чтения и обработки изображений с USB-камеры. У меня есть один поток, который читает только кадры с камеры, а другой обрабатывает эти изображения. Я запускаю эту программу на одноплатном компьютере JetsonNano, если это актуально.

Она работала, как и ожидалось, пока я не проверил утечки памяти с помощью Valgrind. Под Valgrind мой объект VideoCapture не может открыть камеру. Я хотел бы знать, почему это происходит в Valgrind, а не при нормальной работе программы.

В целях тестирования я удалил весь код, связанный с обработкой изображений. Соответствующий код, который остается, был прикреплен ниже.

определение захвата:

    cv::VideoCapture cap;

инициализация захвата:

    CameraController::CameraController : cap(0){}

функция чтения кадра:

    void CameraController::startReadingFromCamera() {
        while (readingFromCamera) { //boolean member variable
            mutex.lock();

            std::cout << cap.isOpened() << std::endl;
            //this prints 0 under Valgrind, 1 when run without Valgrind 

            //currentFrame is a member variable.  
            //This is how the processing thread will access the newest frame
            cap.read(currentFrame); 
            mutex.unlock();
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
    }

инициализация потока:

    CameraController cameraController;
    thread videoThread(&CameraController::startReadingFromCamera, &cameraController);

Я могу включить вывод Valgrind, если это необходимо, но я довольно новичок в Valgrind. Я не уверен, какие части журналов будут полезны при анализе этой проблемы.

...