スクリプトの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次の2行を含み、それを使用して実行するか、sh script.shC ++関数からsystem()呼び出します。

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

このエラーはなぜ発生しますか?

答え1

このコマンドを実行するときにv4l2-ctlrootとして実行していますか?

この試み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%確信していますか?

関連情報