Як я перевернув зображення з веб-камери в linux

Не секрет, що підтримка мультимедіа в Linux сильно прогресувала за останній час, але все ж залишається безліч пристроїв, які працюють некоректно. Буває, що баг висить в баг-репорті місяцями і ніхто не звертає на нього увагу, а буває і так, що все вирішується тонким налаштуванням конфігов: розробники драйверів зазвичай вважають, що якщо проблема виправляється за допомогою хитрих налаштувань, то це не проблема. І в чомусь я з ними згоден - Unix-way.

Суть проблеми


Днями я зіткнувся з ноутбуком ASUS K52D і встановив на нього Arch Linux. По-моєму, це найкращий вибір для тих, кому подобається KISS і бісить Network Manager. Та й яка різниця - оточення і ядро ​​скрізь одне. Втім, у мене почало працювати абсолютно всі з коробки, але зображення з веб-камери було перевернуто по вертикалі і горизонталі (перевіряв в Skype, mplayer і Cheese). Камера від Sonix Technology на шині USB, а тому використовує драйвер UVC. До слова, на багатьох ноутбуках від ASUS, Dell, Lenovo, Acer, HP, Fujitsu і т.д. використовується камера на шині USB, а тому всі вони будуть використовувати USB Video Class Video Driver. Благо, він давно є в ядрі.

знайдені рішення


У списку підтримуваних пристроїв драйвером виявив. що у мене є два варіанти: або кожен раз перевертати ноутбук, або відбудувати прошарок V4L2, яка буде програмно перевертати зображення. Цитую: «For applications that do not use libv4l, try holding your computer upside-down.» Трошки погуглити в сторону libv4l. Виявилося, що є люди, які використовують навіть xrandr -o! Є патчі для UVC, але вони мені здалися невиправданими, адже у нас є і робочий драйвер і userspace-додаток. В іншому все строкато копіпаст про настройку v4l2ucp (утиліта для гуї-настройки v4l2) і про прелоада бібліотеки v4l1compat.so перед запуском програми. Як я зрозумів, це єдине красиве рішення у випадку з нашим драйвером.

libv4l, v4l2ucp


Тут все досить просто. Потрібно встановити пакети з libv4l і з v4l2ucp. Після установки у вас повинні бути бінарники v4l2ucp. v4l2ctrl і бібліотека v4l1compat.so. Якщо це є, то ви встановили потрібні пакети. Якщо не ясно, де лежить бібліотека, то вона без праці знайдеться find'ом:

find / usr / lib -name 'v4l *'

У Arch Linux вона лежить в /usr/lib/libv4l/v4l1compat.so.

Далі потрібно запустити v4l2ucp і поставити там галочки навпроти vflip / hflip, а також можна погратися з яскравістю, контрастом та іншими цікавими штучками. Після чого можна запускати, наприклад, улюблений Skype наступним скриптом:

#! / Bin / bash
export LIBV4LCONTROL_FLAGS = 1
LD_PRELOAD = / usr / lib / libv4l / v4l1compat.so / usr / bin / skype

LIBV4LCONTROL_FLAGS - за назвою зрозуміло, додам тільки, що ця опція впливає на значення vflip і hflip, а розробники пишуть, що «is for debugging purposes only». За своїми спостереженнями я зрозумів, що її значення має дорівнювати 1, щоб коректно оброблялися опції flip з v4l2ucp. Хоча значення 3 у мене виконувало vflip без всяких v4l2ucp, але таке рішення мені не подобалося - в v4l2ucp є купа інших налаштувань, які багато хто буде використовувати. Гратися з прапорами куди менш зручно у випадку з камерою.

І щоб все це працювало після перезавантаження, потрібно зберегти поточні настройки в файл, який будемо завантажувати перед стартом програми.

І наш скрипт можна модернізувати:

/ v4l2_settings
export LIBV4LCONTROL_FLAGS = 1
LD_PRELOAD = / usr / lib / libv4l / v4l1compat.so / usr / bin / skype

Все готово. Такий варіант повинен допомогти з багатьма «перевернутими» камерами UVC. Та й взагалі з будь-якими дефектами орієнтації, кольору, чутливості.

На закінчення про проблеми


Часта проблема цього рішення - відсутність опцій vflip / hflip в v4l2ucp. На форумах я не раз бачив, що у деяких немає цих опцій з незрозумілих причин, хоча камера підтримується і ніякої інформації від розробників немає.
У мене теж відразу не було цих опцій. Справа виявилася в тому, що libv4l бере інформацію про камері через DMI. причому не через звичайний dmidecode, а через sysfs! Відразу наводить на думки про невірну конфігурації ядра.

Тому в ядрі крім

CONFIG_DMIID = y, тобто Firmware Drivers -> Export DMI identification via sysfs to userspace.

Насправді в Arch Linux за замовчуванням ця опція включена, а я використовував свій старий конфиг.

Як я перевернув зображення з веб-камери в linux

Ноутбук: Звук в навушники і / або з динаміків
Досить довго сидів на Arch Linux і захотів перевірити як же там себе почуває стара добра Ubuntu. Тим більше до Gnome Shell я звик, так що Unity буде не в новинку, хоча різниця очевидна. Зіткнувся я з тим, що за замовчуванням у мене звук програвався в обидва канали - в динаміки і навушники. Погуглити я помітив, що відповіді знаходилися тільки з

Як я перевернув зображення з веб-камери в linux

Ноутбук: Звук в навушники і / або з динаміків
Досить довго сидів на Arch Linux і захотів перевірити як же там себе почуває стара добра Ubuntu. Тим більше до Gnome Shell я звик, так що Unity буде не в новинку, хоча різниця очевидна. Зіткнувся я з тим, що за замовчуванням у мене звук програвався в обидва канали - в динаміки і навушники. Погуглити я помітив, що відповіді знаходилися тільки з

Як я перевернув зображення з веб-камери в linux

GrSecurity / PaX: встановлені security level
Мова піде про настройку GrSecurity / PaX (я дав російськомовні посилання, але англомовні набагато інформативніше) в ядрі Линух. Все описане актуально для Hardened Gentoo (ядро 3.1.5), але може бути застосовано в будь-якому дистрибутиві (там не буде попередньо встановлених Gentoo-шних security level workstation / server / virtualization, але на мою опису в цій статті їх

Як я перевернув зображення з веб-камери в linux

Імпорт коду з Android в основне Linux-ядро
В рамках робочої групи Linux Foundation CE Workgroup організований проект по «поверненню» програмного коду з операційної системи Android в стандартну гілку ядра Linux (mainline). Це дуже корисний проект, оскільки розробники мобільної ОС зробили деякі патчі, які можуть бути корисні для мобільних Linux-пристроїв, таких як нетбуки і

Як я перевернув зображення з веб-камери в linux

Установка SMS Linux (Slackware) на eBox-2300SX
Вже досить давно поглядаю на eBox-2300SX і приміряю його в якості простенького домашнього сервера. Тим більше, що читав на Хабре тему Ідеальний NAS? Інша точка зору, eBox-2300SX. Залізяка виглядає досить цікавою, але підходить вона як HTTP-сервера і Jabber? Думаю, що кожен це може вирішити самостійно. А я ж просто