Linux (v4l) вебкамера - сделать настройки "залипать"

2042
petr

Моя камера Logitech (C300) правильно обнаружена и присутствует в / dev / video0. Тем не менее, по умолчанию изображение имеет максимальную контрастность и насыщенность, что значительно ухудшает качество изображения. Я могу изменить настройки с помощью guvcview, но после выхода настройки вернулись к нормальному (я использую mplayer для захвата кадров). Как я могу сделать изменения, внесенные в guvcview, постоянными?

РЕДАКТИРОВАТЬ:

Похоже, что настройки guvcview действительно «липкие» - если я открою его снова, изображение останется прежним. Так что это то, что другие программы делают для инициализации веб-камеры (та же проблема на mplayer и vlc)

2

2 ответа на вопрос

2
Alicia

Во-первых, плохая новость: в настоящее время в любом известном мне дистрибутиве нет встроенного решения для этого.

Хорошей новостью является то, что такое решение очень просто реализовать и может быть адаптировано для многих подобных проблем: нам нужно всего лишь использовать немного 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=="HD Pro Webcam C920", RUN+="/etc/camera-defaults/udev-hook.sh" 

Вышеприведенный код запускает в качестве корневого сценария, /etc/camera-defaults/udev-hook.sh который мы вскоре создадим при video4linuxобнаружении или отключении устройства подсистемы, имя производителя которого «HD Pro Webcam C920».

Мы могли бы добавить много разных фильтров к нашему правилу. Вы можете использовать, 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 
Я объединил это решение и опубликовал его в репозитории git: https://git.ao2.it/v4l2-persistent-settings.git/ Я также попытался спросить на linux-media, чтобы узнать, что думают разработчики v4l по этому поводу: https: //www.spinics.net/lists/linux-media/msg143521.html Antonio Ospite 5 лет назад 0
1
terdon

Я исправил аналогичную проблему, выполнив следующие действия (адаптировано из источника ):

$ 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 

Похожие вопросы