четверг, 19 декабря 2013 г.

DIY: Атмосвет 2.0, Часть 1: Железо.

Я ликую! В результате долгих ожиданий и исследований я смог получить работающую схему HDMI passthrough захвата видео без видимых задержек. Записи о результатах исследования, я разобью на две части:
1. Железо;
2. Софт.

Итак начнем...


Железо



Схема проста, не очень элегантна(я не верил что это будет стабильно работать, но риск себя оправдал):
HDMI splitter (1-in/2-out) -> HDMI2AV Converter (HDMI-in/RCA-out) -> USB DVR(RCA-in/USB-out).
После долгого исследования я понял, что это один из самых доступных вариантов под мои требования.

Итоговые устройства реализации:
3. IconBit TV-Hunter Studio. Купил в москве за 1000р.

Если с первыми двумя девайсами я угадал сразу и получил ожидаемый функционал, то
с DVR я не угадал и взял: EasyCap USB Video Capture Adapter, мне попался на чипе usbtv007 - с дровами проблем нет, в винде они уже есть, однако: 
1. Ужасное кол-во помех на выходе.
2. Лож про совместимость с DirectShow, openCV не может с ним работать, и не только с EasyCap на этом чипе, но и других.
3. При попытки диспоза капчура (читай как прекращение работы с ней),  винда улетает в BSOD, тестил на Win7 x64 и Win8 x64
4. Криво принимает сигнал, режет картинку.
Полное говно короче, я поискал возможные аналоги уже в москве и нашел IconBit TV-Hunter Studio за 1000р. - попытка не пытка и данное устройство полностью оправдало мои надежды, и успешно я смог захватить картинку в openCV на выходе.

В качестве ленты я уже использовал 5м черную ленту с  WS2812, по 30шт на метр, это позволило мне разместить 26x46 управляемых LED по периметру плазмы, около 4.5м, 136 светодиодов.

Ленту запитывать решил от 5V 2.5A БП, от какой-то зарядки, питать от Ардуино нельзя, в пиковом режиме лента жрет около 2A судя по спецификации WS2182, а максимальный ток, который может дать Ардуино около 850mA.

Если гуглить ардуино и WS2112 то первым делом попадаешь ан статью на хабре. Притом он там вроде как использует ленту с 138 LED, но он немного слукавил. Дело в том, что так какон описла работать не будет: 138 LED это 414 байт, размер буфера сериийного порта Arduino 64 байта, правильно, на выходе мы поулчиб говно из-за обрезки пакетов. Фиксится это  изменением размера буфера  в "arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp" я поставил 512. Но та статья была отличной точкой отсчета, и я создална её оснвое модифицированную версию прошивки с: 
1. Автоотключением через 15 секунд, если не поступало пакетов.
2. Установка яркости на строне ПК.
Скетч доступен по ссылке.

Задержка получения картинки минимальна, и визуальна не заметна, видео как это работает я покажу в следующей записи. Влияний на сигнал выходящий на телек нет. Игнорируется защита контента через HDCP. Жуется все, проверил PS3, PS4, HTPC на Nvidia карте,  Wii U и Xbox 360

По железу все. Теперь самое интересное - софт. Запись о нем будет позже, когда я закончу его разработку, что будет реализовано(уже частично протестированно):
1. Win сервис захвата и передачи пакетов по сериал порту;
2. Web UI с риалтайм изменением параметров обработки изображения сервисом через WCF;
3. Следующие параметры будут доступны для настройки:
  • Насыщенность;
  • Подстройка под цвет стен(аля баланс белого или цветовой баланс);
  • Анти-мерцание (ага, аналоговый сигнал мерцает по интенсивности цвета - это заметно, и с этим можно бороться без жертв);
  • Глубина захвата цвета по экрану;
  • Радиус сглаживания вывода по ближайшим соседям.
to be continued...

P.S. Пытался за реверсить принцып работы амбилайта у Philips по видео в интернете:
  1. Почему-то на темных сценах они освещают стены светлым.
  2. Они понижают насыщенность цветов, и они фактически получаются "Пастельными".
Оба этих принципа Филипса мне не понятны, если с изменением палитры цветов можно согласиться, в некоторых случаях это уместно, то подача светлых цветов на LED в темных сценах крайне нелогична, и мне кажется плохой идеей.
Также закачал себе их патенты по амбилайту, попробовал вычитать от туда что-нибудь полезное из их многолетних нароботок в этой сфере, - нет, ничего полезного нет.








Комментариев нет:

Отправить комментарий