Як створити клон Ambilight на базі FPGA?


10

Швидкий фон:
Ambilight - це система на деяких телевізорах Philips, яка аналізує інформацію про колір на екрані, а потім встановлює деякі світлодіоди на задній панелі дисплея, щоб проеціювати колір екрану на стіну. Це досить витончений ефект. Зараз там є клони цієї системи, які використовують ПК для обробки відео та керування світлодіодами. Я вважаю, що це трохи непосильне - використовуючи цілу машину для танцювання деяких світлодіодів ...

Я хотів би змінити NeTV Neo Bunny, щоб обробити незашифрованийВідеосигнал HDMI та керуйте деякими світлодіодами. Я знаю, що NeTV був розроблений для інших цілей, але я вважаю, що його можна змінити для досягнення моєї мети. Мене не хвилює базова підсистема Linux, підробка I2C, накладання відео тощо. На даний момент я не переймаюся роботою з зашифрованими потоками HDCP.

Схеми NeTV

Вихідний код NeTV

Блок-схема FPGA Блок-схема NeTV
Це блок-схема одного з слайдів презентації зайчика. Решта набір слайдів тут .

Слайд-показ HSYNC, VSYNC, PIXCLK
Цей слайд, мабуть, означає, що відео пікселі насправді розшифровуються (не обов'язково розшифровуються ) .

Нарешті ... кілька моїх думок та запитань:

  1. Чи можна це зробити на бажаному обладнання? Якщо "так", продовжуйте! Якщо «ні», скажіть, що мені більше потрібно!

  2. Чи зможу я обробляти відеоінформацію без зовнішньої пам’яті? Наскільки я не можу сказати, що FPGA може отримати доступ безпосередньо, немає жодної пам'яті. Це, мабуть, залежить від того, який алгоритм я використовую для обробки відеоданих - щоб використовувати якомога менше оперативної пам'яті FPGA Block RAM, я здогадуюсь, я хотів би використовувати якесь "ітераційне підсумовування" пікселів, що надходять, а не зберігати ціле кадр даних зображення, а потім усереднення кольорів. Якісь підказки щодо реалізації цього алгоритму? Як почати це - це моя найбільша перешкода.

  3. Я дослідив вихідний код щодо того, де я повинен "натискати" на відеодані.
    Це виглядає як відповідне місце:
    Блок-схема декодера DVI
    Я знаю, це зображення довге - це найкраще, що я міг зробити, даючи зрозуміти для читання. Звинувачуйте інструмент Xilinx для цього!
    Здається, це бере дані TMDS і виводить 8-бітний для кожного кольору.

  4. Я мав би мати якусь стан машину для світлодіодного драйвера - кожен цикл годин, він отримує інформацію про пікселі з будь-якого модуля, який я створюю для обробки відеоданих.

Вибачте, якщо це багатослівно чи довго - я намагаюся бути ретельним ... Мені просто потрібна допомога, щоб зійти з цього місця. Це моя перша спроба проекту FPGA - дехто може сказати, що це занадто важко для початківця, але я кажу ... треба десь почати :) Дякую за прочитане.


1
NeTV не декодує потік HDMI. Це слідкує за процесом узгодження HDCP і зашифровує новий потік для відповідності; Я не думаю, що ви зможете отримати від цього відео інформацію.
akohlsmith

Чи можете ви опублікувати (посилання на) відповідні схеми? Також допоможе декларація відповідних модулів HDL.
drxzcl

1
@AndrewKohlsmith, тож накладка робиться в кінці телевізора? Нічого собі, я не мав уявлення, що HDMI може це зробити!
drxzcl

1
Я не впевнений, чи зможете ви виконати все, що вам потрібно, не використовуючи зовнішній буфер фрейму пам'яті, але все одно, який кольоровий аналіз ви плануєте використовувати? Якщо це FFT, то це займе певний час, і я не впевнений, що навколишнє світло не забариться до кольору відео. Я б сказав, спершу спробуйте отримати дані від HDMI і перевірити, чи можете ви їх аналізувати. Наприклад, зробіть фільтр низьких частот і виведіть результат.
Сократ

1
Я пам’ятаю, як читав це ще тоді, коли виходило NeTV. Відповідно до цієї публікації, Банні використовує складну схему накладання, яка не вимагає розшифровки вихідного HDMI; він просто заново зашифровує його, коли це необхідно. Немає розшифровки зашифрованих потоків.
mng

