Como você coloca um limite na quantidade de largura de banda que um dispositivo USB pode alocar no Linux?
Eu tenho um par de webcams USB baratas que estou tentando rodar de forma simultânea. A execução de v4l2-ctl --list-formats-ext --device=/dev/videoN
mostra que ambos suportam várias resoluções não compactadas em 30 e 15 FPS.
No entanto, mesmo se eu configurar um para capturar a 15 FPS na resolução de 160x120, ele ainda aloca 480 Mbps de largura de banda, geralmente me impedindo de usar qualquer outro dispositivo USB, muito menos a segunda webcam. A tentativa de capturar a partir da segunda webcam com a mesma resolução de FPS resulta no erro:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Pesquisando esse erro geralmente resulta em respostas como: "você é SOL, talvez compre uma câmera que suporte MJPG?".
Mas isso não faz absolutamente nenhum sentido.
Capturar 160x120 RGB não compactado é igual a 160 * 120 * 3 = 57600 bytes por quadro. Aos 15 FPS, isso requer pelo menos 864000 bytes por segundo de largura de banda (ou seja, 0.864 Mbps ou 6.912 Mbits )! Eu tenho hub USB2, que suporta 480 Mbit / s . Eu deveria ter largura de banda suficiente para rodar dezenas dessas webcams de uma só vez, mas rodar uma única consome quase todos os 480 Mbits do meu hub USB!
Como a câmera não precisa de 480 Mbps para transmitir 160x120, mas está dizendo ao driver para alocar tanto, existe alguma maneira, no nível do sistema operacional, forçar o driver a alocar uma certa quantia?