libv4l2: erro ao ativar o fluxo: Argumento inválido VIDIOC_STREAMON: Argumento inválido

3

Estou trabalhando na câmera usando o opencv 3.0.0 e C ++ com o Ubuntu 14.04,

Quando eu executo um programa usando a câmera e paro com Ctrl + C , não consigo executá-lo pela segunda vez e isso me dá o seguinte :

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

Eu tentei lsusb e a câmera (ela é incorporada no laptop e não externa) não é reconhecida. Também com o cheeze, isso me diz que há um erro ao tentar abrir a câmera.

A única solução é reiniciar o laptop.

Qualquer sugestão será apreciada :) obrigado

    
por The Beast 09.10.2015 / 12:31

3 respostas

3

Ocorre quando a câmera não é liberada pelo seu programa - por exemplo, quando você a mata usando Ctrl + C . Você pode usar o modo personalizado para sair do loop de leitura da câmera - por exemplo, esperar por 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 melhor, você pode pegar Ctrl + C (sinal SIGINT):

bool stop = false;

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


std::signal(SIGINT, sigIntHandler);

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

Veja: Manipulação de sinal em referência C ++

    
por Honza 15.11.2015 / 20:57
0

O problema aqui é com o kernel

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

Isso fez o truque para mim

    
por Nipuna C 12.10.2016 / 10:57
0

Você não menciona sua plataforma, mas no Raspberry Pi, esse erro pode ocorrer ao executar a captura de vídeo usando o driver v4l2 e quando a memória da GPU não estiver configurada para 128 MB ou superior. Execute sudo raspi-config e ajuste-o para 128 usando o menu.

    
por bleater 25.09.2017 / 02:10