LINUX.ORG.RU

Управление светодиодом веб-камеры

 , ,


1

4

Хочу использовать светодиод веб-камеры над монитором для уведомления себя о различных событиях, например, новом письме и т.п. Как проще всего им помигать програмно?

Пробовал так:

echo LED=1 >> /sys/class/video4linux/video0/device/input/input14/uevent
echo 1 > /sys/class/video4linux/video0/device/input/input14/capabilities/led
но безуспешно.

ffmpeg -f video4linux2 -i /dev/video0 -vframes 1 test.jpeg && rm test.jpeg — работает, но хотелось бы что-то более простое чем реальное чтение кадра.


Под рукой сейчас камеры нет, но разве диоды не находятся в

/sys/class/leds/

?

Например

echo 1 > /sys/class/leds/inputXX\:\:capslock/brightness

работает :)

barti_ddu ()
Ответ на: комментарий от barti_ddu
$ ls -1 /sys/class/leds/
input0::capslock
input0::numlock
input0::scrolllock
tpacpi::power
tpacpi::standby
tpacpi::thinklight
tpacpi::thinkvantage
Smola ()
dd if=/dev/video0 of=/dev/null count=1 bs=1

Мигнул. Я думаю диод мигает просто при чтении, никакого внешнего интерфейса у него нет.

arson ★★★★★ ()
Ответ на: комментарий от arson

У меня не мигнул, но направление у мысли абсолютно верное. Я тоже полагаю, что светодиодом рулит сама микросхема камеры. У меня сработало так:

ffprobe -i /dev/video0

Andrey_Utkin ★★ ()
Ответ на: комментарий от Andrey_Utkin

Перечитал ОП. Заподозрил, что ffprobe тоже вычитывает несколько кадров, как обычно, но вроде нет:

 $ ffprobe -i /dev/video0 -loglevel debug
ffprobe version N-75658-g94fee65 Copyright (c) 2007-2015 the FFmpeg developers
  built with gcc 4.9.3 (Gentoo 4.9.3 p1.1, pie-0.6.2)
  configuration: --enable-gpl --enable-libx264 --enable-encoder=libx264 --disable-stripping --enable-debug --extra-cflags='-O0 -g -ggdb' --enable-libvpx --enable-x11grab --enable-gray --enable-avresample
  libavutil      55.  2.100 / 55.  2.100
  libavcodec     57.  3.100 / 57.  3.100
  libavformat    57.  2.100 / 57.  2.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6.  9.100 /  6.  9.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.100 /  2.  0.100
  libpostproc    54.  0.100 / 54.  0.100
[video4linux2,v4l2 @ 0x2a5eba0] fd:3 capabilities:84200001
[video4linux2,v4l2 @ 0x2a5eba0] Current input_channel: 0, input_name: Camera 1, input_std: 0
[video4linux2,v4l2 @ 0x2a5eba0] Querying the device for the current frame size
[video4linux2,v4l2 @ 0x2a5eba0] Setting frame size to 640x480
[video4linux2,v4l2 @ 0x2a5eba0] The V4L2 driver changed the pixel format from 0x32315559 to 0x56595559
[video4linux2,v4l2 @ 0x2a5eba0] Trying to set codec:rawvideo pix_fmt:yuv420p
[video4linux2,v4l2 @ 0x2a5eba0] The V4L2 driver changed the pixel format from 0x32315559 to 0x56595559
[video4linux2,v4l2 @ 0x2a5eba0] Trying to set codec:rawvideo pix_fmt:yuv420p
[video4linux2,v4l2 @ 0x2a5eba0] The V4L2 driver changed the pixel format from 0x32315659 to 0x56595559
[video4linux2,v4l2 @ 0x2a5eba0] Trying to set codec:rawvideo pix_fmt:yuv422p
[video4linux2,v4l2 @ 0x2a5eba0] The V4L2 driver changed the pixel format from 0x50323234 to 0x56595559
[video4linux2,v4l2 @ 0x2a5eba0] Trying to set codec:rawvideo pix_fmt:yuyv422
[video4linux2,v4l2 @ 0x2a5eba0] All info found
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 653371.649913, bitrate: 147456 kb/s
    Stream #0:0, 1, 1/1000000: Video: rawvideo, 1 reference frame (YUY2 / 0x32595559), yuyv422, 640x480, 1/1000000, 147456 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
