web-dev-qa-db-ja.com

Linux(v4l)ウェブカメラ-設定を「スティック」にする

私のLogitechカメラ(C300)は正しく検出され、/ dev/video0にあります。ただし、デフォルトでは、画像のコントラストと彩度が最大に設定されているため、画質が大幅に低下します。 guvcviewを使用して設定を変更できますが、終了後、設定は通常に戻ります(mplayerを使用してフレームをキャプチャしています)。 guvcviewで行った変更を永続的にするにはどうすればよいですか?

編集:

Guvcviewの設定は確かに「スティッキー」のようです。もう一度開くと、画像は同じままです。つまり、他のプログラムがWebカメラの初期化に対して行っていることです(mplayerとvlcでも同じ問題です)

3
petr

まず悪いニュース:現在、私が知っているディストリビューションでは、それを行うための組み込みのソリューションはありません。

幸いなことに、このようなソリューションは実装が非常に簡単で、多くの同様の問題に適応できます。udevとbashを少し使用するだけで済みます。

まず、これらの設定をプログラム的に(スクリプトに適した)方法で設定する必要があります。私のお気に入りは_v4l2ctrl_です。これは、V4L2構成を保存し、オンデマンドで復元できるためです。例えば:

  1. まず、お好きなプログラムでカメラの設定を変更します。私は本当にそのためにqv4l2をお勧めします、それは素晴らしいです。
  2. 次に、カメラの設定をファイルに保存します。 (_-d /dev/video0_はオプションですが、複数のカメラがある場合に便利です。)

    _v4l2ctrl -d /dev/video0 -s camera-settings.txt
    _
  3. プラグを抜いて再度差し込むと、設定は失われますが、回復できるようになりました。

    _v4l2ctrl -d /dev/video0 -l camera-settings.txt
    _

そのように機能するようになったら、udevで自動化する時が来ました。このために、カメラに一致する好みのルールファイルを作成します。このファイルは_/etc/udev/rules.d/99-v4l2-default-settings.rules_と呼ばれ、次のようなものが含まれています。

_SUBSYSTEM=="video4linux", ATTR{name}=="HD Pro Webcam C920", RUN+="/etc/camera-defaults/udev-hook.sh"
_

上記は、製造元名が「HD Pro Webcam C920」であるサブシステム_/etc/camera-defaults/udev-hook.sh_のデバイスが検出されるか、プラグが抜かれるたびにすぐに作成するスクリプト_video4linux_をルートとして実行します。

ルールにさまざまなフィルターを追加できます。 udevadm info -a -p $(udevadm info -q path -n /dev/video0)を使用して、デバイスとその親デバイスのすべての可能な変数を取得できます。

最後に、スクリプトを作成します。これが機能する簡単なものです。 実行権限を付与してください!

_#!/bin/bash
set -eu

# Useful for debugging, if you want to check what variables are available:
# set > /tmp/vars

if [ "$ACTION" == "add" ]; then
  v4l2ctrl -d "$DEVNAME" -l "/etc/camera-defaults/camera-settings.txt"
fi
_

_camera-settings.txt_を指定されたディレクトリに移動し、プラグを抜いて再度差し込みます。そのファイルの設定は正常に復元されているはずです。

将来いつでも設定を永続的に保存する必要があり、お気に入りのプログラムを使用して設定を微調整してから実行します。

_v4l2ctrl -s /etc/camera-defaults/camera-settings.txt
_
3
Alicia

私はこれらのステップに従って同様の問題を修正しました( source から適応):

$ Sudo apt-get install Mercurial
$ hg clone http://linuxtv.org/hg/v4l-dvb
$ cd v4l-dvb
$ Sudo make menuconfig <-- dont change anything, just "Exit" and save changes
$ Sudo emacs v4l/.config <-- change CONFIG_DVB_FIREDTV=m to CONFIG_DVB_FIREDTV=n
$ make
$ Sudo make install
$ v4l2ucp <-- Auto Gain off
1
terdon