Столкнулся с такой проблемой, на некоторых ноутбуках ASUS, в частности серия K, изображение с камер было вверх ногами, во время поиска решения проблемы, оказалось что такие проблемы возникают и у пользователей Lenovo.
Первый такой «сюрприз» был обнаружен на ноутбуке с установленной MS Windows 7, там проблема решилась повторной установкой более свежего драйвера web-камеры. Позже на ноутбук ASUS той же серии, но уже другой модели, установили lubuntu-16.04.1 LTS(ядро 4.4.0-62-generic), и к нашему великому удивлению изображение было вверх ногами 🙂
Во время поиска решения проблемы, выяснили, что начиная с ядра версии 2.6.27 драйверы веб-камер стали включать в ядро, но не в полном объеме, часть функционала находится в библиотеки libv4l, в ней собран функционал отвечающий за преобразование разных форматов представления изображений для разных камер, к одному единому формату.
Так же была попытка перевернуть изображение, через добавления параметров к модулю ядра отвечающего за работу драйвера веб камеры, но что то не помог данный способ. В конце статьи я его опишу, может кому и поможет.
Способ 1 — Переворачиваем камеру в приложениях при помощи библиотеки libv4l
Для примера, переворачивать камеру будем в приложении MPlayer и Skype.
Подключаем репозиторий с актуальной версией библиотеки и обновляемся:
1 2 3 |
$ sudo apt-add-repository ppa:libv4l/stable $ sudo apt-get update $ sudo apt-get upgrade |
Сразу оговорюсь, у нас библиотека libv4l в реализации x86_64, не заработала. При проверки путей получили ошибки.
1 |
$ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1convert.so mplayer tv:\\ |
Ошибка следующего вида:
1 |
ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libv4l/v4l2compat.so' from LD_PRELOAD cannot be preloaded: ignored. |
Проблема решилась переустановкой libv4l версией для i386.
1 2 3 4 |
$ sudo apt-get remove libv4l $ sudo dpkg --add-architecture i386 $ sudo apt-get update $ sudo apt-get install libv4l-0:i386 |
После чего проверяем пути:
1 |
$ LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so mplayer tv:\\ |
Теперь изображение с камеры должно отображаться как положено.
Для того чтоб приложение правильно работало с камерой, необходимо поправить ярлыки запуска необходимых приложений.
Для примера будем править ярлык Skype. Для этого нам нужно открыть ярлык в текстовом редакторе и поправить параметр Exec, расположение ярлыка можно узнать через свойства, кликнув правой кнопкой мыши по ярлыку и посмотреть на какой файл ссылается ярлык.
Теперь непосредственно редактируем сам ярлык запуска:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo nano /usr/share/applications/skype.desktop [Desktop Entry] Name=Skype Comment=Skype Internet Telephony #Exec=skype %U Exec=sh -c 'LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so skype %U' Icon=skype.png Terminal=false Type=Application Encoding=UTF-8 Categories=Network;Application; MimeType=x-scheme-handler/skype; X-KDE-Protocols=skype |
В данном листинге мы закомментировали стандартный параметр Exec, прописали новый. Таким образом через переменную окружению LD_PRELOAD мы указываем, что библиотеку libv4l нужно загрузить до запуска нашего приложения.
Таким образом, мы получили правильно работающую камеру в приложении Skype на ноутбуке ASUS серии K.
Способ 2 — Переворачиваем камеру через правку параметров модуля ядра
Для начала, выясним производителя камеры, в моем случае — это Syntek.
1 2 3 4 5 6 7 8 |
$ sudo lsusb [sudo] пароль для user: Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 003: ID 174f:1120 Syntek Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 002: ID 046d:c05b Logitech, Inc. M-U0004 810-001317 [B110 Optical USB Mouse] Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub |
Драйвер для web-камер Syntek в системе обозначается как stkwebcam. Теперь посмотрим информацию о нем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo modinfo stkwebcam filename: /lib/modules/4.4.0-62-generic/kernel/drivers/media/usb/stkwebcam/stkwebcam.ko description: Syntek DC1125 webcam driver author: Jaime Velasco Juan <jsagarribay@gmail.com> and Nicolas VIVIEN license: GPL srcversion: 2AF9530262467DFC5D0A049 alias: usb:v05E1p0501d*dc*dsc*dp*icFFiscFFipFFin* alias: usb:v174FpA311d*dc*dsc*dp*icFFiscFFipFFin* depends: videodev,v4l2-common intree: Y vermagic: 4.4.0-62-generic SMP mod_unload modversions 686 parm: hflip:Horizontal image flip (mirror). Defaults to 0 (int) parm: vflip:Vertical image flip. Defaults to 0 (int) parm: debug:Debug v4l ioctls. Defaults to 0 (int) |
Тут нас интересует параметр vflip — вертикальное отражение. Для справки, hflip — горизонтальное отражение. Изменить параметры модуля можно через утилиту modprobe. Для начала нам необходимо отключить модуль stkwebcam, а потом включить с нужными нам параметрами.
1 2 |
$ sudo modprobe -r stkwebcam $ sudo modprobe stkwebcam vflip=1 |
Для того чтоб добавить применение параметров при запуске ОС, необходимо выполнить следующие действия:
1 |
echo "options stkwebcam vflip=1" | sudo tee -a /etc/modprobe.d/options |
К сожалению данный способ мне не помог. Так же замечу, что на нетбуке ASUS EEE PC X101H с камерой все нормально.
Спасибо, для меня было познавательно.