스크립트의 v4l2-ctl 오류

스크립트의 v4l2-ctl 오류

다음과 같이 명령줄에서 v4l2-ctl을 사용할 수 있습니다.

v4l2-ctl -d /dev/video1 -c focus_auto=0
v4l2-ctl -d /dev/video1 -c exposure_auto=0

하지만 파일에서 스크립트로 실행하면 오류가 발생합니다. 예를 들어 script.sh다음 두 줄을 포함하고 이를 사용하여 실행 하거나 sh script.shC++ 함수에서 system()호출합니다 .

VIDIOC_S_EXT_CTRLS: failed: Invalid argument
Error setting MPEG controls: Invalid argument

이 오류는 왜 발생합니까?

답변1

이 명령을 실행할 때 v4l2-ctl루트로 실행하고 있습니까?

이 시도 script.sh:

#!/bin/bash

sudo /usr/bin/v4l2-ctl -d /dev/video1 -c focus_auto=0
sudo /usr/bin/v4l2-ctl -d /dev/video1 -c exposure_auto=0

/usr/bin해당 위치에 없으면 v4l2-ctl다른 디렉터리 위치에 변경하십시오.

답변2

sleepv4l2-ctl 명령 사이에 약간의 지연을 추가 해야 한다고 생각합니다 .

v4l2-ctl -d /dev/video1 -c focus_auto=0
sleep 1
v4l2-ctl -d /dev/video1 -c exposure_auto=0

이는 스크립트에서 v4l2-ctl을 사용하는 다양한 시나리오에서 작동합니다.

답변3

왜 해당 오류가 발생하는지 모르겠지만 다음 줄은 오류 없이 작동하며 더 간결해 보입니다.

v4l2-ctl -d /dev/video1 -c focus_auto=0 -c exposure_auto=0

또한 제가 틀렸다면 정정해 주시기 바랍니다. 카메라 장비는 보통 짝수를 요구하잖아요? (예 /dev/video0, /dev/video2, /dev/video4 ...) 이것이 귀하 /dev/video1의 기기인지 100% 확신하십니까?

관련 정보