我可以在命令行中使用 v4l2-ctl,如下所示:
v4l2-ctl -d /dev/video1 -c focus_auto=0
v4l2-ctl -d /dev/video1 -c exposure_auto=0
但是当我将它们作为文件中的脚本运行时出现错误。例如,script.sh
其中包含这两行并使用它运行它sh script.sh
或从 C++system()
函数调用它:
VIDIOC_S_EXT_CTRLS: failed: Invalid argument
Error setting MPEG controls: Invalid argument
为什么会出现这个错误?
答案1
当您运行该v4l2-ctl
命令时,您是否以 root 身份运行它?
尝试这个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
我认为您应该在sleep
v4l2-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 ...
)您 100% 确定这/dev/video1
是您的设备吗?