Відповіді:


7

Я повністю базую свою відповідь на коді та документації модуля dvi_decoder , і припускаю, що він насправді працює як оголошено. Цей файл, здається, є (модифікованою?) Копією IP-адреси в додатку, зазначає відеозв'язок, використовуючи введення-виведення TMDS в FPGA Spartan-3A та / або реалізацію відеоінтерфейсу TMDS у FPGA Spartan-6 . Ці нотатки додатків містять важливі деталі, і я пропоную вам їх уважно прочитати.

Як ви вказали у запитанні, я вважаю, що ви обробляєте незашифровані потоки, тобто потоки, що не є HDCP. Я досить впевнений, що інформацію в проекті NeTV можна адаптувати для дешифрування HDCP, але це вимагатиме нетривіального обсягу додаткової роботи та матиме сумнівні юридичні підстави залежно від вашої юрисдикції.

Схоже, ви зможете отримати потрібні вам дані з виходів блоку dvi_decoder. Інформація виходів блоку 24-бітного кольору з допомогою дротів red, greenі blue, синхронізована з тактовою частотою пікселя pclk. Виходи hsyncта vsyncпопереджають користувача відповідно до кінця рядка / екрана відповідно. Загалом, ви повинні мати можливість робити усереднене льоту за допомогою цих виходів.

Вам будуть потрібні деяка базова логіка для перекладу hsync, vsyncі піксельні годин в місце (X, Y). Просто створіть два лічильника, один за Xі один для Y. Збільшення Xна кожен піксельний годинник. Скидання Xдо нуля при hsync. Приріст Yу кожного hsync. Скидання Yдо нуля щоразу vsync.

Використовуючи red, green, blue, Xі Y, ви можете зробити на льоту усереднення. Порівнюючи Xі Y, ви можете визначити, до якого вікна повинен сприяти кожен окремий піксель, якщо такий є. Підсумуйте значення кольорів у регістрі накопичення. Для отримання середнього значення потрібно розділити значення в регістрі на кількість пікселів. Якщо ви розумні, ви переконаєтесь, що кількість пікселів має потужність дві. Тоді ви можете просто підключити MSB реєстру до того, що ви хочете їхати.

Оскільки ми хочемо керувати дисплеями під час накопичення, нам потрібно буде зробити подвійну буферизацію. Тож нам знадобляться два регістри на коробку на компонент. Якщо ви використовуєте рядок з 25 відведеннями, це означає, що вам знадобиться 25 * 3 * 2 = 150 регістрів. Це зовсім небагато, тому ви можете використовувати блок-баран замість регістрів. Все залежить від ваших точних вимог, експериментуйте!

Я припускаю, що ви будете вести провідну струну, як та, яка використовується в оригінальному наборі проекту adafruit . Ви повинні мати можливість зрозуміти, як вивести це з значень у регістри досить легко, використовуючи SPI.

Модуль dvi_decoder - це досить складна частина комплекту. Я пропоную детально вивчити нотатки програми.

Якщо відмовитись, якщо ви ще не придбали NeTV для використання в цьому проекті, я рекомендую вам також ознайомитися з платою Atiles Digilent . З двома входами HDMI та двома виходами HDMI він, здається, підходить для проектів подібного типу.


NP, дякую за класне питання. Якщо у вас виникли якісь конкретні проблеми з цим проектом, не соромтесь опублікувати ще раз.
drxzcl

Btw, (а це cmpeletely виходить за рамки питання) Ви думали про те, щоб вести річ із відносно примхливої ​​системи мікроконтролерів? Щось на зразок RaspberryPi коштує приблизно в 6 разів дешевше, і він повинен мати можливість запускати світлодіоди і одночасно показувати відео.
drxzcl

все ще чекаю, коли мій інструмент JTAG прийде, щоб я міг налагодити ChipScope ... збираюся прийняти цю відповідь; він викладає фундаментальний підхід до вирішення цієї проблеми. @drzxcl У мене вже є мережа у мене. RaspPi - цікава пропозиція, але неможливо використовувати hdmi як джерело відео.
dext0rb

Ви коли-небудь змушували це працювати? Я б хотів переглянути записування / відео!
drxzcl

Ні, не дуже. : | Я зробив напівасидований світлодіодний драйвер , але більше не встиг увійти в нього. Сподіваємось, скоро.
dext0rb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.