脚本中的 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.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

我认为您应该在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 ...)您 100% 确定这/dev/video1是您的设备吗?

相关内容