次のようにコマンドラインで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.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 ...
)これがあなた/dev/video1
のデバイスであることを100%確信していますか?