web-dev-qa-db-fra.com

libv4l2: erreur lors de l'activation du flux: argument invalide VIDIOC_STREAMON: argument invalide

Je travaille sur la caméra en utilisant OpenCV 3.0.0 et C++ avec Ubuntu 14.04,

Quand je lance un programme avec la caméra et que je l’arrête avec Ctrl + C, Je ne peux pas le faire courir une seconde fois et cela me donne ce qui suit:

libv4l2: error turning on stream: Invalid argument
VIDIOC_STREAMON: Invalid argument
Cannot read a frame from video stream

J'ai essayé lsusb et l'appareil photo (son ordinateur portable intégré n'est pas externe) n'est pas reconnu. Aussi avec cheeze, il me dit qu'il y a une erreur en essayant d'ouvrir la caméra.

La seule solution consiste à redémarrer l'ordinateur portable.

Toute suggestion sera appréciée :) merci

3
The Beast

Cela se produit lorsque la caméra n'est pas diffusée par votre programme - par exemple lorsque vous la tuez en utilisant Ctrl + C. Vous pouvez utiliser une méthode personnalisée pour quitter la boucle de lecture de la caméra - par exemple, attendez Esc:

while (1) { // camera loop
    cap.read(frame);
    ...
    (frame processing)
    ...
    if (waitKey(20) == 27) { // wait for 'Esc' key press for 20ms
        break; //  if 'Esc' key is pressed, break loop
    }
}

Ou mieux, vous pouvez attraper Ctrl + C (Signal SIGINT):

bool stop = false;

void sigIntHandler(int signal) {
    stop = true;
}


std::signal(SIGINT, sigIntHandler);

while (!stop) { // camera loop
    cap.read(frame);
    ...
    (frame processing)
    ...
}

Voir: Traitement du signal dans la référence C++

3
Honza

Vous ne mentionnez pas votre plate-forme, mais sur le Raspberry Pi, cette erreur peut survenir lorsque l'exécution de la capture vidéo à l'aide du pilote v4l2 est requise et lorsque la mémoire GPU n'est pas définie sur 128 Mo ou plus. Exécutez Sudo raspi-config et ajustez-le à 128 en utilisant le menu.

0
bleater

Le problème ici est avec le noyau

Sudo apt-get install linux-generic-lts-utopic

Cela a fait le tour pour moi

0
Nipuna C