Andrey_Utkin ★★ ()
Ответ на: комментарий от Andrey_Utkin

По времени работы то же самое, что и с чтением одного кадра - около 0.3 с у меня. Но я думаю, что это вполне норм - пока работает ffmpeg, лампочка горит :) Таким образом можно гибко управлять длительностью свечения :)

Andrey_Utkin ★★ ()

Пока решил так:

# webcam_led.sh
#
# Usage:
# $ . webcam_led.sh
# $ webcam_led_blink 2 2 &
# [1] 8066
# ... 28 seconds later ...
# $ webcam_led_off


webcam_led_blink() {
    # $1 -- off period, $2 -- on period
    touch /tmp/webcam_led_blinking
    while sleep $1; do
        if [[ -e /tmp/webcam_led_blinking ]]; then
            ffmpeg -f video4linux2 \
                   -i /dev/video0 \
                   -t $2 \
                   -f null \
                   /dev/null \
                   2>1 > /dev/null;
        fi
    done
}

webcam_led_off() {
    rm /tmp/webcam_led_blinking
}

Неплохо бы еще подстраивать время сна с учетом задержки включения.

Smola ()

Самое обидное в этих долбаных камерах — что обычно приходится светодиод выпаивать к чертям собачьим, т.к. его невозможно отключать!

Eddy_Em ☆☆☆☆☆ ()

ему дали плоский экран высокого разрешения

он что-то пытается мутить на одном тупом светодиоде

необучаемые

anonymous ()
Ответ на: комментарий от arson

Фото, обычное ...фото, а вы как думали, как-то «чистят» бивечи этих камер, ну к примеру 0.003, затвор, пересвечивание, ещё там.. 0.01 секунда торш, да нет, конечно..!

anonymous ()
Ответ на: комментарий от Smola

Так если у тебя thinklight есть, почему бы им не мигать? В pidgin например есть плагин который им миграет при новых сообщениях.

pawnhearts ★★★★★ ()
Ответ на: комментарий от Eddy_Em

его невозможно отключать

Чёрная изолента решает проблему.

i-rinat ★★★★★ ()
Ответ на: комментарий от Smola

А отдельного светодиода для активности диска чтоли нет?

UPD: понял что это edge и нет

pawnhearts ★★★★★ ()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Особенно на чужом ноутбуке. Да? Да еще и если физического доступа к нему нет...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от barti_ddu

/sys/class/leds

Проверил и обнаружил там подсветку клавиатуры. Я и не думал, что ей вообще можно было программно управлять. Появилось при каком-то обновлении ядра.

i-rinat ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Особенно на чужом ноутбуке. Да? Да еще и если физического доступа к нему нет...

Да. Попросить заклеить всяко проще, чем попросить выпаять. И люди не так бесятся, когда могут легко вернуть всё обратно. Что, как понимаешь, с выпаиванием не так уж и легко.

i-rinat ★★★★★ ()
Ответ на: комментарий от Smola

Это действительно жестко. Зная, как у меня используется диск, я бы с ума сошел от мигающего thinklight.

Deleted ()
Ответ на: комментарий от Smola

Кстати, поаккуратней с креплением экрана к корпусу. У меня был такой и оно отломалось через несколько месяцев(я иногда приподнимал его держа за экран).

pawnhearts ★★★★★ ()
Ответ на: комментарий от Deleted

Адекватные дизайнеры это предусмотрели, в моем пробуке индикатор диска расположен на передней панели и надо откинуть голову назад чтобы увидеть.

Deleted ()
Ответ на: комментарий от i-rinat

Несколько лет назад была идея вынести туда иллюминацию вне зависимости от вида устройства, теперь потихоньку пилят. Очень хорошая идея :)

barti_ddu ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.